Coverage for opt/mealie/lib/python3.12/site-packages/mealie/alembic/versions/2022-02-21-19.56.24_6b0f5f32d602_initial_tables.py: 54%
175 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-11-25 17:29 +0000
1"""Initial tables
3Revision ID: 6b0f5f32d602
4Revises:
5Create Date: 2022-02-21 19:56:24.351115
7"""
9import sqlalchemy as sa 1a
10from sqlalchemy import engine_from_config 1a
12import mealie.db.migration_types 1a
13from alembic import op 1a
15# revision identifiers, used by Alembic.
16revision = "6b0f5f32d602" 1a
17down_revision: str | None = None 1a
18branch_labels: str | tuple[str, ...] | None = None 1a
19depends_on: str | tuple[str, ...] | None = None 1a
22# Adapted from https://improveandrepeat.com/2021/09/python-friday-87-handling-pre-existing-tables-with-alembic-and-sqlalchemy/
23def table_exists(table, schema=None): 1a
24 config = op.get_context().config 1a
25 engine = engine_from_config(config.get_section(config.config_ini_section), prefix="sqlalchemy.") 1a
26 insp = sa.inspect(engine) 1a
27 return insp.has_table(table, schema) 1a
30def upgrade(): 1a
31 # Only create initial tables if they don't exist yet, to ease transition from pre-alembic state
32 if table_exists("users"): 32 ↛ 33line 32 didn't jump to line 33 because the condition on line 32 was never true1a
33 return
35 op.create_table( 1a
36 "groups",
37 sa.Column("created_at", sa.DateTime(), nullable=True),
38 sa.Column("update_at", sa.DateTime(), nullable=True),
39 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
40 sa.Column("name", sa.String(), nullable=False),
41 sa.PrimaryKeyConstraint("id"),
42 )
43 op.create_index(op.f("ix_groups_name"), "groups", ["name"], unique=True) 1a
44 op.create_table( 1a
45 "categories",
46 sa.Column("created_at", sa.DateTime(), nullable=True),
47 sa.Column("update_at", sa.DateTime(), nullable=True),
48 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
49 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
50 sa.Column("name", sa.String(), nullable=False),
51 sa.Column("slug", sa.String(), nullable=False),
52 sa.ForeignKeyConstraint(
53 ["group_id"],
54 ["groups.id"],
55 ),
56 sa.PrimaryKeyConstraint("id"),
57 sa.UniqueConstraint("slug", "group_id", name="category_slug_group_id_key"),
58 )
59 op.create_index(op.f("ix_categories_group_id"), "categories", ["group_id"], unique=False) 1a
60 op.create_index(op.f("ix_categories_name"), "categories", ["name"], unique=False) 1a
61 op.create_index(op.f("ix_categories_slug"), "categories", ["slug"], unique=False) 1a
62 op.create_table( 1a
63 "cookbooks",
64 sa.Column("created_at", sa.DateTime(), nullable=True),
65 sa.Column("update_at", sa.DateTime(), nullable=True),
66 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
67 sa.Column("position", sa.Integer(), nullable=False),
68 sa.Column("name", sa.String(), nullable=False),
69 sa.Column("slug", sa.String(), nullable=False),
70 sa.Column("description", sa.String(), nullable=True),
71 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
72 sa.ForeignKeyConstraint(
73 ["group_id"],
74 ["groups.id"],
75 ),
76 sa.PrimaryKeyConstraint("id"),
77 )
78 op.create_table( 1a
79 "group_data_exports",
80 sa.Column("created_at", sa.DateTime(), nullable=True),
81 sa.Column("update_at", sa.DateTime(), nullable=True),
82 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
83 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
84 sa.Column("name", sa.String(), nullable=False),
85 sa.Column("filename", sa.String(), nullable=False),
86 sa.Column("path", sa.String(), nullable=False),
87 sa.Column("size", sa.String(), nullable=False),
88 sa.Column("expires", sa.String(), nullable=False),
89 sa.ForeignKeyConstraint(
90 ["group_id"],
91 ["groups.id"],
92 ),
93 sa.PrimaryKeyConstraint("id"),
94 )
95 op.create_index(op.f("ix_group_data_exports_group_id"), "group_data_exports", ["group_id"], unique=False) 1a
96 op.create_table( 1a
97 "group_events_notifiers",
98 sa.Column("created_at", sa.DateTime(), nullable=True),
99 sa.Column("update_at", sa.DateTime(), nullable=True),
100 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
101 sa.Column("name", sa.String(), nullable=False),
102 sa.Column("enabled", sa.Boolean(), nullable=False),
103 sa.Column("apprise_url", sa.String(), nullable=False),
104 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
105 sa.ForeignKeyConstraint(
106 ["group_id"],
107 ["groups.id"],
108 ),
109 sa.PrimaryKeyConstraint("id"),
110 )
111 op.create_index(op.f("ix_group_events_notifiers_group_id"), "group_events_notifiers", ["group_id"], unique=False) 1a
112 op.create_table( 1a
113 "group_meal_plan_rules",
114 sa.Column("created_at", sa.DateTime(), nullable=True),
115 sa.Column("update_at", sa.DateTime(), nullable=True),
116 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
117 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
118 sa.Column("day", sa.String(), nullable=False),
119 sa.Column("entry_type", sa.String(), nullable=False),
120 sa.ForeignKeyConstraint(
121 ["group_id"],
122 ["groups.id"],
123 ),
124 sa.PrimaryKeyConstraint("id"),
125 )
126 op.create_table( 1a
127 "group_preferences",
128 sa.Column("created_at", sa.DateTime(), nullable=True),
129 sa.Column("update_at", sa.DateTime(), nullable=True),
130 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
131 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
132 sa.Column("private_group", sa.Boolean(), nullable=True),
133 sa.Column("first_day_of_week", sa.Integer(), nullable=True),
134 sa.Column("recipe_public", sa.Boolean(), nullable=True),
135 sa.Column("recipe_show_nutrition", sa.Boolean(), nullable=True),
136 sa.Column("recipe_show_assets", sa.Boolean(), nullable=True),
137 sa.Column("recipe_landscape_view", sa.Boolean(), nullable=True),
138 sa.Column("recipe_disable_comments", sa.Boolean(), nullable=True),
139 sa.Column("recipe_disable_amount", sa.Boolean(), nullable=True),
140 sa.ForeignKeyConstraint(
141 ["group_id"],
142 ["groups.id"],
143 ),
144 sa.PrimaryKeyConstraint("id"),
145 )
146 op.create_index(op.f("ix_group_preferences_group_id"), "group_preferences", ["group_id"], unique=False) 1a
147 op.create_table( 1a
148 "group_reports",
149 sa.Column("created_at", sa.DateTime(), nullable=True),
150 sa.Column("update_at", sa.DateTime(), nullable=True),
151 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
152 sa.Column("name", sa.String(), nullable=False),
153 sa.Column("status", sa.String(), nullable=False),
154 sa.Column("category", sa.String(), nullable=False),
155 sa.Column("timestamp", sa.DateTime(), nullable=False),
156 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
157 sa.ForeignKeyConstraint(
158 ["group_id"],
159 ["groups.id"],
160 ),
161 sa.PrimaryKeyConstraint("id"),
162 )
163 op.create_index(op.f("ix_group_reports_category"), "group_reports", ["category"], unique=False) 1a
164 op.create_index(op.f("ix_group_reports_group_id"), "group_reports", ["group_id"], unique=False) 1a
165 op.create_table( 1a
166 "ingredient_units",
167 sa.Column("created_at", sa.DateTime(), nullable=True),
168 sa.Column("update_at", sa.DateTime(), nullable=True),
169 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
170 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
171 sa.Column("name", sa.String(), nullable=True),
172 sa.Column("description", sa.String(), nullable=True),
173 sa.Column("abbreviation", sa.String(), nullable=True),
174 sa.Column("fraction", sa.Boolean(), nullable=True),
175 sa.ForeignKeyConstraint(
176 ["group_id"],
177 ["groups.id"],
178 ),
179 sa.PrimaryKeyConstraint("id"),
180 )
181 op.create_table( 1a
182 "invite_tokens",
183 sa.Column("id", sa.Integer(), nullable=False),
184 sa.Column("created_at", sa.DateTime(), nullable=True),
185 sa.Column("update_at", sa.DateTime(), nullable=True),
186 sa.Column("token", sa.String(), nullable=False),
187 sa.Column("uses_left", sa.Integer(), nullable=False),
188 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
189 sa.ForeignKeyConstraint(
190 ["group_id"],
191 ["groups.id"],
192 ),
193 sa.PrimaryKeyConstraint("id"),
194 )
195 op.create_index(op.f("ix_invite_tokens_token"), "invite_tokens", ["token"], unique=True) 1a
196 op.create_table( 1a
197 "multi_purpose_labels",
198 sa.Column("created_at", sa.DateTime(), nullable=True),
199 sa.Column("update_at", sa.DateTime(), nullable=True),
200 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
201 sa.Column("name", sa.String(length=255), nullable=False),
202 sa.Column("color", sa.String(length=10), nullable=False),
203 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
204 sa.ForeignKeyConstraint(
205 ["group_id"],
206 ["groups.id"],
207 ),
208 sa.PrimaryKeyConstraint("id"),
209 )
210 op.create_index(op.f("ix_multi_purpose_labels_group_id"), "multi_purpose_labels", ["group_id"], unique=False) 1a
211 op.create_table( 1a
212 "recipes",
213 sa.Column("created_at", sa.DateTime(), nullable=True),
214 sa.Column("update_at", sa.DateTime(), nullable=True),
215 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
216 sa.Column("slug", sa.String(), nullable=True),
217 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
218 sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
219 sa.Column("name", sa.String(), nullable=False),
220 sa.Column("description", sa.String(), nullable=True),
221 sa.Column("image", sa.String(), nullable=True),
222 sa.Column("total_time", sa.String(), nullable=True),
223 sa.Column("prep_time", sa.String(), nullable=True),
224 sa.Column("perform_time", sa.String(), nullable=True),
225 sa.Column("cook_time", sa.String(), nullable=True),
226 sa.Column("recipe_yield", sa.String(), nullable=True),
227 sa.Column("recipeCuisine", sa.String(), nullable=True),
228 sa.Column("rating", sa.Integer(), nullable=True),
229 sa.Column("org_url", sa.String(), nullable=True),
230 sa.Column("date_added", sa.Date(), nullable=True),
231 sa.Column("date_updated", sa.DateTime(), nullable=True),
232 sa.ForeignKeyConstraint(
233 ["group_id"],
234 ["groups.id"],
235 ),
236 sa.ForeignKeyConstraint(["user_id"], ["users.id"], use_alter=True),
237 sa.PrimaryKeyConstraint("id"),
238 sa.UniqueConstraint("slug", "group_id", name="recipe_slug_group_id_key"),
239 )
240 op.create_index(op.f("ix_recipes_group_id"), "recipes", ["group_id"], unique=False) 1a
241 op.create_index(op.f("ix_recipes_slug"), "recipes", ["slug"], unique=False) 1a
242 op.create_index(op.f("ix_recipes_user_id"), "recipes", ["user_id"], unique=False) 1a
243 op.create_table( 1a
244 "server_tasks",
245 sa.Column("id", sa.Integer(), nullable=False),
246 sa.Column("created_at", sa.DateTime(), nullable=True),
247 sa.Column("update_at", sa.DateTime(), nullable=True),
248 sa.Column("name", sa.String(), nullable=False),
249 sa.Column("completed_date", sa.DateTime(), nullable=True),
250 sa.Column("status", sa.String(), nullable=False),
251 sa.Column("log", sa.String(), nullable=True),
252 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
253 sa.ForeignKeyConstraint(
254 ["group_id"],
255 ["groups.id"],
256 ),
257 sa.PrimaryKeyConstraint("id"),
258 )
259 op.create_index(op.f("ix_server_tasks_group_id"), "server_tasks", ["group_id"], unique=False) 1a
260 op.create_table( 1a
261 "shopping_lists",
262 sa.Column("created_at", sa.DateTime(), nullable=True),
263 sa.Column("update_at", sa.DateTime(), nullable=True),
264 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
265 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
266 sa.Column("name", sa.String(), nullable=True),
267 sa.ForeignKeyConstraint(
268 ["group_id"],
269 ["groups.id"],
270 ),
271 sa.PrimaryKeyConstraint("id"),
272 )
273 op.create_index(op.f("ix_shopping_lists_group_id"), "shopping_lists", ["group_id"], unique=False) 1a
274 op.create_table( 1a
275 "tags",
276 sa.Column("created_at", sa.DateTime(), nullable=True),
277 sa.Column("update_at", sa.DateTime(), nullable=True),
278 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
279 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
280 sa.Column("name", sa.String(), nullable=False),
281 sa.Column("slug", sa.String(), nullable=False),
282 sa.ForeignKeyConstraint(
283 ["group_id"],
284 ["groups.id"],
285 ),
286 sa.PrimaryKeyConstraint("id"),
287 sa.UniqueConstraint("slug", "group_id", name="tags_slug_group_id_key"),
288 )
289 op.create_index(op.f("ix_tags_group_id"), "tags", ["group_id"], unique=False) 1a
290 op.create_index(op.f("ix_tags_name"), "tags", ["name"], unique=False) 1a
291 op.create_index(op.f("ix_tags_slug"), "tags", ["slug"], unique=False) 1a
292 op.create_table( 1a
293 "tools",
294 sa.Column("created_at", sa.DateTime(), nullable=True),
295 sa.Column("update_at", sa.DateTime(), nullable=True),
296 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
297 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
298 sa.Column("name", sa.String(), nullable=False),
299 sa.Column("slug", sa.String(), nullable=False),
300 sa.Column("on_hand", sa.Boolean(), nullable=True),
301 sa.ForeignKeyConstraint(
302 ["group_id"],
303 ["groups.id"],
304 ),
305 sa.PrimaryKeyConstraint("id"),
306 sa.UniqueConstraint("slug", "group_id", name="tools_slug_group_id_key"),
307 )
308 op.create_index(op.f("ix_tools_name"), "tools", ["name"], unique=True) 1a
309 op.create_index(op.f("ix_tools_slug"), "tools", ["slug"], unique=True) 1a
310 op.create_table( 1a
311 "webhook_urls",
312 sa.Column("created_at", sa.DateTime(), nullable=True),
313 sa.Column("update_at", sa.DateTime(), nullable=True),
314 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
315 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
316 sa.Column("enabled", sa.Boolean(), nullable=True),
317 sa.Column("name", sa.String(), nullable=True),
318 sa.Column("url", sa.String(), nullable=True),
319 sa.Column("time", sa.String(), nullable=True),
320 sa.ForeignKeyConstraint(
321 ["group_id"],
322 ["groups.id"],
323 ),
324 sa.PrimaryKeyConstraint("id"),
325 )
326 op.create_index(op.f("ix_webhook_urls_group_id"), "webhook_urls", ["group_id"], unique=False) 1a
327 op.create_table( 1a
328 "api_extras",
329 sa.Column("created_at", sa.DateTime(), nullable=True),
330 sa.Column("update_at", sa.DateTime(), nullable=True),
331 sa.Column("id", sa.Integer(), nullable=False),
332 sa.Column("recipee_id", mealie.db.migration_types.GUID(), nullable=True),
333 sa.Column("key_name", sa.String(), nullable=True),
334 sa.Column("value", sa.String(), nullable=True),
335 sa.ForeignKeyConstraint(
336 ["recipee_id"],
337 ["recipes.id"],
338 ),
339 sa.PrimaryKeyConstraint("id"),
340 )
341 op.create_table( 1a
342 "cookbooks_to_categories",
343 sa.Column("cookbook_id", mealie.db.migration_types.GUID(), nullable=True),
344 sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
345 sa.ForeignKeyConstraint(
346 ["category_id"],
347 ["categories.id"],
348 ),
349 sa.ForeignKeyConstraint(
350 ["cookbook_id"],
351 ["cookbooks.id"],
352 ),
353 )
354 op.create_table( 1a
355 "group_events_notifier_options",
356 sa.Column("created_at", sa.DateTime(), nullable=True),
357 sa.Column("update_at", sa.DateTime(), nullable=True),
358 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
359 sa.Column("event_notifier_id", mealie.db.migration_types.GUID(), nullable=False),
360 sa.Column("recipe_created", sa.Boolean(), nullable=False),
361 sa.Column("recipe_updated", sa.Boolean(), nullable=False),
362 sa.Column("recipe_deleted", sa.Boolean(), nullable=False),
363 sa.Column("user_signup", sa.Boolean(), nullable=False),
364 sa.Column("data_migrations", sa.Boolean(), nullable=False),
365 sa.Column("data_export", sa.Boolean(), nullable=False),
366 sa.Column("data_import", sa.Boolean(), nullable=False),
367 sa.Column("mealplan_entry_created", sa.Boolean(), nullable=False),
368 sa.Column("shopping_list_created", sa.Boolean(), nullable=False),
369 sa.Column("shopping_list_updated", sa.Boolean(), nullable=False),
370 sa.Column("shopping_list_deleted", sa.Boolean(), nullable=False),
371 sa.Column("cookbook_created", sa.Boolean(), nullable=False),
372 sa.Column("cookbook_updated", sa.Boolean(), nullable=False),
373 sa.Column("cookbook_deleted", sa.Boolean(), nullable=False),
374 sa.Column("tag_created", sa.Boolean(), nullable=False),
375 sa.Column("tag_updated", sa.Boolean(), nullable=False),
376 sa.Column("tag_deleted", sa.Boolean(), nullable=False),
377 sa.Column("category_created", sa.Boolean(), nullable=False),
378 sa.Column("category_updated", sa.Boolean(), nullable=False),
379 sa.Column("category_deleted", sa.Boolean(), nullable=False),
380 sa.ForeignKeyConstraint(
381 ["event_notifier_id"],
382 ["group_events_notifiers.id"],
383 ),
384 sa.PrimaryKeyConstraint("id"),
385 )
386 op.create_table( 1a
387 "group_meal_plans",
388 sa.Column("id", sa.Integer(), nullable=False),
389 sa.Column("created_at", sa.DateTime(), nullable=True),
390 sa.Column("update_at", sa.DateTime(), nullable=True),
391 sa.Column("date", sa.Date(), nullable=False),
392 sa.Column("entry_type", sa.String(), nullable=False),
393 sa.Column("title", sa.String(), nullable=False),
394 sa.Column("text", sa.String(), nullable=False),
395 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
396 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
397 sa.ForeignKeyConstraint(
398 ["group_id"],
399 ["groups.id"],
400 ),
401 sa.ForeignKeyConstraint(
402 ["recipe_id"],
403 ["recipes.id"],
404 ),
405 sa.PrimaryKeyConstraint("id"),
406 )
407 op.create_index(op.f("ix_group_meal_plans_date"), "group_meal_plans", ["date"], unique=False) 1a
408 op.create_index(op.f("ix_group_meal_plans_entry_type"), "group_meal_plans", ["entry_type"], unique=False) 1a
409 op.create_index(op.f("ix_group_meal_plans_group_id"), "group_meal_plans", ["group_id"], unique=False) 1a
410 op.create_index(op.f("ix_group_meal_plans_recipe_id"), "group_meal_plans", ["recipe_id"], unique=False) 1a
411 op.create_index(op.f("ix_group_meal_plans_title"), "group_meal_plans", ["title"], unique=False) 1a
412 op.create_table( 1a
413 "group_to_categories",
414 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=True),
415 sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
416 sa.ForeignKeyConstraint(
417 ["category_id"],
418 ["categories.id"],
419 ),
420 sa.ForeignKeyConstraint(
421 ["group_id"],
422 ["groups.id"],
423 ),
424 )
425 op.create_table( 1a
426 "ingredient_foods",
427 sa.Column("created_at", sa.DateTime(), nullable=True),
428 sa.Column("update_at", sa.DateTime(), nullable=True),
429 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
430 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
431 sa.Column("name", sa.String(), nullable=True),
432 sa.Column("description", sa.String(), nullable=True),
433 sa.Column("label_id", mealie.db.migration_types.GUID(), nullable=True),
434 sa.ForeignKeyConstraint(
435 ["group_id"],
436 ["groups.id"],
437 ),
438 sa.ForeignKeyConstraint(
439 ["label_id"],
440 ["multi_purpose_labels.id"],
441 ),
442 sa.PrimaryKeyConstraint("id"),
443 )
444 op.create_table( 1a
445 "notes",
446 sa.Column("created_at", sa.DateTime(), nullable=True),
447 sa.Column("update_at", sa.DateTime(), nullable=True),
448 sa.Column("id", sa.Integer(), nullable=False),
449 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
450 sa.Column("title", sa.String(), nullable=True),
451 sa.Column("text", sa.String(), nullable=True),
452 sa.ForeignKeyConstraint(
453 ["recipe_id"],
454 ["recipes.id"],
455 ),
456 sa.PrimaryKeyConstraint("id"),
457 )
458 op.create_table( 1a
459 "plan_rules_to_categories",
460 sa.Column("group_plan_rule_id", mealie.db.migration_types.GUID(), nullable=True),
461 sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
462 sa.ForeignKeyConstraint(
463 ["category_id"],
464 ["categories.id"],
465 ),
466 sa.ForeignKeyConstraint(
467 ["group_plan_rule_id"],
468 ["group_meal_plan_rules.id"],
469 ),
470 )
471 op.create_table( 1a
472 "plan_rules_to_tags",
473 sa.Column("plan_rule_id", mealie.db.migration_types.GUID(), nullable=True),
474 sa.Column("tag_id", mealie.db.migration_types.GUID(), nullable=True),
475 sa.ForeignKeyConstraint(
476 ["plan_rule_id"],
477 ["group_meal_plan_rules.id"],
478 ),
479 sa.ForeignKeyConstraint(
480 ["tag_id"],
481 ["tags.id"],
482 ),
483 )
484 op.create_table( 1a
485 "recipe_assets",
486 sa.Column("created_at", sa.DateTime(), nullable=True),
487 sa.Column("update_at", sa.DateTime(), nullable=True),
488 sa.Column("id", sa.Integer(), nullable=False),
489 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
490 sa.Column("name", sa.String(), nullable=True),
491 sa.Column("icon", sa.String(), nullable=True),
492 sa.Column("file_name", sa.String(), nullable=True),
493 sa.ForeignKeyConstraint(
494 ["recipe_id"],
495 ["recipes.id"],
496 ),
497 sa.PrimaryKeyConstraint("id"),
498 )
499 op.create_table( 1a
500 "recipe_instructions",
501 sa.Column("created_at", sa.DateTime(), nullable=True),
502 sa.Column("update_at", sa.DateTime(), nullable=True),
503 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
504 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
505 sa.Column("position", sa.Integer(), nullable=True),
506 sa.Column("type", sa.String(), nullable=True),
507 sa.Column("title", sa.String(), nullable=True),
508 sa.Column("text", sa.String(), nullable=True),
509 sa.ForeignKeyConstraint(
510 ["recipe_id"],
511 ["recipes.id"],
512 ),
513 sa.PrimaryKeyConstraint("id"),
514 )
515 op.create_table( 1a
516 "recipe_nutrition",
517 sa.Column("created_at", sa.DateTime(), nullable=True),
518 sa.Column("update_at", sa.DateTime(), nullable=True),
519 sa.Column("id", sa.Integer(), nullable=False),
520 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
521 sa.Column("calories", sa.String(), nullable=True),
522 sa.Column("fat_content", sa.String(), nullable=True),
523 sa.Column("fiber_content", sa.String(), nullable=True),
524 sa.Column("protein_content", sa.String(), nullable=True),
525 sa.Column("carbohydrate_content", sa.String(), nullable=True),
526 sa.Column("sodium_content", sa.String(), nullable=True),
527 sa.Column("sugar_content", sa.String(), nullable=True),
528 sa.ForeignKeyConstraint(
529 ["recipe_id"],
530 ["recipes.id"],
531 ),
532 sa.PrimaryKeyConstraint("id"),
533 )
534 op.create_table( 1a
535 "recipe_settings",
536 sa.Column("created_at", sa.DateTime(), nullable=True),
537 sa.Column("update_at", sa.DateTime(), nullable=True),
538 sa.Column("id", sa.Integer(), nullable=False),
539 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
540 sa.Column("public", sa.Boolean(), nullable=True),
541 sa.Column("show_nutrition", sa.Boolean(), nullable=True),
542 sa.Column("show_assets", sa.Boolean(), nullable=True),
543 sa.Column("landscape_view", sa.Boolean(), nullable=True),
544 sa.Column("disable_amount", sa.Boolean(), nullable=True),
545 sa.Column("disable_comments", sa.Boolean(), nullable=True),
546 sa.Column("locked", sa.Boolean(), nullable=True),
547 sa.ForeignKeyConstraint(
548 ["recipe_id"],
549 ["recipes.id"],
550 ),
551 sa.PrimaryKeyConstraint("id"),
552 )
553 op.create_table( 1a
554 "recipe_share_tokens",
555 sa.Column("created_at", sa.DateTime(), nullable=True),
556 sa.Column("update_at", sa.DateTime(), nullable=True),
557 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
558 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
559 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=False),
560 sa.Column("expires_at", sa.DateTime(), nullable=False),
561 sa.ForeignKeyConstraint(
562 ["group_id"],
563 ["groups.id"],
564 ),
565 sa.ForeignKeyConstraint(
566 ["recipe_id"],
567 ["recipes.id"],
568 ),
569 sa.PrimaryKeyConstraint("id"),
570 )
571 op.create_index(op.f("ix_recipe_share_tokens_group_id"), "recipe_share_tokens", ["group_id"], unique=False) 1a
572 op.create_table( 1a
573 "recipes_to_categories",
574 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
575 sa.Column("category_id", mealie.db.migration_types.GUID(), nullable=True),
576 sa.ForeignKeyConstraint(
577 ["category_id"],
578 ["categories.id"],
579 ),
580 sa.ForeignKeyConstraint(
581 ["recipe_id"],
582 ["recipes.id"],
583 ),
584 )
585 op.create_table( 1a
586 "recipes_to_tags",
587 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
588 sa.Column("tag_id", mealie.db.migration_types.GUID(), nullable=True),
589 sa.ForeignKeyConstraint(
590 ["recipe_id"],
591 ["recipes.id"],
592 ),
593 sa.ForeignKeyConstraint(
594 ["tag_id"],
595 ["tags.id"],
596 ),
597 )
598 op.create_table( 1a
599 "recipes_to_tools",
600 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
601 sa.Column("tool_id", mealie.db.migration_types.GUID(), nullable=True),
602 sa.ForeignKeyConstraint(
603 ["recipe_id"],
604 ["recipes.id"],
605 ),
606 sa.ForeignKeyConstraint(
607 ["tool_id"],
608 ["tools.id"],
609 ),
610 )
611 op.create_table( 1a
612 "report_entries",
613 sa.Column("created_at", sa.DateTime(), nullable=True),
614 sa.Column("update_at", sa.DateTime(), nullable=True),
615 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
616 sa.Column("success", sa.Boolean(), nullable=True),
617 sa.Column("message", sa.String(), nullable=True),
618 sa.Column("exception", sa.String(), nullable=True),
619 sa.Column("timestamp", sa.DateTime(), nullable=False),
620 sa.Column("report_id", mealie.db.migration_types.GUID(), nullable=False),
621 sa.ForeignKeyConstraint(
622 ["report_id"],
623 ["group_reports.id"],
624 ),
625 sa.PrimaryKeyConstraint("id"),
626 )
627 op.create_table( 1a
628 "shopping_list_recipe_reference",
629 sa.Column("created_at", sa.DateTime(), nullable=True),
630 sa.Column("update_at", sa.DateTime(), nullable=True),
631 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
632 sa.Column("shopping_list_id", mealie.db.migration_types.GUID(), nullable=False),
633 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
634 sa.Column("recipe_quantity", sa.Float(), nullable=False),
635 sa.ForeignKeyConstraint(
636 ["recipe_id"],
637 ["recipes.id"],
638 ),
639 sa.ForeignKeyConstraint(
640 ["shopping_list_id"],
641 ["shopping_lists.id"],
642 ),
643 sa.PrimaryKeyConstraint("id", "shopping_list_id"),
644 )
645 op.create_index( 1a
646 op.f("ix_shopping_list_recipe_reference_recipe_id"),
647 "shopping_list_recipe_reference",
648 ["recipe_id"],
649 unique=False,
650 )
651 op.create_table( 1a
652 "users",
653 sa.Column("created_at", sa.DateTime(), nullable=True),
654 sa.Column("update_at", sa.DateTime(), nullable=True),
655 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
656 sa.Column("full_name", sa.String(), nullable=True),
657 sa.Column("username", sa.String(), nullable=True),
658 sa.Column("email", sa.String(), nullable=True),
659 sa.Column("password", sa.String(), nullable=True),
660 sa.Column("admin", sa.Boolean(), nullable=True),
661 sa.Column("advanced", sa.Boolean(), nullable=True),
662 sa.Column("group_id", mealie.db.migration_types.GUID(), nullable=False),
663 sa.Column("cache_key", sa.String(), nullable=True),
664 sa.Column("can_manage", sa.Boolean(), nullable=True),
665 sa.Column("can_invite", sa.Boolean(), nullable=True),
666 sa.Column("can_organize", sa.Boolean(), nullable=True),
667 sa.Column("owned_recipes_id", mealie.db.migration_types.GUID(), nullable=True),
668 sa.ForeignKeyConstraint(
669 ["group_id"],
670 ["groups.id"],
671 ),
672 sa.ForeignKeyConstraint(
673 ["owned_recipes_id"],
674 ["recipes.id"],
675 ),
676 sa.PrimaryKeyConstraint("id"),
677 )
678 op.create_index(op.f("ix_users_email"), "users", ["email"], unique=True) 1a
679 op.create_index(op.f("ix_users_full_name"), "users", ["full_name"], unique=False) 1a
680 op.create_index(op.f("ix_users_group_id"), "users", ["group_id"], unique=False) 1a
681 op.create_index(op.f("ix_users_username"), "users", ["username"], unique=True) 1a
682 op.create_table( 1a
683 "long_live_tokens",
684 sa.Column("id", sa.Integer(), nullable=False),
685 sa.Column("created_at", sa.DateTime(), nullable=True),
686 sa.Column("update_at", sa.DateTime(), nullable=True),
687 sa.Column("name", sa.String(), nullable=False),
688 sa.Column("token", sa.String(), nullable=False),
689 sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
690 sa.ForeignKeyConstraint(
691 ["user_id"],
692 ["users.id"],
693 ),
694 sa.PrimaryKeyConstraint("id"),
695 )
696 op.create_table( 1a
697 "password_reset_tokens",
698 sa.Column("id", sa.Integer(), nullable=False),
699 sa.Column("created_at", sa.DateTime(), nullable=True),
700 sa.Column("update_at", sa.DateTime(), nullable=True),
701 sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=False),
702 sa.Column("token", sa.String(length=64), nullable=False),
703 sa.ForeignKeyConstraint(
704 ["user_id"],
705 ["users.id"],
706 ),
707 sa.PrimaryKeyConstraint("id"),
708 sa.UniqueConstraint("token"),
709 )
710 op.create_table( 1a
711 "recipe_comments",
712 sa.Column("created_at", sa.DateTime(), nullable=True),
713 sa.Column("update_at", sa.DateTime(), nullable=True),
714 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
715 sa.Column("text", sa.String(), nullable=True),
716 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=False),
717 sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=False),
718 sa.ForeignKeyConstraint(
719 ["recipe_id"],
720 ["recipes.id"],
721 ),
722 sa.ForeignKeyConstraint(
723 ["user_id"],
724 ["users.id"],
725 ),
726 sa.PrimaryKeyConstraint("id"),
727 )
728 op.create_table( 1a
729 "recipe_ingredient_ref_link",
730 sa.Column("id", sa.Integer(), nullable=False),
731 sa.Column("created_at", sa.DateTime(), nullable=True),
732 sa.Column("update_at", sa.DateTime(), nullable=True),
733 sa.Column("instruction_id", mealie.db.migration_types.GUID(), nullable=True),
734 sa.Column("reference_id", mealie.db.migration_types.GUID(), nullable=True),
735 sa.ForeignKeyConstraint(
736 ["instruction_id"],
737 ["recipe_instructions.id"],
738 ),
739 sa.PrimaryKeyConstraint("id"),
740 )
741 op.create_table( 1a
742 "recipes_ingredients",
743 sa.Column("created_at", sa.DateTime(), nullable=True),
744 sa.Column("update_at", sa.DateTime(), nullable=True),
745 sa.Column("id", sa.Integer(), nullable=False),
746 sa.Column("position", sa.Integer(), nullable=True),
747 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
748 sa.Column("title", sa.String(), nullable=True),
749 sa.Column("note", sa.String(), nullable=True),
750 sa.Column("unit_id", mealie.db.migration_types.GUID(), nullable=True),
751 sa.Column("food_id", mealie.db.migration_types.GUID(), nullable=True),
752 sa.Column("quantity", sa.Integer(), nullable=True),
753 sa.Column("reference_id", mealie.db.migration_types.GUID(), nullable=True),
754 sa.ForeignKeyConstraint(
755 ["food_id"],
756 ["ingredient_foods.id"],
757 ),
758 sa.ForeignKeyConstraint(
759 ["recipe_id"],
760 ["recipes.id"],
761 ),
762 sa.ForeignKeyConstraint(
763 ["unit_id"],
764 ["ingredient_units.id"],
765 ),
766 sa.PrimaryKeyConstraint("id"),
767 )
768 op.create_table( 1a
769 "shopping_list_items",
770 sa.Column("created_at", sa.DateTime(), nullable=True),
771 sa.Column("update_at", sa.DateTime(), nullable=True),
772 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
773 sa.Column("shopping_list_id", mealie.db.migration_types.GUID(), nullable=True),
774 sa.Column("is_ingredient", sa.Boolean(), nullable=True),
775 sa.Column("position", sa.Integer(), nullable=False),
776 sa.Column("checked", sa.Boolean(), nullable=True),
777 sa.Column("quantity", sa.Float(), nullable=True),
778 sa.Column("note", sa.String(), nullable=True),
779 sa.Column("is_food", sa.Boolean(), nullable=True),
780 sa.Column("unit_id", mealie.db.migration_types.GUID(), nullable=True),
781 sa.Column("food_id", mealie.db.migration_types.GUID(), nullable=True),
782 sa.Column("label_id", mealie.db.migration_types.GUID(), nullable=True),
783 sa.ForeignKeyConstraint(
784 ["food_id"],
785 ["ingredient_foods.id"],
786 ),
787 sa.ForeignKeyConstraint(
788 ["label_id"],
789 ["multi_purpose_labels.id"],
790 ),
791 sa.ForeignKeyConstraint(
792 ["shopping_list_id"],
793 ["shopping_lists.id"],
794 ),
795 sa.ForeignKeyConstraint(
796 ["unit_id"],
797 ["ingredient_units.id"],
798 ),
799 sa.PrimaryKeyConstraint("id"),
800 )
801 op.create_table( 1a
802 "users_to_favorites",
803 sa.Column("user_id", mealie.db.migration_types.GUID(), nullable=True),
804 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
805 sa.ForeignKeyConstraint(
806 ["recipe_id"],
807 ["recipes.id"],
808 ),
809 sa.ForeignKeyConstraint(
810 ["user_id"],
811 ["users.id"],
812 ),
813 )
814 op.create_table( 1a
815 "shopping_list_item_recipe_reference",
816 sa.Column("created_at", sa.DateTime(), nullable=True),
817 sa.Column("update_at", sa.DateTime(), nullable=True),
818 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
819 sa.Column("shopping_list_item_id", mealie.db.migration_types.GUID(), nullable=False),
820 sa.Column("recipe_id", mealie.db.migration_types.GUID(), nullable=True),
821 sa.Column("recipe_quantity", sa.Float(), nullable=False),
822 sa.ForeignKeyConstraint(
823 ["recipe_id"],
824 ["recipes.id"],
825 ),
826 sa.ForeignKeyConstraint(
827 ["shopping_list_item_id"],
828 ["shopping_list_items.id"],
829 ),
830 sa.PrimaryKeyConstraint("id", "shopping_list_item_id"),
831 )
832 op.create_index( 1a
833 op.f("ix_shopping_list_item_recipe_reference_recipe_id"),
834 "shopping_list_item_recipe_reference",
835 ["recipe_id"],
836 unique=False,
837 )
840def downgrade(): 1a
841 op.drop_index(
842 op.f("ix_shopping_list_item_recipe_reference_recipe_id"), table_name="shopping_list_item_recipe_reference"
843 )
844 op.drop_table("shopping_list_item_recipe_reference")
845 op.drop_table("users_to_favorites")
846 op.drop_table("shopping_list_items")
847 op.drop_table("recipes_ingredients")
848 op.drop_table("recipe_ingredient_ref_link")
849 op.drop_table("recipe_comments")
850 op.drop_table("password_reset_tokens")
851 op.drop_table("long_live_tokens")
852 op.drop_index(op.f("ix_users_username"), table_name="users")
853 op.drop_index(op.f("ix_users_group_id"), table_name="users")
854 op.drop_index(op.f("ix_users_full_name"), table_name="users")
855 op.drop_index(op.f("ix_users_email"), table_name="users")
856 op.drop_table("users")
857 op.drop_index(op.f("ix_shopping_list_recipe_reference_recipe_id"), table_name="shopping_list_recipe_reference")
858 op.drop_table("shopping_list_recipe_reference")
859 op.drop_table("report_entries")
860 op.drop_table("recipes_to_tools")
861 op.drop_table("recipes_to_tags")
862 op.drop_table("recipes_to_categories")
863 op.drop_index(op.f("ix_recipe_share_tokens_group_id"), table_name="recipe_share_tokens")
864 op.drop_table("recipe_share_tokens")
865 op.drop_table("recipe_settings")
866 op.drop_table("recipe_nutrition")
867 op.drop_table("recipe_instructions")
868 op.drop_table("recipe_assets")
869 op.drop_table("plan_rules_to_tags")
870 op.drop_table("plan_rules_to_categories")
871 op.drop_table("notes")
872 op.drop_table("ingredient_foods")
873 op.drop_table("group_to_categories")
874 op.drop_index(op.f("ix_group_meal_plans_title"), table_name="group_meal_plans")
875 op.drop_index(op.f("ix_group_meal_plans_recipe_id"), table_name="group_meal_plans")
876 op.drop_index(op.f("ix_group_meal_plans_group_id"), table_name="group_meal_plans")
877 op.drop_index(op.f("ix_group_meal_plans_entry_type"), table_name="group_meal_plans")
878 op.drop_index(op.f("ix_group_meal_plans_date"), table_name="group_meal_plans")
879 op.drop_table("group_meal_plans")
880 op.drop_table("group_events_notifier_options")
881 op.drop_table("cookbooks_to_categories")
882 op.drop_table("api_extras")
883 op.drop_index(op.f("ix_webhook_urls_group_id"), table_name="webhook_urls")
884 op.drop_table("webhook_urls")
885 op.drop_index(op.f("ix_tools_slug"), table_name="tools")
886 op.drop_index(op.f("ix_tools_name"), table_name="tools")
887 op.drop_table("tools")
888 op.drop_index(op.f("ix_tags_slug"), table_name="tags")
889 op.drop_index(op.f("ix_tags_name"), table_name="tags")
890 op.drop_index(op.f("ix_tags_group_id"), table_name="tags")
891 op.drop_table("tags")
892 op.drop_index(op.f("ix_shopping_lists_group_id"), table_name="shopping_lists")
893 op.drop_table("shopping_lists")
894 op.drop_index(op.f("ix_server_tasks_group_id"), table_name="server_tasks")
895 op.drop_table("server_tasks")
896 op.drop_index(op.f("ix_recipes_user_id"), table_name="recipes")
897 op.drop_index(op.f("ix_recipes_slug"), table_name="recipes")
898 op.drop_index(op.f("ix_recipes_group_id"), table_name="recipes")
899 op.drop_table("recipes")
900 op.drop_index(op.f("ix_multi_purpose_labels_group_id"), table_name="multi_purpose_labels")
901 op.drop_table("multi_purpose_labels")
902 op.drop_index(op.f("ix_invite_tokens_token"), table_name="invite_tokens")
903 op.drop_table("invite_tokens")
904 op.drop_table("ingredient_units")
905 op.drop_index(op.f("ix_group_reports_group_id"), table_name="group_reports")
906 op.drop_index(op.f("ix_group_reports_category"), table_name="group_reports")
907 op.drop_table("group_reports")
908 op.drop_index(op.f("ix_group_preferences_group_id"), table_name="group_preferences")
909 op.drop_table("group_preferences")
910 op.drop_table("group_meal_plan_rules")
911 op.drop_index(op.f("ix_group_events_notifiers_group_id"), table_name="group_events_notifiers")
912 op.drop_table("group_events_notifiers")
913 op.drop_index(op.f("ix_group_data_exports_group_id"), table_name="group_data_exports")
914 op.drop_table("group_data_exports")
915 op.drop_table("cookbooks")
916 op.drop_index(op.f("ix_categories_slug"), table_name="categories")
917 op.drop_index(op.f("ix_categories_name"), table_name="categories")
918 op.drop_index(op.f("ix_categories_group_id"), table_name="categories")
919 op.drop_table("categories")
920 op.drop_index(op.f("ix_groups_name"), table_name="groups")
921 op.drop_table("groups")