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

1"""Initial tables 

2 

3Revision ID: 6b0f5f32d602 

4Revises: 

5Create Date: 2022-02-21 19:56:24.351115 

6 

7""" 

8 

9import sqlalchemy as sa 1a

10from sqlalchemy import engine_from_config 1a

11 

12import mealie.db.migration_types 1a

13from alembic import op 1a

14 

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

20 

21 

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

28 

29 

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 

34 

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 ) 

838 

839 

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")