From 7bebdda7aba80abb0ff778b5b9371293325b75b7 Mon Sep 17 00:00:00 2001 From: "CANCERYS\\kw093" Date: Wed, 30 Jul 2025 10:47:28 +0800 Subject: [PATCH] no message --- .gradle/8.1.1/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../executionHistory/executionHistory.bin | Bin 0 -> 293372 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.1.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.1.1/fileHashes/fileHashes.bin | Bin 0 -> 78615 bytes .gradle/8.1.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.1.1/fileHashes/resourceHashesCache.bin | Bin 0 -> 63957 bytes .gradle/8.1.1/gc.properties | 0 .gradle/8.10/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/8.10/checksums/sha1-checksums.bin | Bin 0 -> 18929 bytes .../8.10/dependencies-accessors/gc.properties | 0 .gradle/8.10/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.10/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .gradle/8.10/gc.properties | 0 .gradle/8.8/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/8.8/checksums/md5-checksums.bin | Bin 0 -> 41497 bytes .gradle/8.8/checksums/sha1-checksums.bin | Bin 0 -> 170711 bytes .../8.8/dependencies-accessors/gc.properties | 0 .../8.8/executionHistory/executionHistory.bin | Bin 0 -> 216804 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.8/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.8/fileHashes/fileHashes.bin | Bin 0 -> 34647 bytes .gradle/8.8/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.8/fileHashes/resourceHashesCache.bin | Bin 0 -> 28765 bytes .gradle/8.8/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 18983 bytes .gradle/file-system.probe | Bin 0 -> 8 bytes .../PET_APP-1347428207/project-info.ser | Bin 0 -> 1237323 bytes .gradle/nb-cache/subprojects.ser | Bin 0 -> 659 bytes ...7948A6B209A652360CCFCBDB4C56CED32136AEA800 | 1 + .gradle/vcs-1/gc.properties | 0 .vscode/launch.json | 46 + ReadMe.txt | 34 - bin/main/application-db-anna.yml | 2 +- bin/main/application-db-prod.yml | 2 +- .../Menu/req/.LCKfb_menuResponsity.java~ | 1 - .../enson_change/04_create_user(enson).sql | 8 - .../changes/enson_change/05_create_food1.sql | 54 - .../06_create_food_information.sql | 19 - .../07_alter_food_information.sql | 352 ----- .../08_alter_food_information.sql | 11 - .../09_alter_food_information.sql | 12 - .../enson_change/10_alter_food_items.sql | 12 - .../11_create_user_information.sql | 18 - .../12_alter_user_information.sql | 20 - .../enson_change/13_alter_information.sql | 6 - .../14_alter_user_information.sql | 11 - .../15_alter_user_information.sql | 6 - .../16_alter_user_information.sql | 6 - .../17_alter_user_information.sql | 7 - .../18_alter_user_information.sql | 6 - .../19_alter_user_information.sql | 7 - .../changes/enson_change/20_alter_food1.sql | 25 - .../enson_change/21_alter_food_items.sql | 11 - .../changes/enson_change/22_alter_food1.sql | 16 - .../changes/enson_change/23_alter_food1.sql | 17 - .../enson_change/24_alter_food_items.sql | 27 - .../enson_change/25_create_Nutrients.sql | 40 - .../26_alter_Nutrients_impacts.sql | 26 - .../enson_change/27_create_Allergy.sql | 49 - .../changes/enson_change/28_alter_food1.sql | 7 - .../changes/enson_change/29_alter_food1.sql | 7 - .../enson_change/30_create_Nutrients_Need.sql | 15 - .../31_create_Nutrients_Need_update.sql | 64 - .../32_create_Nutrients_Need_update.sql | 64 - .../enson_change/33_create_Allergy.sql | 44 - .../changes/enson_change/34_alter_food1.sql | 19 - .../35_alter_user_information.sql | 6 - .../36_create_restaurant_information.sql | 13 - .../37_alter_restaurant_information.sql | 17 - .../38_create_restaurant_informatio.sql | 14 - .../39_alter_restaurant_informatio.sql | 14 - .../40_alter_restaurant_informatio.sql | 7 - .../41_alter_restaurant_informatio.sql | 20 - .../42_alter_restaurant_informatio.sql | 13 - .../43_alter_restaurant_informatio.sql | 8 - .../enson_change/44_create_muti_table.sql | 71 - .../enson_change/45_alter_muti_table.sql | 43 - .../enson_change/46_alter_muti_table.sql | 175 --- .../enson_change/47_alter_muti_table.sql | 17 - .../enson_change/48_build_muti_table.sql | 85 -- .../enson_change/49_alter_muti_table.sql | 71 - .../changes/enson_change/50_alter_table.sql | 11 - .../changes/enson_change/51_alter_i18n.sql | 35 - .../changes/enson_change/51_create_i18n.sql | 20 - .../changes/enson_change/53_alter_i18n.sql | 31 - .../changes/enson_change/54_alter_i18n.sql | 15 - .../changes/enson_change/55_alter_i18n.sql | 24 - .../changes/enson_change/56_create_table.sql | 15 - .../changes/enson_change/58_insert_data.sql | 63 - .../changes/enson_change/59_insert_data.sql | 63 - .../changes/enson_change/60_insert_data.sql | 67 - .../changes/enson_change/61_insert_data.sql | 12 - .../changes/enson_change/62_insert_data.sql | 61 - .../changes/enson_change/63_insert_data.sql | 25 - .../changes/enson_change/64_insert_data.sql | 66 - .../changes/enson_change/65_insert_data.sql | 66 - .../changes/enson_change/66_insert_data.sql | 16 - .../changes/enson_change/67_edit_table.sql | 17 - .../changes/enson_change/68_edit_table.sql | 17 - .../changes/enson_change/69_edit_table.sql | 13 - .../changes/enson_change/70_edit_table.sql | 72 - .../changes/enson_change/71_edit_table.sql | 25 - .../changes/enson_change/72_create_table.sql | 24 - .../changes/enson_change/73_ALTER_table.sql | 8 - .../changes/enson_change/74_ALTER_table.sql | 11 - .../changes/enson_change/75_ALTER_table.sql | 11 - .../changes/enson_change/76_ALTER_table.sql | 25 - .../changes/enson_change/77_create_table.sql | 26 - .../changes/enson_change/78_create_table.sql | 18 - .../changes/enson_change/79_alter_table.sql | 18 - .../changes/enson_change/80_create_table.sql | 30 - build/resources/main/application-db-anna.yml | 11 + build/resources/main/application-db-local.yml | 10 + build/resources/main/application-db-prod.yml | 11 + .../resources/main/application-ldap-prod.yml | 9 + build/resources/main/application-local.yml | 2 + .../resources/main/application-prod-linux.yml | 2 + build/resources/main/application-prod-win.yml | 4 + build/resources/main/application.yml | 28 + .../00_system_base/01_create_table.sql | 385 ++++++ .../02_insert_group_authority.sql | 32 + .../00_system_base/03_insert_setting.sql | 10 + .../04_create_user(optional).sql | 4 +- .../db/changelog/db.changelog-master.yaml | 3 + build/resources/main/log4j2-prod-linux.yml | 30 + build/resources/main/log4j2-prod-win.yml | 23 + build/resources/main/log4j2.yml | 17 + build/tmp/bootJar/MANIFEST.MF | 2 + build/tmp/bootWar/MANIFEST.MF | 2 + .../compileJava/previous-compilation-data.bin | Bin 0 -> 217173 bytes .../previous-compilation-data.bin | Bin 0 -> 46737 bytes build/tmp/jar/MANIFEST.MF | 2 + build/tmp/war/MANIFEST.MF | 2 + gradle/wrapper/gradle-wrapper.properties | 6 - gradlew | 240 ---- gradlew.bat | 91 -- package-lock.json | 6 - settings.gradle | 1 - src/main/java/com/ffii/core/test/test.java | 2 +- .../{FhsmsCApplication.java => Pet_App.java} | 10 +- .../com/ffii/fhsmsc/ServletInitializer.java | 2 +- .../config/security/SecurityConfig.java | 36 +- .../Combine/res/FBCombinedListRes.java | 86 -- .../enity/DailyNutritionSummary.java | 277 ---- .../DailyNutritionSummaryRepository.java | 6 - .../req/DailyNutritionSummaryReq.java | 329 ----- .../service/DailyNutritionSummaryService.java | 150 -- .../web/DailyNutritionSummaryController.java | 66 - .../modules/FB_Operator/enity/FBOperator.java | 40 - .../enity/FBOperatorRepository.java | 5 - .../modules/FB_Operator/enity/FB_brand.java | 50 - .../FB_Operator/enity/FB_brandRepository.java | 5 - .../FB_Operator/req/FBCombinedSaveReq.java | 160 --- .../FB_Operator/req/FBOperatorReq.java | 94 -- .../modules/FB_Operator/req/FB_brandReq.java | 107 -- .../service/FBCombinedService.java | 315 ----- .../service/FBOperatorService.java | 143 -- .../FB_Operator/service/FB_brandService.java | 200 --- .../FB_Operator/web/FBCombinedController.java | 74 - .../FB_Operator/web/FB_brandController.java | 51 - .../FB_Operator/web/FBoperatorController.java | 51 - .../modules/FB_Outlets/enity/FB_outlets.java | 53 - .../enity/FB_outletsRepository.java | 5 - .../modules/FB_Outlets/req/FB_outletsReq.java | 90 -- .../FB_Outlets/service/FB_outletsService.java | 195 --- .../FB_Outlets/web/FB_outletsController.java | 55 - .../ffii/fhsmsc/modules/I18n/enity/i18n.java | 61 - .../modules/I18n/enity/i18nRepository.java | 8 - .../ffii/fhsmsc/modules/I18n/req/i18nReq.java | 71 - .../modules/I18n/service/i18nService.java | 96 -- .../modules/I18n/web/i18nController.java | 56 - .../fhsmsc/modules/Menu/enity/fb_group.java | 40 - .../Menu/enity/fb_groupResponsity.java | 7 - .../Menu/enity/fb_group_relationship.java | 47 - .../fb_group_relationshipResponsity.java | 7 - .../Menu/enity/fb_group_show_control.java | 43 - .../fb_group_show_controlResponsity.java | 7 - .../fhsmsc/modules/Menu/enity/fb_menu.java | 94 -- .../modules/Menu/enity/fb_menuResponsity.java | 6 - .../fb_menu_and_outlet_relationship.java | 51 - ...enu_and_outlet_relationshipResponsity.java | 7 - .../Menu/enity/fb_menu_item_ingredient.java | 59 - .../fb_menu_item_ingredientResponsity.java | 7 - .../Menu/enity/fb_menu_item_nutrition.java | 185 --- .../fb_menu_item_nutritionResponsity.java | 7 - .../fhsmsc/modules/Menu/enity/ingredient.java | 40 - .../Menu/enity/ingredientResponsity.java | 6 - .../Menu/req/.LCKfb_menuResponsity.java~ | 1 - .../Menu/req/FbMenuItemNutrientReq.java | 139 -- .../fhsmsc/modules/Menu/req/fb_groupReq.java | 50 - .../Menu/req/fb_group_relationshipReq.java | 44 - .../Menu/req/fb_group_show_controlReq.java | 42 - .../fhsmsc/modules/Menu/req/fb_menuReq.java | 106 -- .../fb_menu_and_outlet_relationshipReq.java | 32 - .../Menu/req/fb_menu_item_ingredientReq.java | 47 - .../modules/Menu/req/ingredientReq.java | 47 - .../Menu/service/FbMenuCombineService.java | 1225 ----------------- .../modules/Menu/service/fb_groupService.java | 139 -- .../service/fb_group_relationshipService.java | 62 - .../service/fb_group_show_controlService.java | 70 - .../modules/Menu/service/fb_menuService.java | 159 --- ...b_menu_and_outlet_relationshipService.java | 64 - .../fb_menu_item_ingredientService.java | 63 - .../fb_menu_item_nutritionService.java | 63 - .../Menu/service/ingredientService.java | 138 -- .../Menu/web/FbMenuCombineController.java | 137 -- .../modules/Menu/web/fb_groupController.java | 61 - .../web/fb_group_relationshipController.java | 48 - .../web/fb_group_show_controlController.java | 48 - .../modules/Menu/web/fb_menuController.java | 57 - ...enu_and_outlet_relationshipController.java | 47 - .../fb_menu_item_ingredientController.java | 48 - .../web/fb_menu_item_nutritionController.java | 48 - .../Menu/web/ingredientController.java | 48 - .../fhsmsc/modules/allergy/enity/Allergy.java | 49 - .../allergy/enity/AllergyReponsitory.java | 6 - .../modules/allergy/enity/UserAllergy.java | 52 - .../allergy/enity/UserAllergyReponsitory.java | 6 - .../modules/allergy/req/AllergyReq.java | 49 - .../modules/allergy/req/UserAllergyReq.java | 31 - .../allergy/service/AllergyService.java | 93 -- .../allergy/service/UserAllergyService.java | 111 -- .../allergy/web/AllergyController.java | 50 - .../allergy/web/UserAllergyController.java | 45 - .../modules/embedding/enity/embedding.java | 80 -- .../embedding/enity/embeddingRepository.java | 6 - .../modules/embedding/req/embeddingReq.java | 51 - .../embedding/service/embeddingService.java | 87 -- .../embedding/web/embeddingController.java | 51 - ...ator_and_organization_relationshipReq.java | 30 - ...perator_and_organization_relationship.java | 37 - ...d_organization_relationshipRepository.java | 6 - ..._and_organization_relationshipService.java | 75 - ...d_organization_relationshipController.java | 54 - .../fhsmsc/modules/food1/entity/Food1.java | 290 ---- .../modules/food1/entity/Food1Repository.java | 7 - .../modules/food1/req/SaveFood1Req.java | 257 ---- .../modules/food1/service/Food1Service.java | 80 -- .../modules/food1/web/Food1Controller.java | 46 - .../modules/foodItems/entity/FoodItems.java | 232 ---- .../foodItems/entity/FoodItemsRepository.java | 7 - .../foodItems/req/SaveFoodItemsReq.java | 216 --- .../foodItems/service/FoodItemsService.java | 443 ------ .../foodItems/web/FoodItemsController.java | 69 - .../enity/nutrient_impact.java | 30 - .../enity/nutrient_impactRepository.java | 5 - .../nutrients_need/enity/Nutrients_need.java | 94 -- .../enity/Nutrients_needRepository.java | 6 - .../req/SaveNutrients_needReq.java | 57 - .../service/Nutrients_needService.java | 63 - .../web/Nutrients_needController.java | 48 - .../enity/pet_information.java | 19 + .../enity/pet_informationRepository.java | 6 + .../user/service/UserAuthorityService.java | 3 +- .../modules/user/service/UserService.java | 3 +- .../entity/User_information.java | 132 -- .../entity/user_informationRepository.java | 7 - .../req/Saveuser_informationReq.java | 101 -- .../req/UserInfoCombineReq.java | 30 - .../UserInformationCombineService.java | 56 - .../service/user_informationService.java | 106 -- .../web/UserInformationCombineController.java | 32 - .../web/user_informationController.java | 49 - src/main/resources/application-db-anna.yml | 2 +- src/main/resources/application-db-prod.yml | 2 +- .../changes/enson_change/05_create_food1.sql | 54 - .../06_create_food_information.sql | 19 - .../07_alter_food_information.sql | 352 ----- .../08_alter_food_information.sql | 11 - .../09_alter_food_information.sql | 12 - .../enson_change/10_alter_food_items.sql | 12 - .../11_create_user_information.sql | 18 - .../12_alter_user_information.sql | 20 - .../enson_change/13_alter_information.sql | 6 - .../14_alter_user_information.sql | 11 - .../15_alter_user_information.sql | 6 - .../16_alter_user_information.sql | 6 - .../17_alter_user_information.sql | 7 - .../18_alter_user_information.sql | 6 - .../19_alter_user_information.sql | 7 - .../changes/enson_change/20_alter_food1.sql | 25 - .../enson_change/21_alter_food_items.sql | 11 - .../changes/enson_change/22_alter_food1.sql | 16 - .../changes/enson_change/23_alter_food1.sql | 17 - .../enson_change/24_alter_food_items.sql | 27 - .../enson_change/25_create_Nutrients.sql | 40 - .../26_alter_Nutrients_impacts.sql | 26 - .../enson_change/27_create_Allergy.sql | 49 - .../changes/enson_change/28_alter_food1.sql | 7 - .../changes/enson_change/29_alter_food1.sql | 7 - .../enson_change/30_create_Nutrients_Need.sql | 15 - .../31_create_Nutrients_Need_update.sql | 64 - .../32_create_Nutrients_Need_update.sql | 64 - .../enson_change/33_create_Allergy.sql | 44 - .../changes/enson_change/34_alter_food1.sql | 19 - .../35_alter_user_information.sql | 6 - .../36_create_restaurant_information.sql | 13 - .../37_alter_restaurant_information.sql | 17 - .../38_create_restaurant_informatio.sql | 14 - .../39_alter_restaurant_informatio.sql | 14 - .../40_alter_restaurant_informatio.sql | 7 - .../41_alter_restaurant_informatio.sql | 20 - .../42_alter_restaurant_informatio.sql | 13 - .../43_alter_restaurant_informatio.sql | 8 - .../enson_change/44_create_muti_table.sql | 71 - .../enson_change/45_alter_muti_table.sql | 43 - .../enson_change/46_alter_muti_table.sql | 175 --- .../enson_change/47_alter_muti_table.sql | 17 - .../enson_change/48_build_muti_table.sql | 85 -- .../enson_change/49_alter_muti_table.sql | 71 - .../changes/enson_change/50_alter_table.sql | 11 - .../changes/enson_change/51_alter_i18n.sql | 35 - .../changes/enson_change/51_create_i18n.sql | 20 - .../changes/enson_change/53_alter_i18n.sql | 31 - .../changes/enson_change/54_alter_i18n.sql | 15 - .../changes/enson_change/55_alter_i18n.sql | 24 - .../changes/enson_change/56_create_table.sql | 15 - .../changes/enson_change/58_insert_data.sql | 63 - .../changes/enson_change/59_insert_data.sql | 63 - .../changes/enson_change/60_insert_data.sql | 67 - .../changes/enson_change/61_insert_data.sql | 12 - .../changes/enson_change/62_insert_data.sql | 61 - .../changes/enson_change/63_insert_data.sql | 25 - .../changes/enson_change/64_insert_data.sql | 66 - .../changes/enson_change/65_insert_data.sql | 66 - .../changes/enson_change/66_insert_data.sql | 16 - .../changes/enson_change/67_edit_table.sql | 17 - .../changes/enson_change/68_edit_table.sql | 17 - .../changes/enson_change/69_edit_table.sql | 13 - .../changes/enson_change/70_edit_table.sql | 72 - .../changes/enson_change/71_edit_table.sql | 25 - .../changes/enson_change/72_create_table.sql | 24 - .../changes/enson_change/73_ALTER_table.sql | 8 - .../changes/enson_change/74_ALTER_table.sql | 11 - .../changes/enson_change/75_ALTER_table.sql | 11 - .../changes/enson_change/76_ALTER_table.sql | 25 - .../changes/enson_change/77_create_table.sql | 26 - .../changes/enson_change/78_create_table.sql | 18 - .../changes/enson_change/79_alter_table.sql | 18 - .../changes/enson_change/80_create_table.sql | 30 - ...pplicationTests.java => Pet_AppTests.java} | 2 +- 346 files changed, 679 insertions(+), 15328 deletions(-) create mode 100644 .gradle/8.1.1/checksums/checksums.lock create mode 100644 .gradle/8.1.1/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.1.1/dependencies-accessors/gc.properties create mode 100644 .gradle/8.1.1/executionHistory/executionHistory.bin create mode 100644 .gradle/8.1.1/executionHistory/executionHistory.lock create mode 100644 .gradle/8.1.1/fileChanges/last-build.bin create mode 100644 .gradle/8.1.1/fileHashes/fileHashes.bin create mode 100644 .gradle/8.1.1/fileHashes/fileHashes.lock create mode 100644 .gradle/8.1.1/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.1.1/gc.properties create mode 100644 .gradle/8.10/checksums/checksums.lock create mode 100644 .gradle/8.10/checksums/sha1-checksums.bin create mode 100644 .gradle/8.10/dependencies-accessors/gc.properties create mode 100644 .gradle/8.10/fileChanges/last-build.bin create mode 100644 .gradle/8.10/fileHashes/fileHashes.lock create mode 100644 .gradle/8.10/gc.properties create mode 100644 .gradle/8.8/checksums/checksums.lock create mode 100644 .gradle/8.8/checksums/md5-checksums.bin create mode 100644 .gradle/8.8/checksums/sha1-checksums.bin create mode 100644 .gradle/8.8/dependencies-accessors/gc.properties create mode 100644 .gradle/8.8/executionHistory/executionHistory.bin create mode 100644 .gradle/8.8/executionHistory/executionHistory.lock create mode 100644 .gradle/8.8/fileChanges/last-build.bin create mode 100644 .gradle/8.8/fileHashes/fileHashes.bin create mode 100644 .gradle/8.8/fileHashes/fileHashes.lock create mode 100644 .gradle/8.8/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.8/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/nb-cache/PET_APP-1347428207/project-info.ser create mode 100644 .gradle/nb-cache/subprojects.ser create mode 100644 .gradle/nb-cache/trust/8BCC562A10043EFCC43B687948A6B209A652360CCFCBDB4C56CED32136AEA800 create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .vscode/launch.json delete mode 100644 ReadMe.txt delete mode 100644 bin/main/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ delete mode 100644 bin/main/db/changelog/changes/enson_change/04_create_user(enson).sql delete mode 100644 bin/main/db/changelog/changes/enson_change/05_create_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/06_create_food_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/07_alter_food_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/08_alter_food_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/09_alter_food_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/10_alter_food_items.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/11_create_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/12_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/13_alter_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/14_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/15_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/16_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/17_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/18_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/19_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/20_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/21_alter_food_items.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/22_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/23_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/24_alter_food_items.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/25_create_Nutrients.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/27_create_Allergy.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/28_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/29_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/33_create_Allergy.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/34_alter_food1.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/35_alter_user_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/36_create_restaurant_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/37_alter_restaurant_information.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/44_create_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/45_alter_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/46_alter_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/47_alter_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/48_build_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/49_alter_muti_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/50_alter_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/51_alter_i18n.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/51_create_i18n.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/53_alter_i18n.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/54_alter_i18n.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/55_alter_i18n.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/56_create_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/58_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/59_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/60_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/61_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/62_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/63_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/64_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/65_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/66_insert_data.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/67_edit_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/68_edit_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/69_edit_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/70_edit_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/71_edit_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/72_create_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/73_ALTER_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/74_ALTER_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/75_ALTER_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/76_ALTER_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/77_create_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/78_create_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/79_alter_table.sql delete mode 100644 bin/main/db/changelog/changes/enson_change/80_create_table.sql create mode 100644 build/resources/main/application-db-anna.yml create mode 100644 build/resources/main/application-db-local.yml create mode 100644 build/resources/main/application-db-prod.yml create mode 100644 build/resources/main/application-ldap-prod.yml create mode 100644 build/resources/main/application-local.yml create mode 100644 build/resources/main/application-prod-linux.yml create mode 100644 build/resources/main/application-prod-win.yml create mode 100644 build/resources/main/application.yml create mode 100644 build/resources/main/db/changelog/changes/00_system_base/01_create_table.sql create mode 100644 build/resources/main/db/changelog/changes/00_system_base/02_insert_group_authority.sql create mode 100644 build/resources/main/db/changelog/changes/00_system_base/03_insert_setting.sql rename src/main/resources/db/changelog/changes/enson_change/04_create_user(enson).sql => build/resources/main/db/changelog/changes/00_system_base/04_create_user(optional).sql (55%) create mode 100644 build/resources/main/db/changelog/db.changelog-master.yaml create mode 100644 build/resources/main/log4j2-prod-linux.yml create mode 100644 build/resources/main/log4j2-prod-win.yml create mode 100644 build/resources/main/log4j2.yml create mode 100644 build/tmp/bootJar/MANIFEST.MF create mode 100644 build/tmp/bootWar/MANIFEST.MF create mode 100644 build/tmp/compileJava/previous-compilation-data.bin create mode 100644 build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 build/tmp/jar/MANIFEST.MF create mode 100644 build/tmp/war/MANIFEST.MF delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100644 gradlew delete mode 100644 gradlew.bat delete mode 100644 package-lock.json delete mode 100644 settings.gradle rename src/main/java/com/ffii/fhsmsc/{FhsmsCApplication.java => Pet_App.java} (71%) delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Combine/res/FBCombinedListRes.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummary.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummaryRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/req/DailyNutritionSummaryReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/service/DailyNutritionSummaryService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/web/DailyNutritionSummaryController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperator.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperatorRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brand.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brandRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBCombinedSaveReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBOperatorReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FB_brandReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBCombinedService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBOperatorService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FB_brandService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBCombinedController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FB_brandController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBoperatorController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outlets.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outletsRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/req/FB_outletsReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/service/FB_outletsService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/web/FB_outletsController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18n.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18nRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/I18n/req/i18nReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/I18n/service/i18nService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/I18n/web/i18nController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_groupResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationship.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationshipResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_control.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_controlResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menuResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationship.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationshipResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredient.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredientResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutrition.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutritionResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredient.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredientResponsity.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/FbMenuItemNutrientReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_groupReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_relationshipReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_show_controlReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menuReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_and_outlet_relationshipReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_item_ingredientReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/req/ingredientReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/FbMenuCombineService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_groupService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_relationshipService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_show_controlService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menuService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_and_outlet_relationshipService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_ingredientService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_nutritionService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/service/ingredientService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/FbMenuCombineController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_groupController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_relationshipController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_show_controlController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menuController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_and_outlet_relationshipController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_ingredientController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_nutritionController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/Menu/web/ingredientController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/enity/Allergy.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/enity/AllergyReponsitory.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergy.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergyReponsitory.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/req/AllergyReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/req/UserAllergyReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/service/AllergyService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/service/UserAllergyService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/web/AllergyController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/allergy/web/UserAllergyController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embedding.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embeddingRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/embedding/req/embeddingReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/embedding/service/embeddingService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/embedding/web/embeddingController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/Req/fb_operator_and_organization_relationshipReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationship.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationshipRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/service/fb_operator_and_organization_relationshipService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/web/fb_operator_and_organization_relationshipController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1Repository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/food1/req/SaveFood1Req.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/food1/service/Food1Service.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/food1/web/Food1Controller.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItems.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItemsRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/foodItems/req/SaveFoodItemsReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/foodItems/service/FoodItemsService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/foodItems/web/FoodItemsController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impact.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impactRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_need.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_needRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrients_need/req/SaveNutrients_needReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrients_need/service/Nutrients_needService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/nutrients_need/web/Nutrients_needController.java create mode 100644 src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_information.java create mode 100644 src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_informationRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/entity/User_information.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/entity/user_informationRepository.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/req/Saveuser_informationReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/req/UserInfoCombineReq.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/service/UserInformationCombineService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/service/user_informationService.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/web/UserInformationCombineController.java delete mode 100644 src/main/java/com/ffii/fhsmsc/modules/user_information/web/user_informationController.java delete mode 100644 src/main/resources/db/changelog/changes/enson_change/05_create_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/06_create_food_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/07_alter_food_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/08_alter_food_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/09_alter_food_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/10_alter_food_items.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/11_create_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/12_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/13_alter_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/14_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/15_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/16_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/17_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/18_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/19_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/20_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/21_alter_food_items.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/22_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/23_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/24_alter_food_items.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/25_create_Nutrients.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/27_create_Allergy.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/28_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/29_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/33_create_Allergy.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/34_alter_food1.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/35_alter_user_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/36_create_restaurant_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/37_alter_restaurant_information.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/44_create_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/45_alter_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/46_alter_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/47_alter_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/48_build_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/49_alter_muti_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/50_alter_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/51_alter_i18n.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/51_create_i18n.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/53_alter_i18n.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/54_alter_i18n.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/55_alter_i18n.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/56_create_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/58_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/59_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/60_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/61_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/62_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/63_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/64_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/65_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/66_insert_data.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/67_edit_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/68_edit_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/69_edit_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/70_edit_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/71_edit_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/72_create_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/73_ALTER_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/74_ALTER_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/75_ALTER_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/76_ALTER_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/77_create_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/78_create_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/79_alter_table.sql delete mode 100644 src/main/resources/db/changelog/changes/enson_change/80_create_table.sql rename src/test/java/com/ffii/ars/{FhsmsCApplicationTests.java => Pet_AppTests.java} (84%) diff --git a/.gradle/8.1.1/checksums/checksums.lock b/.gradle/8.1.1/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..592ae255349e3b578ea6f7776dfa95849c3e0a17 GIT binary patch literal 17 ScmZP$4mOQ0X?yR?00jUjxdUbZ literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.1.1/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..d5982396cc18aac2ec16f76ba1427528788c6988 GIT binary patch literal 17 TcmZR6mK?6Ge@OKN0~7!NE;0kD literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/dependencies-accessors/gc.properties b/.gradle/8.1.1/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.1.1/executionHistory/executionHistory.bin b/.gradle/8.1.1/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..e53877ef4d6d41901e2a8d87acbc84aa6ec7ce08 GIT binary patch literal 293372 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%0A=|r{)x4;!^GHYmt=FJ8@qhfi5 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≪vbKf-Q`XdjU zL0-$8(#yxv4~037AjhWX0Cskp+d&7N@NNM8z*QCL8t7tZ|B$E_F**3$a1WgpsHAm% zr0itDXUbT$o$lG!WO|d=mkd7BAYh%4IAOI>0ZIsfezD`-mse%e4dz z8+~6E#2)CoByowN5&0G&5|M#?bq1;#ed?}b8MEh3w>{CLmgC=1t$bzzCUHqqlhY_W zcGvz6)FR=qpt>uLsZY`W;&~#aoJju9ZbLp0dSJk<@F`neuyE2}V z^{4yGoH5%++eM_O%3Wf*VPP{UJ%V{Xd8eB z!?cC3?0q9Y4xM&Rm#7chZUn$Yx7LyEz#pMg89_XcoD#tT7gE z!;StiJxjP!He6SZ18P_FGfEB!5Czhlo&c^jj$-}~VReYhB97qRhlaiVR>>_}Pd@Q& z+P1i^cbUCh^BS#=G0j#~ZG9YG)B@0H_E2_#cNzje$ju046ZnO62~raZ+p2u*h>5cN?mHi7 zeQ~bYeEStl6$*acQlirUG~6u1MB&R}{^UYH`IVZ0?nqYZubvp-%~ zd*kAp+kdqsePzqBcNg%SDl&21QXv|qm5uTm@|0-9LTw^M!?d$`DY_A6arIK@2(yPN z0u+C&$Y%vzGtqRcHHC$(z3zsT}3rZbd^cO;Tt(dIZdtEVxglvMqKSVy+qf(Vt> zFCsbk1L(t&ng$C%x{5&Cka1yT^o-`Tm^8fHAFmEv=;-uh(<#kHoAFZRfV#q`*V;q% zDJ8W>dot|-R$(5+K+^vbUHgQ)g0K(Qii?891JAAH;zLQUOXC4kQXIXa-a0LRSG; zEs3Bomx(%7qh`2z`PirJLjrqy)h*L0CFYhIX3tep401zBgRi=&l#Sxa(`0W4HzTo= zY$ISau)uhjRthUtx-;$_fp$GTN=>n@;YxZCt9Q|O^o%#ly&9f~-xNfw7yyzHpa%15#4 z$A9BPwVE%xG$nIpL6 zL`Mi8Quq!e-v@^ft;RMwhv*bSE6YMr9uJ)SF~Cp<4V@%A0YZS$@?GIMxu}E|$A0qJ z!g)y<6Zdzh`^m7WtBzc+*HGt(@dhNdy-3Fh35tz0GCWAgV-Oh8iq0`2@+)xVT9MGv z#TeAIs9-vm@$3Iy(&^!KeT$a6{n0mDjc@jP%>%=AuZW> z=Xi1Z@XO*kPSA>kbx+i~MYNe%lnMz7q^L5m11KfAwmcpMR$Erdz*S zI43##ap%`&FT^h1^iW8cn>tf!a;rbZ8h_I2T1}GEDCYo;qD!6TEl|yvYeRn;31%>HHVnw+IAPL=HR{?HK>i_iY^7Zb}xvQ0q`8cCVl zF`6ziY%BuRCkf}4ay)y0hI!5uI;`QM3xXUb2W=sk6J?kLsEI*qDnVr#80EQVJyrC^ z0aI%_-kx1y)3#~5_n1rIclY#+i|l)jg51AQ$B7&R@em?erCuuqJScHkzi<)ITSQwe z{GI9=f&~`3-F%;c-A0k@`(F3`95ZLu#bST2+_rRe#RV5l=%7cHMM;V|;$WWuwMS&m z^?~36?gL62q)mjbpAJ+~wqUuyMEU`@%R$fC#vt{T8@IjiexHx)F5fX{>f4o@{xZ*u z+Y_Cx1DOY&Jv}p|CEkpjoz+IU0|>U{KoF9H%3DMo_$AZor*ccsD=lUUpd z_`(K=kM?uOlkHNvp>+VZYz&QzmAx)w)qL)n_hL@_8Ffx1zdO2-Z~NR5W?D9?eu*`CU%@T$=EN%7upBpp~Q(5s;H^0g&1>zVP+!(Wa^=&>5;p6rj6=o@5#^ncK&i%WsFj0~V7 z+G7O-%K|0E41JTNouMi~=7V^S`L@8jPc90%lITYPHn{vz>H};%pE3Wt{{8k9o3� z_O?e}E8s907>N;ga2vDR$nvo)Bv2yV1W1}!z`Kxs7^q+D(kp4i9fClK^5Vb0eZ#nQ z8!nbP{>rk+_wVw*`=^PC&nKw6GM%q4vlsmvSa0FLK)8Tlo?a-5qz(`AHZ(_ptE118 zLO*GL=t0N@2g1fj_+`~ocoCkWCj3H+>F>PdIR4?y=O&Iy-!q|vnat`HZ)T&`r(LIR zl(K_B6GTyn6+`=$==E?5!%)e;sP@y6L|k3a1A78Hw_!iv$^Rz>kij}xH;7HGd|0Mlm z;$D+EP48ii^Mq1~*;3t-ktQZepz9Rv3h`;;Y5fQ9L&6W%b!t>loB&pVO_-Z4lp1R! zpT~Vt^=PyEHZQF>_tNgKa~4-M%UC2`ypo3l_8Ik~<`A%3KyP^QuBe64xj|za`cZz0 z<~WKD>J&&9kUP_Qd9{Z`xdGi?-TY$p4pl1D8~04oA8}{em`&+WGU%M`$@C|C(%ex$ z>y8VS()&a`jQRtFA3(Z9dY&-IiV$f$g;VPJ6naEL)suI)Y#9C9_S-d}(au|b{ynB_ zzak^H<&68w#8Gt>>6<7-PhR~SE;e?#0`vrZA_WC14lM?Xk#K=fm&DgWrB0M}_4;l; z&%%e`Kic)&*Zy!@+s-<*nmuu{>&P~Rd&acgdq-x`0kw}DsMe})?S{{+AD^C~$PuBV zPfO2IVP>n$bj_z}MWwUQXygANB*Or=JQNlan+htoQSWpIeG8@~Xv7m!+wlJjaT0g;6p4A~pF_1@sM;>2{Ol6n{`}tiFBP7`*av0o zgN%LfDq{=J{6E_jv+v(k$9MY2)E((vm(lagM|)!0v_JJkm+htJEv<7f{h=opW*7a? zk8uPgV&`MYnW`$@tI&e~=CAT*Ckx4%%q`kkY93@p3cb!76&fI~ROofysqmO9yp$SQ zD8_QM_}`PJRNOyy`)^#F Y%+V76j+d`KaoGIAMGF@yyg%oE02Cxu(f|Me literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/executionHistory/executionHistory.lock b/.gradle/8.1.1/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..5516f92a0bca9b55df0fb51b4d7139274ff4d46f GIT binary patch literal 17 UcmZSncj$IVZ1bse3=qHu07T^laR2}S literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/fileChanges/last-build.bin b/.gradle/8.1.1/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/fileHashes/fileHashes.bin b/.gradle/8.1.1/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..593cdf1df762eb5bf5bd7b27794f4691c8327890 GIT binary patch literal 78615 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

)%3SAF$j~np=o|{bSIFii2ZWI>UF6 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/fileHashes/fileHashes.lock b/.gradle/8.1.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..5cae87aa872c83c1f3f1513a8514c359ba629b12 GIT binary patch literal 17 VcmZRMvGZfO_owd=0~oOC0{}1a1Wo_| literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/fileHashes/resourceHashesCache.bin b/.gradle/8.1.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..bc0ca7b20dd58c97ec824e1663ef189fae79737d GIT binary patch literal 63957 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.1.1/gc.properties b/.gradle/8.1.1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/8.10/checksums/checksums.lock b/.gradle/8.10/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..c61e1bb1b1450a02b4035991c34653463eb1a86a GIT binary patch literal 17 UcmZQpol^HSSN+an1_4F?VG>6BHxp_ z9JTzdagQqk2q1s}0tg_000IagfB*srAbxrG;J9qtiRp{Q0~m0+0{|}41M~m@ literal 0 HcmV?d00001 diff --git a/.gradle/8.8/checksums/md5-checksums.bin b/.gradle/8.8/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..23dcb0a8b968e82b022bbfa186de1e7c9822c5a1 GIT binary patch literal 41497 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 O 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

V8^Cr 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 AiU0rr literal 0 HcmV?d00001 diff --git a/.gradle/8.8/fileHashes/fileHashes.lock b/.gradle/8.8/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..f33d4ec036f882f39b6c84889bbbb2d977d212fa GIT binary patch literal 17 VcmZQBtK4>L;_2jk1~6c%2LL;c1u_5t literal 0 HcmV?d00001 diff --git a/.gradle/8.8/fileHashes/resourceHashesCache.bin b/.gradle/8.8/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..f0b5cb325a0cc0b7502136c2c61e9a5deba1230d GIT binary patch literal 28765 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 UcHi)Hlh5v5e@{MLIsOHI0|*;%H2?qr literal 0 HcmV?d00001 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..73dad8cf255944772316acb96c1d69848c5504a8 GIT binary patch literal 8 PcmZQzV4M-kd}uKM28se# literal 0 HcmV?d00001 diff --git a/.gradle/nb-cache/PET_APP-1347428207/project-info.ser b/.gradle/nb-cache/PET_APP-1347428207/project-info.ser new file mode 100644 index 0000000000000000000000000000000000000000..6250645393c42ba4d0f6749e39c5ffe6f5d42c5f GIT binary patch literal 1237323 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�dzSRSU!-Z|xlIl~Q zwc-()Bb=Rf(~F^=<5-+fa7~ddXaBg z7iohKb+nkQ)P{!iCBwCUEqJsEaxv%d$|Una@s@5LN{hjP9Wxvlf=JrBQ&MGmWpxf! z8j#BJDBSM|qMms^_Fg(0 zrsIM9&=ntW5d}XF-h9D~2E|*=m%78%WPFz59~_Nd@fU0>R!sb*${D=+Y8`d*&ev@t z)UKH@BtvK=b?`vYS(Z?YMK4Q|ivhiK36Aud!Wbqy#WRG5UtSO7KV1k5dZe!gt<8G1 z8E(Tcm~b2|P>EyJMF~p6R>k&rFFC!J49=v_b75qZW9#nfcl6zl*YL|wLQ{n~g)PJ; znVcsB5DI)U@})0%8WEd#%ObrVYG;DgbN*j{6YfJ`?L>bfsPr-0h*ql zLp4KD6RMR_g_AH*n^sk4f(X<@_^n}q@?&?Aof)b2wcrb>XliiSgL{q5&3+I(Q1xc7 z2J&jJi0mRn03o+oH>0c&eVPZ>u`Q>0F<#7ess~s+?O>y{v$so@QDUVqIDBS^vL@EK ztq3taMdLdmAa+Uh?uw$`dJkc;OcY|Rvc>3L!AgTgW`&?=uD!ah9#*&rQ5P;W{CL%O;W+xNcuq^;$tSU4#QLqp!9=b`OB5pp!SH{XJ80 z0xzMG%1pbtVB`OW^}H<0vJ>-_s>ahjU(Y7SjuMWVb_O~cPo!Lgq8QM#MDs7b_i*|_ zcB=f7ZU%{sh|+2xzt96kD>;%cD`knqta*koh?$}0;hZdpAPM~)vaw$8uJxuYkbPbw zNMRBskpjnkKsXY)cwGReG!yAn6`;t)e#@%VHFi}!0_gcwN??~OEJI1uP3JiM5vZP> zi-jSth5TtPoQSmEWtjeIXNjovzkgY-Awn5AO6*)!A ziSxw@)?G512sNj!(1yXJec^Uqezr!SvtIJww!&nUdeHDybEYtME$Fr1r;|`6;Pk+s z5jM|y>RhOv>A6>$Q&00#bjdrd2OHOco7ac6r6o3Or;jp~(uFOG#e$)@tEAzL!7Rk7asi7dcc~l&O@pIf?NG}W@!HLnM$osD^C~z}a^K=aq0kuQD zF#%Q|0mSobeWu~S1gn!OA`YFnxOxQF^KN!&M3edDyr7`21-2rWZUH?Qh8!(5FqoNkHWXX)x89$?NP zOct7E$tM;^quMob6)rIU|Zi#m{AERGTE46q>)T>gI!tO zjYcFfBG4d3NJA0=I230vWbwu$Ga@q{S@EdKESe2}!z{GXW)}KQW2RrBrB+(#^W*O4 z>Gy_bR`;SRGa@6-J;#r~pB*$q-L$Q#*B463)2j~Nhqw_`G#jakOPBf-4^3!ss3d^M z2_*m^+2G@HgW9PG3BM6!(?Cd~((QgHL_8Dspahx!_c{KmRlh}b=kYYvUkY^a5rKsc z4POmCvmHf@{OF6?CGx$Pk0F)olsQBhn}6rth-IEl zLjQ%S8fp6(Mba?(h8i(-;cp7nU$~w_SJ!By>m8*oXh0W^pDS3hx~@+@_Yv}4a@6=V zQ`#=6q7O*E392YINohwKX3$Ok&^)}Mqup$tKJ<&x*(X8pj7-0oEzx$A;`ULWajVDbF@e5apVp5IgZ^if ziz+hsgP9g;-Jy<8SNc4n)qsx|>CNift)05xyy_Emb)OrXXvdZ)x!Pk#It+}J>r>B3 zeT6=RHQ7&0eThjiOyu!>y^d+TjthRy7~igU=|g$iWj>qru-xqXMKTP0Nn1kVA^sj_ zmDO)_z#cu?vm-EN03O=rk}~#nIiGSI&KdfG-DuZ+)n;UVs;>8P&zo{;U07dtdvcv# z721cN4S?Fw7xy@opWTM4i}!~Yu4YroYJY-DR3Y&4tTH`u1A+PB>ERUPHNGGaU0HC> z#V#S!@DdLA{zN877y9(;uAi~!Xym()RB!d|qtxB^%QAV7ihF4UMs^70!Ejjn}rPoQCC%GT@0EFPmU_Mw}t zzS=Q^pr^cjqYwBrAxYyDbfw=RO+WeXHH!X!c=Oo__G1)SYudIwWuOU%sMfppdt@07 zpod?Ss;)qd0x6Uf0-{K|N`Uwdqx(;hMJi4mG;)&(5tMyxiw$Grx9~yYYPa~YUI4`@ zS;P*oeL8k?W)0DIOpmmcSc_y7Cb?=3+gjD|$KN$E-b|K1peg!kS*6O`g3`bw#vR~NXpuUAMD}XdeT(*8>K@?cdH$-~ z6njG4t#u*Wt{vlO$*qT+&`?%W-@uPc#w3A7FsoQ`JQ*l-R33&*AU|*_99CgBLvyVc z8%vu-Ya04>F}W@)V21WFNV-C>Z%c~9vLkPP2>mJk`}}t#fXLGc@_d}^kHi<>_kyf? zEnPAnb@6YAHWthGA(gLt|N65Z>DoSj1qmGi51GV7Av`+}Df)-y7gK%{zv;5JnQIYA zZaHu)P1o>eyV&wDcmi{)!Oi}Px{Im`BNnA}{fCICwve@s`+zR=x3CJ|Z6y4d-q3Tq zw}~7CGYUy%KFh;fFv87SG~!F)ZeJ#JcG=3Ur}_&7ZNa|KxRnPia$NRB)M=yMjMv@1qgt#EojsC~VMo*r`68M|EmV9V&S&8VF;Jl4dA_2A z8wIj02x|%?cxZ&E4i!aR-?vmoC8dC;>(X7hN!b(Dc>>djTIY{lgh%I%5f;QSs#uF( zHrCX8A+)fB4jy9*K9Z%a`eY;6ULKP2UDw#nf3DYMyOj)VXGKw2)Nw#l^hLx8ku1xg z-#k$69TWuOQHdn~sd@A5CMlrue|xiKX%n^-<;oCbevx9Wfbv}_E!uElq^7NVwdcbN z)~0SVvaz{NP0X}BWhG9JyB$_W+Qoz={ z(zRbKAVFho1%@#`pfXoC?zbgLStrL3EN0Y7P8UxoT|}O=F60Xu5>d3`!OH#&3NMaQ zWPjS#i`F%1^fZQ1b)P=S01|x}BRqzSL<~&+JzgEw&&?sf+mxF2+MsSqyoBx|&;FB_k!TlZvVJ^UeOe_(07X zb>)|5PH-{;3n0Gd!tzQnih-aLQOYlQQjZ3o{)8J4W_GJDug(@CcMmb3>5F3FHuyNw zXFChjv>sXopzmr3C*fYQtHS1oHQMvxhlkG-Iz~F#`^k z+)d?YQC{Xp6ER1J>r?M&{m5DUrjIQKgVuyLGs4xi}i z(e-?W2!ZmndfKA3MSnAmzv&{rz9F>8#j~pG8w1Ic^zj)wwmL*c$#AwJ_)k0CE!k>C3&cS~hoj^#gh)N^lqG&O{DA8zf)Nt3F~6^1Pu-U({Q6b?5t1ISQ61|F)$a8 z)PY-{W>4f;xJ{%x32e2~9u?Y(LB7?9iiXrjLY3#QR?7S64S>ymihJ`pNSl-9!4ujX z5+snAqg%AY$2B(_JFv!jqv7UPPA^I+%8*LRsXKbAc63c8J{~!scnHH$!1*$832^l( zFE|CI2ZTPy2Ti*5THF+Ay`1d()gtA}`fncTr03oGG?kx9f%y42EBK`Qf_BUM{py4k zGF3%WVuAx!Dy2UBDg->#NX@KMAE*K@(|N{|opSBM&kajD=8VIBx7(wE6nJ7Jk(pbE zX#Gy(idJA~v-6FjkKadAqv@b1&yr%lg$=3jC^ys1~K7s>ubBmi*=fr#Rl7AE5FdB*Rf&b)h6M zuIX0;WRD^oqE-rP_aSCh`@PH#7LKC&g0U-l{E_IW=+1@Xp~o9UefTfsr6Bk*(6T#Y zqCdL44h~D1KW3-y(<{G0ZZS(R=0|ki0h_PlIc`(Q_PORRDgO?~lVYnN|1(^Bn8>$U zPKx@mc#o0H2Sgy<&rhOA`GvOas4E5hthr$qL$N2RLe!o5&O2nh>MC}0q>a=4I>c6v zs1iBVT7%ye)*KaA$PF@Mm4Mc@$oslYzoAF>lZBj`5WIchTH^-T+F-YC=HEsf$!*1Y z35O`4up3Vm)@TgvK8cFh$plTMwJ~#KYd$7fYty+;ufqr`J(FJ@HN^t@a5R1OvVg&# z^*eZyDWjV@UDmySV_sH`S#}+Z1!z(`R{i-nx$Af6JB{Ed{m{dGQ<`Zk2h@dq9uLbp zNNrlaGP<<*Jb@;LwIp?mRyH3uPtY)4L{zljVaqi0+Pu ztE)G<2Y2i~cTVQe=)}na-(u=i;NK#AeYbnG3zwgo0Gdm3|6(J$pPtuu`vkn&Af^tt zhf{3v@F_`WXfIwpqHKPxG^}n1p2s#8@UkMT<}jY1&2C$tEsHV{eD$Xuj)0bSA0T~ zpc-AXm7_Mtf1grpGf*Kb-Lv0O;4=B7N4>88Z0T-!<}r;r>(}a*?lJGFmhRupTam?S zJD*-*M7bxB2ZGZI0^eQH%?oeln7wwB&I73KydAOsD=(YRx`&uc)e!BF5iV5 zN5SReeFoP+2zhi)K-oUY&#MKPY-@%8yF-5yUGzT946v}x%9zT7$UMb8<`EDt_YaeX zY_^qy<1H8$MQ=7gBr@X%j$3G`@ZLV&#X$O#B@4_P^=u)_zvMS6%KFDI%nevf{9T3Y@qi;zLRH&fHP0##zYRpCgQ(N2=qwyum1$3yg*-SrdUXSUQ_cp;Gm6$4w z&r3A6qvNv~qY!XZ$qjfBRaZiloZp32BdjW9>bKX|9jg$LNq_V3jTK{Vbk7|kNO(>e zPYTPIOAKeofsn$ z`0QLFGPR?EGYpl9w^VVjelgPevIe?-GsC7YhH*!NLRRdiq!( zmK`f}q;XSbv7@inmB3q*lQexxRLec!atpvOVG5iTbcO#yVc^e~u6H@4;^@kDl~9eH zfG$vJIORTK>z9c;{Mo28mx;47d3wW4}7zm`@5jmS{% zl~qCbjxhToCFJP7$#XhhF4q3*RSX&w6O^NWb5pcTcZ;*F)$jytGZo%7=ga zBR=U*!LH!5`QCp%hFK5iNRInm5JfgK!BKSG^m+}Re5xLnAFHM;Sp395PNR;5x&-!wE_4sR#iYx?pBb& zdbfV@J8ts8-GUk~UDXHI=J2^t=N3Ic=kp!N|DD;#;PDTlAbVVzANE(h%W{mY4mfSF?Ie)pKf zO(Rv==xfohi0nFZ>Uc_nu)Z~KQ1G!Tg7{_7;FfhMznqYzO88ZY~sg= zlE+88WR($BnLTd847Wvhdj{3$@qO9{E!(CSl79-UfqRJO@uT0*0##ols|#7G+y$88 zZvW2ffdNU4SxA|66w{WX@%?!utAWU%fR~cZ>J%q`-j85Ja5Et7muBO2K^>d2=Rw}e za74lGyG=mgLVSSkda;jV=>AnacCL$Bq+DANjoDSQYTdWb{a~XD?bYs79cte75k8Cr zX!87kRJ{-p|oV?Wf0~_~>elCVK06bVB(;kAvHk90trqPq|9I^p2ohu7b>) zF8QZ|&X=}>J&i=*R!fxFtdK{TP4e(-cr{vGaPc=iQT+FWjJK$pQh-mRXj=5^euW7lDuP2>pcbS*s#} zsAv%Ia($rTNE++Pa7q#1r=yuBNY*j}X?)bF9_?+A$PEXFuI^^mVoW!dnZ8k~ezv33 zKrJ;tLaHh?r>fCw{>`y{1u|1Z?70^O>y7(SiIIxcus>vVf$_aANypZ-^xZ4y<|5>o zF?B_QLmzJ1!pv&Z64Iz*ZmVLCU%gJocRn1tsCV=Mgb=;v#DnCN)!q2KwgC6IUKSEz z58eK>iPF-iH>8UU)u`k1*|lCw;p__v1op*wb!dSR^6N^4_~l`-j4!D#HhZh9+-Pp< zm#NawuVwOZP5mjsVL;cVtN+PizQSzKW3BAkmedFnVr4R{bK}TaE z1c>YbFU=XZJ#sfgi(|wYdH!g{s(lw?W9_gRA9-?QlRkxlpkeDiG}l|2iVImNruwCQ z>BvASi|udt6;{f!up+t|^?&Yr1#M0EGf zka}v8MCe&`#I*HWLxW&uy57OW*kG7-aF^BO#bro*=mZ>YY{r5X6YblxOr78@vxAIg$KR>IVL3~0Nr{BARjVm47N=l85 z#32T%W8UaWKIa#$G#>EX^k<9>OG3p*(X?(2fe&$n_lINQ6nQyN2d%guD-;yI*cSxs zyZvzj5ix@gpN3P@PiUg4`GC)Cd#;=)0uVlj0zE={es3T9S?Xpsf&b>vA5&8^%9_F( zT|l}1gkcM_bLz}$+b9OJO7f^?Q9gDI=k$bIsH1z??Q%kGNkX?1{YCG}y(5wlY_Zlm z`WDbBxR-T{pCB=~!z=t=a0bM*54TH}P2c*sKBWROBH4mwn^Yt+NP?Ii)D~qHGZGJI zo4k}Vu6+Cm+Z=Jm2daL3)h(B=KhsUx#!J0PBAB+imGa(E&#X($T*iyV+A?XOJU)A? z`?$v#BQ&>*I*hHE8+1n9Q(u+rRo^3KAtLBYH|L*Ioyp(n8o7mE@?`712xkfvK-otwK{V1l77 z7|LRGdp375ws+`fGtB(Tvd!u(I<*kX(AeM4v&=Yu%5&kB7_q6dVU~a7;(@^&I`8uN zm{pUqXQ+v2!@66ax8?{f;(dA-K25{s^k}yW6fd~F->G&PjHD!1wBr-YL_3W+WpswQ zKRm@Y7cZyEOeR@kY8@RvKD(1Z-KN0|xbdK_{faI6%5~w_GNMDJs@2Z2)BMb~ywrE+ z^&B%;*7J`3TcOTu7juGa!nJt76&g}?X@*kG0ete5P(rwNIo>LCJMNE9yLssY^CNQ7 z;`4}F1S@9_f=-I;Lw^!YgUDGh8BN+Z{Q;Rz@0Z*thxt1RNV zNyB4tHP+RmJ^fP5%IcS5sbKr%hBW7F`1%}UwM69(?RHSSu#OsQt zz%DNTb!sW8Yzqb8wti!fs8Jk6vLm9A8)(Kt6bHey0py&89=-@nP|8^cQq87N*bR#6 zon{JD-jAfJN46Q0q1BytXpVi_f2g%NAAL7B2-oN7;Z4xx-c&f@i@pKrE~R%Vl6}jO zmzbyGE>PiC5y1mfgYy}wTw?|!L6;_CSJs$q)*81>-_LaHdY3*PhASHJV%8%${aT={ z3J9r?xJxzc%k69lD=r$(zbhf{uMv7eXyX`$EI=1|^_|lzAN#lE3hA4}14-ty#QuHW zHGnSnCZ6V!8IFa(501wTRp}!oLQ&jZv#NO{RK8o^s$a0uaj^koU@}@0wcV)PXC4wy zh~3ci+)_=mk=bH{b&zngyzS?)!;5=&BgmZ6RrN-mQL$Gkkpx`zO9VS6cJR@){ds1E z)U;h+S#Pc6nfECa#MQ@$@r$meKcBn@_SdEHsgz^0pQq6wK1M_|TbnqnX!E;WVTjpm z+`_9WiDWUm(i`%_kJ(o2j2`N=irX*t<|onmysb%x@eFTcHoKb$E_jZC4x4k#D)IYd zET_o?i9XQusH=Pza(<4eLMM$~q3lUC(EYCv`A)W>IxF zyl*MXQ9b$(kk7kwe^{O$CgQT5N}35`hTsE~ zU5^I6ij97=)mCsw9^s)V-_R9(8y&*$EK9mv)=!%DMo|Qb3h&JZS~;|9>fLd^xxu{C z9R?5T*8S;rR>Xg^P908dfmJg*P|yW6;<&!WP`AXO{2H$fh0Hh{=x^o|TXcP)Fank> z)kI92DhY+@R~|3;uW7xz{r=sQ{_Bu<6vJ&kNQUoM-5AR*ICW=Wp9V?mS}K{UV;?ZL zvV-J9H(ouk5C4f!+hA$wmL(Te#7&=KO8Xsgm%=J7)02H}mfc6P!YAhqtdDmoyD&>D z-1JYVzv>q2ev|2?K2L%PW8qYL%#Rn%ceUKWgS-Q`2|O%$5_|y9AY-@zLjr2>*GKoI z&;6DytJMVf`S~3sjDCKH&8BqGf9|G)o6XaQ{s~?9`Ill9pS;huWkiibe!^}YQwV(K ziBI0cl&Hm^A9cr=))$qW@e}X}L8u!jZ+!Trc~6G10SjQct4#_&zZ&B!Nh~N^@zatG z#A+W#qzzDt@RKr`NT{EzW$hnh z6JdWcO>=ujnocNOp)A!k(p~f-=O%j9ssVwbc?6kp7}5n#fHKAS4$lfge45BzALWNk z;U5!Iqm&enFW)v9kuPb*RAlY@_#Svv;V(Y)yCYevP|!K`v}h^fcePi36L|YZ`{w6e zL;V_daS0(XbQJESsP+p?h=hS7DJ&^Vq?&Hx*K@1Qs?Q8;&)(Wdwnxx&bx`h9e?bNmoHd8&i1)eR zDpZ%I?V$eX-m%v)1eth$$;loX$yfD|egjz~ZJYQ{aq$mpWJQ)C2irI>cF2yaH?^?! zv+L>-CxaNLdsnLP$=v~Uo?{Ad;-_p22{RmyXmFdHg?|va>i}YBl$XWo{k)|*zanvL zg|EkTv)Pd#P@OgH+a>UMDC`w=0^OyJ*|iKEUQyTiuSql^kl4=ee0o??YS!xX%Fig` zHY?R-xg&zoXZpE!b!U^!qJPkfqu-0Fx&K7`xZmB)eue%#{bv1f`88#QJ?8|4yg-GF zX2F)O7{4dCt+BaVM61J&5Y(4QijXu1sfUtL?yEx8PIognNt*XiGm|7-E^%;Sb7iN; zC-iL4-PoQ^V>f)onQ~OIULWZY_qprIW`xqc-%(N|7fsV|9hb%F*8J!^Vm4(J0zP*( z?Qk$y{(K`DlwDMaBe0EO!l#uUauwO>*j2uSY1>_ld_W*nE+|YCZAugDdRUXXeLrP{ zJ_b~zisp*9)1s?^F6L8mZCKdJ`t+uf=hFMcp`n^A5O1)#7Xp22cJSS#y$Q2l|tr+ zCZjS01>-|4vizCKR=`4wt!2ok?&;-quZ>a-_eAI{!AYD@@5@T!SC{}?XeXSp7!XjA%rV06@)$;l|UG_ zb9FzJpOWmZ>wJp-M!aMs9ryTNAM#(BhHyyap(?8HemK4I!HJmlprRklLB!nGq;cq@ z{mMZN|3=)<+#tmFi=LqVnEqxBgO}v~H2zjFIX|H_G(i?la@ptE61JsSvtPmzx}oUq z2hvH}yMocrKNA}mnqs1BeipTp0i9XY(zN&}7nNOrQEWE|_7#QF|fXT{2d3Q^8ORF)s+p>0QkueX&uZ z)iwu#aaD@L2xQb}Q8(sW7-t=-NudrVAW?X{Ppd}Q(+C0*6j!rd`vC)ArU}!D@ zdj6wxS#UWig80+4o(UvyKYfO;tlPQ>I*f{I`n|(+HuTy~lMrkx-yl5RefOc6iR@1s zDH%)R$`YE_)A|<_wwDZY1j61gx9_OIRHlFVQEX6wdg$R9T5hstNzb;KO6RHM4d|I) zZh~G2%rXBV+w7&Luppb5W23!x;M}P(kWb~7gq5s>rFln_ zQ8Op4?{tnEkHpxnhxG|OT8%QfF_ap@WXeATw~uu;o?UBV(cL>(?C8fqh540% z>|;GPm$Q=jgH!pif4|O@)h8DxrF(94z~Hq?^({~#!pbp~qx^ep`rL88vclf)7_IoL zvc0C--IoGLM;dGLx?LmcM{)PcI`!|jV25Q{Y%wv}uN_nnK*->9cv3io7YbD`Mo*+m zr}SPvR?U~GoI;oM*D2K7Y=qPSPbJW%axa@)YIZ|hYrEb7f8R?FT^Qm~iu!M++Mq%( zWDye9>XCgnV{@4(YS7Y)x?Ag-$!R`df(RWgzUE@~EI97Jfh2n?HS%GjbJAeeWK zg;HlyUFY{jaK++lO-(wz`lsO-2V|8mVa2W|pjQs~O#TWn8t?%5j(192iy_zX+Dk8@xD9tpCUbL!U~bn!+4gT3i)bb;NnLA-&woptrb*Rc4^{AuSY^0VxKof*Y*7zvtY?W zW)zly^1B0DczU38)HMW)F6~dSYqUxj{dsxthvjBL>7u%_56ghF5ToWic!t$mXpOq0 zuZ#gp=83paK}xr*&znq0U<>ChqT%Z;a-f87=b{;@Q zs5x%q)YgL8Bs^*0oTs0Tpz?K3IBATIdU)&Exs85=D1X$UVWE{0Y+ zkX5O(L+=6$Eo4fo;9$qufnhNwwtdJ47b!q|G&asLE63vh;MqH8(*B44YeY&Uv3Pw= zC#}$aIK7;U8LzJkEi7UUnf}A^TB!g0w8xO(JB4YYzA%2jv8U7lOztvH$-2Hy2*h}F zHRYez*NU@*ow1@TpejreeuB+1B!LPknGa(h%Zp9~Ir-ztB16HCC`_;e7)n+a)uimn zDa{diigp+N#tU->L3c!Z%*7e37Cn7oQGI+F_`{9>y|HAG2q;q~5-fRRb%TTD;jlk| zD0a(mL1uF67-)kpM(&S4cM&5|wTz$uIb_kI7>~8kIQ8+=!;dH@=yAcTSl5X@0i*km z{Y&{%Zf&JQ4Gy>y-{|;Arm^QI48~FfiLw}-->X4N-Q88dal?21T%FGmks{-VGOfa-l8MkSG=H2(8(JY&eFaA^0ViC{E9zb zV1iN6Hnu23`%9T{HulL}W8u%$H+3N@L>D>s0M1(}$t!4v+<22c^!AgRnvKn3eFLI9 zFrg1!6Q~jyg^blkNCvs?sPNz?T1ds~6CS7g9ZL3~NCT&3+9znNV+~%DnlJ{n)EY#M zv}VKX&!}uzeDC!ms-s{pV>-ls+pX@ef=dW`Gp`WQvnsSf=Xd@^2^0tLnKFT8)5!zg{}x&)#CI1~KuDRrIyVv0pZ zBs*F$CaUeUglB<;eB@bwPu^s~wL~4E5At7Y-eP9~@@H32(a^?$f89?Z!x*{*U#{qAz``IAtM)2pJFUpr zax#j}pZw{1;0S>_GbnsGUuLlRrvRvG9~tJis(9vMu9+ARg+b;iA)Af|D}hrHiI8^Q zb|H(R+6HncIthNglHa8a*lGH8V9#jU8n=w!V~-xqcjv7+RANzrN7#p0M!aGxW8z@# zFePOSxron~V@Tz2V;C!rfN;qP)y*tGiMfW4YWL--{t{wENJ-~MRu6R>g6i-Hju2Wg9v+22w5=XLs?DfVyK1-$*a5H`R8QaRAEj1< zzaZQcGIHLZCZWgZlwWYeQQ#r6OwhKkl4~$8(oinxs2gT-@d+-K67r`kB-AMhyuFcp zfv}|!TOuN7uu8@d3Ctzr`*!cY`a_lDEEO`SS%qDi+roAR*^*XtT9W5JJ*{VHN09`f=}$ zhpVeM#RnM06w}b^g(VAJm5R-d3hs=t;7-y5;-mq-f>CIA(*|#M0B0e{(e2e1!-e z=B5<_V)Pp!KP2_W&-{N|iY>GMn%a38{)@4mPYj@ovMJf9rcrQ2HjJ2ic-S4fH`45P z`iZga5O;fWU6B<%OoN5LkqMHKq}6s(l4G%ZWd6;bkQ0pmgOIWB-q1AD){42#lJ--j zjRkL?lwlor>zf-A*>tSL8#6Y^e;P7@X(Cc|4OC{ZVgs*WiJnYe@rRzbd;U)K)Y!G1 z|5`JMVfVu7X$!&M-`L+%jaaEoUw8dn9LLWkwEq2J&(9KsRMrMNmLCpspjih%&c4V_6xoljoV5MTHE0 z0~52J49YW!7u9sz2zGW^%0)L6q>(7;V?p zP{!tQD8G^)m~^Ibm5sP~Y0FzQo2D;0R+sY+5gb9)c5B`37el@~Lg1{03=rr!ndQ7` zFd_JZU?EJ{@Q=-NPYcv);kwu#P41CL>c_KuqHa7GND!5S7%`Cr-v{d&!%>!xQ@D&D z(UCu(aqiNYp$D_rr-Jri7Q|u24J)s@@Eu;aL6(=EKCoQ_kqoYXfa4(SeS{UE9|do) zK#{CY1KJDwPD_`Cps!F*Y$1Sv?E?@ThC3791nKoi7Rl<9kV3NSZx9?7hE~O_!p@o}+t7PoxLMI|~X}d#U>~Y~5BNHOa3xY*2L1YI#72aM=UYFuz z^rLThhXtjJLjeVah*^Tq z-#VWa>y*@k-qHNmngRxyO|boA^&NlNMsD$(#JqI=Y>mBU^dU&%v9*H+9PWp^6vdD( z09&Y6`HLw0EaFhJLorxicY7oeuda$Tml|05+2*@k8z`z&fn}yVVM)dYB%fX`zq~Zk zs^B+Le`TfihDry4b?8`fcYZ*25$YG{6+B+y6)>o*^Wtx~PZkwp{$90*hx6vxi@2$m z9K@_(edilTSE~~xQOVBrC8?Zndy85x5VC9*nJLN?+@zGqFpZ<8%#_ztw@kFbGkBJO zpMg9LUvurgWeCws%!>rQn8Dda49T{M2Q<#(;msGq>gwA#vWqTZZt&OzqT(YXUx@H# zDnFs2q*h~cSpynp(mFttE=Rpw;xl0#sD`0(-p%$1D6JO=E6HyiC2qjb4xlw^f;=Dx z>~I9fP0FAaK7e3mtN*ael9*7z+c{Kg+j^JHsX`Aba9ISJa{8c(BZ4M!bE>bQkKxx5 z13&A0BC&>|#T_5I(dtEFW%D0`4M0T9c?!ed8#W!`IVUrbzsk`mZix1P)1fuMdU3n# z_NV2b*Nm)S_=7`UbL$8nVWct?1T}pGWmwX1gk_4`#k1$_d`6CPSl*(z{P5I;1Vo&; zG9~*3#)cdjVc|7K8<+>kwIP0JhYLcgURDOm-=<3;({{2ylE?ggFDA}l5{E@#cVIjo zj9l(eH~{H2c%=~ztMgW=Rv*amI4YRoN7b;;%oOG6*;}AG$yakQvrLf~Q1F7mQ9Ca! zNu0ds_DUowg1@IkOF+o6PYfm-;2}{j3p(8EV6TeK-=Is_h40>o4DEM+ki zg^5aCUfIL`K}0a~tM|ATSpCATXz zGyo&ij7gc4nFe6nQ_`bf$%PbW%V(ck@~>ZqF|sTd>JLK+p2qak0@SR$iOD<0I+|k_ zHL8prLrhZ49w3KHoz`vO^O|Lq(ygLz4O5`8F&+RE%}v^`^XPAKq1(kgh05340B zOD_#yvbk3jll#*K(vU89z{m?vc7cpRz$iz~c(hzc<>x|0DS#FjR`dqYLv2%RxcX;) zd_SbKkRCGfMGQ;7z7D!$>|1iTL~mmoS(#=e3Km`z%%>C>$QnEBb$*EhUXs|{^&bYF zUX=21I@wpCECy|rd(7$q!LkkLW6nUaZA-m~)A0C{HK!q{>J8HG5bfvric*UB^Of^L z%jE3E8u|@gFyT_aC(}6iE5aGabysREEbC_y2RR(CKj*hyl!e}f{AnFP(@dgqo&nhy z6h-Wy=p*+Ed&50t_GuZC3$0FyTpi&2mr(72vfUD#_G;$;0#RX1Z>8EKg)ATFDt7RlG7L!sFrC-!(;yX!WX}}qM7AeUA zo{0D^A5hi);Fc2K3(21Kg8yy{cQXsXcl32U{A8-T^Z*DtrJV^W*gx1wImG35>XILWF=fEk6k741l$VsNkg>YYDB4gzb zp|c9JoUz4&d+m(`TO{P&L(mMh?G(!x;`=%JpgYYCDrK< zqht#BmJz%*FH`X9w7;WF=RzlQ)hJXtp*er(_1NlEC)ox zu?&4Y1Ux`J7uK~QOW`!s8^>1Z`Z`qoi?VEgvsJ?IaT*72XAxgO!;pMTaoUG4{S4m<^&*mWeC*-%*4&wqF-^QF4+RGIIXF8N>jpft5t&3Q8uPLMxm}-D z=hj0dosZnqf0xRwg&Nshb?ayj>35%`DP@#VZv|M{TO4>?| z`Z}Nuf29F^;BYT!db{2s{{u6Zf+%YpO!fvFSrM{0AiQHvQ4Qe>Jm&axgx_Fb4_(qt zLqQkHxOcaEEixAzE$tO(Des09JKDT$o<1~oX+)T_)|KwhtS6DK12#!D$_1eae{>L_)U#nA%xDxW2A0YzR_F&Yv=b*@qRde6d<6Ydo<4uYMq5$Yi4F0`swWR~ z_@KL`z>kpa^a;wZv;`q+sUv@2OxMkvgO{X^+Gdoq%{!}LFD%5~^(C$;D&P>OyF*Ty zWE0#SLi&if#FRPZE)Z~UxM|HjB20OY6wmpJ_?}IN<)iwID6z$Z><|!TTqc(ezz+6x zho=4EXT~xuTu}lvnNDGcex7a!S@2TYX%mgb>s2!kkhoxh zW*RvNZ+|{OU$*hMVQxwmf%<}TDzln!-c}K5lz`iiRzTQDi(tVvIV1=xor3kuooPUh zzvjSW@qaNVvLAMVoU^3e0V1O|#EGOsQ)0DMLLthF9{X{LLz29S-UyQ0G6t17C;EhpJxwa4q^ER`Ly1e?|&%ti7lB!}Pf8k@T;T2nUOJ z`11Gw^^Gv4R+)q4#uH-83k<+Rni-}ghhMwkRVFaz)=3i=(>IXjhZG%tX4}{1?h*MV zHsadu=2$cF=7ryb%lt*pgG-)Jsz%!k?^T)0-lB>jQb_5EEA97ykZ0`t0L~sPMM(EN zYLCy8lGV0}(Yd*ZXmXZwxP#K?ZWXYF(p*{4%fyK@vUwkR2h{OIScb&}g6rX^okbg_61i^V z$Gpv&9XDT0b|;l!pn;hvEYHEX-M*tTM3m=%73lSvd36CIz)NMW#5&+mnxHKT{+%{4 zQds{X(=NHPE+|);(Rk#^APDAm!^Jifl#9To7f?swY(X;Y8BH-X(p)jH^5qzEWt!NV zXm%%6jId$^b3!rBm6Sb$#7g>zF)1?3nr3GOx=e0E8h|i9egQu-R~&E=q;T?)-KgCi zLpdcFrko6?3P;Ug2K9-cDN?BbvzJ2WldMpj`?QBUf+5{tD`aP7TcY`4-6p8sPdmwI zR18RKHL|`VHSmp?C>E<@aj8_WR{BcDc!fEO8K@u7%p-an-d>DxKTTF| zzebTti*4da>p40Yujd{8w?abwPNHCPO=bEf7yHEvza((J5aGcPs-SQw8UwXQzGvih zsF=*ter_%LRuDD{cn~xy;zcR{uGy$ple_*%KtN@u_RqAWUr2{ z2(W(?_mDiSL_B_l7$<|F*-+zcM2KdIiD_hWXB#t4kj2HTon3GrvD@i6QV;2ts42(L zBHq(@w1ddteqA~PEtnivyjnri!pv1v2LiHDLPAZDY%v^|C4bit(FOI=^flBYkQBip zJmt8*LFYepZcl@wJ1btRC|r^kEE?yd*}7TCwn(u=y5(wNmSwy~BN)b_R=0=s$B&yQ zn)D)N>~yq3`sC#(feenQo?mh%PO0tYL*-p!L~%JMtY-Uk)R#1+$b?UQxr0(zTCk2` z5q86HuC5@AXc@ajK4eH#NOuWTa2R^jJ4;00*b}lGuKUB&zQ`4-L6A{_qImWeCmF}q znuKx9y(F|se^ZC$?M=75<7!f9Ev9ZT@6oX%)FIi7WyI4#)nC{WgF+aj#fU?it;Vu! z(qb1{^61;2V&Hv&yW66^t#~d=%J6^iK%;<>fk$l+MEH)HPdGh{LteA)f)MzoR!ol| zWkB`Uu!ZTOMjL2E*<>FybztSS>`&!^?1C9Legz^lUMbp_5W?GOeATViP~XzKpYt;m-)nrHh^NY;YFU`Uh1we&sRO_scNN&N+JrxN$H@4U;A@Uzt( zE`Lcatytn|tpOFu9+@q7)NE#nu1Z4v(;SzI3s91R&W1X#h_^K#D{8q^NHe$_j`dPW z0?TT7z|d4)R(4rxC~;&(Z4gMH=Z#_3Whexwz>^qS#O59Jn-du6biqMRXuJ;LkV?0R zt*%2i6~zvFsw5w;2JoP)qzCg?#??D!aDtZtyhb}E^`lNwS7Q$#ozNi1=m60-7%OZM zO414Urp_gN$kqyD5l^ZRD6To}RFxG?7_7OvnV6Rh+VO4P-H58(TzTdar{=%#2J!xE zqEty$I#+yKeFTz{0C9erja5T?QP2m6mUhE&qm|49;H?x)H8WcYUDUXUvZRtMaOC$J z?WI*cUR56A2>hh#1MP&!yqS_lAmyhPYbP~gXio_T?Wblcm~Jt9D>E$WJJKBSMGqAP zfu_t;8Oo@q;s50E>`+w-j2w%A64wjEBe+R0IaVHe3^YV11>Stk>QwHA5_dAI?K2K^ z{9xc=Plg{O2=buYRQU)Qa4dMGWa?3}T2fNqjTXwt>6&k-aG6#~bGG^#6921MCRcpn zh=ti?%<7;e4Y$*~O;>bfEvO?C@{2tJbGvXJB@&xkL^KtrfApc-A7`rTSmKukNyFEb zTh1_5i7pLfMyIMhFj<_65NrW=b8OgLX%p1&g2t5DSk;IrFz(RJxijipYw9ssw~YVD zr4W>j@@14jLskws9hQf;+!cc`SO8V~K?A*(L%b!U`687{lX)?K(13%AQ7vL2i%O}4 zeup`uNOJT!zI5kJi4aRoMd@p6?!JOZtPz~#E}@ru`jp5|Dfy| zxNpNVFnh{aN1_Qd$rA?0@N*)Im`EsLf5@!2_+HjGBOe0=D1tI5yDca}XvbOgP{DIa zpTg%xjI;(a))mKiOoeKS@i861A^3!(QeAgziw(OcBE-HZS>(XJR9k|AyTmv~W|IST zkMY%(zpBlE#}5k@L@u8Z>RJh?<_(h4g5|aOPDZ6AkT6) zr#?U2g&}({=axB6u*4S(;TEl+>~RLbj+@01N`@_fZDUz=6zDEwQex_ZLOce7(v?1N?%oRFkCUrpZak2H^OhCDo)@=HIV(7}*gOH817^pIJ| z*G96SVC_ZTzOr>oVwA@9`GM$y*@CdB(g+SU{DHi3ZaL)?uKpzMd--bC5kKETyV0w_ z`K~zUfj^ptg@vaXHb|XPA5aX?Uo7WY=dPNH8VQMf9I&{vh@z3bQT;tbrv1>HZ~z3p zGoz)}KvaK6bsKd_Mj`$WdAZ9U#Qa6D&tzGc-NHcl7+l9FPNy{U2?MU;lWO5Mct*Tx zsQv{TMT#n&QOjd5Y{{8ubzH5rn|=w}CWs004W3l~dF0!UNzLKz89Axlj`VWjROid^ z3*P+>%dbPAjpdr@*G_V*pp?R^$c)gUxC;giHM^j%ji@?x6Y(0y8%05D6K?1OUyU!G7g%A2Y;kCs46kC&Z;9I zprzH}d=OJOss@#-0y@%TY{*dw2AWZ_3GlNo2r=wf?rZ~5#QR~7Qatf8)kra5lV_=I zgmt6K=YHVP5QLO9YKr+~+6zvKqsDRStv5V7$ev7>;lf43^^DN}83vFB&g)uTX+K9w zK}{4^Z<(%mQHK)vc7;vS41P=V*Vfgryk*Nn3$tB9S65tej_lgDy_+06ikb-)moHwaXW45 zxJ7UN>H!z2teEFx!zr58a>x3*Lq+q3GY-h*59XI8_cuC6=Ktn(BvXGp=)e`U+Rbp7 zd0D=!`s|Iw1UClGACNr7GvG6cTq?xiP0Q2{U%bV2A&rIziuSkd1+!d&=AaqpKKfdm zXEQP@fER{Q38%||mv-pTeAU)1p>|G6}64C7(2 zfQ|NQR|Q9<1cYU?565=}_$}*keD`xcsEaE@ma>rn&LPsOz7=IN>iE&u+DM;rxzS?n zBiCBzMwy9V$i%BM>?**+C_0{niev>`H!8GI=1i(2+3+Y8L9E( zPP9qxQHgFaMI&0&N_3r~R5i4v`nXSp1cJ$>Y19c z4D2Q%ED*Wy`n_X^)eyZG7Jq5k=%ATQ=}FY2FoJ1wf!?xqYH9=3r&GcT!OVM_Hd5Ya z@-N}OrE~j{dLwRbB;l&Qn?XuoodTDHs5Nvp-=iQ3n)M*Lo>ar` z4n|=C2um{Dk@Of)(1@x#r2kW)6#Xu%HIx^*XymSpzm$s~`76LT;`dP3xVZ2{%^tv3 zOix{*3LZ)@Wtv_*q9{ghydM;mppvwtOHd45JxHLHFd8KM&r8=gPG3<{q~F6d4u*Cc zU{B6{A%1QQWX(gTAqV5&6fnw#)y{>OGR}LUt(h)abxH+XhdiJeVgkf+MB|4g>N4R> zur)Z#s;sJIF4GoFkNpEj1}(m^+Z?A*zSpn60_|fpG5)o3G`3jPH~1JsM1R!Y{&Lv` z=Clll@0~wXa6J*qQ83=%=2%ZBf9>lC#+k-kiRg>lR}EN`eeuYoH;LTb1PJHiQh zXNKh*7&EMAVXrZ1#X`QUYowYRLt(z4<20gMkT|gvi~ba-M1=Fr^5I^FfkgYRayo0~ z?Km5&q=H;kTl$^yy##$MNoUP*3A_TF%?zf9YN&TXfT=nBpiF1xowFi5<+Oh@WyVBC z173x{=W&AA+ogUGp{F7+{SGP&tGd7VDvVS6yOeL z&RhwBnyvdU{LfQub?$M&YRv9g;DzxJqJ5bmp6wErfK7#_%1UxxC{5Z-OTO>pEc7Q3 zC{)RRgEvp*sr;3Kl?8?t0!gqka=cK96h)MjxrQ%%_A)Q9=>3Y_S-L|kSmsj)ppQur z=DeWN@np>`XQdFC7DHNr+U)C5ojZwNbQML$-%y(DK;XznA3f|bFuX-avo7uZnCL?C zptHy1<^>88XbO5>L+0Qt+@i2MF9cO^LsfgMb05Xx0LM!T+KOZ0<{#f-{VR& zr{bAF4FllUxD|(L{ltcilvW2ntbDH=Wf^eGMV#E&)!u$1UI?@!Xe$LB zT@FlPcS$|g&>Y=TxG?9lvuPa{!KKlVK=V~th~$*lv9vuZK0VgS(5h{($9w@f-MP>&-!{SU{2p3MV_+H zLB{aFv25bFa5s-z>M96$CwEkyfhAhmbNz+GhWuD0w+s{y?kRf9?tA1`sg7BpWWyGf z&OqrWCDeXU4751{NyV6BNsNT_zvuGR?zB3rDPn?y4;d7Z3Gn{Og3brl z^W1v=+YmDi%};{y5PPxIb-PK(7XVUU1e$Gez(lPWv0C<<(+VOtcJr{sa_9|? zNRk<2(I;AGVCe8~sdj^eA*Bn$@x}V|%}S6r*#tUR z#27JpDmhje{l*alB&t7;_<=MV!X`m_lI?`Tc(ykxL`Qh5+#(%nfPgeQknFPxA}ag( zDrt$)Bn!iWVEl${QcUSO6Efwt0^@>N+B8H5B+XHddEu;J*ZoakNrn3@f6+yk!@%B> zx*elaC4pdz)MS?Uin0{@lI@V57V0qH%uLk@170)pGXkwHt}T}g2SkVfO;jH?;O^p@ zZs|K?vu;Tl!*waYZZ`wYwJ)Jr8Dm{-z+_ZZ|EWm4 zuI@_px7h1-JV`e;y+{?aWROA6<6Tv&4;MK~tSQNV;+$pAkoZnwXT~*<6&hyoMLmjc z*1Zpw)oHjZ@!nSBku!E#hp74qL^TRbX5OMb*nlC)WqO3CxbZg>R5Y7i_UEI$!>!HH_6*@8vwOUo(N8zZi zH4l`uKkDfpui9p=btNJDnef?MlMIpgK%^DV&r2whNVRWKH#oH6I}BYN)qsL$##~#M z>_gHBRM3I=b3dmrWq63~&Wf%hLiGiWG*TUc`{!;EmzdmLEyFW|aHjuYf2cvyfJ_L;B%M-lp(8FB%?V-P+B;|R`ZBsGi1=II%ecG&!JPK9GYm%h z_Id{Q%Ipd~vN#YRt#PLE6BPmd0*Vy4J99I6l=4$kYaaOBMC_xj;rH3cV=&b6VMRaV!z_5ZRAdTsb-b6 zmBd>YeWP^Az!?@Ma;vh~@_%@ifFvU4#_k?Af7su zo+YvG{XH={C=J7^4Z9jbW-Ax-;Z$0*U-9W^1eu;2 zi~t&Ms`fyAeT6$LgGOk6K;S5FmK}ghi`XDk#|bN+Fg)$Qqx(K^|u?74qgKm3Z7aib1Wd_#>o z_A{bnr9f0T{t$Jdf(Eli#WWe*HhV;3K+6^d89T2Qx}=5_98#`Ytk9zB3s%`ZX#zNT zew}1{kms3F`|aDjKs`FhXlPNm_=r;+5e}SFgtvNrO3BgBEg$xp(`>7^fl*5>de#Q{ znQ)7JQfo!k%qlp32#Q{{c`>&7j24=)j+rVVx6^us;B`qoZY_GI4kP!0z4IN#;Bl2n z`yNw{amQ-$fK`LK`-f-(=^M%R8RIm_>E0k{bb@KyZPvSc1%XY;(I89Y!kf(=K}LIM z${6M|1>P~1JHr+m4n#ylLemWIau@h6C!vu4iE0*1AA4xPR{96 z8Xk|EZa>$KxCKPYTz)a~>1pguuq!1(D{W!OARtjkgulmV@iY+*2=%iUZcDOVu0%%CLvxCq)3JzpN zmsDwWbFjlWl-f|NVr11~9^k&DJ>zbPFt36vw0SAti`@U9*q~ty+%_tp)7WUVq|pR( z3EYQ|m+@v+G>r}bTvs>FKG;_+FstwLf(DUYljk9T8v%E?k$dSPd*)_BvW<^zgtk1| z17raB>?BGJrk=5~Wc%Bk7z%uhof0&fx*#FOkeChE@+u69OqPNgOH4@o!TRKR zXd@*8-Jxgkl>P&rnY+T)tM&ns`3Vjze+dw(&2Hi(_C^Nzo#b&@@qrQRC9w9_SKV@{ zxl$QqqXt%F!wn!=bfVRuyFk%d(suUfXvwyhDvAn&$Hu$5J%yn~XR_5)DZqON?zAl4 zTip-ceP)J#=ogy~Qc!yg=2`*U1u#(thQ_N31kT6IEOu&2Gdx8ZZ49R6V^4F!_#lI# zA&CVGnwq8*NHq7$IRYF?{ieSvICjG)M(`8Ks#H-X1?vrh5NjA}?Z`9IvKVyp?HP3F z&62ufV+e6~kjg^~2t2S?a7H!g{$ z69cT2s?14#*FSyepD<-~zk5KR*1BVB&4&h`1tf}b9U&4+Jry8@i5tYe@f{Q7fu)+h zyWo~0_N8&JdW#oWCHsy^gttEHXywBR-5=)CwN_oTd7w$(Q*Sj*amlMf8!{o$YIVuV zjA%u-aQ10j0l8o&Ejh28zKtA%l7Obmr!{$h)~G{_N{C!Z7C@qU{yiFINXVY>x`JfJ zG`Uv{aC0onkN60VDM-p5fjO)+a(0E*r2H2gub3!ox_>B3d!UtvZYvp)m!P6<`a)Z} z#59Q_SXNjr2?S!5)2)JgOd~kJW=R|i54ga%`V)M0$(;}t^T-S1J3=MNk5paOC9mbp zlA?ul%M~wxLzSY8VBgCfF>%env6&pJchyKbK`yonr~D&tuRXl!27&deRN0U%ubvQ4 zUiLTSmd9-3G~Avt2=RuoaattF0BCG}r@(DpJ6lbfZ z8(wgtCY7uNU!6fkZR%3dnV;PHS|7gqNW6b?-rz{@CMP{~c3P>TmlE+ycA4;&)_CBo z@0gThj3KcOa)GgOn^0n`ANxnNv!DKHnD6%WF9IPXAEnG)Wi9A!D3(S7;M*CzJye@b zPp(;n)}JJSHh`UrwWJLxvb(SF4zcz?@$`J<#4Pw1M=$~a(WYhGRfwnX{&h0DDaJW} zh#t^v3%s+kae@@!yrSIBp>J0d95cijc)EEOBTNH8Q&g(acZDXDzNY#MJd8Tsw3UmY z_5ep3(J{591l@nlFw6D?dvfWb>aTcr{N7{cN4H*Z(pG9cAP2IP4fvu%gQe;+aAQ*c zeRxz-A73StUd_$XWxQlYsa7uv5g+=86(Z&&_omu7j9v^kqh^prm8A+yz^wvj+j5gK zDzg?1)HF_86H{|h>R8CjRUENpUdo`$h&o|b+KDLe_P7v!P6I~pab>I&4ba9kLm~Ba zhoMO}1F>yQ!m&`=oy{-;s-Ir{@9>^4F@$3`fBG{FFTP!dTs97dEdC0-pJJH59$qG> zvu$Di-@JSEZ@;@bz53r=%MW6y7%wmo9>wRZ3;*1;@bJFF@jFb?&;@_tTF|2LI!^Ny zx{$oR)pdXDT9-Cj@itmk7x}4ckwGw`*@Le1hvrJ?V}l_V%f&CE68-C7D0RW_IDr~V zc%W)uvjk;$dcbemowDc=wg57T8tnsEO6Mn zzl><|uiT4TbZ*)~T)?2a{uB2D64xn*%g#~S|Gd?JI73PbuKx6>tNkzTyYP*MamXNDjDyQiS)dM34#gvM@6nK?5C=N7pO%C9WvkM z&rDDnOmvI(ggap82_A5$9cKWsW~TqrT&rfLbYzR63@8qI?7wy`Zezb4uw;Wt*Z*yj zSFJ^Mzj%99s(_n4u?EqKa9f`*o3qE9iP_3DbI<9Qac zpmb+{>)zQV-cELX?TXW<{B!qH5I`wXKuMp~Rs5&UXeLIZ@|FIzdq4H52U8ZL`bhWs zKbcQ3ctzZ5@Osv4;?K=xEH+VZl%$xtcY^5x`$#wEQ+fk!Ri4IX)sUaA>)P~U92&O_ z|1mL1n>+rE``8hD>alA53QSVTrJ%d@X`KcX6s$Q${U-J5{Q>oMJH7hX=zV|u*&2;Y zLAl6KLg&Pj_4?0IG;)0{ALbY2gGVmhv3&JYtj+J7Uj26^?+xZd`0p=~$2?yltR=hn z7l8XF*ma@U`DbeI!BrlNN2)pdi{0j_{DZ`7>pyr+Is;m5y9Aytt=I5ByYE_fqdIVs zCx=EK>vDd}wx*at*DR@Ry1Y%-7C}~a9kMSm9aoq6p?PS7Qa1bTY=2*~1z7G*^SwT# zI*b*E^|clXS`A%v)3*L&oxPSi%fn%RfPC0R0Q{x<1hoZVMo)sjO85BQYZh;`Y+I1GiL-ITw;5SaS`(DOm9? zB4-Xj>z;h3AVGbQX^W&Gxr~^&F6{FRz;oe9y5#_v07D<(Q^oOsvA}QUZn9O|7C(Ls z%RLQfsjuemO)RrmYoqYcUA@E|zuqCq0{V#p<{z7iMURr5(@|84-=L42Uj314vt$;v z{%Pt=qEGZQ#8DIP2AbB*{!x0f>*BUGYTOI!p*QH8bnI_1q0Kbc|H5@-V2vFzi+MZ3 zZgi7wHGq5d)mZayyt}%9%c(03alp_hAPSb3>r<*)G^z$+kwV}{<`Il*(v;g825yF7 z-;4$`V}Zs8m?byRRN@ZZ3}Y--xR^z(_pO()PAkxt8FMxRvRFr3nVxKGpKeDqJ)B6W zcluSl(*b3P5a4UBsQsEsw3LL7) z)4}`20(y7M=%}iAb$^M$4xl19O=cw5D!UI8i7M(0fI2!zRb0BMXGf?k4j`)I8(s9} z2EbTbdwGgJ59fs2nY~DlhQtZb){eTDcf{Kt&djHgvo%@ z<=(nac+rm1!~tZqg|<7C!J&^yEHXc|A@*?f)D)wZdOj4=uuIITi-DNt*#lq`iEgX7`c* zd~29PY1_L0<+lZX(!{hAwm!_}O_o9_iFeZ{=x`~_=GQg`)VI_ESO&rC&fHemC3^?r z0Fq6YP0qcX8IK$o-oD%Oaf%6XZ*&cx77h$+YaP%QL09<>8(+UlCiidA4P9T;Sjg+^ z()^yyadVj`E3eTPs53TQ}q< zL6HD`( zx`~e;V?K0KZKjgyclNYs3bG>R5~eCEw0@s_>4;yDSMO_B;D}z#LLvsmDE{5)mEV#r zF))m3*N50l%DP+iSc{LAtvTuiQaNq!TtFhisOh+gZm3osV&XB89DXm>8ubjx?LUAO zi{(v^x`hlOY>#7o>_H_XWUs$|ts8KwEF*3wieUA}r`?=O4|HjtuLm0i_GBh^w6$~e z^@m?TzA5?$t&}L*P+j1~m*jqe);*;yy88(-`5&*r*8Is85dC95)B( zHxOBY+3@)t47(5_jymwC0KrZQ<1Q9glZ3Qx1#PHLPT7!AVQb4p0||s7Qr}0O_*P?r zk47^SEZLIUUmI~N-Pi2JZ0Ukk6w5#KNxo1CNOnx~Ma98#M;YB!s-2J35b6>!fPp?@ z01eeYW3G%4?Uv`?fMIZHm+srIKs0f!tUdx=ox3fH49PIim3<1gp|^&ppswI1#ThGWGC=;VJ#*w;T>J!}h37X%A!O1ns`na`m(9rU{4BPq>zf@P1pL)+KCM)^; zE%KIVX#4yF1cy5Lz|0sa@-y8Grl~rpZ|jc*p(HidNY9#pZ)Gm$pJ^r!^o-p7{Qb{Q zuiV?>7$#YJ1My3nS_}>fD#w*`)1O9F_IZJ9IckfL8Iq#zXY0d4$;Cc$twd!EIxFxl zwH!ZlZdgxdriwQObH_j^HoGW1(~yc=daA7vRAl77(*P(LqoIKFCv&EZ^E~-H=rX#P&w~wV zYb2qt0m2RbbUj~;f?!^mFDh1`&p-z1a>+qAV4H~5xA>Z4tT|huL^OX$-`3f)?wAzj z(pG)CJztg>pqH!cFfNk*{-UBk`#Oklp-FH%2Hm005swA!oPn6l5t(bM80qx4NKT*cCe#4w&bs z`t|GqxdC*@<{EV=zTscF;$3atH{=xQ7J7Q0LU#e}V!($N*R{X3s7wxYKOPs?hd}gt zKBfOK3u_INreb%!iyR5fo<;dAHuL?zSQWSpaWI9ot^OFQfLiClrVe@2wMyW(b&4Dq zP4o0DZV^NLre4 zNQR$=|0&e13;YiIej#UniMC*e6Dm|_@BeUm^~Q~HF^fkR^<~Hqvf8=?L-b3L6uPS4 zgIwEsnrKef)7_sUvst*0*jx`;bSc4BOE1fJ!+a~<{U5rYrF?`Y#33d=3g6yL3%UR5f@f_J=OSSPK=$ ztHw*=hwk&u{s#hAV})|Y`3|^EHZT0d1tza&o4+ftauz` zjHoBv{1Ebfet3F-0v;OJ>C!&*ZkC>~x6XH8P1>W&*(gdK0|FLP}YvRn1N^ zb4M2WdEwBhtu43f)-WcMJ28k$H2vxi_qjy!IXR#k8PUVx$Ob$Lp?_wc829o#qrp(R z^q!?rZ;BTQ-gz|CpsU#v?26fWv3RN}>s$0i#%vFtZozEIWGAGCl@wuT(i$gEwnf#S z#c!SrlWXWzs+ZwAB@t=GqttByx-b2QhKso|Ae$rcFg1SxLnzYS~*KvEhrYWzk z>9fqR&pe$+JM}|`JjSvbpGrG0qA--|ucPDV`&oLBGOE+7|0W#mfM&rb>eaI zt5C*)Od@YoV+80a#H{dn>sE0p)VS2O@%VIvsMW{#gQ3mUMy?}VrgRS5Dw;uU#B3is zn5}4rSkapgN9b}$(nJsPamu;k-DBi>zGLEo93mpjF;w{Zu8G9MrTq1;%Ijz1^b|g&kN_=KVG7zB3BXB1_=AYV1Hv7E(JJ{Y&%^H#u}vQI zn-`0}_MH9(VH??G|IbjSU#-CbrinPwt@CtP&yQ32NsaE%`d-24lMh(2O{_3saReM-_< zbM?pCX~j}#BBL&1yLAlS#;mzpVcy8TKi2HcFZ~T)jGcnwHyIm*A%C@+-lgK?^TG`> zpXkiLg%Q44M_-Ts_ybfPR4Mp1l2PXOY8VjZL%-Nn_*^l(oS!kJK58*G2^ly=iY<%U zFKUGHv2k3KL(1iD%w&rXuyLt0A2jlOXz7xYsmROD2QwfhRH*t&4K+99)w_x=;q@B6 z8arZu1Gt%a5Q*k z+bJbk(>&d@j}ckeS+?EG`fd8N3~IKaSgIDDzDDNd1KJ%$k?V7M5XQAnFz4Ck@k%@3 z;E9SIR*_)LdHmQvI3bL!);?qknnpA5i8ZLdI7%=?eX=_eP=8twEH3ckfH z0VBQURf1{jdBQ|p+=nID`H1bEHy*XKFKZD%sX^q{4qokPa&YUee2n43uF#0&jV|cJ zPAoVkQA97&HGQtEhQOvt@r?5JYk$x^Eo7L zu05tGP=c@oCUoyUcQ=VluI9rGIyCfJo{H#@KMZHtOKA5OY1Y4z2$3vKa9s7U`t@M{ zCVF)hyzll?tG^UYMaVLpUhx9QF=AG6}J z&QS;{M#S)O@1?kZp6*C_C zTbi;Oxu(zJ!*ec}`HLs$4fGI&f)6VQeQoVbgn319&t~$$k2IAObCg&{sF*PYnju?=pvDCju#rDj_-6j^)MvBf`#bge4=EW ziI&kVKZGiL9G-c|)vvl`zmZ)(;KNaI9;l+OO6IAjLt z-@5imq-RmaE{s8mlo6~{3_}Hl@LzPJe#h6%h9sS)kU z-y`?_L^-AoWRcn*zoZ%`jPnE47~@^U#% z>nVQ-Yvh`2(_^pyi-q@0@{RWSP#@eK1R^=7^` zJUiZ`8A?8$Lq|^~E@k=r`}OP`S(qK0seLg}&otWbh%vmBVEtxVj^6bdu(U7R&W!y_ zq0_)7PdbC&{~~D9ux&N4O2h6M(x&WEHKOQeQ>T3{bfTxaXkfPq#SQD%U&Z7=pAwVd zdxC*BTtm&<3FAUj!l6%zp$!tRF#DB}p5MV|i{OpYfG-P_c4}z3DLJ{kDxa%t^!Utl zb(eogoSV{3c=T!r0*C+N_`i|rQ>qNHDY!eP0;{*+ZGL!7nLj zm=g8lf^s_{Aq%DNDeuqqX|~{?m!#USkGEH}7&8~{9%EjB?aHc!1T92#6}>j(uE<8m z_^6l|jt;ycgB`?!%GT5LPw@NC`FFkQe-`!20i#?E&CCjSM-d$^=TIcpW%(06<~NRe zI-x1%7x@IMS`}zienbp?xtpWVgK2S+y_cICJ^?_tYBMnQn~7sMI!KH8^+hqP9a*t(#PgASW3!(P9qKDqs#k@RuiO~}BX zt#=C$-s7xrg4zt!APQ_4-uhz)neosxj&!?tu@P$d)hzJ$kzwWz28)k3qL;v*+P6@& zA#_BK4$1QGv157|5<_8ny*Hoq5B5gtWT!?eP0;M9jV%wqGA7X2hM@sy74aEwtohEf zmG07B-L7d|Z$)4}gu?OjEb{q&v7CdkWaSWkdTNX!H3&)-+wXhA9Uz6c29{6s4GR#m8wUYRW%#k2dbs zs~CIKt!1%qAMOs28P*B8K^5-$gag*R5Tb5oL;74#Sa>WkDrR;`mnLwilsoqF0;O^1 zTsA<`PXMEhoLB%TO8A1=fDBG+Mt@iP6Lj!s9Qjqgk&sTX`ibA`E`3am5Vs!O2vZ@O zTI@4{a|0ns+sC_Tt@zz=jg&K#7)~wccpf|kdS*W)ZPhO8{+dNV{E#I0XNDG%{Ew$p z;ANZZ7AvuLmle2u?$#OZ7W?g#{=0fUkVwR>`tuRJop)a6Xc^EJ7A4<%mOUZD=N4-QBBh+?xj$+1la9XcH>`d>^S|IzRgduSz z?L?E(l)h9%Y7;D3dr|6qmoGlBS)MBn&Z$64*HWa;{T>$F&3BDXLw9wm>s)Fkbw zpT&EmkReR+(oNalHWc`vY`4?JrVu^;BiVMlK%zSZnQ-&H-z;|Q_>(s?SC0<*^K?}0M<6YrwYQmLkEwRf@1bbpshz7Umi1E zYXfvO`KBT5|22kJ+#<;q<+OSVpHsu4wYW5!oiVGgqeLNH-Y@rstCg7$aGZxCq7+i~ zaeg){hDMil$;#7x`t&FZ3{7T2A%T6{rFCrv%+!abTP5rDIeZ%^OpKZ73IW>@U{D*+ z^BBnExp_HJSTQ^dwcmAf41U^gyVdszvgEIZJ&|8RJv zkoA+V&_IfSOZPh3r#-gXXLk|=xIfF?RDOO~_NW`tE&4Mvnk}kN?ym1+AjKcOljRtC z;s3W7Cl{?S+ih%#$dCQwBcjTG8j57T{)Haw*>+6HfA|#=L3KT!*#Y!OEM}U1g(LJ9 z5w62iw?Azn%K7o5cJLXz2cG9Vh1qu#B>C!84mjeckI5|eGqNEc(W1vJ5Kwc`Vb+&w z67ctddQeRmQ$$39k&~lZFUNP-X0eENF>dJ>?e&c`KDYi%_2lF#q8=8|RLb#q?!r4M z@;Z)=a=xh0*7hE3Qc4LyGk5n!xB`%-Y*MDcKn0-N6uP6xK&`I%Dq2BgVpwnsmgPac z(jYS#0=y`q-ks83E}hLE)-aJ0%_p0kIzSSf43FRHH@% z4=XrsUy|8JaWKSSrt-53b=~;?0qu+6m1qkHT43G(#MkFr)DPv0Hnt z(DSrTyGr#wd8FJ>s8_N0MVW=1sN0ye#h&Onij=Q z2X}a=S%l>gHG99IP-{l10x&CY_*DO7mSqICa@rqH=bIaa#j|z)WOu1iLxyM6)BVB& zdm-P$X1|^7?@^&nKXg}1H;va2Y;;Q`Hp4(XbfF+(xuJ~1`Ef~^gZi+v<$(YIcDgv@ zwEJCCO`dc^Uta2f7%1Fl2lOZ3-ypq5H|SeBaGFb*?8+5%>A!UW+TJxm)Q;wam@4+8 zPjSoI$+7NSz#R;9p>KgVzSgyUg{&?pE6#BvCVha9EfB0*S2kkE;EjbJJH@Roh%mzc zZEHaIvkYq*YbX=`P-&z)^~>-PdB}(8 zi1X;Weu^E?T2ou}+NWC-^hF zY*1#>k8*4=4QYoKLwZr)AklLrH1HK;rc+|9FH-}`P#yzIZDo)1WIy`2sOCkW!FkMy z!0)-n=BLlbtdH>w4V4u0%6w>l*@giBoZoYcK)ooRpt87g7TZ+LlD*Z<`|UEC`F{P_ zMz)YTRfQpZj+z(jJS!UX5s9sG*ByZ=x)?HDBA4_NwQ$MOKg>Lr5|+Qv+w^%f6_r06 z(b_B`b9j}bbJE{(L1_6aWP9u$g_3oD8p7zt@ZCG9Km&?km(?8D zp>ONnRT8pKF8mJ{@j8qrDJX$K5rrBi41zI4{gr$8F|{VuM`?2ZNNOcg(b0|Q z2=9FV)Y$MoQD&){<}>nelYje-_@(e~U=e`W4S0>#`fRBuPmXYYL1wb-Z9hNkyUiL- znbcd_9j^%P^I9|XXTK}8;_^;UqO!tF-RxuTlP@{0Pb>OHXNhE*i@Vy^^S%X-^_T598)E z0H^5@4v6s<8N*-clF#r9R34J1Vb5lW$TPJr{%T!fby`O7bc5KJcJxak-vjo3RZ$nlxQ|KXVEQEWj z4Q8LUL$p&z_o=db5=J;q_w@T$T`|wmuND^^Ewnj(6WW}<31TOyNB>21rK24OMQ4vc zxL-aU;a7k4oztuD70tE&9Ci!-@ZHtvm0wobaE$B>#t_m6Fri|tgyl0VET&*9g~(XW z^3#1$Et{>;`nLCR^^iK=`$&QIFLE%HDU%7mqcGNl6EVIBw^1euj$;}pDhtJU!bW2B2amK$@f3^j<_AZVz8|j<&%NuWJhO?=Ryp+2lQ0;FBob15ovuB< z>hJ#h(<@&pi3`2&`ok9SA|gs~Bp4-;W!RK$nK{F1%R8j(#9*yYgwd`=#b zGnHoO2d5|XNBJ6(vQqfa_(E6yOMCiJpyy$NW=Yy(<>KYNpRk( z(er2AR}dZU1xNZP_iVubjL~|6zjj;FmytKvxTP}uIP43jI|XbhgC|p^85MRNEekY-L~HcT%ekG)ku?s zLpi!SUcTcCD)n(2*@i#isMzu3W{&tZ{a4w{FW>W^N*G8xFVON!Blk__;fFtT^9xjO zK)aqI8w8oaMe}1j&TOdHyu&aF1gbA3HPuSCU;LQFb^MT-5&qjA)D2Kh+sAaZ&m*V? zG%Qi7(aHX_Ug*fh+^uMaJ2HCHoDkeQMRb?>B3pan=shmwhyz9awXhse`OsLDap^Y!b z9Vh>pfPH_cY3kY1wJhPu@?m~x0^ZscxJ27S{8N2}oJ7wD51`KgD*g*Vp0Y)58+K^@rOf&C~MNg4A(BorRt9eDB^zmD+cgguRwSd3v5l+xefw zyR^9(AN4=_KWnCTeJ$^huFFR^W>fGVzGibXGQ{g^?V4HqomT>$>8Qo)YlL5@2b>o6 zUtb@1mQwlzu#N{a22R84{c?Fk706LP^e6knU*e+pZ$Gy_UkzxAkI8miRb*XXlj!~l zQg|^x^>~e3{u`=1xxR)_-SLDteSA2@K=Lji5rbjB(3-P!Yyq5{ig(FS5;)KcFOq4n zB|S0bv!u835R2_DtF3fcsP)jlJaqNXB7Wsey5$v&XW#k%VB4CdbJy3yTEq1<2QQW5 zU0;Xn-y{5C(Fb^aZ6*y~Uq_p>$ViEglb$VUX>71)e29lh2L{ro(&sp9IK3_+(s6n9 zPp8kNe#_}SkQzJ(sLO#nWuD%Ss(5-!_d)Gz1F&y z^bS`Q!n1>vg);{3rN7i;?}!xMFL&I#yZJQ#O<0JrSnMkaTI^@D^{ESEf7zp!9x6CN ze@k!XFbI|C=}$qVrI*rXKD|L4oa#S#MpSygikyH#p@+Z^j;zM?AwJUw12*T~3=QWO z7}H8BJ=!>>FQw_>={;VElH$!8K z)0+xMvenU|y2;uC=5xnasd>G=rpQ%)eA>w)kn0fsS1a>clV_^(rVBsQXefyr|$CM~C+C2n`z z_c`)XbF=h8AyX90+=5kDx085x`c^1pN-w3AKzbvk_@(#a0n%Gr!iQkurT31z9ws~b z*QU2NYYesvf#HM*_+nE05{oS6&q0Qs*PBI$QGIBUI>7a%{xm%;ImL_jFccf}s)OGy z?jj{`R94UR^=^5;U!C$(FwxOX852_(wMnj}hXSR*2anxmkNKz6g|+xA2f1I+T*W=(4KG1=v96K$ldn>vVUte<{rS!26$HnIJ zyYyN?mt~B^eM)Ia`mj(w6**;qlXrq(nol!LBf}v* zM#p%kcSP!;3B|JCHt5U9O4tr3b@Kp0<=qKdV)MsL-+?DRJy4FHqnF;r2I;DA(kDgT zOK&LfjYh|~YSNa{XRAse=wD&jSNZ@Q3Zb*mL?T`xD&%Jf_oPofflzY|M+8_owCeg= z7O=Z9Kx>~}RqUd zAbq5j5OSjuT~4s0`nJ=@^jba_sJA!_?;3Jvf5x^cOSM$_-1_MYtA0Bt%OSm! z63WwiO1{MA)4NKnh3cxTzx^1FyE~HlR!|$B-Qmj6TqI-N3<#3u4H)=OV5Z2RZT_e` zN)E$p8=&&;p+Bv%x3V#C*ViDm&+oE(1!AC0{zDUUvX{?LdnW(j!1OPHT$>4&zj2%6xmw~q>@uIw! z3R$kYls_WJqM$n><#KUG59F!5akrnvWDQ@U0(tFA>vD#ft1?%%{hl-!M4v2YrrPbpPtVbPR8{o#xxPeG?ky+f%iwc;xy^5f7b8% z+hxeFZar_mZfsj!!57yg%x+Wuk@*9JiY+<$C0q#m-LHUb+n6ZojwO_gUbkoypK(ZK zYo!UL%X|~4Ay$qq`6D;@D{D&^@JFa>A3x4G#XpQJBlZ^~8NNK6VGbkZRkOo-al1rk zyi~LL{}cB%J(6bGd01H@XDE5f!;HVPHu@E&;DME8XXwYzdZ|JFZ1jodCJ-@R z=9H)y9L}`_>Yb(zUP88|QDQtVC)pCkP;vSaR2dKUz~4jS3k-qBy5=vIYX>qa@XHj1 zg9y_kRPa45=*9YdO+ep4WSAJRokC0jQgCJ4Ow;Tkus+N>1s^8E0T5>U2^Wj)5bg!u zv{hpQf&^Kxy>?9N29`CFIc&kWHd8iE5n}ms(j<5ykyx{dYi;lG-GIyyRp+@iD^cP#w%`G(VEa(Rh_-+)dK@k1IUu%( zpDgJtQruAuCHT0Wts5@&XqcoX?O7zqYUb z2Exy;eAe>zS}^Hp`OzNPC**z^+;(ln6M(t}lxBPH*v3CnW(uNTjjrev7WDNS5x=ZTM|sOFFByHdT|Sj{qgSVo80hn zYS88ccp$<9ig(%CzWQ;L;sBzy6=Fn5O6cH`=f}$#qyMENXv|F9M^tZ63~&eI+BO&? z)q};_W_|kR)V?EL)70C07JfG(u-AwHWxkI)O@+f6W|Iz4(icRFv;}E>ZM%=#z3{3T z&Z2kCzX5ilSsaoeY^DDq#1CNECK+kkykf^1)Lp~mRlU_Tp)WYth~OF~p!KpV?7;2t zMpV)t_~0bn9DhWEJm3@0aKY~TAuE`3mfy9bEfTwSDI88^2p0yl0yOsJ1Pa%u)< zwk=ShR2rVegdFKe!gQO}1vvkk+jK3{l2B)xjjaa~7z0yP5!-q{rVD?Rk`aE63WQqa z{Chv$zKVU{&coSUE!QjizL@ok{r5TIC5mZF#kb~Ld1y_yUEYioy*yzi`Z(uP0-&nDX3dbuvlBgkF+@qlJY~` zbSYaa_IwnwedLoBbg5C+agNc)M3nP z+F|<5j{55rjm7Mol(kXZugSG76xZ}--%HloG-+8@57&wY{@_V>ee1<0aVB~AYKT!2lZzRHJfmnf2NDdBSaMhF z%{bK5GcNLtV7boDB$?e>-8FC8vBq<_vMM&D0j8~W=RpU!nj+)KTT9!iZe@1+fT6R) z!14Q#QsdR_^*&A2NGMJd+U-PQcn-ftbFl%mA{}U&e7q0o)nsvxa;^*-`cyY6&WA-$ zwz+?|vPHEH{=eJ4ib1+QEiyow^NJh=ALC+Sm|Q+lg{meA=(hdGtx{z_H`sKZqm}b8 zO$^AFu5&6(Gb+ySRKwSiKWBSC;3T}Ejfz~^Y6W?$0k~eCkqw@XBz-^iE~qO?bmkjA&wM$eg*$;vsgKozs=N zg57}QLDXk@11LT!`Auhmuql} zl1WMF1oXlj0}d9EP?$t0%fIK~3u@GEn&|_+tahxk9Q^J}E$m_91sDBQj^Y)}@wVk- zb{;83C8JhSN-D%Oy-3~pn7gon=q=VwJSto%tQ2yDBXHz(>U^R9*3Zhty*}xnfT!)N z&+u)F`wcw(4S_clNp7G2=?vW_k;I0s+CTb_|KJt=?+33w{>rOY`0v#({~y~|{snvT zsCqUkV}gz;d1CwOmtP-!d4%q*v7ofauBFy`XXS?+gGub zz4N6vXL3+HyX%KpI@9B$pKM>n6Ww~|94suQU|jmEBU#$l1>hQoWSi+~GvB_aV~u5hhA()1 zBv%$QTSMHuxQDo)sDO|ZuKNzk9K^~8g}qS<`#uyn3T&%Q$6OMJ8<4e&LJzEz*}=bl zN9welF|foB6Gwq2eP_#AqeK|{nr+?E(J_|04-1u!#F1fm{en?ahnDdc9i1k^owV<=z~DxT1&}Z>e{aU5r7(k6ixv=q+uCm_g#n7zxR&H{v|} z_+M^c#mqJs3V1>eXV%;&1w^L$a-v1i#kNYDh1Kv~+9Far_v8N|x}->jT{)<<9k@}I zH7}1AR$i0QU-cF`gg?mlyoKC(8?{hy=1n4EmzIdORl-Qh(I;=HA^e1Xha0_q3pj~i zIuR2h7FZMNm3AT)4Oa}?USggUo6>>|0g;Q~r7D9Sj%C`&^>xFUM)j~HFrDx+Rk*+W zG6&xweUVs_lEePh_xxp8Vuj7EH-w}LvU%S!n!U0gnI^XD%wCW~uH zx#y9_Bp->eiPKwUV)G{ApMVk+-~bK2gLQ=G@Xx|w$C6Z#^JL{nPmfM2$X1+!I_(r1W5RqtNhzTzRVWP1k$`zeK`s4pKDu!c_aH=}h)8>`IBF2Bw6u14# zj%ywRgoryrShLQB+Ma7)C#fAlV%7H5uYstJ-X7aQ`;Ml=t_CwV?TWD8FF^=Gz5VSH zWEGbbgWA$NpKli1&wr2P^n2S^{}zDD2b1G7FIG=O|1u^8I#SXIk4|a9#sBCvEW6_` zzcNblC7(k{JNqMHVZrkt_~KzVl>y_(t%3kQ1X_kY1F#5FL2==lRyS=U3W*zG=M;?M z(#1jtH6`2ui=83;0Rani%AMwRxpp34v6ury<*nz@2Ax>1j4g_seHT4l5P^RJ>&4{~ zlJ9wgPBInZlvHdXQqcbx zoa9h_+t`@LMWg)~rcNxDh2z@i8f8zErdev3r`G~7?U2q^VVr?t9bfUwbn<|$`Q_x! zVf0;{xdx8|bQxZwZ(_$apegyJF<)zxwpsEEPQ)o{72HR(k-h-hp`JwI@mN|8zGPRp zVSbjRKK%O_QBr2~80yt*N?()O1L%e?hkF}u^x@SGRl*T|emTHrfRq6Q_Ig4Sy&|00 zSyl|`rZ`FDf=-zbL43_I_YsjNWNpZ~{;MbwjdN{LqYM|NOi1B-7>O{(ebcMIC_Z!_ z4OVsbt0zFlvLzSO>ZG3<2$|L|a3hL__=`E5thvir-M)%f zKlN4>)BlYswN_K|p}BEMX#k`9%^|$wyhg}u%0DzNfmMEpJ9&3>jAdd1c%ZwEy7}5n zRjtQ>;o9j?fhc_{>i0SLf}$LgA&KWsx-lk2NCCYu#9+@+HLm{n`2D4sM)AabB?HgQ zPz3N)2mp`%a?o7|yBH1VORNvDpq4$i;gG)l-O858h}n1fCrP2Ob2z~M{yl;t6O$mF;wy+ zBB5U%{n=0d$xr|A=cq=FNmCM<`5S0ZyI4QZF#sCH1Pm`Qt%~=g&PUu78EJjXwN4OH zg);pf$~Tb2CKJn+Xs6C^qTB``;-~96Y5*)z_rb>!u$v%fL7@l7R$3`5sn;wp6<3C` zHAb73%9_*jaxQCrM15fAj7CV$3Vj?kOB^HAB)q~UITtC0{8Udo3`T0R6e7{!=whBEIN<+`swWD# zq3?xMPNu~n3d|n(@~Z2}g6lIE%-2uOajSjnwb861f#4*uEMBf&t84_jfa)!o=Ecj^ z1cjKasqSKjZ6Ix(K7(x#Lr(m|_Z{EMM_jW|_#bRv#pCe3?O7d!cQy%zEr$~e$Bmg| zRt`;Bq*Dm_1O%)8j!Z8A%EB?{(4`2}Y+oJy(exLbjDSV~=ZjxFEVl1w4-dac;m2S6 z?5BVJ{ttilvtLMp!Y}yA?W@0VrEPBxIE=Zk8sMX-NTraNK?6%^7fzcyYhBM4mnd5m z^_e1kF`2*L5<9awV8V==5fG{dwf@D^Nxnp{3PGnSqb z7qraSc*T{~yQJ<}537e$9wr4gv}6p{#3R>%>J(i>db^0WU;h-*Hd-;jf6$3BcK5Ia z{ZO5ww)RenON)x75C_ycII_5X8I6n+XUtfA(#w*h%9!NDWjTGc`U*LsO4aB^xk*ID zeS6d8&nv-%axG?t0!gLtQ@&(;C>909j%^Cv)P4}RhqcL)1cCKVEFKuQ!+JeBiZ14O zE~!HCMc+d5PNKg_OK1}jm_Q;bP(&r-r>mqjMGezEz(vFm=8!6w<|?}Q-y8rE1!c5l?tt#nCar6l4(=O5`2F`2r@QoDIPTdX00QnR7Bt>zgKqeP%_8oU3vH=on^ zsw$Q7!uzT;j~Om8myE`mAsGeIm_0}V?`L;oh(J%RV6+-z!AL<6d=Ik3McB@SmIa4? zq{KUNmE!7gyrq-1)@BcDWnt_4jLt*Dl*P=OtHtA{oh$*)-7+8W2LMK)SPzJ2r@rzH z9?+j-T!4(&DHWt9;u#i7j9OfEZD9oFYQ&6Jk9!;#Jf+m}6b%RWZ4*aJo3mQ?DaAVG zq=ui?lt$4WSp@y_Xu!-pG**yiE9W9)EBpST!CsArE-2{)ty5Vv2O5>)ULK?!KUo!t{;Q@djP?Ssvv_sd@$&is?)1dq)W!=l5RGxdGJmlO(w-wC3;7C53bv z^&oN_g@AxC`Vp}X3<&Yh-uKPfj0i#jQBk%eN|y{T-M28kBQ+pVQ%X~Ggbh7Pjw!5c z$>e>xH#bQ2ZyNjLDow?OuS2Kg@%8TS$EvSEFAVi~fMU_T;AB%+M#2E_`-^ z!}8rYN_+;-f9!GME#Bnm#f{J!^m4Vrb=-xHJLIQkt~O^zeL0;W%m5vnzn zV}$Wy245Q{KxxpE{f%kH*in%5{q^(6qclo*^5N~5wscsANsUD}=9E;ylDlx~pfAIA zR7s$*{;}-!$NxGC%kQQL)14%P7$uMInGvEHx~M5C&BsV@P1wn>Qgt!ch+j0cgKsf7 z{eF>10k&|=pZAxtXQxg5cWHul%}AjjNJGfOn%^!E+E^Z?$)%g4>koGVP_o?U=#Li{ zGqjie#~<$g9BcfXRc7!1m|h$P1<(KB-*nx87gYNESs-ccZwZU4f`-O#AQT4OA5wL!7!@EO9${2alYr%da;uKc=xr>Nd$838HDFJ5WLC!tpnyl0BxbJ;oe3 z06a2g(XCQR9!9qtZz2IDocBLJJ3%)pBzdv3MN;{{f(RGWnEdt`)78)ME!59lg+z|8gU9W?Y^c7e^Q>t5#oPZFx~zX27n^fu z4lGe?K+V6A)FCaQ^wVbh>No#P$}N75)_664{8jjo_h$l5ns&Yu$r2RKM7eY7|%9(sMV3zr{*bntr&hm`#G~sxYgw#r^r!-3&Q2s?4M;_4i#_ z>YQV;u_Z;SK1FkW;+F3~j%CZoX@izVbT@s_;yyfPi+-Fv9}(;YsC_l%4-@`G8{;Gy z2XTQm>Kki*AuA{1E{m>4{s3vE#LSI0)zFbqw@VmsZzdQflngmIvB&|AhG!gm=Hc;n zGt>N{WRb=R(-Y^{5Os|x{|8ZGN`Wob4pg)xp{?VRhyC4yZAt6G+ljkQ-gB=PAJJlq zmTJ*r@fFMb;kv(jlI);M_Lw}#X!V`D3^CzpV`Y!Na96fJTc8KF83Dc{F)lMK{ieF> z!}Jbm*%KT6ghnwkv_dCkH#7Jh%jf5JbU1>!Q(*AaRy4a(ehrRy0;t@d;QgA;<=Mf< zu}o0zYvhVciW!}s+E8bnSuFJ)w_XFvh%eD0+ic*8F&9KL%nV$P=^Z)B+l$xeS-?LL z&beL9=C5UD%V+=ifSoy6B~%u0*tN(|tAXQ7WT^r!FEih9|I-XhUh8T-*-Z=?(&dGxv!d^UU=$nQpHq z=j-Q(EvwWlB`YRO_U~T0{=I1Ljm;sw<4>m&5)eCB`>Um~6q@*4?2rR?-%a(fgu>L~ zfZg4{A`vm8Fs4d)BpEkC5$4@Azry&M+3fbi9ggGI-m-~y&a;feNu5Nni!_CRwn>Yp zM27}=ewuYFu4`@L#UbVqdt-}hu3>QD3z`hP&(pd-~-=_7??{)*lcyPh*7y*8K4 zJrDnm#N-+HO|eGQoT8URyxLS_mA~K$h**ZBO{w6pA{#@6PK$x}r`f(c@*Xj_caiJ- z#aQ8wbKWIUbAsgL_40gEZ3IUH1O3gXw{1$C{Z<`C*(4m&cJ`Cn$C%Z0~vaDhD=+926<0Wx7|5dtRsQn@^kL@Y~)mh*TLPa?RsXHZV#`Hmz~>9=+K|dzNDAFK0Z4+KAC~cy}p$of-J7eh;MGN|*Z$CRYHYRS9-v}pl)Nw%V$kGS#yQKGRr zH*EtX#E4j^Z=E>W$PDUQf~x%-50P}D{b}BAx8HHpq z?0gv}h%m{m*w^L+c2J6wlp8icDo*ADL&3$l^X?N&j#l{SG9K@Kdk0mVFe+2oJ{*tuP@f9{PBG z#U49$l|V#&jHeecJo2%+n1p>ID=n4?m)$NBuZA`i}-L(=;vR(kn-lB;hrk{#9% zQHVwGCUS@mjrAm#Oc}SVo}jEIXRFeQ>2i`@t^_G9kVP!~!?E_N4(I0JR&_aDa4T*Z zH(F5DU$P4%3#`$3v6BSK;63?A)am0i==`G|XkERxN|a&u*^I@(O_tD9svLNmt#ML6?hz$e4~ z3eCv{CbNOgY_<@?!q2aczFBRK)KZ`7--swWQ{vxGH;hgcr8Q#jS!>P9fVcj zDx<5IiQuq+6i*@;&FF+l|BBQmo97JOx6A?&2PrD(i}OHz)>?E zk;v?%M8hH*LlB%5X{bE0o$#VoENSLkj3Rlmbfl`#St_-dJV{y-bd*#)#e-#|0+5?6 z7IU%uf6ukkhfllxdq4PVCcb+ym9M1+;fv3c@R?MEU^4w{A%ibIZ;J!IPL%;)d@cal z21(W1`~h^&2Uz{Z=M89(|21I`Uwod4r5OzVwPaK0{ix%UKTNy(^%tMxX*g~&C$oRe zRAzjm#orhr%b$_38+Ic#rTJZK5vDf2i1~T>-PEr?e?3S}=B(#`*WC@L^kD}a(f0+4 zbW*atB>(5nfg0X?@%i@Z`3^nuXBYW>KF^7HqhQf+ z^SU&kvzNIQq4&O(Zdp?D0&AcBRTNFCY?W$P<<*c)fWTN(@}! zH3}b#G?z!hq0&UI+VABr!S(XY4GYQdgO(t+vD$WCE(rW5(nXT1t$0r|(UL;TpB8Gv zW2LJs;(2)9;Fz?zw8ERbgj6^bNr0S8_C`X6X)O*4u@8=)r1lj)5048L&7u;^tOmsg zv*DjtlzAr*$oNQp4?+jmj^AFgBOD_k+VFa{&cA~xulO>h>-1$slA;p_qG;to`pPR@ zkbFTi&IPQ3F^v4)9=gk4O6q7NTWV)CyT4z-bFMNjL~ddwDeKE0#}UXWq-5W+U1nFF z;I~Uobp8lf1OHkbMgEsMj}IT+fYw_=#|NnwuGfoW+{xyCcC&b%VZx!^B?t?&cDqDU zkF@-?_i=KfoUX9q{4D?a35Lm5NBVJto>uuE$-|(jy$v~W@FK*uPelH_%q#!m^Ae!Q z{~}XJZBCs0#_i)1roB=&=3fFk<53Dq+6!r1HpJ8ypIc6J{-B(E<{6UF-P!H)E{;L! zVE*)L>Xo-&eD38g=U-w1GmaVTiv}k7UEbbTMb1!CNLFJ01?7u&<~=1UBm@Oc)ny!O z=Z{euSN}}H|5&a`($yh&KF*d%a>JPV{5dImp_oVM+jjLazfTIXuACGt>*cJX30^y- zvzZ-KFOBw0f?X%`KxQS&DK9Qj20lybW?nUjBmZEElq2{BLz`_8H9vdYmh%+b>5I=7 zsbA@7{tE06Jxa@Y@jx04tVd#xfI^Ok`VmmU4)wg+-j*szTmlDIrrogX7>cX+d^=TjmsJ3!)h^Br*xALM`Mv&@D;^t5t%&d}U9;`pr6y(>R?{ z7PB{bukhz#e|uSN_#P2jNhqS5WZpNWVV>K8J)(We<$76+8$K5fM2)9ZZ$9KqIbk#U zKFsE;^M3Q(0B#}u&g>qo6;MVvv?1^-m06D%QQj!;7$>EN*z*HEXSXktp7Y0q^6{@7 zMocEGFB&~DHW<8#^3FnzWDI;V<=5MBLs&pDf&J3h^87uJUeIRP{d%?fP_rbiM@X0M zqS$r$BisTMh5`uH+xQMVX`9_5+Kv}-!ZM|vhq)9!qMO|Kj+(F|w%B)i_!>$^+C1P{ z7xQH;Y2;DUot?w&aIOqIi%qfD9AX0v^M8p1b;@k4dWJ3}ChL zW<{97(V@#pL8Vz>9SMC&C7k^a7GQB&?~u?$zLq#&KKnE?BU70U@yq{AWei4617`BO z6tAENrA(1+-9gY&$s9U{Lda8s9(0{ua~yN;Rt54lctSnnv}Lw&Zu*I9`tTUbU0(X(mnd0aWKy3{u2Jxbd=J58tO07x6++kOGc zZaC`>zk(+!yBEfO$5v zi!lkIteA7i^6IHNhP!=Q)Gm)uK!IBO%s`wot`o$gKp$mAW452rmX$^HtIs%ZB7ZGO z44*zE zy+xwqVzxfN>c9IPOksS3G&&Vt)m}B#w*X`z#lk`d`o6Z7RQVSm7sN&|!WGwg=#hc% z_4q_E<&Tpguz~$q;089SDs4n1*$})luySGO<68dfXuzJ>Zt;Vr<;O`Hp55hh#sG4l z`+*4I{PFB;B^W;fgfWaCGGy<(zjwQu{KO(hZdm6I7RStTGv!6fm?W0Kry$H9TOP+# zB)&IQzJjJxLS`z^fFc;nHRvO$d;+@P)9i>N%JEC|!K2waO4}%akfK%e)p)@Fwzqk< zTK^ASUPml>jr$zr>Li2Jie@Yvz$3;ut5}dB#h2=&xY>M;q^mq{a)u;cG-_t-M~i4; z!S8W?K~aQOpV`iZwvpi&FScmW*6I8ijXzWGiCmx)E8ilc4D)5Yab8JDS)*{q*8f>F zZ5xMNG{}+WmQVF>TG3Ev!Wn4#>Zd_?WNUUsZb!!@e(Uc?$37I%QZrV7^~U zYQk^5Iv|O^jjDih7%YaYjSkLmr3wJ%B2!p7ej)TO!x>em#Pb2Yu$rbdd`Vq$r1p{7_q zEDkYQirVP7YO2EQ!?v^;>&rALTv7Ze#wtj1H&qqSauld@kLTd4hN}8>agE>l{b*L2 zFO6wakN2{keOM>s=>HjO05*(%{{_BC+MhKMSsW%b|M8o#bvz-gF@vf8Ef7ZHO2!Tj znG(^dG*o0YJ*i>_CFxNwK|w_s3_MLQ(v)CmU34``ocNnj6~={&&0Cwl!k=_8Qqd^X zxIa3?xdruzI%l6WE&hHqN2Yq{B+8Nu6WI%6t2F11Ps-(z8MU;0B|f9+AZm+rhBRkm zX-2?Iju?)W+{I}L%uZ5{I7NjeF~+KC%=9d7RW>@yTV`(ZNRb{HTY0|{x&(l6yJS^w z)3LTB(ViIojkn?V=a+MnE0`zm?x4iW+Wfj6+Bpo;rmM0Y1hyi!zO+ z*;An;XhAX@1(}hwgKF;myE69v&=ziX5A{JxuzgHvI`?7NNCoQgJ|t8T?Lf+NOTx4O zTNS-{Bt#<$U&Gy^$|)ulcCc>SbWLs@>>IPlK}|IVX}e`GdXhTKS);Z1Hv7{U6h2Yi z+Bw5|j&}-EL6btm)}k`^ufdY=cHr;eQ2%L(0sd(=+}xUFU$aVVDGf`NPIk#?v9k?x zYKgzM1K0$G=WvWOLj{StE(me{RaA0iMA279vYoXJ3_*@-jz#Lfk>=nAf@`hOcG;XTS?3UQY17;ad)=%3fIXt9x z$7|^ZhMZd+Rz*nU`NL)%SwZio?MQexJBMo`0s(kEO2c9Xl6N;vJND^3bspyxy}YA{ z=`Itu_8M(2t>>X=2TaO|)r5IUXk_GwcnhlJ;JUuNxX?B|c!=@hLeFOT?)S8LrA`WtGmS-wDYuIAEEPeVK2~s`!K$QjpGcos5gKspyd z4n|;#wnp6j1Jt$#SnIF{YpY{w0b7M7S4V1+j@rKL_5&93zx?7wcKfFOHh_5+Dn1)j#%ng75*qKt2ChVw8v&Es?qU zCbzepTB5DS;w3Rk+j6}eiy3t;73bsb39ACAjzIt*@di@Q8Ma(W{h8Rc@f;{atD1Hg zgy%O`t4HYulM#>@*3ad#U5tEmvrj_Fu3VE zd6A52PB}$rG7Sxt1mi;jJY!I^R9R=QkoN?%+0WQ>z=^RGVO&*q0AiQ!5Ts-%b0tIL zzBfA)k_3atp2$TSIg5oiNMXY?L%-e7-I|?Og*?!Y>ndbmh_q_k+Kl)56KGMZ-4Jb0 zFa;k;Ma)<3S2~y4)~#WMACgs2x&~*%U8A@3#koz2o!19X5Tz7{G!FCwXTbM4GklJ2 z<}iyT!Cj6M5y^RIU!9anRpjEe=J={5g0%1EJQ!w$#JjfkD8!RanLvG6PTfbFwzEg+ z!6Lc)QB#(W;zlQ|oh@w=oP3H<#0)5|nQ#fMJ5bw9UtyTw8d8}QC3OggY_+vNq#vY= zH@FeFRY)w=)nE*+)EcKsAB>8&R<6I1-a$po_VeH4?O+;k4DS|oqScbn^QmkShOqUn z7kniS2I;9|Ri>I{AYMvYc{Vy~(GRjY+_tw?ju)BAV4eI3{FIU-zQ z!`d7|y2=0cP1KSht#$SX+jPlnqAc%YUgI9SKaT=Y_?yRR@rZabd7o|KIMm0-ZRG`J z6XAuQ@Hq#4it*l`qk#MT3OUa(PozuAe|CTS{KpGPY`Z^S;x}IXjlaNle-RdLz3Dt^ zfQqgl3P6fg{SXH)J#L0m_cUKgw{iyniy5W3NgrU)z#<7ltmRl7X%As=&X*?Z*EA77 zhTSX%%Uav-+dQvW3I=wqCD2p-+tRirB^X$6+@Mlfm9posp?iRaqB4Is+Kr8T>RmTV zFk7!T9v;(8RgoUF5kg3m8)HuK%dNaoa&LQ*6_Ss;c9nCJ%mydVT)Z)DuOQ41W5L%e zjv7d1jw3xW5|_f}k6u2A$W677%SR-o%0B-G@O#(oisw#GE9@t7YrPQm5lr61Z~sqY zg+UI12z52x*LZTN0b4YPM^k9L>v0+;PcHo54^cV;)=)vS!ko#}sVVnh7Xege)y5zj zvELYuUpzh>r6QzLrUI}>fpoFMG)@dP6uj9glH$^+GeUC3ZcUc4;w^B?5F-$V103+* zgmw7fIJv_~c2F2C{(#Jya=7ikPwd|($;xIzW2!<6yDoT;U4V4k3rFleV$;5)>v@+V zh0g;)2P9+OPT)nmvcz%XF2)c;_tZfaL`&EXM#_@aMis;m^d0ZWOMZ6UEHq9*2lxeg zYZ~DtPs(#^TlFu$~rkT@mJbJh3lw+Nw2K7;5YvVb53o=*Pv8GfWLK$4_ z$(SJGf&0ir68UdU_mIQ@O2n*Ginrdopk+QyQ97RW9Jn7+VZ^3@L-Cg{mnB2dj2=SY zev2kt`CsH)AS>b`w6QW%a=`|@B~sWDmS#Mp-lKROrP=} zux5#P#2%R!HVoIM6eAJ$h}6bS^fce*`uujX0@__o`bPZFhhZI&THAUMud7=wHP;#T zF!%iJI8w=~7Mgx@sHR<@Bo|0F(E}Nmeo=TVK0Tvo8u&3@Min! z@{?F)bdt3)&56`1qamE}Ow4{I0gYQ>C1agtSp0-K-WkVGabqkB zg0Z+9*;If>(2H+*_Y^Gout%DZ1e;N_V_&mf)7Tmg@%HWLxDn7TI?_c;Rw_zsbG}jH zd~$M{p9~AeR0cRZFffC>54m_C@s6cW|(D8QqyaqbV>+Lle@VEcxD7)ZRhL-x6&6pbMi9mrJA4d#_ zaUp_kNJIJzDa80 zpwYLTfHE3}dL{3g@!%KJI1=xQQp=BfgZW0|35ZAkDt7i?klMd~kJ*Vtmm-JJND&ay0|+nYzt!PTk9qHByllV zk*2$51;iaeUuI%P4Tt?aE`Sv9NHr!x8w0{KMq{3!F}%Sj*j`VPPe^0K$~M0Hv;IkS z)?rp24N7w{t*r22BTtz$7dI@oh5Z)W7|&MMYIQH>a$sXQzxU+^o88RdrUoff6xL`O z^1W%F%>~+u73~xAJ$OK4VA2Q7tPw|xXj0sD>y;S`BEl&4dLyh-l4=?H0E?CU~JO ztt8>;NN4R$)8FagWypHGXvUXk>FzMyWVJob;OBaAx7y||mcGZ`GcgtC)d>|ZZIkKM z2_IQnEgnPH#F< z0xU*-1*}^H+!L-F&SR)#)d2P|fT8FYf*%I}HXRr+YMdKjqn2DOPQ}aaGcfLNH&eW~ zJbstcE@DMzu35Ob)0T;0n-I(Ri7c9U&U_Hd3(jfLF>?S*@5=RIT6D?xnSC^50OKyc zhn7+Gg@LnTXt_&j){F&JDqGB3({vdm8N>t>*KA~;ioN9J7I7DA7QoedMKVUTCjStL zk10J|;8=PElz}##{|rwallmloO1j)Crtaw>mbQ#}onxOY<&rGqSho_yia1+N z@T}}j!XjZ%LlEE!)F`(Tujp3oSwxl5Pr5b%XmNzGm=+F> zX(aFeK2^f*Y7p2Dw~L&+_{UX22n_Sz`9YLSc={ufKGiN6ND>olT&@g5o|Yd;7ilE& zAr9|=E+BJ`Fhe4f#(a4!O#w+6zRTp;S*B=)GeUUV?k$Pso+KJQ%Pwi_qhC4TrUH5E+M;QG^5am%(IM z?AMquZ!^ipuCBMYENH;NSvi8h7ZyLzHrH`XYH)Q-B2+WXq>sJRr*XwKM)fTjX}*5S zNVA`J*FQWtt1}cg4~VRjvCK$}2{wxI&Eq|@WF$2N?7u?6~9 zyHR0D|G-3LxLPledn2=vCRI6oOyTTiDw~0x+o{AXW~0q&@?<8_>OG@Wnw~h^7+8P} z>uErvZ&#<&^omKpc*VP7SuB?GYsVZ32ogZ{L+TP)smRnIG9DCL-CwTC=vi(==B7q% zigDeeW3_afrh`>zIM_#^CKOa*A%&&uKshJjAfd3$T8jyMu(gxV>G;;uNfd zMPb&2INhDO=^GWEaQ6HHPTOFAn__#$l{1LA!ML?8z@$uS0k%E40*E8B^~KF8KVvZtKLAy$@>+}JcM z>3>pi2~Na{xzQ~%(<9p|>Nc%@rX)W{z(J~ne)TnmR=-J;bfYDE{F*U@Q(Xxj2{F!? zaYP&8(6mvG(i5qK8N|7yG*bo*qds#xP8)DPwh);1T&-lAhh|~jN6b8p6*fT3*`ou` z{aab00?9V3VzR4&a9r+NlQFmP*!dMpX0(?oZ&#Dfd_&SX54+vUCasP`g4-}8V-|qf zyk)p=HhIfi#p1=d-$UeC%b!z&*}-9AyVeXFo_|Bos+-%+LnP_~7KwXwjha&oFh$#n zrjIEI&=iFKp3crV zvB9wLuWw)dTaXb}Z?#)S^p8R@+GouTp&iKtk49A{|M#Jzksa&ySi5Q+#K!s%c+5lMIGp3qLQJt?&4lZrVc*r*?V%XQ=* zXCD?9Yaoa`Rp=N2P-DuK=H+O>CB<4MsTT*jp`lal@#Gr0IcOs?Lr3Vxvk7=CmYRd7 z*cIu^ow2TGi%WR);#w@ zf{C$($>d|iBQ|ZaN<{U5e*Bb=o+5GbI8C<#`f9ZWx|>oGmf* z`k6B2e>=qUSNZPcgYcMAw3w^DiP{1@8ktshax>Mxame=<%S&+vr_p9_ygP%Xi$7Im zWPeBGjP{Vyq@ohfO3v>{&hgZx2o{lg?oA*bDC14^sV;h;Il|>XH2Z_ zm)R6P^OYEWCb3_K9o}nnx0~`0%?0`rdxIp7-*?}uCCQZyy&lm}s5ZLc!Tt^+aWON| zyflpxW*1Fgn}4Rh{dd?(pd~U8m!(d}TAu9DOUyvwH;}7@Zd14RSaKL;%}`J9=0{SV zXHRHigJWmTb4<8bW}zo+t8$;%HFCXy#Hqk*4$I^QfqKTwEH2oYZAWz)qn5PeY%P&- z8DfJ&&sI%wP>6(!wU6bWAscP-*yx5ziBi%b6V5Wxu{M~gLcS&0H?$DywPw7cNo0{lri#*%)R3i0hV z?&c9ZnGI{=x6}NS_F+q2Exw{Sp>cAx8bwL9&==Cdxbm22O~dH*^IILbFeQ{%{(A;P zV(L~X6j%h3f@wc*pA{@)BiM8XWpm}3eGk^zo@qxUP+gwZyTo(ilA_rQyV-yxB$TY6 zen0ulV@nNCPI1#IHx#W_;#R;eD?QgDQB=T6j|oX$#Ew;At~I9r%b~8Z1V(AX2=`Qy zE{iSTpQv-yf{|5M3}XTbN#D`qqpv?u^<uG+E)n!W<-v~w&*RG9; z!!?KI`jaImeFkwY-f}?iYNOJmNgB-?CBOP7FP)g1ijL~+JX2%>Yi!GwMd?6OK>Mfjh<*5l{X2U zHxU!dp#r&w(BjqhR*K-P>uby}FU%yt&Z+!4?75aYkTiM~3M!tVPPY*K;HLU_#?j&F zp1fw1`g_wOmbX^)NSJFhy8tLHVqT~e+f-bG2)1BgK5Dl^nI>Xn89}?6cnSX?EZ$Rp zQu&hr)$wbQKWI)GPkR_JTaI=~k?HYdv%G|-%*j?X#vyNFNgEzVJZ!Gx0We0?u^+M4a_g6!0F?G4k;oUr5r()S3(M~)$`m>+@lb`D8})dRANL@#A1o7AMk%;+ehc&1EqNCtC$_7cK1LvVp$16!mm*g;g=R8N~XrN%-%p2_BZd2yi$C;!(Wcz zfc3r-U&x>D;ToL?*CGKh7I`4iemi@5TCAu4P@*A!^fS8=U~&gX$XdH8y+VgLESb%w zm~8|8FDA^i{D`x^WUr{_NpVb4HcnXWrcnNDdsS&jOVIxABLSMfS4RTkqN)eC97_yo z%rqoC#%duFdN(Uz zWfFLjC>h6;de$7+XS2uc3g?RSDY&`~2x_KUOf^Fi?g;H(-=(s7#I$0KzKj~y8%$LHuyCxugxX<6pF*7#(?T5W1l-RxCneWEyu-8} z=TNbn-Ca-~c^)$Ma4Wmuv#za5Lkg*q5Qb|?bctJ30|&(1rKut-l`H_P5{}5p2#!kr zLy-tGe9w|U%@Tv;kLQ*3Ot&W$;X2JP)<93}YjCl9<6b&Pv<7bovLG1n3Fv}T0GT6X zl?NG@r9Lc@t4>8Y!@G-{JpJhptdYh_PEz%NMCnSAm`#GeUte?j-|Oo%D`^5jk#cL` zFZhUS@0M{{EvK96-z@whZY&ClgG6FcIj&@$N19rZJ3XP#a7>zW4N6-SQ(%~j{Ed#$ zDD}gi4@;Inh(81r=n%wicNy^Q?C~BduPy|R37!2$`2FG|jIP_ISooG@=^LQly>w>M zhZ(x7Q2k&fX_gjK@;uX?Hk&~W>Srbw1Ul#d*ZN_GlRK)W*CIoWoWs$zu|wqUd{(TI zf7`BgF~bX*90njWO6QC7Jegcx;S4eE;21m-%Yyc;cP~15eg@>a4^GCVp0SUF+x+|~ zi{o1F@RCjRa!EBX&TLeQ?1L<);rZanUmbn3+8jYHogs8f`NY4I9|qd^?O%=-Q~2jT z?lt9^txR8y0s8xSSnQZh&Kehq9YaOAeI0Ff_cS{@Du6bi(e(@+5U-x^kkB`~AgG2n zCVaHXY@2#Li_@x8b^H*OV-^-xsw|ct9dqIULVlW95R=7V<)h8&5d&p0r|EKmxx%UH z8l#2N4-`cwM_-9q7}L8r?GhB9Zm6wD@(9blw|+FDcY&mZpO{uaQdrd!1A7Ok|0&vg zlqW&37q^2zrjsFMQoRuP(?$86ChL6wK_p4nRiDgh!KY` z;sG5WF5yn13s#9E{NVLTDh-ISqv)z#Ij&2mDEt7xXxGy7#fQ{+=EL#vm%Lz2osA)K z+_{1V5P0mUO#ztAGq^LkI1+j%hUV-SPKBFDK4xLW_#3M`xpDBxIbL*feUVz8BHO`cxJ5r1WDx?YymJ{<{bHUCym+;Z!+P>=0~IOLv?@LM zYlzaYZzzhJj}gC*pUTcQDw{ll&y-oL#g%V(UpMK7>jjd&FVKXC^5NhAU!r}_LI-ZD znB=F&`D@_6 z6`)@RV=vw$aEGm<3!mSv9@##f7=IOqVco%Bgf25gD(0%*A*qC5L`5>+VU4GKOX_@4 zeMihV@RcIPK&Kerxd-DY1dcMjTh_Ue>}DaA-7(wJJ6!UK4c$Q9|8~cjgE^R~vUSHgD~gd-vh=4$NOx!`^lrY7XNU4rn66xoug=2QieM8f^{3iNU-@C=N;!f304bT1qMJ2?O z=gY;^cU1Wm>}WbEllqvN{~gNHG%Fd>?+&OzEwkgEQA-NB!gNq;nog*|q(1-lZcJy# zmSXG8d6{1E2d=d4m!j|=Hv9n1q%MDmjU0gE?*cIBAXLN) zf)rT+5Xbpi+WF>jc|PSI6aI09{Hps|qk&?si)WDSIrno6ZkJ4Rg%f;^ceGQ=`gQ?Z z8CLkZWZ1_~#aAi9MfJ5ok;GCBUT`4o)U+64QCUK4xGO5@9ubKR;vCzD+2;BFJPQH1 zUNUDoE@u2g$<#QJXae;hW0htP#TD&9!T`FpHs1()-p*Kv{$Vk>UEbeRSrRcFi2PnJ zjyF4J4`=R`k-V_XaiAl1-svyYS8z}$*AR1z|i9FvPMV!v zP56ln!_Ez#^iA{L7^}EFp&$UUF6U_mJ^RAO?awiHi~@u`7AK3lv&DQqJJV6uaLrPK^&VQZIjOKn@EyFAMI_Z}5TYYxl zg3Y-><@XC*KFCq-UPK0hMaV{;Gb?d|PM}xv?@CMlt=6`tcQXSZ5%8Abo#d2B3riSx zc#PGAcGCmmQgC9sf~t2<_)Spon{*T&p`c8o5Xw0H;>OXeZ2Nq>@SamStu<%0R_l$J zwTXJ)OwbSr))!6|B$EhpAZMH8ckG{XHtpZPgu+@|Z*SMD)i+cAF+rN}j7R(q{eshi z{rwEv^x^j*?)2BicCNayCeEiXBzaD0&B{W~L&?x=Rj%xH`jt_^gv6Yi#X1WmUWfj! zm*OGRN2`iLN)Bm<{1)Nxp2N@^`RyNR?=F0J`=xiZ(GQ<^A8v>dxnA3c6QPt;W{gwF z;%l5L)BU~GIwS8}{4K7|7?V#ep1e=>bg{=RCfR%~F7YlpO=4X2i2JR#7f9bp%^p&! z8ZH*pry{7|6niR|FyYT=vaq~>XSZI6909HEAP0zQIDnZHD7lA86dU$Kp51~TGYfju zEni8ItK?nIoYutdxjbNtJe0@h$x(|!C|~V~aS~w}T6$P3L-UTldaOLXYA_FTq?TMx zTP18}oFVE10s)(z)S`k2CTIC*JcRja{d>)Og@?RlGMK^Q7to^jL4ujfpsSQ%Dq?&QWa|*5el(B~!-}VP;y~cZZ@a)03+~%6P!jqtg*xJF0}N z&^P)f1YeL9k{TfM=hRixi(5m{%0abW%s$SRTN&~)Ek9zw&uaDIS%^q!_)vTj0vx=yT`o46wMkW1C&Vzx@zbjl{>#zH zv2wj_y9VxZyY|+yDn3=M?iBhU`K0K3s$G5K$?}6%cpYCs%%uL;K_9z#L}pB^XXgNu zr0Tvm!^ZqZTu(%|19F&c(BLA1s=so7`)FW-;2|E_+t10$B1O7~nABD{;iWFImV zl0W^eR#u-qWcAi$fsPbg!%O^K7ues61VF_V&{$4(m->{^p3BEOM}O{A6C?>X-Bi5~ z+7mm+G`o|(BsZaFQlv0KCOKfBx(Z740sq_HCV`qxu@QHkG8ddBtMZDRTeoua5r%ss zNU;OXYGtO{U}h^Q`pr&^y9q)hfzxw4@6bVykZqhuzBWhoDXR)@seuy{g%H{ZGVAyj zavbVZ@GzP>iEyK^uiwGv)GsaSpwbMc68IHk@Qwjxdm$bpxWqmhF)E~zf@DWkP6c$m zP?hTT!=ABzwhp2=Up<~*i5V)4tUKu>)KKQ+v~(*ZHsK>&*j1yMZ)7sSUQaMqQP>}n z?j`I$`>kcY3-T?SreR+a9r6%~@)+ zplclwm^3J%+|#;~NNvXEil@xUz!_YUfP zCKbAy*$fCj{*cBgBK;Nc@IZs< z-#Qthr;KB-$tQhHeZafpZ7T+$xOnxwG zWK(zTibr_TB?X3<#(jWmpa+QXxYjsl0A z1HQ!NN#rVZ3t(ObCXb_q&;8;V4SevYrU@t&=jboVssw(oKL{qY#o(!@DU{k1a)tPO z>Y~>e$r&o0LCYN=l6;Sy(8i(BGo z2zsO+64L*ZDt0j{^=@WYv-w$gcIqY#m3#9AR4y|9aCldtKORAYISoA`CMc6_TrumKk%EN>INhB^m zf?gzo9&5JG(Y~JZxvxqcY{Q@JrXoEvdB_2 z^4rJxw|QO7>8Q!9onY+|Ba43NE!rXl_sbQ2sQ|7$%Z^G`+HR;MfK_`xUpE++PeBPb zK+N_|{FQmndmc}@QBkphpbRjSB~ga|eex}G*^(DJW@+IV8*{mSVRlAkGWW-0{;Y{J zdp(i%pC^VJ(F+^F^z0LZ6;kVXO1S*lhNN9poD2g6+%u6^B-P$NtzclV2t3p@&^beQ z&j`?~gON^rN4y49suJE}gBrkbq!40@sCC7py}`3*Z>fIzZd(tJx0{)u`q_)?Z)cQv z1xgZOtGMj$J|8$H1j*W!hfP~cDUror(R}h!zVt-wb-mr-<;C;F454= z!qb}mLMeilTgo@ah9t^F-Y%<4a#v9d`#WD;t!{xe5}1IAr4+o_BKU?{praHuHwObd zmqH3$H9L{XQ}2pmO9)(7{+7H$T5~B8*cIuBaE-E!R?t5JLqj*>)Qhf`v!| z1Y_ozb_(9;_OqBjBdb6IeYgrg5H=1oi=825XvQGeFC6^@_l3tt zH^k-qa)J33z_!F;2M7B?jHpeHN0o`1CEi=Hg{K^DXU`Zh2Rj-V4uX>?g~Gr9G5t+l zghc!8YQ|hHV*>f(?O!b*4kf?Y?KT&Fid}3tT;nYR^`^PbYn*%MJc!$G9c%g(_ zjxgy0C;4Hf{;`+N2i2IRsmI;dkdZBa?JqLF6ct-)EWW<}XU8FRF<=qVF zk1)_iB!1=Hn&ztBN^U>xyCkp!dO6u*rjofK-}=qn1wAucWwA$|5>Trt(O(|-m=MwC zmOH;NrdHMu=Z#7k2+V9G+N?sEh+skvU*fv#6HR5}Fm$uy_xr`;7U}u=`C+@N&C!+; z9##*hH64XHW0f|Ws zodCWxH6$Oe$~Dk)9YXo_HOx$$zQ)tNoxE%VELg0+T31eZh#C(mKb_^1450{g5@SL& z_fz+%h8^9nv4}!tyX}^{*6tqEB_5O|P!t`J(<91TdaWSGQhGU3`z;4!MB8}|1Gfl= zB@U7D=+XFa_2`Vwx1JE^V)a(hSV0sc%dzsGlsn`^GYNaiSp~3J=MG zBy*wgF-r+9xxpFF#uU*FLmDu^GyEGP_5v={dUT+7oW41Cn1!%Jok_xJ!=96d9F-F6 zOR?EK)(6L_Q67tRM+z805g}8e;j#?zKfmjNIaU;HSKVG+ezWI>7 z`xkv4r3iTeaRxLJOE(CEZ*c;-`nYGV#LODemlr%!0|Gn&&1SLd6$>TSvo-TUvo_sL z#yLmsBeTi@{y=c?Y5N^DMb;@L`W+a)Vr0-pUwR~#88@!U0>fmh>-h?zJD2I{lX*IG z_F!g3tu=dTK$T~-AnLCq41tEtk?T-7l#IY~=?d8Tl?NhOMmb}y#|>hAvn}b!gbhw& zx0}Mjw>WL7E9q6TjLUBHafr)TPtWr8>V#j-?#{^{Q~M!P22RhnW(E(4oI7StOyK^p z*kN_+>7O%8tdlP6e zzg}n!JAazsT$%6z%#p`rDLxd6(2M9TxSjq9e*Q=4XCA3p?t^C{_q-%!A~i{@AH3tk z(r1g(E+6X7YbZq#$6x-Wz6w`JK4TtqEgSbJv&O^7(xYs1T7LXG&2LDjJCt*PB}~ql z9ht3yY)0mHYAcdAJh*}kyk$sD5`H~6uCe+QV5CY|BAP`J#6}zZ4&OR*L(tmp(sR@I zN=@@kq+={XG{hnmUh8pi^ix6ZV8OtB_V&@7Ghpa9XUp}Rlq>)}L{RN?r_gi4==S^A zrcz2Ht^{c#K1Q`i7fVfV2!2Rn>b%?=ZZEK1S>1I(5LOPLD>7Y)yd8>o;5Zl0r)}VN zEGr;NckYAi89%&B2oLMKJp-(Mip zEI_@7B*v7IY|O`c*&{<{)z3OmWfokKBoACs-qheXRq1{6xI(KtgGVg)t7cuRjdIv_ zu&8}~0;h67z21lrZq*$n-8SS#m4*yf++{{HCpz6HZRm{t4#c+Oo}n$5X~g|s(yZQ7 zCCxqb<;hj+_L|L`fL=?FAbgcr_@uJ_^Fz})Cra?7UlaqWDv2lnhI%nYGEFsdTYZ`t zt4KwV*QsV>970xLXlTeJy^wR$G{mxDE}>>>oUg1pBfD-*B?IUQy&I}ZjQ&gqHnpk0 z);GZwCF8GVrGBjngg1#+y)}XM6r@+vHv3O!Lp1#ZY|50z0J=qLk>+cF0(XSV7gs4L zZ(%f#h^ifVo1~3e@6wY@v)c!ZqlPUm@U=PejdU83sA!pzdI>J(nbSM*x}V32m5ntP zmk3yCB@qg>fpRl>qj0#4KIi-@X30;RLFl+jf)9QnxTxVHM;u6KP2oKfvW9AX=AjL9 zxnLr^3PRl`{ zpWj@q9w9z!UqKZ>Dkjghw}hda0|guPu(Rl1|Ko;(`I^Awu(txWKSLOTHu>Ji}WRpVd@U# zoplv!cvl)>or?Q^Dgk}v+tPhzw@GE<$b^QymPwB$o_Lspn-iIRu||jIkE`_!ftL?x zM#KIE!ej{z%>SNej!u^MNb6exD$^SU)eo)hY*zED`wJN;Oe$KYA2B_3hsxX|BR9_* z2o#f&?zXV`wjnSq$;%Z0Eb{`mU1fzf;s!bOO?H4OFnm&d#2< ziw;qPFS$e>xMlvNS0YT*Za0cbaccQ9F&zbt%A4-1WJZ*QD=O>qc8NSRDPGS%rKO;} zvasyskP+QuVoL$WaqY+chUo`4+MN%hGO z@zR1EnY~ME^&{ug-!3j^=g%YzvAhj@fGEG;@MBe1(CR%kzcU(q2$dLWB@H*S`+X>_ zv2tf3g)w;vp6-DC+nUo!?x0f1X}3I9dwlWgjI?_G9!O8pUM+4%y$zYUm(QI0?$>r2 zRfw9v@;G!&`0HpL({Ar2u_OCX2JU8*7iX37|IDC#I!bL{PN(T_*}nFv=CSmy#feEN(-1yqwKM3LDA;!H zFGx2hG>}v1k?~h#YE6e_R~o@-^x| z{}Ftb_18Xh^CEr2KwGPftGfo5f1ldzPT?~qh-f0U}XQmWci-a?S)5z4d49Xd_< z{G;~rdU3hL$v;!#+nf>Je0HW)ZLf4gaI7$J6DJTBw)>7Jp_F)H&!Nk}HElNy4 z@^VDbY2xfYC_{VHVXMW{v8|#qi+zgo-s0-cT(h35aeVtWlmj2cGGx*=E#+fr+jO{4 z5YTtva>op<%R2RogikSp>m6nWiVg=-zGNOZPOKya_WV97ODvP1mL~zmQ8+mX(w3Y1 zuij&dmQoo__#0vM*;CUm46jm-s2Ssp3O{fU-!717_KgWU-gce_U(JP2i@ueUI%(5h z`tKV(ZZ@^Ak9r_UhEbQR#qDyAWZ3*K@_CKHx&}DqY1QV$KTr~tZ-NWj-yElN8lQ9u z6-m^GVRV;lb2B65$SUhReAcvpF_y9ZhQV=HrX2|B>Di#5%Cxgx)mp5>kIXr!V_i9$ z=IZebF+7yX05FpLGmBR5fWahk1)n`j)Jl5{4RN?~udkuTV2@J{m>n*33{t3Y2i8v7 zW-CvoQ^2U{N&Tk^lFp#!baOvLp&-MX$hLq@6BB0-Z#NI(9AIC5-iLqyGM(XF=L|Jx zkHly+QIKnxNZg3GP-IWpjb(4<4xjc0^4Xz!N!mGde#3 zIxqV8@uz*9HRLIpM8{WGBPWkjCZAH@HNulaf@W}mY z!j?s-I))6(be;&u%@dcSJIRgdOruZ&0&LBl#&U8*{}19C&|6kuNbj!Af=M$R5aF1l znqin>V-6jY4e}N71w2;3hQ!&>unsX2!Y-=WJDJ?Rq-B~tbf1KkA8Co4W;kffKCaY@ zN0>r)C#f%w5$J$lbFiE~KFVE@Du_#wUUU`%~35DKZ4 z>MrI{la#??+oPiaQz|!%z4`<@F4_}(XNLkaDoDPKd9LLZ5M|pH05yD#s6Fmvz!@+; zIuPUdX{2#!ze5gu&*j1L0uL>;gL~PN&_-Oy>>N{tJD5nWD)Uf9DJ>felEDlf0#WCb zup!20JlPocxfw8xjSQz}j^`d4d4`~`jeYby5~Z3JrItpCmcq(w90H=E(uF6L|9dn` zfzSPTmS9A+IBwZ_IzMAJePU@`MV*O|l8ELI=Y;#a_7%-3C?82Nn=y^M7;`fAFIOFE znWgEnV_R!+x8xKdBd{u~ewUnjqlSa0VSC!IEEW@{)msx#f9=V6nSEw_49j$i*s5zb zH8EM{BJ$>VR|2q*ZhD0O3dzAztaLHMP%Z}Bdi_x>c+E!t6%4@z^@}_gJbjR6ku9~Cs*wW0P!a?9opWLka zwx(($yBrknkIvS&o442OMI!v59VO)}H>(TS<=@;UUvMfBuGBLCbj{k4>-EAc$4*qG z)U#c}$`e#R?@L%G(`8*)f#++i!25(-$diO#jnzNKwzB*S0u$swHr@z?DbQIs!7rr|_ zCf$q1;to7x#NHEUv#Rs(kFpFW@s7m*j3x~^N8c!_0lr4TP}CLopK%dbJ$KXmYI3!N z$-YEK)?rfQE&>8}l)7ZqB(&oL%F~n09a8-4GY|Lb+f$W- zXgI9NfhkjY0b!EcF;Jk$xC)*}bAD=nlk6rlfavYfm8&7nf?W?nIj%I zYW#sdH*D-~v`WuT@jK7gZoMW*D(U!C8;a%0>iG*Q%&%4mCb~_{I^DiqcHv%4Gdx?| zv*+akJ!VzFO_iRhmRei26$LQNQHf7Oxw_n5`8DQmatPB&b)-Kny+X&_ga!H<9t3tBA?X)kVg|k~!6bzMbw=*+R zDZ%jDpw*G)iacUb?%3?I^&wU5nx5a^Sp|6qBo^a)J)USaPt#e*MaGvG1tf zN*#1}IWaZQW12LW+=_}*2wttPfvhm4o8m*cHK-~{-vE*n1%z#YW8y;PRXaEiOx#2# zbp~L*C{7g1oe>=5SLU+}Cj2(cYUUoSsQC&>3itB3jCUCLN;dIjUFHgnFG>)ODjzv! zRW*nI;UpR+$+F6Ru4CPgYKSvT8fP~c26L05;4$|=W)+qvMb8nV;vl9L((J4_HnqED z;zI51_mnnJ>`=rqu4yvbSEXlZSBa&;t}4cBg$*OGec35%Je})O3pcOdOZz+Xs(Gn; zuzdhTd(_BO`^Y0($zTz; z#>Amf?cQCQtkb%>TEO)i%)Ficp;UxfaY$7dHqI@{-p{E8V;t$Y>g z-#k|r_W(w%Gel-{B*txW;2ArTj@x3F;ds+2c+(V2 zs7&%{N>!WOPDe}J+2v|=dAmTQdA>Nhgyx^}58@o+bu}k96;BlH9jJb$aUI1a^GduW#5m;@gb!*hLx;mc&MrV4Rah&0ETF@n}wx`47M|dO9%l}J7`p0Q!v=8IqtWo;1&#ed?0@| zSdc3I7Os)5SQ)VCwMDA7#VFufRp>g%);xR0a2Nb(+Y>VbCzd>!;p3c$gg@C=|A<`- zD-8#65~E*E$e=Mpb5MB2JDh>Bfm~3C@5j_zz%w=E{PTv{#;UcAhfinKou2pGn}Fuk z>Fgskr}+vrRM7kVzyB`(K8~w6q;=#!gD~Lf+sD!+m^{VtY6?+5!Hw?vqU{E8~8@ne9Ay0Ql96jHO1{sW&4hE zN)P*6_I zgbq^EU#zZGUoCI+$>?H7f1Ir!*HG}rAAG!QpmnGnX!nWSFhuP-N8)yc>;kzAlD@F2 zM+C?_f-zkAE&Ou-Zq&?LqvJa9is6;?OfZ5ym85X0U`_Gd`IY10APa-K^C`7G#-OY6 z9-%GX_9n%ZvNY_UZJ^i0zY`0Ilm*4c(;kmTA=&E@Ubi;N)qqsrVJ7t_2ey|B4|*Q< znqN+uH@mCd9rXa8vb7cV&+5~0QV@V5aVR20H*#1*dT2;rfv@|OjK8T#U1Z!eNxFMX zn5#3@cZkND$1?=RkSk0ZwxqP#m)52FeKF8LwP~`M8uli2u&i}?3YbNSLafU|Z4>pP z%7vjA(q6Ik-GMO(STH|%$%kmh7XrtbOQ)}P6MtzQDvM+NyJ`H(75L| zrIj&$n4g)4sv(wv^;hBLX|+^Ys4)3%?oJI|7Hq>t|8@_L??;OJ6B<|{P(R?T_2ipJ z{Qa%jA`~lnm90yJ6JE%qKZ+7dDAh<&Ux{p?N6p=VYR(~$A(^)Ab60#Ev2*x5i^qo}9pW=x-JoTam=p)Y9QC1imyIq7=0>kEdO^VAN!2l7EI!iu z+_psfZW^mt`N8h3$Y+GGIHx9EjAuzSS|{~kK0a<6F?$~?@q*)HvVb2j=t*tBj7lbA z)~Q!n>lHEJ5P+?9%iy>@xBxLWxgtI1R=ZsG6H9njm462C27cxlc&!*g10?z%i;hs&Pyvn!2&qHu?`R^A);bf1Ab(n5Pdx zsTbptE|Swrwz<(R_ukzTu59zjs+;1{>Uy3}h8ZMiW{$H+MhB!w?W;;q4s6nmIBqY z=JlzGt5-9~>$yfh2PR&b892BjHEGd*1EgJBv^{GW=u|{0XsuvQzV9>c^bAf`*3F&7 zh;PI?jj=VeAb6Dy=t*f*sUyH4;1)lt?#@uQ`FJ$uIi9yoUj~m<**VMwx$E*Eh#gRGUVZ2GOzf9vAU`@ewJ;X!J*!A&=jF2I+_ASKKdU z9{yjy+7(jthich0AVC>Ey1GK`;G~z2EJ zD<~}L+{z;Gy)Z;JbU_nM^IMbYjw#Yt3r3dKQ+?wa<{l)YWW!V^>*>pDs8&;!yvVUg zA*vNwuTC;(Lxuz4kTpiuBWl7_q*}UrkCd&241v-8t9PH#E?7}ZS-p_e(O;-;o8A6%Q6M6Tyn<)^$ zZ4ppv;gDeM& z%yE(kabf=%oJa_bRs-oILwzMWwTv;W6NV)BU4-!6%xe9mfHw1Vb1W(arPWn^F1ADc z+q$}GL3*{zUP72RW>$s0o+MwWDHR=MLXjCY(+%W$>cnW?0g9Fgj+w#7iyb4~_2Pna zavF+lsIUnt5lz{8#X)=ouyUz$uv%XS!HM_uERPzhQ@)%MY2p0BwUFfn| zBxWzelMZ$%6cOjQi-#KwO()8icRUtT(#n`Nq_mqiJH=UqwVWm5fBrX(tB6drQU6A@b|<#YB(kBCG?iGl!{e+<#u&CO|R%=;uT0u&J{bV zvz;kTOPE(dAq zJhv#@Nbk0ZeC$iKL94WUzo9*lkot+1mXH{&%9_mSl5#XM#aelJr?Qozt1{0vl*r7) z#$tk$JZ4YeUO^ZXLGInJVK2qH!59ss!OH~~45mM>k=QjE7rLE85=n16gV!@)0FdtU z36dIM^t2wew^f%EsWm6nPTtEIJtlc;tS=B(=%ooQZ0C zrPUtNF(9al1@@;&TgIILBQ`-b`lXC5v#C|Ms7rhtAPFUIHM)uiQ69Z5B3(Tq0S2iU zZ0@{WfVKrTaju}>=q^!{h7vivTP5U)lf#41yr7W{qD?VQL~a(N43yX{O|vJJ(d*N$ zQ8&15(hg?ZT;B#VB3Fb&1BF)a&K`iA$gL9 zrQl;ll=Kfa(8rR7uNr0a{IzU#GJXLn+>6&_FcNQF2!N(d?%cC?TWR2Gt?4?$VsOS5 zf)&BlMyz!i>bEFxd$(qfKWrG0cw0L6jv{H+CFf*d zcScW~bNBLzhfE~RW;ZK|_j~x!Bjnp3{y~f6);#?xI~)v7{;JV5{nbi{!=Ufw_<{HP zbcb&Bst<8l1>>!=gf(EER8s}H_TS|r`jlq`^L_T+9V~M*Y)1E)Vd!|#Jd|(D;CAu0T#tnCxld1Hb?HT`(X-ec$1&TYCI@Bz4fU=luuhvUMXH93|Y{vY~ zES_>IELnlL&(-X4gTjn^%*MdJ_?JAsC5Dda25Gb?P9{4+*6N|}EF;E~Hk9F)HYaMh z+bw36NrbisB=Af-P}r-*>~?zvGbJ_s!!~xJ;%UGbB3^=xbAUl-Z25QAin)Rj=B8LC z@%VVXSjv|Dc8+*Fz%E=@GU)kbqyQfaPOUAfl;oUi-&1n}8PmJT$-)i7m2{z+V(Mk* z#ju~j<xe%PQ5|T9y{FLh5T2)utI+xWxkkBE3oPAai;8vk zt_PiavAldtcJ~B$&5YMkbH7r5n*fF+0zEqdN;qiEi`@m9YC4&^NU z=0;6sJ5+~K0*}vAA;ruya9o`I9no5|4Q5DtwPHFFi|!%OUrAv(C~r-XmF!j22uq>W z)^Fmp`9O*I7$?#ys`;>bl;PQ+5z6c$#|q2y#{ zhoxK$d0)Z(7xBM*pG5~O#nRZ;Yzk&mLl&h*Hhdw03mkw>c&hPG?0t31P+I4m`X}sV z1N(_RIOYJjD2EL{3r~U>3N-`thdwG1;aQ8>~* zWpoc+@{6W7Hq_h}Eq3t@9M&$|hckkKk}gs&k{N1~VBzHnHhY1taN&BD zPVbeD8sll;0$_K^hK5?s>!R zB#@)X`>ENi{tA_OX_Q1QaYxpNKGWVO{7Ke^b=?qm-FY4>er1Hyo*rxx#I@Fok85cp zW8C@znojV3g=Xv4hb9aKI(C$c>xMWEnfU@;FK1iuUg|qk-kQi%9J3s_(~h)Tyv}gX z2&tm_4`tJ>H0I|9%(e?16Gc7%Xu3V(v>s5qG^5hU2+|0R-l8ar1wqFM$O!?}iPO?f z8ml1huvGbS&%N85n7#6Q`(Ln9s_Iud9c}g%XQ$M5cXBkCHpfd-+}U1E*ubtTn<<@H z=K<%(6Dd3asU2EwF^aUY2FS z_IkYpL3nL1p&$sB#jL|iIN0BJ9`|`N>tuHKXpmZu+f`Y4&pr2??|hH{_d>Q?wkuRT21C>)E zx>go-P<@&lXS@DdfEf*q@iF;~RH)u1O0d&|B%3d7jSEhs>b+;kFd=9Q)>Y03*&lo9 zjq8&6n|XTO3Xv*GUOjPI|0x&)nHSagy&OIT%62`@(DS(tW2K}g`5g*jxhmD9LS z`Pnntlvs7t?t%T?W?G2KezG7R%@B?-LNr#lM5(rWRyeF>``l8r1yn4QVkfemu!}tV zTHeI6^J3y=uBTvcLmcj8d;12f-ss94;>}+J{^3+f6+~H5L@R`3$JarE5<9_^Seg}~ zJwYT98tfJ?%PzATZX7tnSLL|HG}vZoR7|<$1iGosA-4JMl};icr?tI~2ouOYS6qR6 z*L$T+SuE`-t`e;5!+IX5a|k6aq`(O)>!d7s=V3))DuUIu6wQ%kVb%bVHVP1uISYi; z(-^EUMucr`Dxe{ibRM2eGk{12nT4Q>VTXdkg#SyKAf;{d7N$_=p81!o!yu->AX1Nx z-Lk7Tse096FU2TugGMtM*~8XVX^PEa6HwXA>du_O3L^^bibN#zMIW_#vV;J8EQfrj zP;+p@=VUKhe3mPaxR4Y&Dv`UHLcv7^%#Pw!^iugz2~bRWLje&5CT*x|m9=cL zT;&X8cCuRtYKft8O?1%(UR|nO)%DQIK3dF*J<62nx{7gd5+z4Tcb#$}EYz}TrM>9J zBiIZplC$lXwP!u!=uQSH4%KKPJtxPThk{Af4WKVlPz*aae zJVVY*(SgQdi@7VjUF$>SuBlUMLlf)d0t#F`dbQb8>E%$ZP;A~K`yKU1RnA3#7i~#% z6g8-8Ar6&JP=GY*FYYYDs|eJRzUb##OIV|yD9!-8fll43P?eFPTI&>iQ!-J4nB_@2 zzO^c_a_(7_RxZA5KhwFC1qO|4St3mL%)d=jbspxCg}_%==M0&ou`MeoI1Q{%L8acU zlyejuq}WH0)v|Vvi*AjQTiW9dC#WTZouF`qP1Oulg(A~2gh(q4;c8cbvYCBddK0(r zJgWpIsz;H6YsMmokhK*H1W>RSOHVWBMAl7ejFpBi9S#k?YrY`Sk_zy{9w>EoJxZ?5 zrLP(tGxQHit?a-S+32G2u#ZtMW)PbX80#<}s+(4-%BRGTNFm9@WaRukivbyuH;U`p z=1L-r+^5XS3>j5_*~$&Y?XL%9X;RMkbT7z$BzFTnPziN2W`#31RaBm_xArtFwYOZK~Sb1SwiCK84efh#is`a+fhSxj@++En* zl8z%0@i7(RtlXGK-`cy9Rsc>JHezoy?-mv^j$f9bWI0KWH*HxH@ z4wA3Dq%rk_m8W$-IHaw|GNnVb{y}Ss?5dV)h5+i2DOxMMqr1aobCH%@P zDht=C)K$AS3s0n=Ei=fnA*`J(xh%_haGV+5_Ja(ETjR>Gtd%^l13ca-08R5?c63!1 z&+u3l&&`lBWFS`wL@;N%Y=M;vQic1JFqpg%xjNzNA^lU5F88)MP*){cH zCz7_^q}yMU*fbo|%agEau^E*;LdtJ5omVzuWCn^+E@8JL{}lMJzw>CzLr}r1R^0_6JL(>{~`8yww^OZLB%UU|IOW5|t64 z8BLkr6-kLW(Spij=w3FoytJEV*u4HM7{p5OGlOeL9xavP~soOLCAD{(UMg zFXr=Wr+fMzq@_(tSJIgH9=E>aiUe3ut1Bm~q93XXOw!yBldO&k|x4JCf=66j!wT8XkEUFKTJ$EKjNz>SiN?I6L` z4h-anY7t>=9yPS4%hjps*~;V@>uw@-2Lvfi?~-Kr=Rxunbv{B4B!#+Ag=uNSQtQq( zaK-4(E;fiH5>pF05&nVySC+{#54TX!q@nDIOpvS;x6%_+EGjuWne|as4{RW&yk)Vr zct%ME$duPCh%Duv!T={1(F#fRi>|AX%f>Z4P`kKt=ISDjf<9+?RpBGS!c1aM&iK!K zqBt-hSNv(RDXXh|X5h8FjR|I~9;L!$T=SDq&U|JbK(HzrIw&!_RU4*Z*sMD5W`MJL z&ZzVpxA4IPw2>(lu_KFDs|I3tgv#8)4RtJ>1SY%EpIB>oF^><`c{iT562~;w>y?1^ z#u*nzf>baC&GBu_p88Gu!O^}zUsid;Ya@oTV(O(yJh7KLBmNzrW;OHn{c^)!~RvB?_r`2YTqv4 zPS=C@KrH)m)%v2|r7cR#-b1I#RUvuHNMY_U&m6qS3fE$HK9?L2*GXeVMTzjSj=^7x zk4;~X@le|D z>Zk|Rbx&lB0SVm#Ra0zJu>Nia@UL;`Cn=T@2GOpLRWGS)iq87HbLML)$f+zkxpMBQ z{6i&PfnLoT+22J*iQ~F30dsy`CW*OOwNN#8+RZB(DR%Fa+2lmw6+$c=y9&Zr=Y56} zs2og23lycP?(E8NE&Nu&B9gu_xyH24)-9Gp(vgn^Z%*y#ib!%*B(^Ti73Vk`hoIZE z(&?bO6g3wX%#H3#=}Z9DndI`DqWLBc-t1$+IWCp7Xcc^5VzOZWvUG0S(Gm)hLRGW0 z(t^XkE@ocXAZx+7DI}F^=qmykV81Kimz!Q)Ru;(4SP%_6Th~df zt)q1Xmeg9sd(T#+q+^zq3qpV{IF7iNYQ>?dlOwXR)bd#6h-RJ7;L1S?x}Gs*%l0#~ zE#vyxC+4Us-j5N!V&l((1E&e`73Rpv@>cj2t`v!|HT()mmK=#ZBM4Nq=(X%yE9}d4 zSe&70jZxS_dbzu2sosqRLeq<2xtH1xBxIit zjFM!zsjfL+3DY%mE&>>Z#6Lub6T7k0oQeZND{3;MjA3wSfHqEDFo8;{kR;y%l~6Lcg+(zns!S0jXc;m)3kt|NB-%4nU$HoiXtrll z|C%RE$N@m~IG6A&N><%33c};L;0De6_TD!mig5PGQ%X`WeLW|q>riE&6IOpI1Q?|- zk>aR^#;Z)Ns9iAWyuyxKm%#)!p{)|mR1XyLCIk~+@6si;ZWS*n`NoOSz`C31u;a=D ztlzV#0A+QP@f+85BNg!K(2HvG&Wz-&W~ovebUbX`gm$o;EDKF$l!0+2C1g(@!g^|p zIh=KWnnFUX<>yu{B%9JJbj{R}TPG)+O#;e=dkYw*EW#@K%0dX6vslL}n-cRm#hI6O zX?QrNie+h`{o>X_21mL=(&7e;$+5lbhgO{j5CnP2)*3m8IH9UF@s`);i>ty7{7QD) ziWip7Wy?%~2o;Niqa`@rC-O=3h%aUW@C@N*u69*IN4%TiDwzgZ@r(jM0(2(_lHgGG zk1A$cs1_&X#Is}xv+7D5+DCW`saj-|k#hMQjg9AS3#&S?m*P`v>yKQs0Gc=(ZBb1d z9|dLsP1HcFj4o7nEyWoyz-15W72*_3Bn-{qkZ%5`H2E^)``WbeIF2_d?RFHMzCXx< zytTVF{tyyTqC`F_>+c>_*KJ5o50Z~P+xX8Pd~4b`=QU#G9B55N4RK%E_)@PS6j4;b zy;>~J$I`}26q3|R8(*>YuvQ(hI)we*m~1@c9ua%Pv@!O2hU|C;zj9W3Y<|EPuM~4V zYdn}X-tRS*I+wF_|0LX{7(9_7M+w<RQ{CYJR2< z%Q`64CT+aO`!N-DSHT3Z%wx2Gh3uXdLB2%6%B~l<@;EarhC$kR%4?zwTT!Dl7q?oJ z`b|mLZ0x}%Yh9H+PJ<1Om$x{PwN`Z_ed$EDwE7sULK*jrv_uj*dEirN>RF-aD z-b)SenKnM)HQ>q@t)QL7m%ZRMvJh7;hb2ui`%Oh>;w@HO?Q7D;mw62+tg;?4Th5<0 z70_hhxBPP2_)4#VUF^~)aDg>}VZ!vcpjMZ%dFAj1aZ@vy{Db|?c$?E4GcF)oJ3)>6 zD{151-iuPLrazr6l5n<&Wu!MB_;N^}eakTmThhsHp`X}?jMu?%R78=3xM&t?#%hWd zST1b@-b-?(YO1+dwWN_I6~!w2)FUmjoZG5S{3Vp=k=@bvc~9TPJ9I})aR)KWoPV76 z8kBiDVhu!0FV*bs@>Sg2169Mb^zxhLnf3wCc+J#x%4;zJ2k~r*T8Ok0693Ay@j>sg zS7_L}6JNPWqMA6$wm;7|GOh@knW!H%*5|EKT^$n01}PSV(7n>2#fB>SY9#rF*{Dos zxoMf-8ymh%28jZ zbg2A9=bELpYi*bHtDLV~RU6zaSgdDv1({4z_vASb{QFHLsrwvg=avfKE2R8cY+DgA z2f|+wa5)x=alRwn*GWzPANgv1!Xj30r+$Ufc7Bm_^&JGK?8T-kT~VMmWin>)c-r`o zbGYheDn_=>Ri|?N1Z2^^a5*5#SC=;4<$Qo+zA{9xJUxo^5QRB26wbS}ale#$*cBHd zZi3|p0H}mxE`3!YNPJB|jx~VQ_WgL;_?UCvu7z1aeI{JIY zjN#p27_);S!H91S17`!`uE0XVr!01(5I<4Qtq!1wTParl%tHooCNCV8YJPHXFdK=^ zMMLzqrm$q zOx^8A#(C2xeZ{woV^kI4AWVEsfhbLC@_;wKCvA+JOW`0hMWCIl1qypbq0GPr{HFp5 zRq{iXLsM9%>S3{gg|E(SVRo-9xdqb3hn+9#+L5ZQvC<~B@Qg7=y=ip~2hI&LMM>~r zw>{w6AX^B?$e+SmyhMelV=r&7ve%eFR{mBt3lEjRG2zy0d`5sx2`p8?Y+El;TVWDZaGUz(kW%FZ?A~6h; znI3*}Z1pnMYHZu3bQ>Rz6P(2|G|LeTg_8_hM6Pc_OI2=GJIL938YhIe;!)g>;uK}O znWEo%y0*KXJV@)ROP3W##HjG*vu>Y8hOlzV=saymK=Cg>y+BByx~ePPJjUNE^lH}E zUp1)Et7+(6q*;HV=JW`Z6C9dE`|1#JwbD2P{DG3ndRVoQAUK(>4jtM=E2_M@$;c|c z`eRPM>^N12^a|BA_K9G}0e*6Mc2p!+Q8dsr{gDSZcgA9~hM(cfZYP;zhWWX7hI17r z`%0mqg5~Nb&)tfwD~D5zOU1UnDQ&nHxXM?N07Z+*)`773muj&4(#9%R`r!-IqUHRBzCJ~^P`)9msQuI(+j9WPW77;b-Ky1ETJkU zxhg{^avjItu~<3hXT`SRT9J7hjqSb8BU@cwVXv-vXDK0!m`~lGWji^bD_DAQLsq<_ zcGKGxQd~{aUI`Ww03|w;lmnO_h{&^l4+oDg9p$&+?t$g z1xf^5LZ_c4zxis3gg17%*TV$EgOfzin^X}P2#3F7P@bvFI1)1#V@3fe#iRGM7n!YA zm~)9)#iRXfu8Qc<$uPhvie8a9H?6(U_JfVev=_HLckTY#Lu=D@lsi}KH^1Ymq|UP^ z)D=8A-ZeG<_VmBaQo($gGS~-E?zdnGh#x2}f&Z4*xUD0R91SE?1PhnF>BUvx<)CI9 z-z&U)7tL?^=xmWTb|2ZBNJQt7QE#98>4x3azl8&%ZYZYhp|4&}eNwi@F8vm_uMBuBH8 z!#$~7D{pN)bpF)fy|$TES6Ey>b!62kkw(SRm6ic>1$g_JpMkm3E>>o4bay`kt~T>R zdaXW%rMdetedPQZNX~M0nS8=&3Cr1jU1}O;iE&HpN?}L+?GHB_(d49(g)6zjmWlYU zyeg)Pe;3d2f{KlE%JGTxYwAy!^h?0$hoTp_y*@5gChwwvdo56NnrtGis}^o0c-B;P zP-ps6o2aec$57m&h5h;>Zzf6-)+{*KBfW;8>ZV|l4D&KPDJs<~Z9L)}$pP<}EiN3l z0-|Hjm%p;=WV@=`pX{)WxAmtQGhW@OApb0ws-3~0@I!Ou{MR(ULN3SkypV(%7{$*| zaS-kItRPg0%u?u;grNF?#4=y={;tSSbVI|nM9b;>+U=WWC~ERlxV}Fb7=P@Z`L|G0 zR~^#5RRErYKudjW>fXb9M!OW~zNI$1<*0cnh{6%|hly5_uGILjl4&Il;5Kxs&VM}k_RB;zLOhNIjWFxp+A8z6avRpivr)1P#{@HSfYyb(oJ3z84#i9 z2U^I?>SYVWrY5nhFyP@P{>GL2qngrbU51nO0Q|*G_zq&tLuRrZvjRJP1T_}EiObQ;fAM8QyoL4i@fn`Rtezh_RH86)64q$=Qm1Fu|HZ>J7zAZm4l;9FkJSNJLLU+z zA?6-uPDQTV*nTNwsBKCesAaNS;SX$y3nP7wh70>id_v2JJ@dg8Qalx%&o@!CDsdvJ z=&4y3N^tn9S}b!hh#{{pQR)GpW`|$NKPtX*QqJ_2YmC7{0&bATp((*FQ+h8ID;os0FBkAWRr_(#9QAwRUz|&`^j`+IhAeBO05*P+8?+s9nn$&aK}OQ8x{&W z3%MSvv$BzfRGMh90dY}YtV3PH&bPBU1bz2Izka{OnftpA#4hY>+5sA7ygY_Tn!`^ody!hnN!Re#6 zWCw-nAn7;1WRnQu>Oo!!5u?bMphD}@eZi?l4ow)|xP0@k*=Q zvb;#b%WS#&wBfgW@`5$3n4U?}^tLI9;@8P!Z{`^;0{nPOIUSbOEl{93VmLhlZeMP>2(i3bFz0V=65U#P z7ki`*X}1>;IeS^i-p2F#0a@#1qb*)%S(3NBU6t{bnLaY&gY2XGBsf&<6(ibl-n>%Y zoE}RS=DmNm3G2$HS+UTPBRPQbOtH%RNxQOdyR{s9nY|1v>Gj@f!j;1luzG0}le2{v z!}9>2{JC^VjR9qzMJWBV$f9IL{lzUUt9vD

8NsC0}h7hVspsYr?5!aY?W83x*c{ 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 literal 0 HcmV?d00001 diff --git a/.gradle/nb-cache/subprojects.ser b/.gradle/nb-cache/subprojects.ser new file mode 100644 index 0000000000000000000000000000000000000000..9acaa1ff7c2f3e979bef2d0fd17597d0eb3a549a GIT binary patch literal 659 zcma)(F>ezw6vy8ksg8(Jst$aBwhI!yNF5kj2`Nf~)arl}f$gNqcX>_S_-xmHNdp6X zhAyZB5(^_sr%njI1mA#_jUAqoN+c6_u_y7H$KmUXk@8GdClOR!n6|A38wARlM@wnr5|;IvOSx7n%rxck0^%5Av8(W=t>q)k)vf>l literal 0 HcmV?d00001 diff --git a/.gradle/nb-cache/trust/8BCC562A10043EFCC43B687948A6B209A652360CCFCBDB4C56CED32136AEA800 b/.gradle/nb-cache/trust/8BCC562A10043EFCC43B687948A6B209A652360CCFCBDB4C56CED32136AEA800 new file mode 100644 index 0000000..6aad0b0 --- /dev/null +++ b/.gradle/nb-cache/trust/8BCC562A10043EFCC43B687948A6B209A652360CCFCBDB4C56CED32136AEA800 @@ -0,0 +1 @@ +A529778372605FAC613352A2BF21BC257D08DB2AFEC2742AC2C16409AF1B84A9 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..024b0eb --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,46 @@ +/* +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Current File", + "request": "launch", + "mainClass": "${file}" + }, + { + "type": "java", + "name": "Pet_App", + "request": "launch", + "mainClass": "com.ffii.fhsmsc.Pet_App", + "projectName": "PET_APP", + "console": "internalConsole", + "vmArgs": "-Djava.util.logging.SimpleFormatter.format='%1$tF %1$tT %4$s %2$s %5$s%6$s%n'" + } + ] +} +*/ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Pet_App", + "request": "launch", + "mainClass": "com.ffii.fhsmsc.Pet_App", + "projectName": "FhsmsC" + }, + { + "type": "java", + "name": "Launch Local", + "request": "launch", + "mainClass": "com.ffii.fhsmsc.Pet_App", + "console": "internalConsole", + "projectName": "", + "args": "--spring.profiles.active=db-local,local" + } + ] +} \ No newline at end of file diff --git a/ReadMe.txt b/ReadMe.txt deleted file mode 100644 index 2e7bba5..0000000 --- a/ReadMe.txt +++ /dev/null @@ -1,34 +0,0 @@ -JAVA version : Openjdk 17 (jdk-17.0.2) - -For launch.json: -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "java", - "name": "FhsmsCApplication", - "request": "launch", - "mainClass": "com.ffii.fhsmsc.FhsmsCApplication", - "projectName": "FhsmsC" - }, - { - "type": "java", - "name": "Launch Local", - "request": "launch", - "mainClass": "com.ffii.fhsmsc.FhsmsCApplication", - "console": "internalConsole", - "projectName": "", - "args": "--spring.profiles.active=db-local,local" - } - ] -} - -######################### -For build war -1. run .\gradlew clean build -2. go to path: .\build\libs -3. copy war to Tomcat server - diff --git a/bin/main/application-db-anna.yml b/bin/main/application-db-anna.yml index 55fe7cd..d8f403e 100644 --- a/bin/main/application-db-anna.yml +++ b/bin/main/application-db-anna.yml @@ -1,7 +1,7 @@ spring: datasource: - jdbc-url: jdbc:mysql://192.168.1.228:3306/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + jdbc-url: jdbc:mysql://192.168.1.228:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/bin/main/application-db-prod.yml b/bin/main/application-db-prod.yml index a1509bf..fef53ad 100644 --- a/bin/main/application-db-prod.yml +++ b/bin/main/application-db-prod.yml @@ -1,7 +1,7 @@ spring: datasource: - jdbc-url: jdbc:mysql://127.0.0.1:3306/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + jdbc-url: jdbc:mysql://127.0.0.1:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/bin/main/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ b/bin/main/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ deleted file mode 100644 index 6c50f02..0000000 --- a/bin/main/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ +++ /dev/null @@ -1 +0,0 @@ -C:\workspace\FHSMS-C-backend\src\main\java\com\ffii\fhsmsc\modules\Menu\req\fb_menuResponsity.java \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/04_create_user(enson).sql b/bin/main/db/changelog/changes/enson_change/04_create_user(enson).sql deleted file mode 100644 index dbed519..0000000 --- a/bin/main/db/changelog/changes/enson_change/04_create_user(enson).sql +++ /dev/null @@ -1,8 +0,0 @@ ---liquibase formatted sql - ---changeset terence:insert setting ---comment: insert setting - -INSERT INTO `user` ( `id`, `created`, `createdBy`, `version`, `modified`, `modifiedBy`, `deleted`, `username`, `password`, `locked`, `expiryDate`, `name`, `locale`, `fullname`, `firstname`, `lastname`, `title`, `department`, `email`, `phone1`, `phone2`, `remarks`, `post` ) VALUES ( '2', NOW(), '2', '0', NOW(), '2', '0', '2fi2', '1234', '0', NULL, '2fi2', NULL, '2fi2', NULL, NULL, NULL, NULL, '', '', NULL, NULL, '' ); - -INSERT INTO `user_group` (`groupId`, `userId`) VALUES ('2', '2'); diff --git a/bin/main/db/changelog/changes/enson_change/05_create_food1.sql b/bin/main/db/changelog/changes/enson_change/05_create_food1.sql deleted file mode 100644 index aed6f3e..0000000 --- a/bin/main/db/changelog/changes/enson_change/05_create_food1.sql +++ /dev/null @@ -1,54 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `food1` ( - `id` int(11) NOT NULL, - `name` varchar(100) NOT NULL, - `kcal` decimal(10,2) DEFAULT NULL, - `protein` decimal(10,2) NOT NULL DEFAULT 0.00, - `fat` decimal(10,2) NOT NULL DEFAULT 0.00, - `satFat` decimal(10,2) NOT NULL DEFAULT 0.00, - `carbo` decimal(10,2) NOT NULL DEFAULT 0.00, - `sodium` decimal(10,2) NOT NULL DEFAULT 0.00, - `Ingredients` varchar(255) DEFAULT NULL, - `food_type` varchar(255) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -INSERT INTO `food1` (`id`, `name`, `kcal`, `protein`, `fat`, `satFat`, `carbo`, `sodium`, `Ingredients`, `food_type`) VALUES -(1, 'Apple', 52.00, 0.00, 0.00, 0.00, 14.00, 0.00, NULL, 'fruit'), -(2, 'Banana', 105.00, 1.30, 0.30, 0.10, 27.00, 1.00, NULL, 'fruit'), -(3, 'Chicken breast', 165.00, 31.00, 6.10, 2.00, 1.00, 69.00, NULL, 'food'), -(4, 'Brown rice', 216.00, 5.00, 3.00, 0.40, 45.00, 0.00, NULL, 'food'), -(5, 'Yogurt', 148.00, 5.20, 6.10, 3.40, 10.00, 125.00, NULL, 'food'), -(6, 'Egg', 78.00, 6.30, 5.60, 1.60, 0.40, 62.00, NULL, 'food'), -(7, 'Avocado', 160.00, 2.00, 14.60, 2.00, 8.50, 7.00, NULL, 'fruit'), -(8, 'Salmon', 206.00, 22.00, 13.60, 3.80, 5.00, 0.00, NULL, 'food'), -(9, 'Spinach', 23.00, 2.70, 0.40, 0.10, 3.60, 79.00, NULL, 'vegetable'), -(10, 'Carrot', 41.00, 0.90, 0.20, 0.00, 9.60, 69.00, NULL, 'vegetable'), -(11, 'Broccoli', 34.00, 2.80, 0.60, 0.20, 6.60, 66.00, NULL, 'vegetable'), -(12, 'Potato', 77.00, 2.00, 0.10, 0.00, 17.30, 10.00, NULL, 'vegetable'), -(13, 'Sweet potato', 101.00, 1.60, 0.10, 0.00, 22.00, 3.00, NULL, 'vegetable'), -(14, 'Onion', 40.00, 1.40, 0.10, 0.00, 9.30, 3.00, NULL, 'vegetable'), -(15, 'Garlic', 140.00, 6.70, 15.40, 3.30, 6.20, 167.00, NULL, 'food'), -(16, 'Tomato', 18.00, 0.90, 0.20, 0.00, 3.90, 5.00, NULL, 'vegetable'), -(17, 'Cucumber', 16.00, 0.70, 0.10, 0.00, 3.80, 2.00, NULL, 'fruit'), -(18, 'Lettuce', 8.00, 0.80, 0.20, 0.10, 1.70, 5.00, NULL, 'vegetable'), -(19, 'Bread', 265.00, 9.40, 4.60, 1.30, 52.00, 150.00, NULL, 'food'), -(20, 'Pasta', 131.00, 5.50, 1.00, 0.20, 26.00, 0.00, NULL, 'food'), -(21, 'Cheese', 402.00, 20.60, 33.10, 23.20, 1.30, 0.00, NULL, 'food'), -(22, 'Milk', 50.00, 3.30, 3.30, 1.70, 4.80, 120.00, NULL, 'drink'), -(23, 'Beef', 250.00, 22.00, 21.00, 8.00, 0.00, 50.00, NULL, 'food'), -(24, 'Pork', 241.00, 15.10, 19.70, 7.30, 0.00, 49.00, NULL, 'food'), -(25, 'Lamb', 294.00, 17.50, 23.20, 9.20, 0.00, 0.00, NULL, 'food'), -(26, 'Chicken thigh', 197.00, 27.00, 14.90, 5.20, 0.00, 0.00, NULL, 'food'); - - -ALTER TABLE `food1` - ADD PRIMARY KEY (`id`); - -ALTER TABLE `food1` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27; -COMMIT; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/06_create_food_information.sql b/bin/main/db/changelog/changes/enson_change/06_create_food_information.sql deleted file mode 100644 index 4420cb9..0000000 --- a/bin/main/db/changelog/changes/enson_change/06_create_food_information.sql +++ /dev/null @@ -1,19 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `food_items` ( - `id` int(11) NOT NULL, - `name` varchar(255) NOT NULL, - `kcal` float DEFAULT NULL, - `protein` float DEFAULT NULL, - `fat` float DEFAULT NULL, - `sat_fat` float DEFAULT NULL, - `carbo` float DEFAULT NULL, - `sodium` float DEFAULT NULL, - `date` datetime DEFAULT NULL, - `size` float DEFAULT NULL, - `meal` varchar(50) DEFAULT NULL, - `user_id` int(11) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/07_alter_food_information.sql b/bin/main/db/changelog/changes/enson_change/07_alter_food_information.sql deleted file mode 100644 index 214f255..0000000 --- a/bin/main/db/changelog/changes/enson_change/07_alter_food_information.sql +++ /dev/null @@ -1,352 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Alter table and insert data - -INSERT INTO `food_items` (`id`, `name`, `kcal`, `protein`, `fat`, `sat_fat`, `carbo`, `sodium`, `date`, `size`, `meal`, `user_id`) VALUES -(4, 'Banana', 105, 1.3, 0.3, 0.1, 27, 1, '2024-11-12 03:36:53', 100, 'breakfast', 1), -(5, 'Banana', 105, 1.3, 0.3, 0.1, 27, 1, '2024-11-10 04:04:28', 100, 'breakfast', 2), -(7, 'Banana', 9450, 117, 27, 9, 2430, 90, '2024-11-11 14:20:39', 9000, 'breakfast', 1), -(16, 'Salmon', 206, 22, 13.6, 3.8, 5, 0, '2024-11-14 02:02:19', 100, 'Dinner', 1), -(21, 'Pork', 180.8, 11.3, 14.8, 5.5, 0, 36.8, '2024-11-04 06:09:00', 75, 'Breakfast', 1), -(22, 'Pork', 337.4, 21.1, 27.6, 10.2, 0, 68.6, '2024-11-04 13:06:00', 140, 'Lunch', 1), -(23, 'Bread', 532.6, 18.9, 9.2, 2.6, 104.5, 301.5, '2024-11-04 17:28:00', 201, 'Dinner', 1), -(24, 'Garlic', 436.8, 20.9, 48, 10.3, 19.3, 521, '2024-11-04 17:28:00', 312, 'Dinner', 1), -(25, 'Bread', 1240.2, 44, 21.5, 6.1, 243.4, 702, '2024-11-05 06:40:00', 468, 'Breakfast', 1), -(26, 'Cucumber', 26.4, 1.2, 0.2, 0, 6.3, 3.3, '2024-11-05 06:40:00', 165, 'Breakfast', 1), -(27, 'Apple', 86.8, 0, 0, 0, 23.4, 0, '2024-11-05 12:35:00', 167, 'Lunch', 1), -(28, 'Bread', 638.7, 22.7, 11.1, 3.1, 125.3, 361.5, '2024-11-05 12:35:00', 241, 'Lunch', 1), -(29, 'Milk', 63.5, 4.2, 4.2, 2.2, 6.1, 152.4, '2024-11-05 17:36:00', 127, 'Dinner', 1), -(30, 'Broccoli', 31.6, 2.6, 0.6, 0.2, 6.1, 61.4, '2024-11-06 08:02:00', 93, 'Breakfast', 1), -(31, 'Potato', 184, 4.8, 0.2, 0, 41.3, 23.9, '2024-11-06 11:54:00', 239, 'Lunch', 1), -(32, 'Brown rice', 395.3, 9.2, 5.5, 0.7, 82.4, 0, '2024-11-06 11:54:00', 183, 'Lunch', 1), -(33, 'Yogurt', 130.2, 4.6, 5.4, 3, 8.8, 110, '2024-11-06 17:23:00', 88, 'Dinner', 1), -(34, 'Milk', 235, 15.5, 15.5, 8, 22.6, 564, '2024-11-07 06:00:00', 470, 'Breakfast', 1), -(35, 'Pasta', 279, 11.7, 2.1, 0.4, 55.4, 0, '2024-11-07 06:00:00', 213, 'Breakfast', 1), -(36, 'Lamb', 385.1, 22.9, 30.4, 12.1, 0, 0, '2024-11-07 13:43:00', 131, 'Lunch', 1), -(37, 'Yogurt', 497.3, 17.5, 20.5, 11.4, 33.6, 420, '2024-11-07 13:43:00', 336, 'Lunch', 1), -(38, 'Egg', 122.5, 9.9, 8.8, 2.5, 0.6, 97.3, '2024-11-07 19:13:00', 157, 'Dinner', 1), -(39, 'Carrot', 89, 2, 0.4, 0, 20.8, 149.7, '2024-11-07 19:13:00', 217, 'Dinner', 1), -(40, 'Garlic', 680.4, 32.6, 74.8, 16, 30.1, 811.6, '2024-11-08 08:52:00', 486, 'Breakfast', 1), -(41, 'Egg', 79.6, 6.4, 5.7, 1.6, 0.4, 63.2, '2024-11-08 08:52:00', 102, 'Breakfast', 1), -(42, 'Potato', 63.9, 1.7, 0.1, 0, 14.4, 8.3, '2024-11-08 13:22:00', 83, 'Lunch', 1), -(43, 'Salmon', 984.7, 105.2, 65, 18.2, 23.9, 0, '2024-11-08 19:18:00', 478, 'Dinner', 1), -(44, 'Tomato', 86, 4.3, 1, 0, 18.6, 23.9, '2024-11-09 06:19:00', 478, 'Breakfast', 1), -(45, 'Garlic', 518, 24.8, 57, 12.2, 22.9, 617.9, '2024-11-09 11:32:00', 370, 'Lunch', 1), -(46, 'Beef', 907.5, 79.9, 76.2, 29, 0, 181.5, '2024-11-09 11:32:00', 363, 'Lunch', 1), -(47, 'Beef', 517.5, 45.5, 43.5, 16.6, 0, 103.5, '2024-11-09 18:54:00', 207, 'Dinner', 1), -(48, 'Brown rice', 658.8, 15.2, 9.1, 1.2, 137.2, 0, '2024-11-09 18:54:00', 305, 'Dinner', 1), -(49, 'Egg', 69.4, 5.6, 5, 1.4, 0.4, 55.2, '2024-11-10 08:40:00', 89, 'Breakfast', 1), -(50, 'Apple', 90, 0, 0, 0, 24.2, 0, '2024-11-10 11:17:00', 173, 'Lunch', 1), -(51, 'Chicken breast', 227.7, 42.8, 8.4, 2.8, 0, 95.2, '2024-11-10 11:17:00', 138, 'Lunch', 1), -(52, 'Brown rice', 561.6, 13, 7.8, 1, 117, 0, '2024-11-10 17:05:00', 260, 'Dinner', 1), -(53, 'Spinach', 85.3, 10, 1.5, 0.4, 13.4, 293.1, '2024-11-04 08:47:00', 371, 'Breakfast', 2), -(54, 'Potato', 224.8, 5.8, 0.3, 0, 50.5, 29.2, '2024-11-04 08:47:00', 292, 'Breakfast', 2), -(55, 'Pork', 282, 17.7, 23, 8.5, 0, 57.3, '2024-11-04 13:48:00', 117, 'Lunch', 2), -(56, 'Cheese', 695.5, 35.6, 57.3, 40.1, 2.2, 0, '2024-11-04 19:05:00', 173, 'Dinner', 2), -(57, 'Cucumber', 16, 0.7, 0.1, 0, 3.8, 2, '2024-11-05 07:37:00', 100, 'Breakfast', 2), -(58, 'Cheese', 1523.6, 78.1, 125.4, 87.9, 4.9, 0, '2024-11-05 07:37:00', 379, 'Breakfast', 2), -(59, 'Chicken thigh', 374.3, 51.3, 28.3, 9.9, 0, 0, '2024-11-05 13:53:00', 190, 'Lunch', 2), -(60, 'Chicken thigh', 439.3, 60.2, 33.2, 11.6, 0, 0, '2024-11-05 13:53:00', 223, 'Lunch', 2), -(61, 'Garlic', 520.8, 24.9, 57.3, 12.3, 23.1, 621.2, '2024-11-05 18:09:00', 372, 'Dinner', 2), -(62, 'Apple', 210.6, 0, 0, 0, 56.7, 0, '2024-11-05 18:09:00', 405, 'Dinner', 2), -(63, 'Pasta', 191.3, 8, 1.5, 0.3, 38, 0, '2024-11-06 08:19:00', 146, 'Breakfast', 2), -(64, 'Yogurt', 338.9, 11.9, 14, 7.8, 22.9, 286.2, '2024-11-06 13:41:00', 229, 'Lunch', 2), -(65, 'Cucumber', 41.9, 1.8, 0.3, 0, 10, 5.2, '2024-11-06 13:41:00', 262, 'Lunch', 2), -(66, 'Potato', 170.2, 4.4, 0.2, 0, 38.2, 22.1, '2024-11-06 17:15:00', 221, 'Dinner', 2), -(67, 'Carrot', 125.5, 2.8, 0.6, 0, 29.4, 211.1, '2024-11-06 17:15:00', 306, 'Dinner', 2), -(68, 'Chicken thigh', 496.4, 68, 37.5, 13.1, 0, 0, '2024-11-07 08:03:00', 252, 'Breakfast', 2), -(69, 'Egg', 59.3, 4.8, 4.3, 1.2, 0.3, 47.1, '2024-11-07 08:03:00', 76, 'Breakfast', 2), -(70, 'Onion', 117.2, 4.1, 0.3, 0, 27.2, 8.8, '2024-11-07 12:33:00', 293, 'Lunch', 2), -(71, 'Pasta', 119.2, 5, 0.9, 0.2, 23.7, 0, '2024-11-07 12:33:00', 91, 'Lunch', 2), -(72, 'Carrot', 81.2, 1.8, 0.4, 0, 19, 136.6, '2024-11-07 17:09:00', 198, 'Dinner', 2), -(73, 'Spinach', 70.4, 8.3, 1.2, 0.3, 11, 241.7, '2024-11-08 07:29:00', 306, 'Breakfast', 2), -(74, 'Bread', 1240.2, 44, 21.5, 6.1, 243.4, 702, '2024-11-08 07:29:00', 468, 'Breakfast', 2), -(75, 'Apple', 225.7, 0, 0, 0, 60.8, 0, '2024-11-08 13:24:00', 434, 'Lunch', 2), -(76, 'Garlic', 491.4, 23.5, 54.1, 11.6, 21.8, 586.2, '2024-11-08 13:24:00', 351, 'Lunch', 2), -(77, 'Chicken breast', 183.2, 34.4, 6.8, 2.2, 0, 76.6, '2024-11-08 18:06:00', 111, 'Dinner', 2), -(78, 'Banana', 487.2, 6, 1.4, 0.5, 125.3, 4.6, '2024-11-08 18:06:00', 464, 'Dinner', 2), -(79, 'Tomato', 21.2, 1.1, 0.2, 0, 4.6, 5.9, '2024-11-09 06:11:00', 118, 'Breakfast', 2), -(80, 'Spinach', 110.9, 13, 1.9, 0.5, 17.4, 380.8, '2024-11-09 06:11:00', 482, 'Breakfast', 2), -(81, 'Cucumber', 68, 3, 0.4, 0, 16.1, 8.5, '2024-11-09 12:33:00', 425, 'Lunch', 2), -(82, 'Chicken breast', 189.7, 35.6, 7, 2.3, 0, 79.3, '2024-11-09 17:53:00', 115, 'Dinner', 2), -(83, 'Lamb', 1396.5, 83.1, 110.2, 43.7, 0, 0, '2024-11-10 08:16:00', 475, 'Breakfast', 2), -(84, 'Lamb', 1437.7, 85.6, 113.4, 45, 0, 0, '2024-11-10 12:08:00', 489, 'Lunch', 2), -(85, 'Bread', 561.8, 19.9, 9.8, 2.8, 110.2, 318, '2024-11-10 12:08:00', 212, 'Lunch', 2), -(86, 'Chicken thigh', 478.7, 65.6, 36.2, 12.6, 0, 0, '2024-11-10 18:47:00', 243, 'Dinner', 2), -(87, 'Apple', 43.2, 0, 0, 0, 11.6, 0, '2024-11-04 08:13:00', 83, 'Breakfast', 3), -(88, 'Garlic', 109.2, 5.2, 12, 2.6, 4.8, 130.3, '2024-11-04 11:22:00', 78, 'Lunch', 3), -(89, 'Broccoli', 158.8, 13.1, 2.8, 0.9, 30.8, 308.2, '2024-11-04 11:22:00', 467, 'Lunch', 3), -(90, 'Milk', 200, 13.2, 13.2, 6.8, 19.2, 480, '2024-11-04 18:25:00', 400, 'Dinner', 3), -(91, 'Cheese', 1290.4, 66.1, 106.3, 74.5, 4.2, 0, '2024-11-05 07:51:00', 321, 'Breakfast', 3), -(92, 'Tomato', 71.6, 3.6, 0.8, 0, 15.5, 19.9, '2024-11-05 07:51:00', 398, 'Breakfast', 3), -(93, 'Lamb', 308.7, 18.4, 24.4, 9.7, 0, 0, '2024-11-05 13:43:00', 105, 'Lunch', 3), -(94, 'Yogurt', 464.7, 16.3, 19.2, 10.7, 31.4, 392.5, '2024-11-05 17:15:00', 314, 'Dinner', 3), -(95, 'Lamb', 726.2, 43.2, 57.3, 22.7, 0, 0, '2024-11-06 08:12:00', 247, 'Breakfast', 3), -(96, 'Beef', 607.5, 53.5, 51, 19.4, 0, 121.5, '2024-11-06 08:12:00', 243, 'Breakfast', 3), -(97, 'Garlic', 427, 20.4, 47, 10.1, 18.9, 509.3, '2024-11-06 11:43:00', 305, 'Lunch', 3), -(98, 'Salmon', 271.9, 29, 18, 5, 6.6, 0, '2024-11-06 19:18:00', 132, 'Dinner', 3), -(99, 'Salmon', 366.7, 39.2, 24.2, 6.8, 8.9, 0, '2024-11-07 07:44:00', 178, 'Breakfast', 3), -(100, 'Sweet potato', 404, 6.4, 0.4, 0, 88, 12, '2024-11-07 12:21:00', 400, 'Lunch', 3), -(101, 'Sweet potato', 101, 1.6, 0.1, 0, 22, 3, '2024-11-07 18:45:00', 100, 'Dinner', 3), -(102, 'Lettuce', 8.6, 0.9, 0.2, 0.1, 1.8, 5.4, '2024-11-08 08:42:00', 107, 'Breakfast', 3), -(103, 'Garlic', 233.8, 11.2, 25.7, 5.5, 10.4, 278.9, '2024-11-08 08:42:00', 167, 'Breakfast', 3), -(104, 'Milk', 207.5, 13.7, 13.7, 7.1, 19.9, 498, '2024-11-08 11:06:00', 415, 'Lunch', 3), -(105, 'Cheese', 747.7, 38.3, 61.6, 43.2, 2.4, 0, '2024-11-08 11:06:00', 186, 'Lunch', 3), -(106, 'Salmon', 828.1, 88.4, 54.7, 15.3, 20.1, 0, '2024-11-08 19:08:00', 402, 'Dinner', 3), -(107, 'Yogurt', 216.1, 7.6, 8.9, 5, 14.6, 182.5, '2024-11-08 19:08:00', 146, 'Dinner', 3), -(108, 'Bread', 816.2, 29, 14.2, 4, 160.2, 462, '2024-11-09 06:17:00', 308, 'Breakfast', 3), -(109, 'Onion', 190.4, 6.7, 0.5, 0, 44.3, 14.3, '2024-11-09 13:04:00', 476, 'Lunch', 3), -(110, 'Banana', 280.3, 3.5, 0.8, 0.3, 72.1, 2.7, '2024-11-09 13:04:00', 267, 'Lunch', 3), -(111, 'Avocado', 574.4, 7.2, 52.4, 7.2, 30.5, 25.1, '2024-11-09 17:53:00', 359, 'Dinner', 3), -(112, 'Carrot', 41.4, 0.9, 0.2, 0, 9.7, 69.7, '2024-11-10 06:57:00', 101, 'Breakfast', 3), -(113, 'Cheese', 1093.4, 56, 90, 63.1, 3.5, 0, '2024-11-10 11:51:00', 272, 'Lunch', 3), -(114, 'Pork', 253.1, 15.9, 20.7, 7.7, 0, 51.5, '2024-11-10 11:51:00', 105, 'Lunch', 3), -(115, 'Lettuce', 8.6, 0.9, 0.2, 0.1, 1.8, 5.4, '2024-11-10 17:02:00', 108, 'Dinner', 3), -(116, 'Milk', 98, 6.5, 6.5, 3.3, 9.4, 235.2, '2024-11-10 17:02:00', 196, 'Dinner', 3), -(117, 'Cucumber', 69.3, 3, 0.4, 0, 16.5, 8.7, '2024-11-04 07:44:00', 433, 'Breakfast', 4), -(118, 'Pasta', 482.1, 20.2, 3.7, 0.7, 95.7, 0, '2024-11-04 07:44:00', 368, 'Breakfast', 4), -(119, 'Lamb', 358.7, 21.3, 28.3, 11.2, 0, 0, '2024-11-04 11:37:00', 122, 'Lunch', 4), -(120, 'Pork', 257.9, 16.2, 21.1, 7.8, 0, 52.4, '2024-11-04 11:37:00', 107, 'Lunch', 4), -(121, 'Banana', 269.8, 3.3, 0.8, 0.3, 69.4, 2.6, '2024-11-04 18:32:00', 257, 'Dinner', 4), -(122, 'Tomato', 24.7, 1.2, 0.3, 0, 5.3, 6.9, '2024-11-04 18:32:00', 137, 'Dinner', 4), -(123, 'Yogurt', 384.8, 13.5, 15.9, 8.8, 26, 325, '2024-11-05 06:05:00', 260, 'Breakfast', 4), -(124, 'Yogurt', 380.4, 13.4, 15.7, 8.7, 25.7, 321.2, '2024-11-05 06:05:00', 257, 'Breakfast', 4), -(125, 'Lettuce', 17, 1.7, 0.4, 0.2, 3.6, 10.6, '2024-11-05 12:17:00', 212, 'Lunch', 4), -(126, 'Milk', 214, 14.1, 14.1, 7.3, 20.5, 513.6, '2024-11-05 12:17:00', 428, 'Lunch', 4), -(127, 'Egg', 244.9, 19.8, 17.6, 5, 1.3, 194.7, '2024-11-05 17:57:00', 314, 'Dinner', 4), -(128, 'Pork', 1185.7, 74.3, 96.9, 35.9, 0, 241.1, '2024-11-05 17:57:00', 492, 'Dinner', 4), -(129, 'Yogurt', 519.5, 18.3, 21.4, 11.9, 35.1, 438.8, '2024-11-06 06:03:00', 351, 'Breakfast', 4), -(130, 'Sweet potato', 502, 8, 0.5, 0, 109.3, 14.9, '2024-11-06 06:03:00', 497, 'Breakfast', 4), -(131, 'Bread', 1017.6, 36.1, 17.7, 5, 199.7, 576, '2024-11-06 12:56:00', 384, 'Lunch', 4), -(132, 'Lamb', 1237.7, 73.7, 97.7, 38.7, 0, 0, '2024-11-06 18:02:00', 421, 'Dinner', 4), -(133, 'Avocado', 384, 4.8, 35, 4.8, 20.4, 16.8, '2024-11-07 07:48:00', 240, 'Breakfast', 4), -(134, 'Milk', 103.5, 6.8, 6.8, 3.5, 9.9, 248.4, '2024-11-07 07:48:00', 207, 'Breakfast', 4), -(135, 'Broccoli', 124.8, 10.3, 2.2, 0.7, 24.2, 242.2, '2024-11-07 13:38:00', 367, 'Lunch', 4), -(136, 'Cheese', 932.6, 47.8, 76.8, 53.8, 3, 0, '2024-11-07 13:38:00', 232, 'Lunch', 4), -(137, 'Lettuce', 19.2, 1.9, 0.5, 0.2, 4.1, 12, '2024-11-07 17:46:00', 240, 'Dinner', 4), -(138, 'Lamb', 655.6, 39, 51.7, 20.5, 0, 0, '2024-11-07 17:46:00', 223, 'Dinner', 4), -(139, 'Chicken thigh', 922, 126.4, 69.7, 24.3, 0, 0, '2024-11-08 06:52:00', 468, 'Breakfast', 4), -(140, 'Chicken thigh', 165.5, 22.7, 12.5, 4.4, 0, 0, '2024-11-08 06:52:00', 84, 'Breakfast', 4), -(141, 'Brown rice', 607, 14.1, 8.4, 1.1, 126.5, 0, '2024-11-08 11:38:00', 281, 'Lunch', 4), -(142, 'Yogurt', 627.5, 22, 25.9, 14.4, 42.4, 530, '2024-11-08 18:25:00', 424, 'Dinner', 4), -(143, 'Chicken breast', 94, 17.7, 3.5, 1.1, 0, 39.3, '2024-11-09 08:14:00', 57, 'Breakfast', 4), -(144, 'Cucumber', 64.2, 2.8, 0.4, 0, 15.2, 8, '2024-11-09 11:24:00', 401, 'Lunch', 4), -(145, 'Cucumber', 20.5, 0.9, 0.1, 0, 4.9, 2.6, '2024-11-09 19:34:00', 128, 'Dinner', 4), -(146, 'Yogurt', 569.8, 20, 23.5, 13.1, 38.5, 481.2, '2024-11-09 19:34:00', 385, 'Dinner', 4), -(147, 'Egg', 172.4, 13.9, 12.4, 3.5, 0.9, 137, '2024-11-10 06:41:00', 221, 'Breakfast', 4), -(148, 'Milk', 218.5, 14.4, 14.4, 7.4, 21, 524.4, '2024-11-10 12:55:00', 437, 'Lunch', 4), -(149, 'Brown rice', 712.8, 16.5, 9.9, 1.3, 148.5, 0, '2024-11-10 12:55:00', 330, 'Lunch', 4), -(150, 'Garlic', 324.8, 15.5, 35.7, 7.7, 14.4, 387.4, '2024-11-10 18:24:00', 232, 'Dinner', 4), -(151, 'Potato', 57.8, 1.5, 0.1, 0, 13, 7.5, '2024-11-10 18:24:00', 75, 'Dinner', 4), -(152, 'Potato', 60.8, 1.6, 0.1, 0, 13.7, 7.9, '2024-11-04 07:23:00', 79, 'Breakfast', 5), -(153, 'Tomato', 85, 4.2, 0.9, 0, 18.4, 23.6, '2024-11-04 07:23:00', 472, 'Breakfast', 5), -(154, 'Sweet potato', 484.8, 7.7, 0.5, 0, 105.6, 14.4, '2024-11-04 11:51:00', 480, 'Lunch', 5), -(155, 'Lamb', 820.3, 48.8, 64.7, 25.7, 0, 0, '2024-11-04 17:50:00', 279, 'Dinner', 5), -(156, 'Pork', 301.2, 18.9, 24.6, 9.1, 0, 61.2, '2024-11-05 06:15:00', 125, 'Breakfast', 5), -(157, 'Bread', 1057.4, 37.5, 18.4, 5.2, 207.5, 598.5, '2024-11-05 06:15:00', 399, 'Breakfast', 5), -(158, 'Tomato', 85.9, 4.3, 1, 0, 18.6, 23.8, '2024-11-05 11:50:00', 477, 'Lunch', 5), -(159, 'Pork', 819.4, 51.3, 67, 24.8, 0, 166.6, '2024-11-05 11:50:00', 340, 'Lunch', 5), -(160, 'Egg', 48.4, 3.9, 3.5, 1, 0.2, 38.4, '2024-11-05 18:51:00', 62, 'Dinner', 5), -(161, 'Cucumber', 58.1, 2.5, 0.4, 0, 13.8, 7.3, '2024-11-05 18:51:00', 363, 'Dinner', 5), -(162, 'Garlic', 642.6, 30.8, 70.7, 15.1, 28.5, 766.5, '2024-11-06 08:26:00', 459, 'Breakfast', 5), -(163, 'Lettuce', 11, 1.1, 0.3, 0.1, 2.3, 6.9, '2024-11-06 08:26:00', 137, 'Breakfast', 5), -(164, 'Garlic', 253.4, 12.1, 27.9, 6, 11.2, 302.3, '2024-11-06 11:43:00', 181, 'Lunch', 5), -(165, 'Yogurt', 389.2, 13.7, 16, 8.9, 26.3, 328.8, '2024-11-06 11:43:00', 263, 'Lunch', 5), -(166, 'Beef', 1125, 99, 94.5, 36, 0, 225, '2024-11-06 18:56:00', 450, 'Dinner', 5), -(167, 'Brown rice', 382.3, 8.8, 5.3, 0.7, 79.7, 0, '2024-11-07 07:09:00', 177, 'Breakfast', 5), -(168, 'Avocado', 540.8, 6.8, 49.3, 6.8, 28.7, 23.7, '2024-11-07 13:16:00', 338, 'Lunch', 5), -(169, 'Broccoli', 154.7, 12.7, 2.7, 0.9, 30, 300.3, '2024-11-07 13:16:00', 455, 'Lunch', 5), -(170, 'Apple', 215.8, 0, 0, 0, 58.1, 0, '2024-11-07 18:54:00', 415, 'Dinner', 5), -(171, 'Spinach', 50.1, 5.9, 0.9, 0.2, 7.8, 172.2, '2024-11-08 07:10:00', 218, 'Breakfast', 5), -(172, 'Broccoli', 24.1, 2, 0.4, 0.1, 4.7, 46.9, '2024-11-08 11:41:00', 71, 'Lunch', 5), -(173, 'Milk', 189.5, 12.5, 12.5, 6.4, 18.2, 454.8, '2024-11-08 17:13:00', 379, 'Dinner', 5), -(174, 'Cheese', 1893.4, 97, 155.9, 109.3, 6.1, 0, '2024-11-08 17:13:00', 471, 'Dinner', 5), -(175, 'Salmon', 253.4, 27.1, 16.7, 4.7, 6.2, 0, '2024-11-09 07:15:00', 123, 'Breakfast', 5), -(176, 'Lettuce', 34.6, 3.5, 0.9, 0.4, 7.3, 21.6, '2024-11-09 07:15:00', 432, 'Breakfast', 5), -(177, 'Lettuce', 7.4, 0.7, 0.2, 0.1, 1.6, 4.7, '2024-11-09 12:38:00', 93, 'Lunch', 5), -(178, 'Spinach', 57.5, 6.8, 1, 0.2, 9, 197.5, '2024-11-09 12:38:00', 250, 'Lunch', 5), -(179, 'Cucumber', 27, 1.2, 0.2, 0, 6.4, 3.4, '2024-11-09 17:59:00', 169, 'Dinner', 5), -(180, 'Egg', 81.1, 6.6, 5.8, 1.7, 0.4, 64.5, '2024-11-09 17:59:00', 104, 'Dinner', 5), -(181, 'Tomato', 45.9, 2.3, 0.5, 0, 9.9, 12.8, '2024-11-10 07:50:00', 255, 'Breakfast', 5), -(182, 'Tomato', 81.9, 4.1, 0.9, 0, 17.7, 22.8, '2024-11-10 12:02:00', 455, 'Lunch', 5), -(183, 'Salmon', 379, 40.5, 25, 7, 9.2, 0, '2024-11-10 18:02:00', 184, 'Dinner', 5), -(184, 'Lamb', 308.7, 18.4, 24.4, 9.7, 0, 0, '2024-11-04 07:46:00', 105, 'Breakfast', 6), -(185, 'Lamb', 787.9, 46.9, 62.2, 24.7, 0, 0, '2024-11-04 07:46:00', 268, 'Breakfast', 6), -(186, 'Tomato', 76, 3.8, 0.8, 0, 16.5, 21.1, '2024-11-04 12:48:00', 422, 'Lunch', 6), -(187, 'Potato', 370.4, 9.6, 0.5, 0, 83.2, 48.1, '2024-11-04 12:48:00', 481, 'Lunch', 6), -(188, 'Lettuce', 21, 2.1, 0.5, 0.3, 4.5, 13.1, '2024-11-04 18:25:00', 263, 'Dinner', 6), -(189, 'Avocado', 552, 6.9, 50.4, 6.9, 29.3, 24.2, '2024-11-05 06:11:00', 345, 'Breakfast', 6), -(190, 'Carrot', 62.7, 1.4, 0.3, 0, 14.7, 105.6, '2024-11-05 11:02:00', 153, 'Lunch', 6), -(191, 'Yogurt', 134.7, 4.7, 5.6, 3.1, 9.1, 113.8, '2024-11-05 11:02:00', 91, 'Lunch', 6), -(192, 'Tomato', 78.8, 3.9, 0.9, 0, 17.1, 21.9, '2024-11-05 19:27:00', 438, 'Dinner', 6), -(193, 'Beef', 340, 29.9, 28.6, 10.9, 0, 68, '2024-11-05 19:27:00', 136, 'Dinner', 6), -(194, 'Onion', 108.4, 3.8, 0.3, 0, 25.2, 8.1, '2024-11-06 06:42:00', 271, 'Breakfast', 6), -(195, 'Egg', 350.2, 28.3, 25.1, 7.2, 1.8, 278.4, '2024-11-06 13:46:00', 449, 'Lunch', 6), -(196, 'Sweet potato', 494.9, 7.8, 0.5, 0, 107.8, 14.7, '2024-11-06 17:34:00', 490, 'Dinner', 6), -(197, 'Tomato', 83.7, 4.2, 0.9, 0, 18.1, 23.2, '2024-11-06 17:34:00', 465, 'Dinner', 6), -(198, 'Brown rice', 110.2, 2.5, 1.5, 0.2, 22.9, 0, '2024-11-07 06:48:00', 51, 'Breakfast', 6), -(199, 'Pasta', 615.7, 25.9, 4.7, 0.9, 122.2, 0, '2024-11-07 06:48:00', 470, 'Breakfast', 6), -(200, 'Potato', 150.2, 3.9, 0.2, 0, 33.7, 19.5, '2024-11-07 13:42:00', 195, 'Lunch', 6), -(201, 'Brown rice', 708.5, 16.4, 9.8, 1.3, 147.6, 0, '2024-11-07 13:42:00', 328, 'Lunch', 6), -(202, 'Lettuce', 25.9, 2.6, 0.6, 0.3, 5.5, 16.2, '2024-11-07 19:44:00', 324, 'Dinner', 6), -(203, 'Brown rice', 490.3, 11.3, 6.8, 0.9, 102.2, 0, '2024-11-08 08:13:00', 227, 'Breakfast', 6), -(204, 'Banana', 113.4, 1.4, 0.3, 0.1, 29.2, 1.1, '2024-11-08 08:13:00', 108, 'Breakfast', 6), -(205, 'Banana', 300.3, 3.7, 0.9, 0.3, 77.2, 2.9, '2024-11-08 12:25:00', 286, 'Lunch', 6), -(206, 'Pork', 848.3, 53.2, 69.3, 25.7, 0, 172.5, '2024-11-08 18:46:00', 352, 'Dinner', 6), -(207, 'Cucumber', 75.5, 3.3, 0.5, 0, 17.9, 9.4, '2024-11-09 07:57:00', 472, 'Breakfast', 6), -(208, 'Sweet potato', 361.6, 5.7, 0.4, 0, 78.8, 10.7, '2024-11-09 12:22:00', 358, 'Lunch', 6), -(209, 'Lettuce', 8.3, 0.8, 0.2, 0.1, 1.8, 5.2, '2024-11-09 12:22:00', 104, 'Lunch', 6), -(210, 'Pasta', 200.4, 8.4, 1.5, 0.3, 39.8, 0, '2024-11-09 17:26:00', 153, 'Dinner', 6), -(211, 'Pasta', 117.9, 5, 0.9, 0.2, 23.4, 0, '2024-11-10 07:29:00', 90, 'Breakfast', 6), -(212, 'Brown rice', 738.7, 17.1, 10.3, 1.4, 153.9, 0, '2024-11-10 07:29:00', 342, 'Breakfast', 6), -(213, 'Onion', 55.6, 1.9, 0.1, 0, 12.9, 4.2, '2024-11-10 11:18:00', 139, 'Lunch', 6), -(214, 'Potato', 338.8, 8.8, 0.4, 0, 76.1, 44, '2024-11-10 18:58:00', 440, 'Dinner', 6), -(215, 'Bread', 339.2, 12, 5.9, 1.7, 66.6, 192, '2024-11-10 18:58:00', 128, 'Dinner', 6), -(216, 'Carrot', 145.5, 3.2, 0.7, 0, 34.1, 244.9, '2024-11-04 06:16:00', 355, 'Breakfast', 7), -(217, 'Bread', 667.8, 23.7, 11.6, 3.3, 131, 378, '2024-11-04 13:58:00', 252, 'Lunch', 7), -(218, 'Tomato', 39.4, 2, 0.4, 0, 8.5, 10.9, '2024-11-04 13:58:00', 219, 'Lunch', 7), -(219, 'Cheese', 1234.1, 63.2, 101.6, 71.2, 4, 0, '2024-11-04 18:34:00', 307, 'Dinner', 7), -(220, 'Chicken thigh', 933.8, 128, 70.6, 24.6, 0, 0, '2024-11-04 18:34:00', 474, 'Dinner', 7), -(221, 'Banana', 155.4, 1.9, 0.4, 0.1, 40, 1.5, '2024-11-05 07:24:00', 148, 'Breakfast', 7), -(222, 'Yogurt', 464.7, 16.3, 19.2, 10.7, 31.4, 392.5, '2024-11-05 11:29:00', 314, 'Lunch', 7), -(223, 'Beef', 367.5, 32.3, 30.9, 11.8, 0, 73.5, '2024-11-05 11:29:00', 147, 'Lunch', 7), -(224, 'Yogurt', 122.8, 4.3, 5.1, 2.8, 8.3, 103.8, '2024-11-05 17:20:00', 83, 'Dinner', 7), -(225, 'Apple', 144, 0, 0, 0, 38.8, 0, '2024-11-06 07:30:00', 277, 'Breakfast', 7), -(226, 'Beef', 840, 73.9, 70.6, 26.9, 0, 168, '2024-11-06 07:30:00', 336, 'Breakfast', 7), -(227, 'Garlic', 522.2, 25, 57.4, 12.3, 23.1, 622.9, '2024-11-06 12:35:00', 373, 'Lunch', 7), -(228, 'Chicken thigh', 823.5, 112.9, 62.3, 21.7, 0, 0, '2024-11-06 12:35:00', 418, 'Lunch', 7), -(229, 'Salmon', 115.4, 12.3, 7.6, 2.1, 2.8, 0, '2024-11-06 17:54:00', 56, 'Dinner', 7), -(230, 'Tomato', 37.1, 1.9, 0.4, 0, 8, 10.3, '2024-11-07 06:25:00', 206, 'Breakfast', 7), -(231, 'Avocado', 537.6, 6.7, 49.1, 6.7, 28.6, 23.5, '2024-11-07 12:48:00', 336, 'Lunch', 7), -(232, 'Broccoli', 32, 2.6, 0.6, 0.2, 6.2, 62, '2024-11-07 12:48:00', 94, 'Lunch', 7), -(233, 'Brown rice', 477.4, 11.1, 6.6, 0.9, 99.5, 0, '2024-11-07 17:31:00', 221, 'Dinner', 7), -(234, 'Cucumber', 72.3, 3.2, 0.5, 0, 17.2, 9, '2024-11-08 07:09:00', 452, 'Breakfast', 7), -(235, 'Garlic', 512.4, 24.5, 56.4, 12.1, 22.7, 611.2, '2024-11-08 11:58:00', 366, 'Lunch', 7), -(236, 'Chicken thigh', 240.3, 32.9, 18.2, 6.3, 0, 0, '2024-11-08 11:58:00', 122, 'Lunch', 7), -(237, 'Onion', 137.2, 4.8, 0.3, 0, 31.9, 10.3, '2024-11-08 19:26:00', 343, 'Dinner', 7), -(238, 'Pork', 607.3, 38.1, 49.6, 18.4, 0, 123.5, '2024-11-08 19:26:00', 252, 'Dinner', 7), -(239, 'Banana', 297.2, 3.7, 0.8, 0.3, 76.4, 2.8, '2024-11-09 07:33:00', 283, 'Breakfast', 7), -(240, 'Chicken breast', 790.4, 148.5, 29.2, 9.6, 0, 330.5, '2024-11-09 07:33:00', 479, 'Breakfast', 7), -(241, 'Lamb', 311.6, 18.6, 24.6, 9.8, 0, 0, '2024-11-09 13:15:00', 106, 'Lunch', 7), -(242, 'Chicken thigh', 784.1, 107.5, 59.3, 20.7, 0, 0, '2024-11-09 13:15:00', 398, 'Lunch', 7), -(243, 'Apple', 116, 0, 0, 0, 31.2, 0, '2024-11-09 18:17:00', 223, 'Dinner', 7), -(244, 'Salmon', 945.5, 101, 62.4, 17.4, 22.9, 0, '2024-11-09 18:17:00', 459, 'Dinner', 7), -(245, 'Banana', 498.8, 6.2, 1.4, 0.5, 128.2, 4.8, '2024-11-10 06:40:00', 475, 'Breakfast', 7), -(246, 'Lamb', 1111.3, 66.1, 87.7, 34.8, 0, 0, '2024-11-10 11:17:00', 378, 'Lunch', 7), -(247, 'Avocado', 475.2, 5.9, 43.4, 5.9, 25.2, 20.8, '2024-11-10 11:17:00', 297, 'Lunch', 7), -(248, 'Banana', 183.8, 2.3, 0.5, 0.2, 47.2, 1.8, '2024-11-10 17:29:00', 175, 'Dinner', 7), -(249, 'Onion', 119.6, 4.2, 0.3, 0, 27.8, 9, '2024-11-04 07:58:00', 299, 'Breakfast', 8), -(250, 'Beef', 465, 40.9, 39.1, 14.9, 0, 93, '2024-11-04 13:10:00', 186, 'Lunch', 8), -(251, 'Bread', 871.9, 30.9, 15.1, 4.3, 171.1, 493.5, '2024-11-04 19:57:00', 329, 'Dinner', 8), -(252, 'Lamb', 884.9, 52.7, 69.8, 27.7, 0, 0, '2024-11-05 06:10:00', 301, 'Breakfast', 8), -(253, 'Milk', 230, 15.2, 15.2, 7.8, 22.1, 552, '2024-11-05 06:10:00', 460, 'Breakfast', 8), -(254, 'Lettuce', 35.8, 3.6, 0.9, 0.4, 7.6, 22.4, '2024-11-05 11:42:00', 448, 'Lunch', 8), -(255, 'Salmon', 786.9, 84, 52, 14.5, 19.1, 0, '2024-11-05 11:42:00', 382, 'Lunch', 8), -(256, 'Beef', 535, 47.1, 44.9, 17.1, 0, 107, '2024-11-05 19:16:00', 214, 'Dinner', 8), -(257, 'Cucumber', 71.2, 3.1, 0.4, 0, 16.9, 8.9, '2024-11-06 08:21:00', 445, 'Breakfast', 8), -(258, 'Chicken thigh', 396, 54.3, 29.9, 10.5, 0, 0, '2024-11-06 08:21:00', 201, 'Breakfast', 8), -(259, 'Chicken breast', 513.1, 96.4, 19, 6.2, 0, 214.6, '2024-11-06 12:27:00', 311, 'Lunch', 8), -(260, 'Sweet potato', 212.1, 3.4, 0.2, 0, 46.2, 6.3, '2024-11-06 18:02:00', 210, 'Dinner', 8), -(261, 'Chicken thigh', 439.3, 60.2, 33.2, 11.6, 0, 0, '2024-11-06 18:02:00', 223, 'Dinner', 8), -(262, 'Sweet potato', 211.1, 3.3, 0.2, 0, 46, 6.3, '2024-11-07 07:56:00', 209, 'Breakfast', 8), -(263, 'Pasta', 94.3, 4, 0.7, 0.1, 18.7, 0, '2024-11-07 07:56:00', 72, 'Breakfast', 8), -(264, 'Spinach', 74.5, 8.7, 1.3, 0.3, 11.7, 256, '2024-11-07 11:35:00', 324, 'Lunch', 8), -(265, 'Chicken breast', 669.9, 125.9, 24.8, 8.1, 0, 280.1, '2024-11-07 18:49:00', 406, 'Dinner', 8), -(266, 'Cheese', 888.4, 45.5, 73.2, 51.3, 2.9, 0, '2024-11-08 07:19:00', 221, 'Breakfast', 8), -(267, 'Potato', 168.6, 4.4, 0.2, 0, 37.9, 21.9, '2024-11-08 07:19:00', 219, 'Breakfast', 8), -(268, 'Banana', 203.7, 2.5, 0.6, 0.2, 52.4, 1.9, '2024-11-08 12:42:00', 194, 'Lunch', 8), -(269, 'Yogurt', 284.2, 10, 11.7, 6.5, 19.2, 240, '2024-11-08 12:42:00', 192, 'Lunch', 8), -(270, 'Sweet potato', 403, 6.4, 0.4, 0, 87.8, 12, '2024-11-08 18:37:00', 399, 'Dinner', 8), -(271, 'Chicken breast', 785.4, 147.6, 29, 9.5, 0, 328.4, '2024-11-09 07:08:00', 476, 'Breakfast', 8), -(272, 'Avocado', 612.8, 7.7, 55.9, 7.7, 32.6, 26.8, '2024-11-09 07:08:00', 383, 'Breakfast', 8), -(273, 'Egg', 131, 10.6, 9.4, 2.7, 0.7, 104.2, '2024-11-09 12:47:00', 168, 'Lunch', 8), -(274, 'Lettuce', 20.7, 2.1, 0.5, 0.3, 4.4, 12.9, '2024-11-09 12:47:00', 259, 'Lunch', 8), -(275, 'Salmon', 222.5, 23.8, 14.7, 4.1, 5.4, 0, '2024-11-09 18:20:00', 108, 'Dinner', 8), -(276, 'Spinach', 111.3, 13.1, 1.9, 0.5, 17.4, 382.4, '2024-11-10 06:56:00', 484, 'Breakfast', 8), -(277, 'Garlic', 460.6, 22, 50.7, 10.9, 20.4, 549.4, '2024-11-10 11:47:00', 329, 'Lunch', 8), -(278, 'Lamb', 643.9, 38.3, 50.8, 20.1, 0, 0, '2024-11-10 19:54:00', 219, 'Dinner', 8), -(279, 'Beef', 1125, 99, 94.5, 36, 0, 225, '2024-11-10 19:54:00', 450, 'Dinner', 8), -(280, 'Lamb', 929, 55.3, 73.3, 29.1, 0, 0, '2024-11-04 07:54:00', 316, 'Breakfast', 9), -(281, 'Pork', 443.4, 27.8, 36.2, 13.4, 0, 90.2, '2024-11-04 12:05:00', 184, 'Lunch', 9), -(282, 'Beef', 885, 77.9, 74.3, 28.3, 0, 177, '2024-11-04 12:05:00', 354, 'Lunch', 9), -(283, 'Brown rice', 276.5, 6.4, 3.8, 0.5, 57.6, 0, '2024-11-04 18:57:00', 128, 'Dinner', 9), -(284, 'Banana', 265.6, 3.3, 0.8, 0.3, 68.3, 2.5, '2024-11-04 18:57:00', 253, 'Dinner', 9), -(285, 'Bread', 1298.5, 46.1, 22.5, 6.4, 254.8, 735, '2024-11-05 07:40:00', 490, 'Breakfast', 9), -(286, 'Milk', 105, 6.9, 6.9, 3.6, 10.1, 252, '2024-11-05 07:40:00', 210, 'Breakfast', 9), -(287, 'Pasta', 531.9, 22.3, 4.1, 0.8, 105.6, 0, '2024-11-05 12:21:00', 406, 'Lunch', 9), -(288, 'Sweet potato', 169.7, 2.7, 0.2, 0, 37, 5, '2024-11-05 12:21:00', 168, 'Lunch', 9), -(289, 'Onion', 198.8, 7, 0.5, 0, 46.2, 14.9, '2024-11-05 19:11:00', 497, 'Dinner', 9), -(290, 'Avocado', 140.8, 1.8, 12.8, 1.8, 7.5, 6.2, '2024-11-05 19:11:00', 88, 'Dinner', 9), -(291, 'Lamb', 423.4, 25.2, 33.4, 13.2, 0, 0, '2024-11-06 07:39:00', 144, 'Breakfast', 9), -(292, 'Bread', 800.3, 28.4, 13.9, 3.9, 157, 453, '2024-11-06 13:54:00', 302, 'Lunch', 9), -(293, 'Carrot', 37.3, 0.8, 0.2, 0, 8.7, 62.8, '2024-11-06 13:54:00', 91, 'Lunch', 9), -(294, 'Broccoli', 49.3, 4.1, 0.9, 0.3, 9.6, 95.7, '2024-11-06 17:03:00', 145, 'Dinner', 9), -(295, 'Carrot', 123.4, 2.7, 0.6, 0, 28.9, 207.7, '2024-11-06 17:03:00', 301, 'Dinner', 9), -(296, 'Chicken thigh', 855, 117.2, 64.7, 22.6, 0, 0, '2024-11-07 08:12:00', 434, 'Breakfast', 9), -(297, 'Chicken breast', 585.8, 110, 21.7, 7.1, 0, 244.9, '2024-11-07 08:12:00', 355, 'Breakfast', 9), -(298, 'Salmon', 931.1, 99.4, 61.5, 17.2, 22.6, 0, '2024-11-07 12:45:00', 452, 'Lunch', 9), -(299, 'Bread', 556.5, 19.7, 9.7, 2.7, 109.2, 315, '2024-11-07 12:45:00', 210, 'Lunch', 9), -(300, 'Carrot', 96.8, 2.1, 0.5, 0, 22.7, 162.8, '2024-11-07 17:14:00', 236, 'Dinner', 9), -(301, 'Chicken thigh', 382.2, 52.4, 28.9, 10.1, 0, 0, '2024-11-08 06:20:00', 194, 'Breakfast', 9), -(302, 'Yogurt', 679.3, 23.9, 28, 15.6, 45.9, 573.8, '2024-11-08 06:20:00', 459, 'Breakfast', 9), -(303, 'Lettuce', 23.2, 2.3, 0.6, 0.3, 4.9, 14.5, '2024-11-08 13:27:00', 290, 'Lunch', 9), -(304, 'Lettuce', 28.4, 2.8, 0.7, 0.4, 6, 17.8, '2024-11-08 13:27:00', 355, 'Lunch', 9), -(305, 'Spinach', 77.7, 9.1, 1.4, 0.3, 12.2, 267, '2024-11-08 19:43:00', 338, 'Dinner', 9), -(306, 'Banana', 420, 5.2, 1.2, 0.4, 108, 4, '2024-11-09 06:39:00', 400, 'Breakfast', 9), -(307, 'Banana', 475.7, 5.9, 1.4, 0.5, 122.3, 4.5, '2024-11-09 12:24:00', 453, 'Lunch', 9), -(308, 'Beef', 1110, 97.7, 93.2, 35.5, 0, 222, '2024-11-09 17:23:00', 444, 'Dinner', 9), -(309, 'Lettuce', 36.2, 3.6, 0.9, 0.5, 7.7, 22.6, '2024-11-09 17:23:00', 452, 'Dinner', 9), -(310, 'Chicken thigh', 979.1, 134.2, 74.1, 25.8, 0, 0, '2024-11-10 07:24:00', 497, 'Breakfast', 9), -(311, 'Broccoli', 154.7, 12.7, 2.7, 0.9, 30, 300.3, '2024-11-10 07:24:00', 455, 'Breakfast', 9), -(312, 'Egg', 84.2, 6.8, 6, 1.7, 0.4, 67, '2024-11-10 12:42:00', 108, 'Lunch', 9), -(313, 'Pork', 903.8, 56.6, 73.9, 27.4, 0, 183.8, '2024-11-10 17:50:00', 375, 'Dinner', 9), -(314, 'Avocado', 348.8, 4.4, 31.8, 4.4, 18.5, 15.3, '2024-11-04 07:54:00', 218, 'Breakfast', 10), -(315, 'Spinach', 87.9, 10.3, 1.5, 0.4, 13.8, 301.8, '2024-11-04 07:54:00', 382, 'Breakfast', 10), -(316, 'Carrot', 203.4, 4.5, 1, 0, 47.6, 342.2, '2024-11-04 12:17:00', 496, 'Lunch', 10), -(317, 'Cucumber', 47.8, 2.1, 0.3, 0, 11.4, 6, '2024-11-04 12:17:00', 299, 'Lunch', 10), -(318, 'Yogurt', 217.6, 7.6, 9, 5, 14.7, 183.8, '2024-11-04 19:25:00', 147, 'Dinner', 10), -(319, 'Avocado', 281.6, 3.5, 25.7, 3.5, 15, 12.3, '2024-11-04 19:25:00', 176, 'Dinner', 10), -(320, 'Sweet potato', 168.7, 2.7, 0.2, 0, 36.7, 5, '2024-11-05 08:55:00', 167, 'Breakfast', 10), -(321, 'Milk', 187, 12.3, 12.3, 6.4, 18, 448.8, '2024-11-05 13:51:00', 374, 'Lunch', 10), -(322, 'Sweet potato', 95.9, 1.5, 0.1, 0, 20.9, 2.8, '2024-11-05 18:32:00', 95, 'Dinner', 10), -(323, 'Salmon', 883.7, 94.4, 58.3, 16.3, 21.4, 0, '2024-11-06 06:57:00', 429, 'Breakfast', 10), -(324, 'Yogurt', 125.8, 4.4, 5.2, 2.9, 8.5, 106.2, '2024-11-06 06:57:00', 85, 'Breakfast', 10), -(325, 'Cheese', 1949.7, 99.9, 160.5, 112.5, 6.3, 0, '2024-11-06 11:31:00', 485, 'Lunch', 10), -(326, 'Broccoli', 32, 2.6, 0.6, 0.2, 6.2, 62, '2024-11-06 11:31:00', 94, 'Lunch', 10), -(327, 'Sweet potato', 99, 1.6, 0.1, 0, 21.6, 2.9, '2024-11-06 18:01:00', 98, 'Dinner', 10), -(328, 'Broccoli', 133.3, 11, 2.4, 0.8, 25.9, 258.7, '2024-11-06 18:01:00', 392, 'Dinner', 10), -(329, 'Pasta', 615.7, 25.9, 4.7, 0.9, 122.2, 0, '2024-11-07 06:30:00', 470, 'Breakfast', 10), -(330, 'Banana', 113.4, 1.4, 0.3, 0.1, 29.2, 1.1, '2024-11-07 06:30:00', 108, 'Breakfast', 10), -(331, 'Bread', 429.3, 15.2, 7.5, 2.1, 84.2, 243, '2024-11-07 11:27:00', 162, 'Lunch', 10), -(332, 'Bread', 927.5, 32.9, 16.1, 4.5, 182, 525, '2024-11-07 11:27:00', 350, 'Lunch', 10), -(333, 'Brown rice', 995.8, 23.1, 13.8, 1.8, 207.5, 0, '2024-11-07 19:52:00', 461, 'Dinner', 10), -(334, 'Potato', 325.7, 8.5, 0.4, 0, 73.2, 42.3, '2024-11-08 06:05:00', 423, 'Breakfast', 10), -(335, 'Egg', 43.7, 3.5, 3.1, 0.9, 0.2, 34.7, '2024-11-08 12:47:00', 56, 'Lunch', 10), -(336, 'Potato', 139.4, 3.6, 0.2, 0, 31.3, 18.1, '2024-11-08 12:47:00', 181, 'Lunch', 10), -(337, 'Yogurt', 722.2, 25.4, 29.8, 16.6, 48.8, 610, '2024-11-08 19:02:00', 488, 'Dinner', 10), -(338, 'Egg', 373.6, 30.2, 26.8, 7.7, 1.9, 297, '2024-11-08 19:02:00', 479, 'Dinner', 10), -(339, 'Pasta', 313.1, 13.1, 2.4, 0.5, 62.1, 0, '2024-11-09 06:07:00', 239, 'Breakfast', 10), -(340, 'Egg', 213.7, 17.3, 15.3, 4.4, 1.1, 169.9, '2024-11-09 06:07:00', 274, 'Breakfast', 10), -(341, 'Garlic', 254.8, 12.2, 28, 6, 11.3, 303.9, '2024-11-09 11:31:00', 182, 'Lunch', 10), -(342, 'Sweet potato', 388.9, 6.2, 0.4, 0, 84.7, 11.6, '2024-11-09 11:31:00', 385, 'Lunch', 10), -(343, 'Banana', 158.6, 2, 0.5, 0.2, 40.8, 1.5, '2024-11-09 19:46:00', 151, 'Dinner', 10), -(344, 'Tomato', 15.7, 0.8, 0.2, 0, 3.4, 4.3, '2024-11-10 08:40:00', 87, 'Breakfast', 10), -(345, 'Carrot', 44.7, 1, 0.2, 0, 10.5, 75.2, '2024-11-10 12:45:00', 109, 'Lunch', 10), -(346, 'Sweet potato', 170.7, 2.7, 0.2, 0, 37.2, 5.1, '2024-11-10 19:16:00', 169, 'Dinner', 10), -(347, 'Egg', 624, 50.4, 44.8, 12.8, 3.2, 496, '2024-11-14 08:57:54', 800, 'Breakfast', 11), -(348, 'Spinach', 690, 81, 12, 3, 108, 2370, '2024-11-14 08:58:17', 3000, 'Dinner', 11), -(349, 'Chicken breast', 1650, 310, 61, 20, 10, 690, '2024-11-28 11:05:49', 1000, 'Breakfast', 1), -(350, 'Chicken breast', 1725.9, 324.26, 63.806, 20.92, 10.46, 721.74, '2024-11-28 15:04:46', 1046, 'Breakfast', 1); - -ALTER TABLE `food_items` - ADD PRIMARY KEY (`id`), - ADD KEY `user_id` (`user_id`); - - -ALTER TABLE `food_items` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=351; - -/* -ALTER TABLE `food_items` - ADD CONSTRAINT `food_items_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`); - */ \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/08_alter_food_information.sql b/bin/main/db/changelog/changes/enson_change/08_alter_food_information.sql deleted file mode 100644 index 5103e00..0000000 --- a/bin/main/db/changelog/changes/enson_change/08_alter_food_information.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`food_items` - add `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `createdBy` int DEFAULT NULL, - add `version` int NOT NULL DEFAULT '0', - add `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `modifiedBy` int DEFAULT NULL, - add `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/09_alter_food_information.sql b/bin/main/db/changelog/changes/enson_change/09_alter_food_information.sql deleted file mode 100644 index 4f616b8..0000000 --- a/bin/main/db/changelog/changes/enson_change/09_alter_food_information.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - -ALTER TABLE `food_items` -CHANGE COLUMN `kcal` `kcal` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `protein` `protein` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `fat` `fat` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `sat_fat` `sat_fat` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `carbo` `carbo` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `sodium` `sodium` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `size` `size` DECIMAL(14,2) NULL DEFAULT NULL ; diff --git a/bin/main/db/changelog/changes/enson_change/10_alter_food_items.sql b/bin/main/db/changelog/changes/enson_change/10_alter_food_items.sql deleted file mode 100644 index b9bc01e..0000000 --- a/bin/main/db/changelog/changes/enson_change/10_alter_food_items.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql - ---changeset cyril:alter food items ---comment: alter food items - -ALTER TABLE `food_items` - CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `id`, - CHANGE COLUMN `createdBy` `createdBy` INT NULL DEFAULT NULL AFTER `created`, - CHANGE COLUMN `version` `version` INT NOT NULL DEFAULT '0' AFTER `createdBy`, - CHANGE COLUMN `modified` `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `version`, - CHANGE COLUMN `modifiedBy` `modifiedBy` INT NULL DEFAULT NULL AFTER `modified`, - CHANGE COLUMN `deleted` `deleted` TINYINT(1) NOT NULL DEFAULT '0' AFTER `modifiedBy`; diff --git a/bin/main/db/changelog/changes/enson_change/11_create_user_information.sql b/bin/main/db/changelog/changes/enson_change/11_create_user_information.sql deleted file mode 100644 index 7dfe625..0000000 --- a/bin/main/db/changelog/changes/enson_change/11_create_user_information.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `user_information` ( - `id` int(11) NOT NULL, - `user_id` int(11) NOT NULL, - `gender` varchar(10) DEFAULT NULL, - `name` varchar(50) DEFAULT NULL, - `date_of_birth` date DEFAULT NULL, - `height` varchar(20) DEFAULT NULL, - `weight` varchar(20) DEFAULT NULL, - `allergy` varchar(50) DEFAULT NULL, - `goal` varchar(20) DEFAULT NULL, - `experience` varchar(20) DEFAULT NULL, - `created_at` timestamp NOT NULL DEFAULT current_timestamp() -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/12_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/12_alter_user_information.sql deleted file mode 100644 index cb8cba3..0000000 --- a/bin/main/db/changelog/changes/enson_change/12_alter_user_information.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Alter table and insert data - -INSERT INTO `user_information` (`id`, `user_id`, `gender`, `name`, `date_of_birth`, `height`, `weight`, `allergy`, `goal`, `experience`, `created_at`) VALUES -(2, 1, 'Male', 'test', '2000-01-01', '175 cm', '61 kg', 'Peanuts', 'Muscle Gain', 'Expert', '2024-11-13 09:23:46'), -(3, 3, 'Male', 'm2', '2003-01-01', '162 cm', '80 kg', 'Egg', 'Muscle Gain', 'Intermediate', '2024-11-13 17:18:38'), -(4, 2, 'Male', 'm1', '2000-01-01', '162 cm', '53 kg', 'Fish', 'Muscle Gain', 'Expert', '2024-11-13 17:25:06'), -(5, 4, 'Male', 'm3', '2018-01-01', '164 cm', '125 lbs', 'Fish, Peanuts, Wheat', 'Muscle Gain', 'Intermediate', '2024-11-13 17:28:51'), -(6, 5, 'Male', 'm4', '2008-12-15', '169 cm', '108 kg', 'Peanuts, Fish', 'Nutrition', 'Beginner', '2024-11-13 17:32:53'), -(7, 6, 'Female', 'g1', '2015-01-01', '158 cm', '46 kg', 'Egg, Fish, Peanuts, Wheat, Soy, Milk', 'Muscle Gain', 'Expert', '2024-11-13 17:35:00'), -(8, 10, 'Female', 'g5', '1992-05-01', '213 cm', '140 kg', 'None', 'Muscle Gain', 'Beginner', '2024-11-13 17:37:00'), -(9, 9, 'Female', 'g4', '1989-01-01', '4 ft 11 in', '54 kg', 'Wheat', 'Nutrition', 'Beginner', '2024-11-13 17:37:25'), -(10, 8, 'Female', 'g3', '2006-06-03', '6 ft 4 in', '89 lbs', 'Egg', 'Diet', 'Intermediate', '2024-11-13 17:38:21'), -(11, 7, 'Female', 'g2', '2000-01-01', '170 cm', '60 kg', 'None', 'Diet', 'Beginner', '2024-11-13 17:38:46'), -(12, 11, 'Male', 'example', '2022-07-01', '171 cm', '54 kg', 'Peanuts, Wheat', 'Diet', 'Intermediate', '2024-11-14 08:58:59'); - -ALTER TABLE `user_information` - ADD PRIMARY KEY (`id`), - ADD KEY `user_id` (`user_id`); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/13_alter_information.sql b/bin/main/db/changelog/changes/enson_change/13_alter_information.sql deleted file mode 100644 index 9d1a2ad..0000000 --- a/bin/main/db/changelog/changes/enson_change/13_alter_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user-table ---comment: Alter table - -ALTER TABLE `fhsmscdb`.`user` - ADD `has_information` TINYINT NOT NULL DEFAULT 0; diff --git a/bin/main/db/changelog/changes/enson_change/14_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/14_alter_user_information.sql deleted file mode 100644 index 22f7bd6..0000000 --- a/bin/main/db/changelog/changes/enson_change/14_alter_user_information.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - add `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `createdBy` int DEFAULT NULL, - add `version` int NOT NULL DEFAULT '0', - add `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `modifiedBy` int DEFAULT NULL, - add `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/15_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/15_alter_user_information.sql deleted file mode 100644 index decf572..0000000 --- a/bin/main/db/changelog/changes/enson_change/15_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - DROP COLUMN `created_at`; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/16_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/16_alter_user_information.sql deleted file mode 100644 index 2cf9807..0000000 --- a/bin/main/db/changelog/changes/enson_change/16_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/17_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/17_alter_user_information.sql deleted file mode 100644 index 4dbcb5f..0000000 --- a/bin/main/db/changelog/changes/enson_change/17_alter_user_information.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `age` int DEFAULT NULL, - add `activityLevel` varchar(20) DEFAULT NULL; diff --git a/bin/main/db/changelog/changes/enson_change/18_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/18_alter_user_information.sql deleted file mode 100644 index de7a3d4..0000000 --- a/bin/main/db/changelog/changes/enson_change/18_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `activityLevel` varchar(20) DEFAULT NULL; diff --git a/bin/main/db/changelog/changes/enson_change/19_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/19_alter_user_information.sql deleted file mode 100644 index 100883a..0000000 --- a/bin/main/db/changelog/changes/enson_change/19_alter_user_information.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY COLUMN `age` int DEFAULT NULL AFTER `gender`, - MODIFY COLUMN `activityLevel` varchar(20) DEFAULT NULL AFTER `experience`; diff --git a/bin/main/db/changelog/changes/enson_change/20_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/20_alter_food1.sql deleted file mode 100644 index 540ca11..0000000 --- a/bin/main/db/changelog/changes/enson_change/20_alter_food1.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Weight (g)` decimal(10,2) DEFAULT NULL, -ADD COLUMN `contains_egg` tinyint DEFAULT 3, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `contains_milk` tinyint DEFAULT 3, -ADD COLUMN `contains_wheat` tinyint DEFAULT 3, -ADD COLUMN `contains_shrimp` tinyint DEFAULT 3, -ADD COLUMN `contains_crab` tinyint DEFAULT 3, -ADD COLUMN `contains_buckwheat` tinyint DEFAULT 3, -ADD COLUMN `contains_peanut` tinyint DEFAULT 3, -ADD COLUMN `contains_walnut` tinyint DEFAULT 3; - --- 重命名现有列以添加单位 -ALTER TABLE `fhsmscdb`.`food1` -CHANGE COLUMN `kcal` `Calories (kcal)` decimal(10,2), -CHANGE COLUMN `protein` `Protein (g)` decimal(10,2), -CHANGE COLUMN `fat` `Fat (g)` decimal(10,2), -DROP COLUMN `satFat`, -CHANGE COLUMN `carbo` `Carbohydrate (g)` decimal(10,2), -CHANGE COLUMN `sodium` `Sodium (mg)` decimal(10,2); - diff --git a/bin/main/db/changelog/changes/enson_change/21_alter_food_items.sql b/bin/main/db/changelog/changes/enson_change/21_alter_food_items.sql deleted file mode 100644 index 5c9388f..0000000 --- a/bin/main/db/changelog/changes/enson_change/21_alter_food_items.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - - - --- 重命名现有列以添加单位 -ALTER TABLE `fhsmscdb`.`food_items` -DROP COLUMN `sat_fat`; - - diff --git a/bin/main/db/changelog/changes/enson_change/22_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/22_alter_food1.sql deleted file mode 100644 index 3352387..0000000 --- a/bin/main/db/changelog/changes/enson_change/22_alter_food1.sql +++ /dev/null @@ -1,16 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Postassium (mg)` decimal(10,2) DEFAULT 0, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `Calcium (mg)`decimal(10,2) DEFAULT 0, -ADD COLUMN `Phosphorus (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Iron (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin A (μg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin B1 (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin B2 (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Niacin (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin C (mg)` decimal(10,2) DEFAULT 0; - diff --git a/bin/main/db/changelog/changes/enson_change/23_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/23_alter_food1.sql deleted file mode 100644 index 94c15e5..0000000 --- a/bin/main/db/changelog/changes/enson_change/23_alter_food1.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -DROP COLUMN `Ingredients`; -ALTER TABLE `fhsmscdb`.`food1` -MODIFY COLUMN `Postassium (mg)` decimal(10,2) DEFAULT 0 AFTER `Sodium (mg)`, -MODIFY COLUMN `Calcium (mg)` decimal(10,2) DEFAULT 0 AFTER `Postassium (mg)`, -MODIFY COLUMN `Phosphorus (mg)` decimal(10,2) DEFAULT 0 AFTER `Calcium (mg)`, -MODIFY COLUMN `Iron (mg)` decimal(10,2) DEFAULT 0 AFTER `Phosphorus (mg)`, -MODIFY COLUMN `Vitamin A (μg)` decimal(10,2) DEFAULT 0 AFTER `Iron (mg)`, -MODIFY COLUMN `Vitamin B1 (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin A (μg)`, -MODIFY COLUMN `Vitamin B2 (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin B1 (mg)`, -MODIFY COLUMN `Niacin (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin B2 (mg)`, -MODIFY COLUMN `Vitamin C (mg)` decimal(10,2)DEFAULT 0 AFTER `Niacin (mg)`; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/24_alter_food_items.sql b/bin/main/db/changelog/changes/enson_change/24_alter_food_items.sql deleted file mode 100644 index 6dad3d5..0000000 --- a/bin/main/db/changelog/changes/enson_change/24_alter_food_items.sql +++ /dev/null @@ -1,27 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - --- 添加新列 -/* -Alter TABLE `fhsmscdb`.`food_items` -ADD COLUMN `potassium` decimal(10,2) DEFAULT 0, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `calcium`decimal(10,2) DEFAULT 0, -ADD COLUMN `phosphorus` decimal(10,2) DEFAULT 0, -ADD COLUMN `iron` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminA` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminB1` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminB2` decimal(10,2) DEFAULT 0, -ADD COLUMN `niacin` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminC` decimal(10,2) DEFAULT 0; -*/ -ALTER TABLE `fhsmscdb`.`food_items` -MODIFY COLUMN `potassium` decimal(10,2) DEFAULT 0 AFTER `sodium`, -MODIFY COLUMN `calcium` decimal(10,2) DEFAULT 0 AFTER `potassium`, -MODIFY COLUMN `phosphorus` decimal(10,2) DEFAULT 0 AFTER `calcium`, -MODIFY COLUMN `iron` decimal(10,2) DEFAULT 0 AFTER `phosphorus`, -MODIFY COLUMN `vitaminA` decimal(10,2) DEFAULT 0 AFTER `iron`, -MODIFY COLUMN `vitaminB1` decimal(10,2) DEFAULT 0 AFTER `vitaminA`, -MODIFY COLUMN `vitaminB2` decimal(10,2) DEFAULT 0 AFTER `vitaminB1`, -MODIFY COLUMN `niacin` decimal(10,2) DEFAULT 0 AFTER `vitaminB2`, -MODIFY COLUMN `vitaminC` decimal(10,2)DEFAULT 0 AFTER `niacin`; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/25_create_Nutrients.sql b/bin/main/db/changelog/changes/enson_change/25_create_Nutrients.sql deleted file mode 100644 index 5a8f65e..0000000 --- a/bin/main/db/changelog/changes/enson_change/25_create_Nutrients.sql +++ /dev/null @@ -1,40 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Nutrients` ( - `nutrient_id` int NOT NULL AUTO_INCREMENT, - `nutrient_name` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`nutrient_id`), - UNIQUE KEY `idx_nutrient_name` (`nutrient_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `Nutrient_Impacts` ( - `impact_id` int NOT NULL AUTO_INCREMENT, - `nutrient_id` int NOT NULL, - `organ_affected` varchar(100) NOT NULL, - `impact_type` ENUM('Positive', 'Negative') NOT NULL, - `impact_description` text NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`impact_id`), - FOREIGN KEY (`nutrient_id`) REFERENCES `Nutrients`(`nutrient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入基础营养素数据 -INSERT INTO `Nutrients` (nutrient_name) VALUES -('Calories'), -('Protein'), -('Fat'), -('Carbohydrate'), -('Sodium'), -('Potassium'), -('Calcium'), -('Phosphorus'), -('Iron'), -('Vitamin A'), -('Vitamin B1'), -('Vitamin B2'), -('Niacin'), -('Vitamin C'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql b/bin/main/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql deleted file mode 100644 index 1d3d939..0000000 --- a/bin/main/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql +++ /dev/null @@ -1,26 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -INSERT INTO `Nutrient_Impacts` -(nutrient_id, organ_affected, impact_type, impact_description) -VALUES -(2, 'Muscles', 'Positive', 'Essential for muscle growth and repair'), -(2, 'Bones', 'Positive', 'Helps maintain bone mass'), -(2, 'Immune System', 'Positive', 'Supports immune system function'), - --- Vitamin C impacts (假设 nutrient_id = 14) -(14, 'Immune System', 'Positive', 'Strengthens immune system and fights infections'), -(14, 'Skin', 'Positive', 'Promotes collagen production for healthy skin'), -(14, 'Blood Vessels', 'Positive', 'Supports blood vessel health'), - --- Iron impacts (假设 nutrient_id = 9) -(9, 'Blood', 'Positive', 'Essential for red blood cell production'), -(9, 'Brain', 'Positive', 'Supports cognitive function'), -(9, 'Immune System', 'Positive', 'Helps maintain immune system'), - --- Calcium impacts (假设 nutrient_id = 7) -(7, 'Bones', 'Positive', 'Essential for bone strength and density'), -(7, 'Teeth', 'Positive', 'Maintains dental health'), -(7, 'Muscles', 'Positive', 'Required for proper muscle function'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/27_create_Allergy.sql b/bin/main/db/changelog/changes/enson_change/27_create_Allergy.sql deleted file mode 100644 index 9158c2f..0000000 --- a/bin/main/db/changelog/changes/enson_change/27_create_Allergy.sql +++ /dev/null @@ -1,49 +0,0 @@ -/* ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Allergies` ( - `allergy_id` int NOT NULL AUTO_INCREMENT, - `allergy_name` varchar(50) NOT NULL, - `description` text, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`allergy_id`), - UNIQUE KEY `idx_allergy_name` (`allergy_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 用户过敏记录表 -CREATE TABLE `User_Allergies` ( - `user_allergy_id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `allergy_id` int NOT NULL, - `diagnosed_date` date, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`user_allergy_id`), - UNIQUE KEY `idx_user_allergy` (`user_id`, `allergy_id`), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), - FOREIGN KEY (`allergy_id`) REFERENCES `Allergies`(`allergy_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入常见过敏原数据 -INSERT INTO `Allergies` (allergy_name, description) VALUES -('Peanuts', 'Common legume that can cause severe allergic reactions'), -('Tree Nuts', 'Including almonds, walnuts, cashews, etc.'), -('Milk', 'Dairy products and lactose'), -('Eggs', 'Both egg whites and yolks'), -('Soy', 'Soybeans and soy-based products'), -('Wheat', 'Including gluten sensitivity'), -('Fish', 'Various types of fish'), -('Shellfish', 'Crustaceans and mollusks'), -('Sesame', 'Seeds and sesame oil'), -('Sulfites', 'Common food preservative'); - --- 插入示例用户过敏数据 -INSERT INTO `User_Allergies` -(user_id, allergy_id, severity_level, symptoms, diagnosed_date) -VALUES -(1, 1, 'Severe', 'Anaphylaxis, difficulty breathing, swelling', '2023-01-15'), -(1, 3, 'Moderate', 'Digestive issues, skin rash', '2023-02-20'), -(2, 4, 'Mild', 'Mild skin irritation', '2023-03-10'), -(2, 8, 'Severe', 'Severe rash, breathing difficulties', '2023-04-05'); -*/ \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/28_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/28_alter_food1.sql deleted file mode 100644 index 54c725a..0000000 --- a/bin/main/db/changelog/changes/enson_change/28_alter_food1.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Restaurant_ID` int(11) DEFAULT NULL; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/29_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/29_alter_food1.sql deleted file mode 100644 index 4f03ee5..0000000 --- a/bin/main/db/changelog/changes/enson_change/29_alter_food1.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -INSERT INTO `food1` (`name`, `Calories (kcal)`, `Protein (g)`, `Fat (g)`, `Carbohydrate (g)`, `Sodium (mg)`, `Postassium (mg)`, `Calcium (mg)`, `Phosphorus (mg)`,`Iron (mg)`,`Vitamin A (μg)`,`Vitamin B1 (mg)`,`Vitamin B2 (mg)`,`Niacin (mg)`,`Vitamin C (mg)`,`food_type`,`Weight (g)`,`contains_egg`, `contains_milk`, `contains_wheat`, `contains_shrimp`,`contains_crab`,`contains_buckwheat`,`contains_peanut`,`contains_walnut`,`Restaurant_ID`) VALUES -('N.Y. Barbecue Sausage & Cheese McMuffin',504,16.6,32.9,35.1,952,263,162,190,1.1,60,0.2,0.21,6,3,'food',152,0,0,0,3,3,3,3,3,1); diff --git a/bin/main/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql b/bin/main/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql deleted file mode 100644 index 6af4d2e..0000000 --- a/bin/main/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Nutrients_Need` ( - `id` int NOT NULL, - `bmr` DECIMAL(10,2) NOT NULL, - `tdee` DECIMAL(10,2) NOT NULL, - `protein_need` DECIMAL(10,2) NOT NULL, - `fat_need` DECIMAL(10,2) NOT NULL, - `carbo_need` DECIMAL(10,2) NOT NULL, - `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - FOREIGN KEY (`id`) REFERENCES `user` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/bin/main/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql b/bin/main/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql deleted file mode 100644 index 2c04e59..0000000 --- a/bin/main/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql +++ /dev/null @@ -1,64 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-update-trigger splitStatements:false ---comment: Create update trigger - -CREATE TRIGGER update_user_Nutrients_Need -AFTER UPDATE ON user_information -FOR EACH ROW -BEGIN - DECLARE calculated_bmr DECIMAL(10,2); - DECLARE calculated_tdee DECIMAL(10,2); - DECLARE user_age INT; - DECLARE weight_kg DECIMAL(5,2); - DECLARE height_cm DECIMAL(5,2); - - -- Extract numeric values from weight and height - SET weight_kg = CAST(REPLACE(NEW.weight, ' kg', '') AS DECIMAL(5,2)); - SET height_cm = CAST(REPLACE(NEW.height, ' cm', '') AS DECIMAL(5,2)); - - -- Calculate age - SET user_age = FLOOR(DATEDIFF(CURRENT_DATE, FROM_UNIXTIME(NEW.date_of_birth/1000)) / 365); - - -- Calculate BMR based on gender - IF NEW.gender = 'Male' THEN - SET calculated_bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * user_age); - ELSE - SET calculated_bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * user_age); - END IF; - - -- Calculate TDEE based on activity level - SET calculated_tdee = calculated_bmr * - CASE NEW.activitylevel - WHEN 'Sedentary' THEN 1.2 - WHEN '1-2 times' THEN 1.375 - WHEN '3-5 times' THEN 1.55 - WHEN '6-7 times' THEN 1.725 - WHEN 'Professional' THEN 1.9 - ELSE 1.2 - END; - - -- Insert or update TDEE record - INSERT INTO User_TDEE ( - user_id, - bmr, - tdee, - protein_need, - fat_need, - carbo_need - ) - VALUES ( - NEW.user_id, - calculated_bmr, - calculated_tdee, - weight_kg * 2, - (calculated_tdee * 0.25) / 9, - (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4 - ) - ON DUPLICATE KEY UPDATE - bmr = calculated_bmr, - tdee = calculated_tdee, - protein_need = weight_kg * 2, - fat_need = (calculated_tdee * 0.25) / 9, - carbo_need = (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4, - last_updated = CURRENT_TIMESTAMP; -END; diff --git a/bin/main/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql b/bin/main/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql deleted file mode 100644 index 946d78a..0000000 --- a/bin/main/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql +++ /dev/null @@ -1,64 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-update-trigger splitStatements:false ---comment: Create update trigger - -CREATE TRIGGER update_user_Nutrients_Need -AFTER UPDATE ON user_information -FOR EACH ROW -BEGIN - DECLARE calculated_bmr DECIMAL(10,2); - DECLARE calculated_tdee DECIMAL(10,2); - DECLARE user_age INT; - DECLARE weight_kg DECIMAL(5,2); - DECLARE height_cm DECIMAL(5,2); - - -- Extract numeric values from weight and height - SET weight_kg = CAST(REPLACE(NEW.weight, ' kg', '') AS DECIMAL(5,2)); - SET height_cm = CAST(REPLACE(NEW.height, ' cm', '') AS DECIMAL(5,2)); - - -- Calculate age - SET user_age = FLOOR(DATEDIFF(CURRENT_DATE, FROM_UNIXTIME(NEW.date_of_birth/1000)) / 365); - - -- Calculate BMR based on gender - IF NEW.gender = 'Male' THEN - SET calculated_bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * user_age); - ELSE - SET calculated_bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * user_age); - END IF; - - -- Calculate TDEE based on activity level - SET calculated_tdee = calculated_bmr * - CASE NEW.activitylevel - WHEN 'Sedentary' THEN 1.2 - WHEN '1-2 times' THEN 1.375 - WHEN '3-5 times' THEN 1.55 - WHEN '6-7 times' THEN 1.725 - WHEN 'Professional' THEN 1.9 - ELSE 1.2 - END; - - -- Insert or update TDEE record - INSERT INTO nutrients_need ( - user_id, - bmr, - tdee, - protein_need, - fat_need, - carbo_need - ) - VALUES ( - NEW.user_id, - calculated_bmr, - calculated_tdee, - weight_kg * 2, - (calculated_tdee * 0.25) / 9, - (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4 - ) - ON DUPLICATE KEY UPDATE - bmr = calculated_bmr, - tdee = calculated_tdee, - protein_need = weight_kg * 2, - fat_need = (calculated_tdee * 0.25) / 9, - carbo_need = (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4, - last_updated = CURRENT_TIMESTAMP; -END; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/33_create_Allergy.sql b/bin/main/db/changelog/changes/enson_change/33_create_Allergy.sql deleted file mode 100644 index cf83fa7..0000000 --- a/bin/main/db/changelog/changes/enson_change/33_create_Allergy.sql +++ /dev/null @@ -1,44 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -CREATE TABLE `Allergies` ( - `allergy_id` int NOT NULL AUTO_INCREMENT, - `allergy_name` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`allergy_id`), - UNIQUE KEY `idx_allergy_name` (`allergy_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -*/ -CREATE TABLE `User_Allergies` ( - `user_allergy_id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `allergy_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`user_allergy_id`), - UNIQUE KEY `idx_user_allergy` (`user_id`, `allergy_id`), - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), - FOREIGN KEY (`allergy_id`) REFERENCES `Allergies`(`allergy_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入常见过敏原数据 -INSERT INTO `Allergies` (allergy_name) VALUES -('Peanuts'), -('Tree Nuts'), -('Milk'), -('Eggs'), -('Soy' ), -('Wheat'), -('Fish'), -('Shellfish'), -('Sesame'), -('Sulfites'); - --- 插入示例用户过敏数据 -INSERT INTO `User_Allergies` -(user_id, allergy_id ) -VALUES -(1, 1), -(1, 3), -(2, 4), -(2, 8); diff --git a/bin/main/db/changelog/changes/enson_change/34_alter_food1.sql b/bin/main/db/changelog/changes/enson_change/34_alter_food1.sql deleted file mode 100644 index 1af82b9..0000000 --- a/bin/main/db/changelog/changes/enson_change/34_alter_food1.sql +++ /dev/null @@ -1,19 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -Alter TABLE `fhsmscdb`.`food1` - CHANGE `Calories (kcal)` Calories decimal(10,2), - CHANGE `Protein (g)` Protein decimal(10,2), - CHANGE `Fat (g)` Fat decimal(10,2), - CHANGE `Carbohydrate (g)` Carbohydrate decimal(10,2), - CHANGE `Sodium (mg)` Sodium decimal(10,2), - CHANGE `Postassium (mg)` Potassium decimal(10,2), - CHANGE `Calcium (mg)` Calcium decimal(10,2), - CHANGE `Phosphorus (mg)` Phosphorus decimal(10,2), - CHANGE `Iron (mg)` Iron decimal(10,2), - CHANGE `Vitamin A (μg)` VitaminA decimal(10,2), - CHANGE `Vitamin B1 (mg)` VitaminB1 decimal(10,2), - CHANGE `Vitamin B2 (mg)` VitaminB2 decimal(10,2), - CHANGE `Niacin (mg)` Niacin decimal(10,2), - CHANGE `Vitamin C (mg)` VitaminC decimal(10,2), - CHANGE `Weight (g)` Weight decimal(10,2); diff --git a/bin/main/db/changelog/changes/enson_change/35_alter_user_information.sql b/bin/main/db/changelog/changes/enson_change/35_alter_user_information.sql deleted file mode 100644 index b0069cf..0000000 --- a/bin/main/db/changelog/changes/enson_change/35_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -Alter TABLE `fhsmscdb`.`user_information` - drop column `allergy`; - diff --git a/bin/main/db/changelog/changes/enson_change/36_create_restaurant_information.sql b/bin/main/db/changelog/changes/enson_change/36_create_restaurant_information.sql deleted file mode 100644 index 5a23e72..0000000 --- a/bin/main/db/changelog/changes/enson_change/36_create_restaurant_information.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `FB_Operator` ( - - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_name` varchar(50) NOT NULL, - `FB_type` varchar(255) NOT NULL, - `FB_cuisine` varchar(20) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`) -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/bin/main/db/changelog/changes/enson_change/37_alter_restaurant_information.sql b/bin/main/db/changelog/changes/enson_change/37_alter_restaurant_information.sql deleted file mode 100644 index a46cb1b..0000000 --- a/bin/main/db/changelog/changes/enson_change/37_alter_restaurant_information.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -INSERT INTO `FB_Operator` -(FB_id, FB_name, FB_type, FB_cuisine) -VALUES -(1, 'KFC', 'Fast Food', 'Fast Food'), -(2, 'McDonald', 'Fast Food', 'Fast Food'), -(3, '大家樂', 'Cha Chaan Teng', 'Hong Kong Style'), -(4, '翠華餐廳', 'Cha Chaan Teng', 'Hong Kong Style'), -(5, '美心', 'Chinese Restaurant', 'Cantonese'), -(6, '點點心', 'Dim Sum', 'Cantonese'), -(7, '吉野家', 'Fast Food', 'Japanese'), -(8, '壽司郎', 'Japanese Restaurant', 'Japanese'), -(9, '譚仔雲南米線', 'Noodle Shop', 'Chinese'), -(10, '大快活', 'Fast Food', 'Hong Kong Style') diff --git a/bin/main/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql deleted file mode 100644 index c1f612d..0000000 --- a/bin/main/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql +++ /dev/null @@ -1,14 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `FB_Outlets` ( - - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_outlet_id` int NOT NULL, - `FB_outlet_district` varchar(255) NOT NULL, - `FB_outlet_address` varchar(255) NOT NULL, - `FB_outlet_phone` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`) -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/bin/main/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql deleted file mode 100644 index 40b5021..0000000 --- a/bin/main/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql +++ /dev/null @@ -1,14 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_id` int NOT NULL; -ALTER TABLE `FB_Outlets` DROP PRIMARY KEY; - -ALTER TABLE `FB_Outlets` ADD PRIMARY KEY (`FB_outlet_id`); - - -ALTER TABLE `FB_Outlets` ADD CONSTRAINT `fk_fb_outlets_operator` -FOREIGN KEY (`FB_id`) REFERENCES `fb_operator`(`FB_id`); - - -ALTER TABLE `FB_Outlets` ADD INDEX `idx_fb_id` (`FB_id`); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql deleted file mode 100644 index 966b425..0000000 --- a/bin/main/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_outlet_id` int NOT NULL FIRST; - - -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_id` int NOT NULL AFTER `FB_outlet_id`; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql deleted file mode 100644 index 2d17218..0000000 --- a/bin/main/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -DROP TABLE `FB_Outlets`; - --- 用新结构创建表 -CREATE TABLE `FB_Outlets` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_outlet_id` int NOT NULL, - `FB_id` int NOT NULL, - `FB_outlet_district` varchar(255), - `FB_outlet_address` varchar(255), - `FB_outlet_phone` varchar(255), - `created_at` timestamp, - PRIMARY KEY (`id`), - INDEX `idx_fb_outlet_id` (`FB_outlet_id`), - INDEX `idx_fb_id` (`FB_id`), - CONSTRAINT `fk_fb_outlets_operator` FOREIGN KEY (`FB_id`) - REFERENCES `fb_operator` (`FB_id`) -); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql deleted file mode 100644 index 364fe21..0000000 --- a/bin/main/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -INSERT INTO `FB_Outlets` (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(201, 2, '金鐘', '夏愨道18號海富中心地下1-41號舖A部份', '2520 1329', CURRENT_TIMESTAMP), -(202, 2, '灣仔', '軒尼詩道302-308號集成中心Shop G11-17 ,G/F', '2893 9503', CURRENT_TIMESTAMP); - - -INSERT INTO FB_Outlets (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(301, 3, '銅鑼灣', '波斯富街48號軒尼詩大廈3樓', '2808 0139', CURRENT_TIMESTAMP), -(302, 3, '銅鑼灣', '地下英皇道6-8 號香港天后百利大廈', '2807 3864', CURRENT_TIMESTAMP); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql b/bin/main/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql deleted file mode 100644 index 76c796d..0000000 --- a/bin/main/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql +++ /dev/null @@ -1,8 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -INSERT INTO `fb_outlets` (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(201, 2, '金鐘', '夏愨道18號海富中心地下1-41號舖A部份', '2520 1329', CURRENT_TIMESTAMP), -(202, 2, '灣仔', '軒尼詩道302-308號集成中心Shop G11-17 ,G/F', '2893 9503', CURRENT_TIMESTAMP); - diff --git a/bin/main/db/changelog/changes/enson_change/44_create_muti_table.sql b/bin/main/db/changelog/changes/enson_change/44_create_muti_table.sql deleted file mode 100644 index 93df43d..0000000 --- a/bin/main/db/changelog/changes/enson_change/44_create_muti_table.sql +++ /dev/null @@ -1,71 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- 餐厅菜单表 -CREATE TABLE `FB_Menu` ( - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Menu_Item_Description` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`), - UNIQUE KEY `UK_FB_menu_id` (`FB_menu_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 菜单项成分表 -CREATE TABLE `FB_Menu_Item_Ingredient` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Ingredient_id` int NOT NULL, - `Ingredient_Volume` decimal(10,2) NOT NULL, - `Ingredient_Volume_Unit` varchar(50) NOT NULL, - `Allergy_Substance_ID` int, - `Nutrient_ID` int, - `Nutrient_Volume` decimal(10,2), - `Nutrient_Volume_Unit` varchar(50), - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 菜单与门店关系表 -CREATE TABLE `FB_Menu_and_Outlet_Relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `FB_outlet_id` int NOT NULL, - `FB_menu_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_rel_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_rel_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 每日营养摄入汇总表 -CREATE TABLE `daily_nutrition_summary` ( - `id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `date` date NOT NULL, - `total_calories` decimal(10,2) DEFAULT 0, - `total_protein` decimal(10,2) DEFAULT 0, - `total_fat` decimal(10,2) DEFAULT 0, - `total_carbs` decimal(10,2) DEFAULT 0, - `total_sodium` decimal(10,2) DEFAULT 0, - `total_potassium` decimal(10,2) DEFAULT 0, - `total_calcium` decimal(10,2) DEFAULT 0, - `total_phosphorus` decimal(10,2) DEFAULT 0, - `total_iron` decimal(10,2) DEFAULT 0, - `total_vitamin_a` decimal(10,2) DEFAULT 0, - `total_vitamin_b1` decimal(10,2) DEFAULT 0, - `total_vitamin_b2` decimal(10,2) DEFAULT 0, - `total_niacin` decimal(10,2) DEFAULT 0, - `total_vitamin_c` decimal(10,2) DEFAULT 0, - `breakfast_calories` decimal(10,2) DEFAULT 0, - `lunch_calories` decimal(10,2) DEFAULT 0, - `dinner_calories` decimal(10,2) DEFAULT 0, - `snack_calories` decimal(10,2) DEFAULT 0, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - UNIQUE KEY `UK_user_date` (`user_id`, `date`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/45_alter_muti_table.sql b/bin/main/db/changelog/changes/enson_change/45_alter_muti_table.sql deleted file mode 100644 index 7cb0ec1..0000000 --- a/bin/main/db/changelog/changes/enson_change/45_alter_muti_table.sql +++ /dev/null @@ -1,43 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -CREATE TABLE `FB_Menu_Item_Nutrition` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Calories` decimal(10,2) DEFAULT 0, - `Protein` decimal(10,2) DEFAULT 0, - `Fat` decimal(10,2) DEFAULT 0, - `Carbohydrate` decimal(10,2) DEFAULT 0, - `Sodium` decimal(10,2) DEFAULT 0, - `Potassium` decimal(10,2) DEFAULT 0, - `Calcium` decimal(10,2) DEFAULT 0, - `Phosphorus` decimal(10,2) DEFAULT 0, - `Iron` decimal(10,2) DEFAULT 0, - `VitaminA` decimal(10,2) DEFAULT 0, - `VitaminB1` decimal(10,2) DEFAULT 0, - `VitaminB2` decimal(10,2) DEFAULT 0, - `Niacin` decimal(10,2) DEFAULT 0, - `VitaminC` decimal(10,2) DEFAULT 0, - `Nutrient_Volume` decimal(10,2) DEFAULT 0, - `Nutrient_Volume_Unit` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `UK_FB_menu_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_nutrition_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -*/ -CREATE TABLE `Ingredient` ( - `Ingredient_id` int NOT NULL AUTO_INCREMENT, - `Ingredient_Name` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`Ingredient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -ALTER TABLE `fhsmscdb`.`fb_menu_item_ingredient` - DROP COLUMN `Nutrient_ID`, - DROP COLUMN `Nutrient_Volume`, - DROP COLUMN `Nutrient_Volume_Unit`; - - - diff --git a/bin/main/db/changelog/changes/enson_change/46_alter_muti_table.sql b/bin/main/db/changelog/changes/enson_change/46_alter_muti_table.sql deleted file mode 100644 index 44e0013..0000000 --- a/bin/main/db/changelog/changes/enson_change/46_alter_muti_table.sql +++ /dev/null @@ -1,175 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -DROP TABLE IF EXISTS fb_menu_and_outlet_relationship; -DROP TABLE IF EXISTS fb_menu_item_ingredient; -DROP TABLE IF EXISTS fb_menu_item_nutrition; -DROP TABLE IF EXISTS fb_menu; -DROP TABLE IF EXISTS ingredient; - - -CREATE TABLE `ingredient` ( - `Ingredient_id` int NOT NULL AUTO_INCREMENT, - `Ingredient_Name` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`Ingredient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 重新创建fb_menu表,使用FB_menu_id作为主键 -CREATE TABLE `fb_menu` ( - `FB_id` int NOT NULL, - `FB_menu_id` int NOT NULL AUTO_INCREMENT, - `Menu_Item_Description` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_menu_id`), - INDEX `idx_FB_id` (`FB_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `fb_menu_item_nutrition` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Calories` decimal(10,2) DEFAULT 0, - `Protein` decimal(10,2) DEFAULT 0, - `Fat` decimal(10,2) DEFAULT 0, - `Carbohydrate` decimal(10,2) DEFAULT 0, - `Sodium` decimal(10,2) DEFAULT 0, - `Potassium` decimal(10,2) DEFAULT 0, - `Calcium` decimal(10,2) DEFAULT 0, - `Phosphorus` decimal(10,2) DEFAULT 0, - `Iron` decimal(10,2) DEFAULT 0, - `VitaminA` decimal(10,2) DEFAULT 0, - `VitaminB1` decimal(10,2) DEFAULT 0, - `VitaminB2` decimal(10,2) DEFAULT 0, - `Niacin` decimal(10,2) DEFAULT 0, - `VitaminC` decimal(10,2) DEFAULT 0, - `Nutrient_Volume` decimal(10,2) DEFAULT 0, - `Nutrient_Volume_Unit` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_nutrition_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_nutrition_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `fb_menu_item_ingredient` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Ingredient_id` int NOT NULL, - `Ingredient_Volume` decimal(10,2) NOT NULL, - `Ingredient_Volume_Unit` varchar(50) NOT NULL, - `Allergy_Substance_ID` int, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_id` (`FB_menu_id`), - KEY `FK_Ingredient_id` (`Ingredient_id`), - CONSTRAINT `FK_FB_menu_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE, - CONSTRAINT `FK_Ingredient_id` FOREIGN KEY (`Ingredient_id`) REFERENCES `ingredient` (`Ingredient_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE `fb_menu_and_outlet_relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `FB_outlet_id` int NOT NULL, - `FB_menu_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_rel_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_rel_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO fb_menu (FB_id, FB_menu_id, Menu_Item_Description, created_at) VALUES -(1, 101, '香煎三文鱼配时蔬', NOW()), -(1, 102, '黑椒牛排配蘑菇酱', NOW()), -(1, 103, '泰式青咖喱鸡', NOW()), -(1, 104, '意式肉酱面配帕玛森芝士', NOW()), -(1, 105, '地中海风味沙拉', NOW()), -(2, 201, '清蒸鲈鱼配姜葱', NOW()), -(2, 202, '红烧狮子头', NOW()), -(2, 203, '宫保鸡丁配花生米', NOW()); - --- 插入营养信息数据 -INSERT INTO fb_menu_item_nutrition (FB_menu_id, Calories, Protein, Fat, Carbohydrate, Sodium, Potassium, Calcium, Phosphorus, Iron, VitaminA, VitaminB1, VitaminB2, Niacin, VitaminC, Nutrient_Volume, Nutrient_Volume_Unit, created_at) VALUES - -(101, 275.00, 25.00, 15.00, 10.00, 150.00, 450.00, 30.00, 250.00, 1.80, 120.00, 0.15, 0.20, 5.00, 15.00, 350.00, 'g', NOW()), - - -(102, 320.00, 30.00, 20.00, 5.00, 200.00, 500.00, 20.00, 200.00, 3.50, 50.00, 0.10, 0.15, 7.00, 5.00, 300.00, 'g', NOW()), - - -(103, 310.00, 22.00, 18.00, 15.00, 300.00, 400.00, 50.00, 180.00, 2.00, 80.00, 0.12, 0.18, 6.00, 20.00, 350.00, 'g', NOW()), - - -(104, 480.00, 20.00, 15.00, 65.00, 800.00, 350.00, 150.00, 200.00, 2.50, 100.00, 0.20, 0.25, 4.00, 10.00, 400.00, 'g', NOW()), - - -(105, 200.00, 8.00, 12.00, 15.00, 120.00, 300.00, 100.00, 120.00, 1.20, 150.00, 0.08, 0.12, 2.00, 45.00, 250.00, 'g', NOW()); - - -INSERT INTO ingredient (Ingredient_id, Ingredient_Name, created_at) VALUES -(1, '三文鱼', NOW()), -(2, '橄榄油', NOW()), -(3, '西兰花', NOW()), -(4, '胡萝卜', NOW()), -(5, '牛排', NOW()), -(6, '黑胡椒', NOW()), -(7, '蘑菇', NOW()), -(8, '鸡胸肉', NOW()), -(9, '青咖喱酱', NOW()), -(10, '椰奶', NOW()), -(11, '意大利面', NOW()), -(12, '番茄', NOW()), -(13, '牛肉碎', NOW()), -(14, '帕玛森芝士', NOW()), -(15, '生菜', NOW()), -(16, '黄瓜', NOW()), -(17, '橄榄', NOW()), -(18, '羊奶芝士', NOW()); - - -INSERT INTO fb_menu_item_ingredient (FB_menu_id, Ingredient_id, Ingredient_Volume, Ingredient_Volume_Unit, Allergy_Substance_ID, created_at) VALUES - -(101, 1, 200.00, 'g', 7, NOW()), -- 三文鱼 (鱼类过敏 -(101, 2, 15.00, 'ml', NULL, NOW()), -(101, 3, 100.00, 'g', NULL, NOW()), -(101, 4, 50.00, 'g', NULL, NOW()), - - -(102, 5, 250.00, 'g', NULL, NOW()), -(102, 6, 5.00, 'g', NULL, NOW()), -(102, 7, 100.00, 'g', NULL, NOW()), -(102, 2, 10.00, 'ml', NULL, NOW()), - - -(103, 8, 180.00, 'g', NULL, NOW()), -(103, 9, 30.00, 'g', 5, NOW()), -- 咖喱酱 (可能含大豆) -(103, 10, 150.00, 'ml', 3, NOW()), -- 椰奶 (可能含乳制品) -(103, 3, 80.00, 'g', NULL, NOW()), - - -(104, 11, 120.00, 'g', 6, NOW()), -- 意大利面 (含麦麸) -(104, 12, 150.00, 'g', NULL, NOW()), -(104, 13, 100.00, 'g', NULL, NOW()), -(104, 14, 20.00, 'g', 3, NOW()), -- 帕玛森芝士 (含乳制品) - - -(105, 15, 100.00, 'g', NULL, NOW()), -(105, 16, 80.00, 'g', NULL, NOW()), -(105, 17, 30.00, 'g', NULL, NOW()), -(105, 18, 40.00, 'g', 3, NOW()), -- 羊奶芝士 (含乳制品) -(105, 2, 15.00, 'ml', NULL, NOW()); - - -INSERT INTO fb_menu_and_outlet_relationship (FB_id, FB_outlet_id, FB_menu_id, created_at) VALUES -(1, 1001, 101, NOW()), -(1, 1001, 102, NOW()), -(1, 1001, 103, NOW()), -(1, 1002, 101, NOW()), -(1, 1002, 104, NOW()), -(1, 1002, 105, NOW()), -(2, 2001, 201, NOW()), -(2, 2001, 202, NOW()), -(2, 2001, 203, NOW()), -(2, 2002, 201, NOW()), -(2, 2002, 202, NOW()); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/47_alter_muti_table.sql b/bin/main/db/changelog/changes/enson_change/47_alter_muti_table.sql deleted file mode 100644 index 64b8088..0000000 --- a/bin/main/db/changelog/changes/enson_change/47_alter_muti_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -INSERT INTO fb_operator (FB_id, FB_name, FB_type, FB_cuisine, created_at) VALUES -(1, 'Healthy Eater', 'Fast Food', 'Chinese', NOW()), -(2, 'Seafood World', 'Dinner', 'Cantonese', NOW()), -*/ - -INSERT INTO fb_outlets (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) VALUES - -(1001, 1, 'Central', 'Central Financial Street 88, 1st Floor', '2345-6789', NOW()), -(1002, 1, 'Causeway Bay', 'Causeway Bay Times Square 2nd Floor', '2345-6790', NOW()), - - -(2001, 2, 'Tsim Sha Tsui', 'Tsim Sha Tsui Guangdong Road 30', '3456-7890', NOW()), -(2002, 2, 'Sha Tin', 'Sha Tin New City Plaza 5th Floor', '3456-7891', NOW()); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/48_build_muti_table.sql b/bin/main/db/changelog/changes/enson_change/48_build_muti_table.sql deleted file mode 100644 index ab373ea..0000000 --- a/bin/main/db/changelog/changes/enson_change/48_build_muti_table.sql +++ /dev/null @@ -1,85 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-organization-tables ---comment: Create organization related tables - - -DROP TABLE daily_nutrition_summary; - - -CREATE TABLE User_Group_Organization ( - User_Grp_Org_ID INT AUTO_INCREMENT PRIMARY KEY, - User_Grp_Org_Name VARCHAR(100) NOT NULL, - Creator_User_ID INT NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - - -CREATE TABLE User_Group_Members ( - User_Grp_Org_ID INT NOT NULL, - User_ID INT NOT NULL, - R_Ship_Creator VARCHAR(50), - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_Grp_Org_ID, User_ID), - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE TABLE User_Group_Admin ( - User_Grp_Org_ID INT NOT NULL, - Admin_User_ID INT NOT NULL, - Organization_Role VARCHAR(50) NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_Grp_Org_ID, Admin_User_ID), - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE TABLE User_Delegation ( - User_ID INT NOT NULL, - Delegate_To_User_ID INT NOT NULL, - Data_Group_ID INT NOT NULL, - Delegation_Start_Date DATE NOT NULL, - Delegation_Expiry_Date DATE NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_ID, Delegate_To_User_ID, Data_Group_ID) -); - - -CREATE TABLE daily_nutrition_summary ( - id INT AUTO_INCREMENT PRIMARY KEY, - user_id INT NOT NULL, - User_Grp_Org_ID INT, - date DATE NOT NULL, - visibility_level INT DEFAULT 1, - data_category VARCHAR(50) DEFAULT 'regular', - reference_group_id INT, - health_metrics_reference_id INT, - total_calories DECIMAL(10,2) DEFAULT 0, - total_protein DECIMAL(10,2) DEFAULT 0, - total_fat DECIMAL(10,2) DEFAULT 0, - total_carbs DECIMAL(10,2) DEFAULT 0, - total_sodium DECIMAL(10,2) DEFAULT 0, - total_potassium DECIMAL(10,2) DEFAULT 0, - total_calcium DECIMAL(10,2) DEFAULT 0, - total_phosphorus DECIMAL(10,2) DEFAULT 0, - total_iron DECIMAL(10,2) DEFAULT 0, - total_vitamin_a DECIMAL(10,2) DEFAULT 0, - total_vitamin_b1 DECIMAL(10,2) DEFAULT 0, - total_vitamin_b2 DECIMAL(10,2) DEFAULT 0, - total_niacin DECIMAL(10,2) DEFAULT 0, - total_vitamin_c DECIMAL(10,2) DEFAULT 0, - breakfast_calories DECIMAL(10,2) DEFAULT 0, - lunch_calories DECIMAL(10,2) DEFAULT 0, - dinner_calories DECIMAL(10,2) DEFAULT 0, - snack_calories DECIMAL(10,2) DEFAULT 0, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE INDEX idx_daily_nutrition_user_date ON daily_nutrition_summary(user_id, date); -CREATE INDEX idx_daily_nutrition_org_date ON daily_nutrition_summary(User_Grp_Org_ID, date); - - - diff --git a/bin/main/db/changelog/changes/enson_change/49_alter_muti_table.sql b/bin/main/db/changelog/changes/enson_change/49_alter_muti_table.sql deleted file mode 100644 index 7f1981e..0000000 --- a/bin/main/db/changelog/changes/enson_change/49_alter_muti_table.sql +++ /dev/null @@ -1,71 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-organization-tables ---comment: Create organization related tables - - - -INSERT INTO User_Group_Organization (User_Grp_Org_ID, User_Grp_Org_Name, Creator_User_ID, Creation_Date_Time) -VALUES -(1, 'Aschool', 1001, NOW()), -(2, 'Bschool', 1002, NOW()), -(3, 'Cschool', 1003, NOW()), -(4, 'Dschool', 1004, NOW()), -(5, 'Eschool', 1005, NOW()); - - -INSERT INTO User_Group_Members (User_Grp_Org_ID, User_ID, R_Ship_Creator, Creation_Date_Time) -VALUES - -(1, 1001, 'Creator', NOW()), -(1, 1010, 'Student', NOW()), -(1, 1011, 'Student', NOW()), -(1, 1012, 'Teacher', NOW()), -(1, 1013, 'Teacher', NOW()), - -(2, 1002, 'Creator', NOW()), -(2, 1020, 'Student', NOW()), -(2, 1021, 'Student', NOW()), -(2, 1022, 'Teacher', NOW()), - -(3, 1003, 'Creator', NOW()), -(3, 1030, 'Student', NOW()), -(3, 1031, 'Student', NOW()), - -(4, 1004, 'Creator', NOW()), -(4, 1040, 'Student', NOW()), - -(5, 1005, 'Creator', NOW()), -(5, 1050, 'Student', NOW()); - - -INSERT INTO User_Group_Admin (User_Grp_Org_ID, Admin_User_ID, Organization_Role, Creation_Date_Time) -VALUES - -(1, 1001, 'President', NOW()), -(1, 1012, 'Dean', NOW()), -(1, 1013, 'Dean', NOW()), - -(2, 1002, 'President', NOW()), -(2, 1022, 'Dean', NOW()), - -(3, 1003, 'President', NOW()), -(3, 1031, 'President', NOW()), - -(4, 1004, 'President', NOW()), - -(5, 1005, 'President', NOW()); - - -INSERT INTO User_Delegation (User_ID, Delegate_To_User_ID, Data_Group_ID, Delegation_Start_Date, Delegation_Expiry_Date, Creation_Date_Time) -VALUES - -(1001, 1012, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), - -(1001, 1013, 2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 6 MONTH), NOW()), - -(1002, 1022, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), -(1002, 1022, 2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), - -(1003, 1031, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 3 MONTH), NOW()), - -(1010, 1011, 4, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 7 DAY), NOW()); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/50_alter_table.sql b/bin/main/db/changelog/changes/enson_change/50_alter_table.sql deleted file mode 100644 index 9413a3a..0000000 --- a/bin/main/db/changelog/changes/enson_change/50_alter_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:insert-sample-data ---comment: Insert sample data for testing - -ALTER TABLE `fhsmscdb`.`daily_nutrition_summary` -CHANGE COLUMN `created_at` `created` datetime, -CHANGE COLUMN `updated_at` `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, -ADD COLUMN `createdBy` bigint DEFAULT NULL, -ADD COLUMN `version` int NOT NULL DEFAULT '0', -ADD COLUMN `modifiedBy` bigint DEFAULT NULL, -ADD COLUMN `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/51_alter_i18n.sql b/bin/main/db/changelog/changes/enson_change/51_alter_i18n.sql deleted file mode 100644 index 4080519..0000000 --- a/bin/main/db/changelog/changes/enson_change/51_alter_i18n.sql +++ /dev/null @@ -1,35 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -UPDATE fb_menu SET Menu_Item_Description = CASE FB_menu_id - WHEN 101 THEN 'Pan-fried Salmon with Seasonal Vegetables' - WHEN 102 THEN 'Black Pepper Steak with Mushroom Sauce' - WHEN 103 THEN 'Thai Green Curry Chicken' - WHEN 104 THEN 'Spaghetti Bolognese with Parmesan Cheese' - WHEN 105 THEN 'Mediterranean Salad' - WHEN 201 THEN 'Steamed Sea Bass with Ginger and Spring Onion' - WHEN 202 THEN 'Braised Lion Head Meatballs' - WHEN 203 THEN 'Kung Pao Chicken with Peanuts' -END -WHERE FB_menu_id IN (101,102,103,104,105,201,202,203); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_menu', 'Menu_Item_Description', 101, 'zh', '香煎鮭魚配時蔬'), -('fb_menu', 'Menu_Item_Description', 102, 'zh', '黑椒牛排佐蘑菇醬'), -('fb_menu', 'Menu_Item_Description', 103, 'zh', '泰國青咖哩雞'), -('fb_menu', 'Menu_Item_Description', 104, 'zh', '義式肉醬麵配帕瑪森起司'), -('fb_menu', 'Menu_Item_Description', 105, 'zh', '地中海風味沙拉'), -('fb_menu', 'Menu_Item_Description', 201, 'zh', '清蒸鱸魚配薑蔥'), -('fb_menu', 'Menu_Item_Description', 202, 'zh', '紅燒獅子頭'), -('fb_menu', 'Menu_Item_Description', 203, 'zh', '宮保雞丁配花生米'); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_menu', 'Menu_Item_Description', 101, 'en', 'Pan-fried Salmon with Seasonal Vegetables'), -('fb_menu', 'Menu_Item_Description', 102, 'en', 'Black Pepper Steak with Mushroom Sauce'), -('fb_menu', 'Menu_Item_Description', 103, 'en', 'Thai Green Curry Chicken'), -('fb_menu', 'Menu_Item_Description', 104, 'en', 'Spaghetti Bolognese with Parmesan Cheese'), -('fb_menu', 'Menu_Item_Description', 105, 'en', 'Mediterranean Salad'), -('fb_menu', 'Menu_Item_Description', 201, 'en', 'Steamed Sea Bass with Ginger and Spring Onion'), -('fb_menu', 'Menu_Item_Description', 202, 'en', 'Braised Lion Head Meatballs'), -('fb_menu', 'Menu_Item_Description', 203, 'en', 'Kung Pao Chicken with Peanuts'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/51_create_i18n.sql b/bin/main/db/changelog/changes/enson_change/51_create_i18n.sql deleted file mode 100644 index a34fb27..0000000 --- a/bin/main/db/changelog/changes/enson_change/51_create_i18n.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -CREATE TABLE `I18n` ( - `id` int NOT NULL AUTO_INCREMENT, - `table_name` varchar(50) NOT NULL, - `field_name` varchar(50) NOT NULL , - `record_id` int NOT NULL, - `language` varchar(10) NOT NULL, - `value` text NOT NULL, - `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `modified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `createdBy` int DEFAULT NULL, - `modifiedBy` int DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `UK_translation` (`table_name`, `field_name`, `record_id`, `language`), - KEY `IDX_table_field` (`table_name`, `field_name`), - KEY `IDX_language` (`language`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/53_alter_i18n.sql b/bin/main/db/changelog/changes/enson_change/53_alter_i18n.sql deleted file mode 100644 index d4d0b34..0000000 --- a/bin/main/db/changelog/changes/enson_change/53_alter_i18n.sql +++ /dev/null @@ -1,31 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -UPDATE fb_outlets SET FB_outlet_district = CASE id - WHEN 1 THEN 'Admiralty' - WHEN 2 THEN 'Wan Chai' - WHEN 3 THEN 'Kwun Tong' - WHEN 4 THEN 'Kwun Tong' -END -WHERE id IN (1,2,3,4); - -UPDATE fb_outlets SET FB_outlet_address = CASE id - WHEN 1 THEN 'Shop A, No.1-41, G/F, Admiralty Centre, 18 Harcourt Road' - WHEN 2 THEN 'Shop G11-17 ,G/F, C.c. Wu Building,11-17, 302-308, Hennessy Road' - WHEN 3 THEN 'Speedy Industrial Building, 2nd Floor, Room B, 114, Kwun Tong Road' - WHEN 4 THEN 'Shop No. L2-1 Level 2, apm, 418 Kwun Tong Rd' -END -WHERE id IN (1,2,3,4); -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 1, 'zh', '中環'), -('fb_outlets', 'FB_outlet_district', 2, 'zh', '灣仔'), -('fb_outlets', 'FB_outlet_district', 3, 'zh', '觀塘'), -('fb_outlets', 'FB_outlet_district', 4, 'zh', '觀塘'); - - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_address', 1, 'en', 'Shop A, No.1-41, G/F, Admiralty Centre, 18 Harcourt Road'), -('fb_outlets', 'FB_outlet_address', 2, 'en', 'Shop G11-17 ,G/F, C.c. Wu Building,11-17, 302-308, Hennessy Road'), -('fb_outlets', 'FB_outlet_address', 3, 'en', 'Speedy Industrial Building, 2nd Floor, Room B, 114, Kwun Tong Road'), -('fb_outlets', 'FB_outlet_address', 4, 'en', 'Shop No. L2-1 Level 2, apm, 418 Kwun Tong Rd'); diff --git a/bin/main/db/changelog/changes/enson_change/54_alter_i18n.sql b/bin/main/db/changelog/changes/enson_change/54_alter_i18n.sql deleted file mode 100644 index e7b54b2..0000000 --- a/bin/main/db/changelog/changes/enson_change/54_alter_i18n.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 1, 'en', 'Admiralty'), -('fb_outlets', 'FB_outlet_district', 2, 'en', 'Wan Chai'), -('fb_outlets', 'FB_outlet_district', 3, 'en', 'Kwun Tong'), -('fb_outlets', 'FB_outlet_district', 4, 'en', 'Kwun Tong'); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_address', 1, 'zh', '夏愨道18號海富中心地下1-41號A鋪'), -('fb_outlets', 'FB_outlet_address', 2, 'zh', '灣仔軒尼詩道302-308號皇后大廈地下G11-17號鋪'), -('fb_outlets', 'FB_outlet_address', 3, 'zh', '觀塘鯉魚門道114號迅達工業大廈2樓B室'), -('fb_outlets', 'FB_outlet_address', 4, 'zh', '觀塘鯉魚門道418號apm2樓L2-1號鋪'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/55_alter_i18n.sql b/bin/main/db/changelog/changes/enson_change/55_alter_i18n.sql deleted file mode 100644 index 64105b1..0000000 --- a/bin/main/db/changelog/changes/enson_change/55_alter_i18n.sql +++ /dev/null @@ -1,24 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - - - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 7, 'en', 'Central'), -('fb_outlets', 'FB_outlet_district', 8, 'en', 'Causeway Bay'), -('fb_outlets', 'FB_outlet_district', 9, 'en', 'Tsim Sha Tsui'), -('fb_outlets', 'FB_outlet_district', 10, 'en', 'Sha Tin'), -('fb_outlets', 'FB_outlet_district', 7, 'zh', '中環'), -('fb_outlets', 'FB_outlet_district', 8, 'zh', '銅鑼灣'), -('fb_outlets', 'FB_outlet_district', 9, 'zh', '尖沙咀'), -('fb_outlets', 'FB_outlet_district', 10, 'zh', '沙田'), - -('fb_outlets', 'FB_outlet_address', 7, 'en', 'Central Financial Street 88, 1st Floor'), -('fb_outlets', 'FB_outlet_address', 8, 'en', 'Causeway Bay Times Square 2nd Floor'), -('fb_outlets', 'FB_outlet_address', 9, 'en', 'Tsim Sha Tsui Guangdong Road 30'), -('fb_outlets', 'FB_outlet_address', 10, 'en', 'Sha Tin New City Plaza 5th Floor'), -('fb_outlets', 'FB_outlet_address', 7, 'zh', '金融街88號1樓'), -('fb_outlets', 'FB_outlet_address', 8, 'zh', '時代廣場2樓'), -('fb_outlets', 'FB_outlet_address', 9, 'zh', '廣東道30號'), -('fb_outlets', 'FB_outlet_address', 10, 'zh', '新城市廣場52樓'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/56_create_table.sql b/bin/main/db/changelog/changes/enson_change/56_create_table.sql deleted file mode 100644 index 61d17c3..0000000 --- a/bin/main/db/changelog/changes/enson_change/56_create_table.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - - - -CREATE TABLE `UserAccessControl` ( - `UserId` int NOT NULL AUTO_INCREMENT, - `FunctionId` int NOT NULL, - `Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `Modified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `CreatedBy` int DEFAULT NULL, - `ModifiedBy` int DEFAULT NULL, - PRIMARY KEY (`UserId`, `FunctionId`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/58_insert_data.sql b/bin/main/db/changelog/changes/enson_change/58_insert_data.sql deleted file mode 100644 index 35e02d7..0000000 --- a/bin/main/db/changelog/changes/enson_change/58_insert_data.sql +++ /dev/null @@ -1,63 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', 'USER_MANAGEMENT', 'Maintain user master data'), -(2, 'VIEW_USER', 'View User', 'USER_MANAGEMENT', 'View user master data'), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', 'USER_MANAGEMENT', 'Maintain user group master data'), -(4, 'VIEW_USER_GROUP', 'View User Group', 'USER_MANAGEMENT', 'View user group master data'), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu', 'FOOD_MANAGEMENT', 'Maintain food and menu data'), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', 'FOOD_MANAGEMENT', 'View food and menu data'), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', 'FOOD_MANAGEMENT', 'Maintain food intake records'), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', 'FOOD_MANAGEMENT', 'View food intake records'), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', 'NUTRITION_MANAGEMENT', 'Maintain nutrition standards'), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', 'NUTRITION_MANAGEMENT', 'View nutrition standards'), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', 'NUTRITION_MANAGEMENT', 'Maintain nutrition analysis'), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', 'NUTRITION_MANAGEMENT', 'View nutrition analysis'), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', 'HEALTH_MANAGEMENT', 'Maintain health development data'), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', 'HEALTH_MANAGEMENT', 'View health development data'), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', 'HEALTH_MANAGEMENT', 'Maintain allergy data'), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', 'HEALTH_MANAGEMENT', 'View allergy data'), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', 'AI_MANAGEMENT', 'Maintain food AI models'), -(18, 'VIEW_AI_MODEL', 'View AI Model', 'AI_MANAGEMENT', 'View food AI models'), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', 'REPORT_MANAGEMENT', 'Generate nutrition trend analysis reports'), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', 'REPORT_MANAGEMENT', 'Generate health statistics reports'), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', 'REPORT_MANAGEMENT', 'Generate food leftover analysis reports'), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', 'FB_MANAGEMENT', 'Maintain F&B operator data'), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', 'FB_MANAGEMENT', 'View F&B operator data'), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', 'FB_MANAGEMENT', 'Maintain F&B outlet data'), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', 'FB_MANAGEMENT', 'View F&B outlet data'), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', 'ADVICE_MANAGEMENT', 'Maintain dietary advice data'), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', 'ADVICE_MANAGEMENT', 'View dietary advice data'), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', 'ACCESS_MANAGEMENT', 'Maintain access control settings'), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', 'ACCESS_MANAGEMENT', 'View access control settings'), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', 'ACCESS_MANAGEMENT', 'Maintain access delegation settings'), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', 'ACCESS_MANAGEMENT', 'View access delegation settings'); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/59_insert_data.sql b/bin/main/db/changelog/changes/enson_change/59_insert_data.sql deleted file mode 100644 index 9f6c03a..0000000 --- a/bin/main/db/changelog/changes/enson_change/59_insert_data.sql +++ /dev/null @@ -1,63 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/60_insert_data.sql b/bin/main/db/changelog/changes/enson_change/60_insert_data.sql deleted file mode 100644 index aff3bc6..0000000 --- a/bin/main/db/changelog/changes/enson_change/60_insert_data.sql +++ /dev/null @@ -1,67 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Insert user authority mapping - --- System Admin -INSERT INTO user_authority (userId, authId) VALUES --- user and access control management -(2, 1), -- MAINTAIN_USER -(1, 2), -- VIEW_USER -(1, 3), -- MAINTAIN_GROUP -(1, 4), -- VIEW_USER_GROUP -(1, 28), -- MAINTAIN_ACCESS_CONTROL -(1, 29), -- VIEW_ACCESS_CONTROL -(1, 30), -- MAINTAIN_ACCESS_DELEGATION -(1, 31), -- VIEW_ACCESS_DELEGATION --- AI和餐饮管理 -(1, 17), -- MAINTAIN_AI_MODEL -(1, 18), -- VIEW_AI_MODEL -(1, 22), -- MAINTAIN_FB_OPERATOR -(1, 23), -- VIEW_FB_OPERATOR -(1, 24), -- MAINTAIN_FB_OUTLET -(1, 25); -- VIEW_FB_OUTLET - --- School Admin -INSERT INTO user_authority (userId, authId) VALUES --- basic view permission -(2, 2), -- VIEW_USER -(2, 4), -- VIEW_USER_GROUP -(2, 29), -- VIEW_ACCESS_CONTROL --- report permission -(2, 19), -- G_NUTRITION_TREND_REPORT -(2, 20), -- G_HEALTH_STATISTICS_REPORT -(2, 21), -- G_FOOD_LEFTOVER_REPORT --- food and menu view permission -(2, 6), -- VIEW_FOOD_MENU -(2, 23), -- VIEW_FB_OPERATOR -(2, 25); -- VIEW_FB_OUTLET - --- Student User -INSERT INTO user_authority (userId, authId) VALUES --- personal data management -(9, 7), -- MAINTAIN_FOOD_INTAKE -(9, 8), -- VIEW_FOOD_INTAKE -(9, 13), -- MAINTAIN_HEALTH_DATA -(9, 14), -- VIEW_HEALTH_DATA -(9, 15), -- MAINTAIN_ALLERGY_DATA -(9, 16), -- VIEW_ALLERGY_DATA --- view permission -(9, 6), -- VIEW_FOOD_MENU -(9, 10), -- VIEW_NUTRITION_STANDARD -(9, 12), -- VIEW_NUTRITION_ANALYSIS -(9, 27); -- VIEW_DIETARY_ADVICE - --- Nutritionist/Health Advisor -INSERT INTO user_authority (userId, authId) VALUES --- nutrition and health management -(8, 11), -- MAINTAIN_NUTRITION_ANALYSIS -(8, 12), -- VIEW_NUTRITION_ANALYSIS -(8, 26), -- MAINTAIN_DIETARY_ADVICE -(8, 27), -- VIEW_DIETARY_ADVICE --- data view permission -(8, 14), -- VIEW_HEALTH_DATA -(8, 16), -- VIEW_ALLERGY_DATA -(8, 8), -- VIEW_FOOD_INTAKE --- report generation -(8, 19), -- G_NUTRITION_TREND_REPORT -(8, 20); -- G_HEALTH_STATISTICS_REPORT \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/61_insert_data.sql b/bin/main/db/changelog/changes/enson_change/61_insert_data.sql deleted file mode 100644 index 497e21f..0000000 --- a/bin/main/db/changelog/changes/enson_change/61_insert_data.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -INSERT INTO authority (id, authority, name, module, description) VALUES --- Access Control Management -(32, 'MAINTAIN_MENU_ITEM', 'Maintain Menu Item', null, null), -(33, 'VIEW_MENU_ITEM', 'View Menu Item', null, null), -(34, 'MAINTAIN_INGREDIENT', 'Maintain Ingredient', null, null), -(35, 'VIEW_INGREDIENT', 'View Ingredient', null, null), -(36, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', null, null), -(37, 'VIEW_MENU_OUTLET', 'View Menu Outlet', null, null); diff --git a/bin/main/db/changelog/changes/enson_change/62_insert_data.sql b/bin/main/db/changelog/changes/enson_change/62_insert_data.sql deleted file mode 100644 index b503cba..0000000 --- a/bin/main/db/changelog/changes/enson_change/62_insert_data.sql +++ /dev/null @@ -1,61 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - --- 插入权限数据(添加条件检查) -INSERT INTO authority (id, authority, name, module, description) -SELECT 38, 'MAINTAIN_FB_OPERATOR', 'Maintain F&B Operator', 'F&B', 'Permission to maintain F&B operator information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_FB_OPERATOR'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 39, 'VIEW_FB_OPERATOR', 'View F&B Operator', 'F&B', 'Permission to view F&B operator information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_FB_OPERATOR'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 40, 'MAINTAIN_FB_OUTLET', 'Maintain F&B Outlet', 'F&B', 'Permission to maintain F&B outlet information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_FB_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 41, 'VIEW_FB_OUTLET', 'View F&B Outlet', 'F&B', 'Permission to view F&B outlet information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_FB_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 42, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', 'F&B', 'Permission to maintain menu-outlet relationship' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_MENU_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 43, 'VIEW_MENU_OUTLET', 'View Menu Outlet', 'F&B', 'Permission to view menu-outlet relationship' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_MENU_OUTLET'); - --- 插入用户权限关联(添加条件检查) -INSERT INTO user_authority (userId, authId) -SELECT 6, 38 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 38); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 39 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 39); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 40 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 40); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 41 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 41); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 42 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 42); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 43 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 43); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 32 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 32); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 33 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 33); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/63_insert_data.sql b/bin/main/db/changelog/changes/enson_change/63_insert_data.sql deleted file mode 100644 index f8fde29..0000000 --- a/bin/main/db/changelog/changes/enson_change/63_insert_data.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - --- 插入权限数据(使用INSERT IGNORE避免重复) -INSERT IGNORE INTO authority (id, authority, name, module, description) -VALUES -(38, 'MAINTAIN_FB_OPERATOR', 'Maintain F&B Operator', 'F&B', 'Permission to maintain F&B operator information'), -(39, 'VIEW_FB_OPERATOR', 'View F&B Operator', 'F&B', 'Permission to view F&B operator information'), -(40, 'MAINTAIN_FB_OUTLET', 'Maintain F&B Outlet', 'F&B', 'Permission to maintain F&B outlet information'), -(41, 'VIEW_FB_OUTLET', 'View F&B Outlet', 'F&B', 'Permission to view F&B outlet information'), -(42, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', 'F&B', 'Permission to maintain menu-outlet relationship'), -(43, 'VIEW_MENU_OUTLET', 'View Menu Outlet', 'F&B', 'Permission to view menu-outlet relationship'); - --- 插入用户权限关联(使用INSERT IGNORE避免重复) -INSERT IGNORE INTO user_authority (userId, authId) -VALUES -(6, 38), -(6, 39), -(6, 40), -(6, 41), -(6, 42), -(6, 43), -(6, 32), -(6, 33); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/64_insert_data.sql b/bin/main/db/changelog/changes/enson_change/64_insert_data.sql deleted file mode 100644 index 785fb95..0000000 --- a/bin/main/db/changelog/changes/enson_change/64_insert_data.sql +++ /dev/null @@ -1,66 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); - - diff --git a/bin/main/db/changelog/changes/enson_change/65_insert_data.sql b/bin/main/db/changelog/changes/enson_change/65_insert_data.sql deleted file mode 100644 index 785fb95..0000000 --- a/bin/main/db/changelog/changes/enson_change/65_insert_data.sql +++ /dev/null @@ -1,66 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); - - diff --git a/bin/main/db/changelog/changes/enson_change/66_insert_data.sql b/bin/main/db/changelog/changes/enson_change/66_insert_data.sql deleted file mode 100644 index bdf5207..0000000 --- a/bin/main/db/changelog/changes/enson_change/66_insert_data.sql +++ /dev/null @@ -1,16 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -INSERT INTO authority (id, authority, name, module, description) VALUES --- Access Control Management -(32, 'MAINTAIN_MENU_ITEM', 'Maintain Menu Item', null, null), -(33, 'VIEW_MENU_ITEM', 'View Menu Item', null, null), -(34, 'MAINTAIN_INGREDIENT', 'Maintain Ingredient', null, null), -(35, 'VIEW_INGREDIENT', 'View Ingredient', null, null), -(36, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', null, null), -(37, 'VIEW_MENU_OUTLET', 'View Menu Outlet', null, null); - - - - diff --git a/bin/main/db/changelog/changes/enson_change/67_edit_table.sql b/bin/main/db/changelog/changes/enson_change/67_edit_table.sql deleted file mode 100644 index 4e82707..0000000 --- a/bin/main/db/changelog/changes/enson_change/67_edit_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - -ALTER TABLE `FB_Operator` DROP COLUMN created_at; - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `FB_Operator` -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/bin/main/db/changelog/changes/enson_change/68_edit_table.sql b/bin/main/db/changelog/changes/enson_change/68_edit_table.sql deleted file mode 100644 index 7304e84..0000000 --- a/bin/main/db/changelog/changes/enson_change/68_edit_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - -ALTER TABLE `fb_outlets` DROP COLUMN created_at; - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `fb_outlets` -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/bin/main/db/changelog/changes/enson_change/69_edit_table.sql b/bin/main/db/changelog/changes/enson_change/69_edit_table.sql deleted file mode 100644 index 5806a6e..0000000 --- a/bin/main/db/changelog/changes/enson_change/69_edit_table.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `i18n` - -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/bin/main/db/changelog/changes/enson_change/70_edit_table.sql b/bin/main/db/changelog/changes/enson_change/70_edit_table.sql deleted file mode 100644 index adf3ea7..0000000 --- a/bin/main/db/changelog/changes/enson_change/70_edit_table.sql +++ /dev/null @@ -1,72 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - - -INSERT INTO user_authority (userId, authId) VALUES --- ARestaurantManager (userid 6) - 可以查看和编辑 -(6, 5), -- MAINTAIN_FOOD_MENU -(6, 6), -- VIEW_FOOD_MENU -(6, 7), -- MAINTAIN_FOOD_INTAKE -(6, 8), -- VIEW_FOOD_INTAKE -(6, 32), -- MAINTAIN_MENU_ITEM -(6, 33), -- VIEW_MENU_ITEM -(6, 34), -- MAINTAIN_INGREDIENT -(6, 35), -- VIEW_INGREDIENT -(6, 36), -- MAINTAIN_MENU_OUTLET -(6, 37), -- VIEW_MENU_OUTLET - --- ARestaurantclerk (userid 8) - 只能查看 -(8, 6), -- VIEW_FOOD_MENU -(8, 8), -- VIEW_FOOD_INTAKE -(8, 33), -- VIEW_MENU_ITEM -(8, 35), -- VIEW_INGREDIENT -(8, 37), -- VIEW_MENU_OUTLET - --- BRestaurantManager (userid 10) - 可以查看和编辑 -(10, 5), -- MAINTAIN_FOOD_MENU -(10, 6), -- VIEW_FOOD_MENU -(10, 7), -- MAINTAIN_FOOD_INTAKE -(10, 8), -- VIEW_FOOD_INTAKE -(10, 32), -- MAINTAIN_MENU_ITEM -(10, 33), -- VIEW_MENU_ITEM -(10, 34), -- MAINTAIN_INGREDIENT -(10, 35), -- VIEW_INGREDIENT -(10, 36), -- MAINTAIN_MENU_OUTLET -(10, 37), -- VIEW_MENU_OUTLET - --- BRestaurantclerk (userid 11) - 只能查看 -(11, 6), -- VIEW_FOOD_MENU -(11, 8), -- VIEW_FOOD_INTAKE -(11, 33), -- VIEW_MENU_ITEM -(11, 35), -- VIEW_INGREDIENT -(11, 37), -- VIEW_MENU_OUTLET - --- ASchoolheadmaster (userid 12) - 可以查看和编辑 -(12, 13), -- MAINTAIN_HEALTH_DATA -(12, 14), -- VIEW_HEALTH_DATA -(12, 15), -- MAINTAIN_ALLERGY_DATA -(12, 16), -- VIEW_ALLERGY_DATA -(12, 26), -- MAINTAIN_DIETARY_ADVICE -(12, 27), -- VIEW_DIETARY_ADVICE -(12, 20), -- G_HEALTH_STATISTICS_REPORT - --- ASchoolteacher (userid 13) - 只能查看 -(13, 14), -- VIEW_HEALTH_DATA -(13, 16), -- VIEW_ALLERGY_DATA -(13, 27), -- VIEW_DIETARY_ADVICE - --- BSchoolheadmaster (userid 14) - 可以查看和编辑 -(14, 13), -- MAINTAIN_HEALTH_DATA -(14, 14), -- VIEW_HEALTH_DATA -(14, 15), -- MAINTAIN_ALLERGY_DATA -(14, 16), -- VIEW_ALLERGY_DATA -(14, 26), -- MAINTAIN_DIETARY_ADVICE -(14, 27), -- VIEW_DIETARY_ADVICE -(14, 20), -- G_HEALTH_STATISTICS_REPORT - --- BSchoolteacher (userid 15) - 只能查看 -(15, 14), -- VIEW_HEALTH_DATA -(15, 16), -- VIEW_ALLERGY_DATA -(15, 27); -- VIEW_DIETARY_ADVICE \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/71_edit_table.sql b/bin/main/db/changelog/changes/enson_change/71_edit_table.sql deleted file mode 100644 index 5ed5092..0000000 --- a/bin/main/db/changelog/changes/enson_change/71_edit_table.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -INSERT INTO user_authority (userId, authId) VALUES --- ARestaurantManager (userid 6) - 可以查看和编辑 -(6, 22), -- MAINTAIN_FB_OPERATOR -(6, 23), -- VIEW_FB_OPERATOR -(6, 24), -- MAINTAIN_FB_OUTLET -(6, 25), -- VIEW_FB_OUTLET - --- ARestaurantclerk (userid 8) - 只能查看 -(8, 23), -- VIEW_FOOD_MENU -(8, 25), -- VIEW_FOOD_INTAKE - --- BRestaurantManager (userid 10) - 可以查看和编辑 -(10, 22), -- MAINTAIN_FB_OPERATOR -(10, 23), -- VIEW_FB_OPERATOR -(10, 24), -- MAINTAIN_FB_OUTLET -(10, 25), -- VIEW_FB_OUTLET - --- BRestaurantclerk (userid 11) - 只能查看 -(11, 23), -- VIEW_FOOD_MENU -(11, 25); -- VIEW_FOOD_INTAKE - diff --git a/bin/main/db/changelog/changes/enson_change/72_create_table.sql b/bin/main/db/changelog/changes/enson_change/72_create_table.sql deleted file mode 100644 index a6fea54..0000000 --- a/bin/main/db/changelog/changes/enson_change/72_create_table.sql +++ /dev/null @@ -1,24 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -CREATE TABLE `fb_operator_and_organization_relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `User_Grp_Org_ID` int NOT NULL, - `created` timestamp NULL, - `createdBy` varchar(255) NULL, - `modified` timestamp NULL, - `modifiedBy` varchar(255) NULL, - `deleted` bit(1) DEFAULT 0, - `version` int DEFAULT 0, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO `fb_operator_and_organization_relationship` -(id, FB_id, User_Grp_Org_ID) VALUES --- User Management -(1, 1, 1), -(2, 2, 2), -(3, 3, 2), -(4, 4, 1); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/73_ALTER_table.sql b/bin/main/db/changelog/changes/enson_change/73_ALTER_table.sql deleted file mode 100644 index 05105fa..0000000 --- a/bin/main/db/changelog/changes/enson_change/73_ALTER_table.sql +++ /dev/null @@ -1,8 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_authority -DROP PRIMARY KEY, -ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY FIRST, -ADD UNIQUE KEY unique_user_auth (userId, authId); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/74_ALTER_table.sql b/bin/main/db/changelog/changes/enson_change/74_ALTER_table.sql deleted file mode 100644 index 51ba038..0000000 --- a/bin/main/db/changelog/changes/enson_change/74_ALTER_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_authority -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/75_ALTER_table.sql b/bin/main/db/changelog/changes/enson_change/75_ALTER_table.sql deleted file mode 100644 index e661d5d..0000000 --- a/bin/main/db/changelog/changes/enson_change/75_ALTER_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_group_members -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/76_ALTER_table.sql b/bin/main/db/changelog/changes/enson_change/76_ALTER_table.sql deleted file mode 100644 index 653520d..0000000 --- a/bin/main/db/changelog/changes/enson_change/76_ALTER_table.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - --- First, drop the foreign key constraint -ALTER TABLE user_group_members -DROP FOREIGN KEY user_group_members_ibfk_1; - --- Then drop the primary key -ALTER TABLE user_group_members -DROP PRIMARY KEY; - --- Add the new id column -ALTER TABLE user_group_members -ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY; - --- Re-add the foreign key constraint -ALTER TABLE user_group_members -ADD CONSTRAINT user_group_members_ibfk_1 -FOREIGN KEY (User_Grp_Org_ID) -REFERENCES user_group_organization (User_Grp_Org_ID); - --- Add unique constraint for the original composite key -ALTER TABLE user_group_members -ADD CONSTRAINT uk_org_user UNIQUE (User_Grp_Org_ID, User_ID); \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/77_create_table.sql b/bin/main/db/changelog/changes/enson_change/77_create_table.sql deleted file mode 100644 index b357104..0000000 --- a/bin/main/db/changelog/changes/enson_change/77_create_table.sql +++ /dev/null @@ -1,26 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table -ALTER TABLE fb_menu - Add category VARCHAR(50), - Add price DECIMAL(10,2), - Add is_vegetarian BOOLEAN DEFAULT FALSE, - Add is_vegan BOOLEAN DEFAULT FALSE, - Add is_gluten_free BOOLEAN DEFAULT FALSE, - Add is_spicy BOOLEAN DEFAULT FALSE - - - ---changeset yourname:004-create-menu_embedding-table -CREATE TABLE menu_item_base_embedding ( - embedding_id INT NOT NULL AUTO_INCREMENT, - FB_menu_id INT NOT NULL, - embedding_vector JSON NOT NULL, - embedding_text TEXT NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (embedding_id), - FOREIGN KEY (FB_menu_id) REFERENCES fb_menu(FB_menu_id) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/78_create_table.sql b/bin/main/db/changelog/changes/enson_change/78_create_table.sql deleted file mode 100644 index 7fb99a6..0000000 --- a/bin/main/db/changelog/changes/enson_change/78_create_table.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table -CREATE TABLE fboperator ( - id INT AUTO_INCREMENT PRIMARY KEY, - FB_name VARCHAR(255) NOT NULL, - FB_operator_address VARCHAR(255), - FB_operator_phone VARCHAR(255), - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); diff --git a/bin/main/db/changelog/changes/enson_change/79_alter_table.sql b/bin/main/db/changelog/changes/enson_change/79_alter_table.sql deleted file mode 100644 index 54efd95..0000000 --- a/bin/main/db/changelog/changes/enson_change/79_alter_table.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table - -CREATE TABLE fb_operator_backup AS SELECT * FROM fb_operator; - - -ALTER TABLE fb_operator -ADD COLUMN FB_operator_id INT NULL AFTER FB_id; - - -ALTER TABLE fb_operator -CHANGE COLUMN FB_id id INT AUTO_INCREMENT; - -RENAME TABLE fb_operator TO fb_brand; \ No newline at end of file diff --git a/bin/main/db/changelog/changes/enson_change/80_create_table.sql b/bin/main/db/changelog/changes/enson_change/80_create_table.sql deleted file mode 100644 index c1ff9f9..0000000 --- a/bin/main/db/changelog/changes/enson_change/80_create_table.sql +++ /dev/null @@ -1,30 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table - -CREATE TABLE fb_group ( - id INT AUTO_INCREMENT PRIMARY KEY, - FB_brand_id INT NOT NULL, - FB_group_name VARCHAR(255) NOT NULL, - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); -CREATE TABLE fb_group_relationship ( - id INT AUTO_INCREMENT PRIMARY KEY, - Fb_brand_id INT NOT NULL, - FB_group_id INT NOT NULL, - FB_menu_id INT NOT NULL, - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); diff --git a/build/resources/main/application-db-anna.yml b/build/resources/main/application-db-anna.yml new file mode 100644 index 0000000..d8f403e --- /dev/null +++ b/build/resources/main/application-db-anna.yml @@ -0,0 +1,11 @@ + +spring: + datasource: + jdbc-url: jdbc:mysql://192.168.1.228:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + username: root + password: secret + driver-class-name: com.mysql.cj.jdbc.Driver + springdoc: + api-docs: + path: /v3/api-docs + enabled: true diff --git a/build/resources/main/application-db-local.yml b/build/resources/main/application-db-local.yml new file mode 100644 index 0000000..220285b --- /dev/null +++ b/build/resources/main/application-db-local.yml @@ -0,0 +1,10 @@ + +spring: + datasource: + jdbc-url: jdbc:mysql://127.0.0.1:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + username: root + password: secret + springdoc: + api-docs: + path: /v3/api-docs + enabled: true diff --git a/build/resources/main/application-db-prod.yml b/build/resources/main/application-db-prod.yml new file mode 100644 index 0000000..fef53ad --- /dev/null +++ b/build/resources/main/application-db-prod.yml @@ -0,0 +1,11 @@ + +spring: + datasource: + jdbc-url: jdbc:mysql://127.0.0.1:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + username: root + password: secret + driver-class-name: com.mysql.cj.jdbc.Driver + springdoc: + api-docs: + path: /v3/api-docs + enabled: true diff --git a/build/resources/main/application-ldap-prod.yml b/build/resources/main/application-ldap-prod.yml new file mode 100644 index 0000000..6974913 --- /dev/null +++ b/build/resources/main/application-ldap-prod.yml @@ -0,0 +1,9 @@ +spring: + ldap: + embedded: + port: 8389 + base-dn: dc=springframework,dc=org + ldif: classpath:ldap-test-users.ldif + validation: + enabled: false + urls: ldap://localhost:8389 \ No newline at end of file diff --git a/build/resources/main/application-local.yml b/build/resources/main/application-local.yml new file mode 100644 index 0000000..5997a49 --- /dev/null +++ b/build/resources/main/application-local.yml @@ -0,0 +1,2 @@ +host: + url: http://localhost:3000 \ No newline at end of file diff --git a/build/resources/main/application-prod-linux.yml b/build/resources/main/application-prod-linux.yml new file mode 100644 index 0000000..41ac797 --- /dev/null +++ b/build/resources/main/application-prod-linux.yml @@ -0,0 +1,2 @@ +logging: + config: 'classpath:log4j2-prod-linux.yml' \ No newline at end of file diff --git a/build/resources/main/application-prod-win.yml b/build/resources/main/application-prod-win.yml new file mode 100644 index 0000000..b1a50a9 --- /dev/null +++ b/build/resources/main/application-prod-win.yml @@ -0,0 +1,4 @@ +server: + port: 8087 +logging: + config: 'classpath:log4j2-prod-win.yml' \ No newline at end of file diff --git a/build/resources/main/application.yml b/build/resources/main/application.yml new file mode 100644 index 0000000..70f858c --- /dev/null +++ b/build/resources/main/application.yml @@ -0,0 +1,28 @@ +server: + servlet: + contextPath: /api + encoding: + charset: UTF-8 + enabled: true + force: true + port: 8090 + error: + include-message: always + tomcat: + connection-timeout: 300000 +spring: + servlet: + multipart: + max-file-size: 500MB + max-request-size: 600MB + jpa: + hibernate: + naming: + physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + database-platform: org.hibernate.dialect.MySQL8Dialect + properties: + hibernate: + dialect: + storage_engine: innodb +logging: + config: 'classpath:log4j2.yml' \ No newline at end of file diff --git a/build/resources/main/db/changelog/changes/00_system_base/01_create_table.sql b/build/resources/main/db/changelog/changes/00_system_base/01_create_table.sql new file mode 100644 index 0000000..cc658c8 --- /dev/null +++ b/build/resources/main/db/changelog/changes/00_system_base/01_create_table.sql @@ -0,0 +1,385 @@ +--liquibase formatted sql + +--changeset terence:create table +--comment: create table + +-- +-- Table structure for table `audit_log` +-- + +DROP TABLE IF EXISTS `audit_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `audit_log` ( + `tableName` varchar(30) NOT NULL, + `recordId` int NOT NULL, + `recordName` varchar(500) DEFAULT NULL, + `modifiedBy` int DEFAULT NULL, + `modified` datetime DEFAULT NULL, + `oldData` json DEFAULT NULL, + `newData` json DEFAULT NULL, + KEY `idx_tableName_recordId` (`tableName`,`recordId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `audit_log` +-- + +LOCK TABLES `audit_log` WRITE; +/*!40000 ALTER TABLE `audit_log` DISABLE KEYS */; +/*!40000 ALTER TABLE `audit_log` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `authority` +-- + +DROP TABLE IF EXISTS `authority`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `authority` ( + `id` int NOT NULL AUTO_INCREMENT, + `authority` varchar(255) NOT NULL, + `name` varchar(100) NOT NULL, + `module` varchar(50) DEFAULT NULL, + `description` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `authority` (`authority`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `authority` +-- + +LOCK TABLES `authority` WRITE; +/*!40000 ALTER TABLE `authority` DISABLE KEYS */; +/*!40000 ALTER TABLE `authority` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `file` +-- + +DROP TABLE IF EXISTS `file`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `file` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `filename` varchar(255) NOT NULL, + `skey` varchar(50) NOT NULL, + `extension` varchar(10) DEFAULT NULL, + `mimetype` varchar(100) DEFAULT NULL, + `filesize` int DEFAULT NULL, + `remarks` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `file` +-- + +LOCK TABLES `file` WRITE; +/*!40000 ALTER TABLE `file` DISABLE KEYS */; +/*!40000 ALTER TABLE `file` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `file_blob` +-- + +DROP TABLE IF EXISTS `file_blob`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `file_blob` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `fileId` int NOT NULL, + `bytes` longblob NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `file_blob` +-- + +LOCK TABLES `file_blob` WRITE; +/*!40000 ALTER TABLE `file_blob` DISABLE KEYS */; +/*!40000 ALTER TABLE `file_blob` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `file_ref` +-- + +DROP TABLE IF EXISTS `file_ref`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `file_ref` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `fileId` int DEFAULT NULL, + `refCode` varchar(50) DEFAULT NULL, + `refId` int NOT NULL, + `refType` varchar(50) NOT NULL, + `remarks` varchar(255) DEFAULT NULL, + `thumbnailFileId` int DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `file_ref` +-- + +LOCK TABLES `file_ref` WRITE; +/*!40000 ALTER TABLE `file_ref` DISABLE KEYS */; +/*!40000 ALTER TABLE `file_ref` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `group` +-- + +DROP TABLE IF EXISTS `group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `group` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(50) NOT NULL, + `description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `group` +-- + +LOCK TABLES `group` WRITE; +/*!40000 ALTER TABLE `group` DISABLE KEYS */; +/*!40000 ALTER TABLE `group` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `group_authority` +-- + +DROP TABLE IF EXISTS `group_authority`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `group_authority` ( + `groupId` int NOT NULL, + `authId` int NOT NULL, + PRIMARY KEY (`groupId`,`authId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `group_authority` +-- + +LOCK TABLES `group_authority` WRITE; +/*!40000 ALTER TABLE `group_authority` DISABLE KEYS */; +/*!40000 ALTER TABLE `group_authority` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `settings` +-- + +DROP TABLE IF EXISTS `settings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `settings` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `value` text NOT NULL, + `category` varchar(50) DEFAULT NULL, + `type` varchar(10) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `name_idx` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `settings` +-- + +LOCK TABLES `settings` WRITE; +/*!40000 ALTER TABLE `settings` DISABLE KEYS */; +/*!40000 ALTER TABLE `settings` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user` +-- + +DROP TABLE IF EXISTS `user`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `username` varchar(30) NOT NULL, + `password` varchar(60) DEFAULT NULL, + `locked` tinyint(1) NOT NULL DEFAULT '0', + `expiryDate` date DEFAULT NULL, + `name` varchar(50) NOT NULL, + `locale` varchar(5) DEFAULT NULL, + `fullname` varchar(90) DEFAULT NULL, + `firstname` varchar(45) DEFAULT NULL, + `lastname` varchar(30) DEFAULT NULL, + `title` varchar(60) DEFAULT NULL, + `department` varchar(60) DEFAULT NULL, + `email` varchar(120) DEFAULT NULL, + `phone1` varchar(30) DEFAULT NULL, + `phone2` varchar(30) DEFAULT NULL, + `remarks` varchar(600) DEFAULT NULL, + `post` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user` +-- + +LOCK TABLES `user` WRITE; +/*!40000 ALTER TABLE `user` DISABLE KEYS */; +/*!40000 ALTER TABLE `user` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_authority` +-- + +DROP TABLE IF EXISTS `user_authority`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_authority` ( + `userId` int NOT NULL, + `authId` int NOT NULL, + PRIMARY KEY (`userId`,`authId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_authority` +-- + +LOCK TABLES `user_authority` WRITE; +/*!40000 ALTER TABLE `user_authority` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_authority` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_group` +-- + +DROP TABLE IF EXISTS `user_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_group` ( + `groupId` int NOT NULL, + `userId` int NOT NULL, + PRIMARY KEY (`groupId`,`userId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_group` +-- + +LOCK TABLES `user_group` WRITE; +/*!40000 ALTER TABLE `user_group` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_group` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_login_log` +-- + +DROP TABLE IF EXISTS `user_login_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_login_log` ( + `username` varchar(32) NOT NULL, + `loginTime` datetime NOT NULL, + `ipAddr` varchar(45) NOT NULL, + `success` tinyint(1) NOT NULL, + PRIMARY KEY (`username`,`loginTime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_login_log` +-- + +LOCK TABLES `user_login_log` WRITE; +/*!40000 ALTER TABLE `user_login_log` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_login_log` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_password_history` +-- + +DROP TABLE IF EXISTS `user_password_history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_password_history` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + `userId` int NOT NULL, + `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `password` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_password_history` +-- + +LOCK TABLES `user_password_history` WRITE; +/*!40000 ALTER TABLE `user_password_history` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_password_history` ENABLE KEYS */; +UNLOCK TABLES; + diff --git a/build/resources/main/db/changelog/changes/00_system_base/02_insert_group_authority.sql b/build/resources/main/db/changelog/changes/00_system_base/02_insert_group_authority.sql new file mode 100644 index 0000000..3da0f9d --- /dev/null +++ b/build/resources/main/db/changelog/changes/00_system_base/02_insert_group_authority.sql @@ -0,0 +1,32 @@ +--liquibase formatted sql + +--changeset terence:insert group authority +--comment: insert group authority + +LOCK TABLES `authority` WRITE; +/*!40000 ALTER TABLE `authority` DISABLE KEYS */; +INSERT INTO `authority` VALUES (1,'MAINTAIN_USER_GROUP','Maintain User Group','System Administration','Allow to maintain user group'),(2,'MAINTAIN_USER','Maintain User','System Administration','Allow to maintain user'),(3,'VIEW_AUDIT_LOG','View Audit Log','System Administration','Allow to view audit log'),(4,'VIEW_LOGIN_LOG','View Login Log','System Administration','Allow to view login log'),(5,'MANAGE_PASSWORD_POLICY','Manage Password Policy','System Administration','Allow to manage password policy'),(6,'MANAGE_SYSTEM_CONFIGURATION','Manage System Configuration','System Administration','Allow to manage system configuration'); +/*!40000 ALTER TABLE `authority` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `group` +-- + +LOCK TABLES `group` WRITE; +/*!40000 ALTER TABLE `group` DISABLE KEYS */; +INSERT INTO `group` VALUES + (1,NOW(),1,0,NOW(),1,0,'System Administrator','System Administrator Group') + ; +/*!40000 ALTER TABLE `group` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `group_authority` +-- + +LOCK TABLES `group_authority` WRITE; +/*!40000 ALTER TABLE `group_authority` DISABLE KEYS */; +INSERT INTO `group_authority` VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6); +/*!40000 ALTER TABLE `group_authority` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/build/resources/main/db/changelog/changes/00_system_base/03_insert_setting.sql b/build/resources/main/db/changelog/changes/00_system_base/03_insert_setting.sql new file mode 100644 index 0000000..8264c84 --- /dev/null +++ b/build/resources/main/db/changelog/changes/00_system_base/03_insert_setting.sql @@ -0,0 +1,10 @@ +--liquibase formatted sql + +--changeset terence:insert setting +--comment: insert setting + +LOCK TABLES `settings` WRITE; +/*!40000 ALTER TABLE `settings` DISABLE KEYS */; +INSERT INTO `settings` VALUES (1,'SYS.idleLogoutTime','60','settings','integer'),(2,'MAIL.smtp.host','','settings','string'),(3,'MAIL.smtp.port','25','settings','integer'),(4,'MAIL.smtp.username','','settings','string'),(5,'MAIL.smtp.password','','settings','string'),(6,'MAIL.smtp.auth','','settings','boolean'),(7,'SYS.password.rule.length.min','10','passwordPolicy','integer'),(8,'SYS.password.rule.duration','180','passwordPolicy','integer'),(9,'SYS.password.rule.history','8','passwordPolicy','integer'),(10,'SYS.loginAttempt.limit','5','passwordPolicy','integer'),(11,'SYS.loginAttempt.penalityTime','5','passwordPolicy','integer'),(12,'SYS.password.rule.numberAndAlphabetic','true','passwordPolicy','boolean'),(13,'SYS.password.rule.specialCharacter','true','passwordPolicy','boolean'),(14,'SYS.password.rule.notContainUsername','true','passwordPolicy','boolean'),(15,'SYS.password.rule.notContainThreeConsecutiveCharacters','true','passwordPolicy','boolean'); +/*!40000 ALTER TABLE `settings` ENABLE KEYS */; +UNLOCK TABLES; diff --git a/src/main/resources/db/changelog/changes/enson_change/04_create_user(enson).sql b/build/resources/main/db/changelog/changes/00_system_base/04_create_user(optional).sql similarity index 55% rename from src/main/resources/db/changelog/changes/enson_change/04_create_user(enson).sql rename to build/resources/main/db/changelog/changes/00_system_base/04_create_user(optional).sql index dbed519..9268e08 100644 --- a/src/main/resources/db/changelog/changes/enson_change/04_create_user(enson).sql +++ b/build/resources/main/db/changelog/changes/00_system_base/04_create_user(optional).sql @@ -3,6 +3,6 @@ --changeset terence:insert setting --comment: insert setting -INSERT INTO `user` ( `id`, `created`, `createdBy`, `version`, `modified`, `modifiedBy`, `deleted`, `username`, `password`, `locked`, `expiryDate`, `name`, `locale`, `fullname`, `firstname`, `lastname`, `title`, `department`, `email`, `phone1`, `phone2`, `remarks`, `post` ) VALUES ( '2', NOW(), '2', '0', NOW(), '2', '0', '2fi2', '1234', '0', NULL, '2fi2', NULL, '2fi2', NULL, NULL, NULL, NULL, '', '', NULL, NULL, '' ); +INSERT INTO `user` ( `id`, `created`, `createdBy`, `version`, `modified`, `modifiedBy`, `deleted`, `username`, `password`, `locked`, `expiryDate`, `name`, `locale`, `fullname`, `firstname`, `lastname`, `title`, `department`, `email`, `phone1`, `phone2`, `remarks`, `post` ) VALUES ( '1', NOW(), '1', '0', NOW(), '1', '0', '2fi', '$2a$10$cRJ.TOZPExg49qk.zmJlruW/Rj7X05vVMxD1CgAOOegZMsC1IPCFm', '0', NULL, '2fi', NULL, '2fi', NULL, NULL, NULL, NULL, '', '', NULL, NULL, '' ); -INSERT INTO `user_group` (`groupId`, `userId`) VALUES ('2', '2'); +INSERT INTO `user_group` (`groupId`, `userId`) VALUES ('1', '1'); diff --git a/build/resources/main/db/changelog/db.changelog-master.yaml b/build/resources/main/db/changelog/db.changelog-master.yaml new file mode 100644 index 0000000..b5832ba --- /dev/null +++ b/build/resources/main/db/changelog/db.changelog-master.yaml @@ -0,0 +1,3 @@ +databaseChangeLog: + - includeAll: + path: classpath:/db/changelog/changes \ No newline at end of file diff --git a/build/resources/main/log4j2-prod-linux.yml b/build/resources/main/log4j2-prod-linux.yml new file mode 100644 index 0000000..cfdd364 --- /dev/null +++ b/build/resources/main/log4j2-prod-linux.yml @@ -0,0 +1,30 @@ +Configutation: + name: Prod-Default + Properties: + Property: + name: log_location + value: /usr/springboot/logs/ + Appenders: + RollingFile: + - name: AllRollingFile_Appender + fileName: ${log_location}fhsmsc-all.log + filePattern: ${log_location}fhsmsc-all-%d{yyyy-MM-dd}.log.gz + PatternLayout: + Pattern: "%d %p [%l] - %m%n" + Policies: + TimeBasedTriggeringPolicy: + interval: 1 + modulate: true + DefaultRolloverStrategy: + Delete: + basePath: ${log_location} + maxDepth: 1 + IfFileName: + glob: fhsmsc-all-*.log.gz + IfLastModified: + age: P40D + Loggers: + Root: + level: info + AppenderRef: + - ref: AllRollingFile_Appender \ No newline at end of file diff --git a/build/resources/main/log4j2-prod-win.yml b/build/resources/main/log4j2-prod-win.yml new file mode 100644 index 0000000..e90a583 --- /dev/null +++ b/build/resources/main/log4j2-prod-win.yml @@ -0,0 +1,23 @@ +Configutation: + name: Prod-Default + Properties: + Property: + name: log_location + value: C:/workspace/ + Appenders: + RollingFile: + name: RollingFile_Appender + fileName: ${log_location}fhsmsc-all.log + filePattern: ${log_location}fhsmsc-all.log.%i.gz + PatternLayout: + Pattern: "%d %p [%l] - %m%n" + Policies: + SizeBasedTriggeringPolicy: + size: 4096KB + DefaultRollOverStrategy: + max: 99 + Loggers: + Root: + level: info + AppenderRef: + - ref: RollingFile_Appender \ No newline at end of file diff --git a/build/resources/main/log4j2.yml b/build/resources/main/log4j2.yml new file mode 100644 index 0000000..1d9a0cd --- /dev/null +++ b/build/resources/main/log4j2.yml @@ -0,0 +1,17 @@ +Configutation: + name: Default + Properties: + Property: + name: log_pattern + value: "%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex" + Appenders: + Console: + name: Console_Appender + target: SYSTEM_OUT + PatternLayout: + pattern: ${log_pattern} + Loggers: + Root: + level: info + AppenderRef: + - ref: Console_Appender \ No newline at end of file diff --git a/build/tmp/bootJar/MANIFEST.MF b/build/tmp/bootJar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/bootJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/build/tmp/bootWar/MANIFEST.MF b/build/tmp/bootWar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/bootWar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..9b9a73d0b17588de0421ac6c3fdebf438b51e054 GIT binary patch literal 217173 zcmZ^LcU)7~8~0t=>qM=#*40Y2u3NRXjt+$o1QbmZ(6(ANK!6|+OoFS`A{%565mdy1 zG89D=1yN8DCpbVs#RYC0s0b%5*pHpVriCP zIV_juv3yoQgt!@eg+!=_hh8rt!acl9z9u&@5#eia5Ae~MBt$se_ci!QiBMmy-bY46 zm~_UadN&;+*2swvxYUaX|9FLp_~TvKCD9L$MBU>GFD>)$t?uLUiB(@kKh3A?XKa6# z`#BM5(wWVAKTp#DB4nA)6%8aJK3*6^L>c_dMuU%!&WHvRVgBw~vu+3xtXqOSzoL~| z`)T~5DIp6w1{#-sq5M)g)WwSZiXF!ChZCW02BYq4B1*U1P3Ldc8~o4+BF4|(XmHb+ zOj=hT-AE$Lߧ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℘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 literal 0 HcmV?d00001 diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..69cc679353f8789ce809806e808f3a66434d8f92 GIT binary patch literal 46737 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Ô!Z=?+sGsrNx&!)UtKC4U-1 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 Hga7>>BWin` literal 0 HcmV?d00001 diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/build/tmp/war/MANIFEST.MF b/build/tmp/war/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/build/tmp/war/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 37aef8d..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip -networkTimeout=10000 -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew deleted file mode 100644 index a69d9cb..0000000 --- a/gradlew +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index f127cfd..0000000 --- a/gradlew.bat +++ /dev/null @@ -1,91 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7d55cdf..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "FHSMS-C-backend", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index cff2679..0000000 --- a/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'FhsmsC' diff --git a/src/main/java/com/ffii/core/test/test.java b/src/main/java/com/ffii/core/test/test.java index 116ede0..ca188a9 100644 --- a/src/main/java/com/ffii/core/test/test.java +++ b/src/main/java/com/ffii/core/test/test.java @@ -9,7 +9,7 @@ import java.util.List; public class test { private static final String JDBC_DRIVER = "your_jdbc_driver"; // Replace with your actual driver - private static final String DB_URL = "jdbc:mysql://127.0.0.1:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8"; // Replace with your connection details + private static final String DB_URL = "jdbc:mysql://127.0.0.1:3308/pet_app?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8"; // Replace with your connection details private static final String USER = "root"; // Replace with your database username private static final String PASSWORD = "secret"; // Replace with your database password diff --git a/src/main/java/com/ffii/fhsmsc/FhsmsCApplication.java b/src/main/java/com/ffii/fhsmsc/Pet_App.java similarity index 71% rename from src/main/java/com/ffii/fhsmsc/FhsmsCApplication.java rename to src/main/java/com/ffii/fhsmsc/Pet_App.java index f467e0d..8c91b80 100644 --- a/src/main/java/com/ffii/fhsmsc/FhsmsCApplication.java +++ b/src/main/java/com/ffii/fhsmsc/Pet_App.java @@ -4,10 +4,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class FhsmsCApplication { +public class Pet_App { public static void main(String[] args) { - SpringApplication.run(FhsmsCApplication.class, args); + SpringApplication.run(Pet_App.class, args); } } @@ -20,15 +20,15 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication -public class FhsmsCApplication extends SpringBootServletInitializer { +public class Pet_App extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(FhsmsCApplication.class); + return application.sources(Pet_App.class); } public static void main(String[] args) { - SpringApplication.run(FhsmsCApplication.class, args); + SpringApplication.run(Pet_App.class, args); } } */ \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/ServletInitializer.java b/src/main/java/com/ffii/fhsmsc/ServletInitializer.java index 5369947..66fc9e9 100644 --- a/src/main/java/com/ffii/fhsmsc/ServletInitializer.java +++ b/src/main/java/com/ffii/fhsmsc/ServletInitializer.java @@ -6,7 +6,7 @@ public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(FhsmsCApplication.class); + return application.sources(Pet_App.class); } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/config/security/SecurityConfig.java b/src/main/java/com/ffii/fhsmsc/config/security/SecurityConfig.java index e19a214..ca4d948 100644 --- a/src/main/java/com/ffii/fhsmsc/config/security/SecurityConfig.java +++ b/src/main/java/com/ffii/fhsmsc/config/security/SecurityConfig.java @@ -28,44 +28,12 @@ public class SecurityConfig { public static final String INDEX_URL = "/"; public static final String LOGIN_URL = "/login"; public static final String REFRESH_TOKEN_URL = "/refresh-token"; - public static final String FOOD_ITEMS_LIST_URL = "/foodItems/save"; - public static final String FOOD_ITEMS_SAVE_URL = "/foodItems/**"; - public static final String check_token_URL = "/user_information/validate_token/**"; - public static final String FOOD1_URL="/food1/**"; - public static final String REGISTRY_URL = "/user/registry"; - public static final String SWAGGER_URL = "/v3/api-docs/**"; - public static final String SWAGGER_INDEX_URL = "/swagger-ui/**"; - public static final String RESTAURANT_INFORMATION_URL = "/FB_Operator/**"; - public static final String RESTAURANT_OUTLETS_URL = "/FB_outlets/**"; - public static final String FB_MENU_ITEM_NUTRITION_URL = "/fb_menu_item_nutrition/**"; - public static final String FB_MENU_ITEM_INGREDIENT_URL = "/fb_menu_item_ingredient/**"; - public static final String FB_MENU_AND_OUTLET_RELATIONSHIP_URL = "/fb_menu_and_outlet_relationship/**"; - public static final String FB_MENU_URL = "/fb_menu/**"; - public static final String FB_MENU_ITEM_BASE_EMBEDDING_URL = "/embedding/**"; - public static final String MENU_URL = "/menu/**"; - public static final String COMBINED_URL = "/combined/**"; - public static final String DAILYNUTRITTIONSUMARY_URL = "/DailyNutritionSummary/**"; + public static final String[] URL_WHITELIST = { INDEX_URL, LOGIN_URL, REFRESH_TOKEN_URL, - FOOD_ITEMS_LIST_URL, - FOOD_ITEMS_SAVE_URL, - FOOD1_URL, - REGISTRY_URL, - SWAGGER_URL, - SWAGGER_INDEX_URL, - check_token_URL, - RESTAURANT_INFORMATION_URL, - RESTAURANT_OUTLETS_URL, - FB_MENU_ITEM_NUTRITION_URL, - FB_MENU_ITEM_INGREDIENT_URL, - FB_MENU_AND_OUTLET_RELATIONSHIP_URL, - FB_MENU_URL, - MENU_URL, - DAILYNUTRITTIONSUMARY_URL, - FB_MENU_ITEM_BASE_EMBEDDING_URL, - COMBINED_URL + }; @Lazy diff --git a/src/main/java/com/ffii/fhsmsc/modules/Combine/res/FBCombinedListRes.java b/src/main/java/com/ffii/fhsmsc/modules/Combine/res/FBCombinedListRes.java deleted file mode 100644 index bf51cec..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Combine/res/FBCombinedListRes.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.ffii.fhsmsc.modules.Combine.res; - -import java.util.List; - -public class FBCombinedListRes { - private OperatorInfo operator; - private List brands; - - public static class OperatorInfo { - private Long id; - private String FB_name; - private String FB_operator_address; - private String FB_operator_phone; - private String user_Grp_Org_ID; - - // Getters and Setters - public Long getId() { return id; } - public void setId(Long id) { this.id = id; } - public String getFB_name() { return FB_name; } - public void setFB_name(String FB_name) { this.FB_name = FB_name; } - public String getFB_operator_address() { return FB_operator_address; } - public void setFB_operator_address(String FB_operator_address) { this.FB_operator_address = FB_operator_address; } - public String getFB_operator_phone() { return FB_operator_phone; } - public void setFB_operator_phone(String FB_operator_phone) { this.FB_operator_phone = FB_operator_phone; } - public String getUser_Grp_Org_ID() { return user_Grp_Org_ID; } - public void setUser_Grp_Org_ID(String user_Grp_Org_ID) { this.user_Grp_Org_ID = user_Grp_Org_ID; } - } - - public static class BrandInfo { - private Long fb_id; - private String fb_name_en; - private String fb_name_zh; - private String fb_type_en; - private String fb_type_zh; - private String fb_cuisine_en; - private String fb_cuisine_zh; - private List outlets; - - // Getters and Setters - public Long getFb_id() { return fb_id; } - public void setFb_id(Long fb_id) { this.fb_id = fb_id; } - public String getFb_name_en() { return fb_name_en; } - public void setFb_name_en(String fb_name_en) { this.fb_name_en = fb_name_en; } - public String getFb_name_zh() { return fb_name_zh; } - public void setFb_name_zh(String fb_name_zh) { this.fb_name_zh = fb_name_zh; } - public String getFb_type_en() { return fb_type_en; } - public void setFb_type_en(String fb_type_en) { this.fb_type_en = fb_type_en; } - public String getFb_type_zh() { return fb_type_zh; } - public void setFb_type_zh(String fb_type_zh) { this.fb_type_zh = fb_type_zh; } - public String getFb_cuisine_en() { return fb_cuisine_en; } - public void setFb_cuisine_en(String fb_cuisine_en) { this.fb_cuisine_en = fb_cuisine_en; } - public String getFb_cuisine_zh() { return fb_cuisine_zh; } - public void setFb_cuisine_zh(String fb_cuisine_zh) { this.fb_cuisine_zh = fb_cuisine_zh; } - public List getOutlets() { return outlets; } - public void setOutlets(List outlets) { this.outlets = outlets; } - } - - public static class OutletInfo { - private Long id; - private String fb_outlet_district_en; - private String fb_outlet_district_zh; - private String fb_outlet_address_en; - private String fb_outlet_address_zh; - private String fb_outlet_phone; - - // Getters and Setters - public Long getId() { return id; } - public void setId(Long id) { this.id = id; } - public String getFb_outlet_district_en() { return fb_outlet_district_en; } - public void setFb_outlet_district_en(String fb_outlet_district_en) { this.fb_outlet_district_en = fb_outlet_district_en; } - public String getFb_outlet_district_zh() { return fb_outlet_district_zh; } - public void setFb_outlet_district_zh(String fb_outlet_district_zh) { this.fb_outlet_district_zh = fb_outlet_district_zh; } - public String getFb_outlet_address_en() { return fb_outlet_address_en; } - public void setFb_outlet_address_en(String fb_outlet_address_en) { this.fb_outlet_address_en = fb_outlet_address_en; } - public String getFb_outlet_address_zh() { return fb_outlet_address_zh; } - public void setFb_outlet_address_zh(String fb_outlet_address_zh) { this.fb_outlet_address_zh = fb_outlet_address_zh; } - public String getFb_outlet_phone() { return fb_outlet_phone; } - public void setFb_outlet_phone(String fb_outlet_phone) { this.fb_outlet_phone = fb_outlet_phone; } - } - - // Getters and Setters - public OperatorInfo getOperator() { return operator; } - public void setOperator(OperatorInfo operator) { this.operator = operator; } - public List getBrands() { return brands; } - public void setBrands(List brands) { this.brands = brands; } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummary.java b/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummary.java deleted file mode 100644 index 627736f..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummary.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.ffii.fhsmsc.modules.DailyNutritionSummary.enity; -import java.math.BigDecimal; -import java.util.Date; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** @author Terence */ -@Entity -@Table(name = "daily_nutrition_summary") -public class DailyNutritionSummary extends BaseEntity { - - @Column - private Long id; - @Column - private Long user_id; - @Column - private Long User_Grp_Org_ID; - @Column - private Date date; - @Column - private String visibility_level; - @Column - private String data_category; - @Column - private Long reference_group_id; - @Column - private Long health_metrics_reference_id; - @Column - private BigDecimal total_calories; - @Column - private BigDecimal total_protein; - @Column - private BigDecimal total_fat; - @Column - private BigDecimal total_carbs; - @Column - private BigDecimal total_sodium; - - @Column - private BigDecimal total_potassium; - @Column - private BigDecimal total_calcium; - @Column - private BigDecimal total_phosphorus; - @Column - private BigDecimal total_iron; - @Column - private BigDecimal total_vitamin_a; - @Column - private BigDecimal total_vitamin_b1; - @Column - private BigDecimal total_vitamin_b2; - @Column - private BigDecimal total_niacin; - @Column - private BigDecimal total_vitamin_c; - @Column - private BigDecimal breakfast_calories; - @Column - private BigDecimal lunch_calories; - @Column - private BigDecimal dinner_calories; - @Column - private BigDecimal snack_calories; - @Override - public Long getId() { - return id; - } - - @Override - public void setId(Long id) { - this.id = id; - } - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } - - public Long getUser_Grp_Org_ID() { - return User_Grp_Org_ID; - } - - public void setUser_Grp_Org_ID(Long User_Grp_Org_ID) { - this.User_Grp_Org_ID = User_Grp_Org_ID; - } - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public String getVisibility_level() { - return visibility_level; - } - - public void setVisibility_level(String visibility_level) { - this.visibility_level = visibility_level; - } - - public String getData_category() { - return data_category; - } - - public void setData_category(String data_category) { - this.data_category = data_category; - } - - public Long getReference_group_id() { - return reference_group_id; - } - - public void setReference_group_id(Long reference_group_id) { - this.reference_group_id = reference_group_id; - } - - public Long getHealth_metrics_reference_id() { - return health_metrics_reference_id; - } - - public void setHealth_metrics_reference_id(Long health_metrics_reference_id) { - this.health_metrics_reference_id = health_metrics_reference_id; - } - - public BigDecimal getTotal_calories() { - return total_calories; - } - - public void setTotal_calories(BigDecimal total_calories) { - this.total_calories = total_calories; - } - - public BigDecimal getTotal_protein() { - return total_protein; - } - - public void setTotal_protein(BigDecimal total_protein) { - this.total_protein = total_protein; - } - - public BigDecimal getTotal_fat() { - return total_fat; - } - - public void setTotal_fat(BigDecimal total_fat) { - this.total_fat = total_fat; - } - - public BigDecimal getTotal_carbs() { - return total_carbs; - } - - public void setTotal_carbs(BigDecimal total_carbs) { - this.total_carbs = total_carbs; - } - - public BigDecimal getTotal_sodium() { - return total_sodium; - } - - public void setTotal_sodium(BigDecimal total_sodium) { - this.total_sodium = total_sodium; - } - - public BigDecimal getTotal_potassium() { - return total_potassium; - } - - public void setTotal_potassium(BigDecimal total_potassium) { - this.total_potassium = total_potassium; - } - - public BigDecimal getTotal_calcium() { - return total_calcium; - } - - public void setTotal_calcium(BigDecimal total_calcium) { - this.total_calcium = total_calcium; - } - - public BigDecimal getTotal_phosphorus() { - return total_phosphorus; - } - - public void setTotal_phosphorus(BigDecimal total_phosphorus) { - this.total_phosphorus = total_phosphorus; - } - - public BigDecimal getTotal_iron() { - return total_iron; - } - - public void setTotal_iron(BigDecimal total_iron) { - this.total_iron = total_iron; - } - - public BigDecimal getTotal_vitamin_a() { - return total_vitamin_a; - } - - public void setTotal_vitamin_a(BigDecimal total_vitamin_a) { - this.total_vitamin_a = total_vitamin_a; - } - - public BigDecimal getTotal_vitamin_b1() { - return total_vitamin_b1; - } - - public void setTotal_vitamin_b1(BigDecimal total_vitamin_b1) { - this.total_vitamin_b1 = total_vitamin_b1; - } - - public BigDecimal getTotal_vitamin_b2() { - return total_vitamin_b2; - } - - public void setTotal_vitamin_b2(BigDecimal total_vitamin_b2) { - this.total_vitamin_b2 = total_vitamin_b2; - } - - public BigDecimal getTotal_niacin() { - return total_niacin; - } - - public void setTotal_niacin(BigDecimal total_niacin) { - this.total_niacin = total_niacin; - } - - public BigDecimal getTotal_vitamin_c() { - return total_vitamin_c; - } - - public void setTotal_vitamin_c(BigDecimal total_vitamin_c) { - this.total_vitamin_c = total_vitamin_c; - } - - public BigDecimal getBreakfast_calories() { - return breakfast_calories; - } - - public void setBreakfast_calories(BigDecimal breakfast_calories) { - this.breakfast_calories = breakfast_calories; - } - - public BigDecimal getLunch_calories() { - return lunch_calories; - } - - public void setLunch_calories(BigDecimal lunch_calories) { - this.lunch_calories = lunch_calories; - } - - public BigDecimal getDinner_calories() { - return dinner_calories; - } - - public void setDinner_calories(BigDecimal dinner_calories) { - this.dinner_calories = dinner_calories; - } - - public BigDecimal getSnack_calories() { - return snack_calories; - } - - public void setSnack_calories(BigDecimal snack_calories) { - this.snack_calories = snack_calories; - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummaryRepository.java b/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummaryRepository.java deleted file mode 100644 index e372932..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/enity/DailyNutritionSummaryRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.DailyNutritionSummary.enity; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface DailyNutritionSummaryRepository extends JpaRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/req/DailyNutritionSummaryReq.java b/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/req/DailyNutritionSummaryReq.java deleted file mode 100644 index 19fdce3..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/req/DailyNutritionSummaryReq.java +++ /dev/null @@ -1,329 +0,0 @@ -package com.ffii.fhsmsc.modules.DailyNutritionSummary.req; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.Date; - - - -public class DailyNutritionSummaryReq { - - private Long id; - - private Long user_id; - - private Long User_Grp_Org_ID; - - private Date date; - - private String visibility_level; - - private String data_category; - - private Long reference_group_id; - - private Long health_metrics_reference_id; - - private BigDecimal total_calories; - - private BigDecimal total_protein; - - private BigDecimal total_fat; - - private BigDecimal total_carbs; - - private BigDecimal total_sodium; - - - private BigDecimal total_potassium; - - private BigDecimal total_calcium; - - private BigDecimal total_phosphorus; - - private BigDecimal total_iron; - - private BigDecimal total_vitamin_a; - - private BigDecimal total_vitamin_b1; - - private BigDecimal total_vitamin_b2; - - private BigDecimal total_niacin; - - private BigDecimal total_vitamin_c; - - private BigDecimal breakfast_calories; - - private BigDecimal lunch_calories; - - private BigDecimal dinner_calories; - - private BigDecimal snack_calories; - - private LocalDateTime created; - - private Long createdBy; - - private LocalDateTime modified; - - private Long modifiedBy; - - private Integer version; - - private Boolean deleted; - - - public Long getId() { - return id; - } - - - public void setId(Long id) { - this.id = id; - } - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } - public Long getUser_Grp_Org_ID() { - return User_Grp_Org_ID; - } - - public void setUser_Grp_Org_ID(Long User_Grp_Org_ID) { - this.User_Grp_Org_ID = User_Grp_Org_ID; - } - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public String getVisibility_level() { - return visibility_level; - } - - public void setVisibility_level(String visibility_level) { - this.visibility_level = visibility_level; - } - - public String getData_category() { - return data_category; - } - - public void setData_category(String data_category) { - this.data_category = data_category; - } - - public Long getReference_group_id() { - return reference_group_id; - } - - public void setReference_group_id(Long reference_group_id) { - this.reference_group_id = reference_group_id; - } - - public Long getHealth_metrics_reference_id() { - return health_metrics_reference_id; - } - - public void setHealth_metrics_reference_id(Long health_metrics_reference_id) { - this.health_metrics_reference_id = health_metrics_reference_id; - } - - public BigDecimal getTotal_calories() { - return total_calories; - } - - public void setTotal_calories(BigDecimal total_calories) { - this.total_calories = total_calories; - } - - public BigDecimal getTotal_protein() { - return total_protein; - } - - public void setTotal_protein(BigDecimal total_protein) { - this.total_protein = total_protein; - } - - public BigDecimal getTotal_fat() { - return total_fat; - } - - public void setTotal_fat(BigDecimal total_fat) { - this.total_fat = total_fat; - } - - public BigDecimal getTotal_carbs() { - return total_carbs; - } - - public void setTotal_carbs(BigDecimal total_carbs) { - this.total_carbs = total_carbs; - } - - public BigDecimal getTotal_sodium() { - return total_sodium; - } - - public void setTotal_sodium(BigDecimal total_sodium) { - this.total_sodium = total_sodium; - } - - public BigDecimal getTotal_potassium() { - return total_potassium; - } - - public void setTotal_potassium(BigDecimal total_potassium) { - this.total_potassium = total_potassium; - } - - public BigDecimal getTotal_calcium() { - return total_calcium; - } - - public void setTotal_calcium(BigDecimal total_calcium) { - this.total_calcium = total_calcium; - } - - public BigDecimal getTotal_phosphorus() { - return total_phosphorus; - } - - public void setTotal_phosphorus(BigDecimal total_phosphorus) { - this.total_phosphorus = total_phosphorus; - } - - public BigDecimal getTotal_iron() { - return total_iron; - } - - public void setTotal_iron(BigDecimal total_iron) { - this.total_iron = total_iron; - } - - public BigDecimal getTotal_vitamin_a() { - return total_vitamin_a; - } - - public void setTotal_vitamin_a(BigDecimal total_vitamin_a) { - this.total_vitamin_a = total_vitamin_a; - } - - public BigDecimal getTotal_vitamin_b1() { - return total_vitamin_b1; - } - - public void setTotal_vitamin_b1(BigDecimal total_vitamin_b1) { - this.total_vitamin_b1 = total_vitamin_b1; - } - - public BigDecimal getTotal_vitamin_b2() { - return total_vitamin_b2; - } - - public void setTotal_vitamin_b2(BigDecimal total_vitamin_b2) { - this.total_vitamin_b2 = total_vitamin_b2; - } - - public BigDecimal getTotal_niacin() { - return total_niacin; - } - - public void setTotal_niacin(BigDecimal total_niacin) { - this.total_niacin = total_niacin; - } - - public BigDecimal getTotal_vitamin_c() { - return total_vitamin_c; - } - - public void setTotal_vitamin_c(BigDecimal total_vitamin_c) { - this.total_vitamin_c = total_vitamin_c; - } - - public BigDecimal getBreakfast_calories() { - return breakfast_calories; - } - - public void setBreakfast_calories(BigDecimal breakfast_calories) { - this.breakfast_calories = breakfast_calories; - } - - public BigDecimal getLunch_calories() { - return lunch_calories; - } - - public void setLunch_calories(BigDecimal lunch_calories) { - this.lunch_calories = lunch_calories; - } - - public BigDecimal getDinner_calories() { - return dinner_calories; - } - - public void setDinner_calories(BigDecimal dinner_calories) { - this.dinner_calories = dinner_calories; - } - - public BigDecimal getSnack_calories() { - return snack_calories; - } - - public void setSnack_calories(BigDecimal snack_calories) { - this.snack_calories = snack_calories; - } - - public LocalDateTime getCreated() { - return created; - } - - public void setCreated(LocalDateTime created) { - this.created = created; - } - - public Long getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(Long createdBy) { - this.createdBy = createdBy; - } - - public LocalDateTime getModified() { - return modified; - } - - public void setModified(LocalDateTime modified) { - this.modified = modified; - } - - public Long getModifiedBy() { - return modifiedBy; - } - - public void setModifiedBy(Long modifiedBy) { - this.modifiedBy = modifiedBy; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Boolean getDeleted() { - return deleted; - } - - public void setDeleted(Boolean deleted) { - this.deleted = deleted; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/service/DailyNutritionSummaryService.java b/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/service/DailyNutritionSummaryService.java deleted file mode 100644 index 9a3180d..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/service/DailyNutritionSummaryService.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.ffii.fhsmsc.modules.DailyNutritionSummary.service; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.enity.DailyNutritionSummary; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.enity.DailyNutritionSummaryRepository; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.req.DailyNutritionSummaryReq; - -@Service -public class DailyNutritionSummaryService { - private final JdbcDao jdbcDao; - private final DailyNutritionSummaryRepository repository; - - public DailyNutritionSummaryService(JdbcDao jdbcDao, DailyNutritionSummaryRepository repository) { - this.jdbcDao = jdbcDao; - this.repository = repository; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM daily_nutrition_summary fi" - + " WHERE 1=1 AND fi.deleted = 0"); - - if (args != null) { - if (args.containsKey("user_id")) sql.append(" AND fi.user_id = :user_id"); - if (args.containsKey("date")) sql.append(" AND DATE(fi.date) = DATE(:date)"); - if (args.containsKey("start_date")) sql.append(" AND DATE(fi.date) >= DATE(:start_date)"); - if (args.containsKey("end_date")) sql.append(" AND DATE(fi.date) <= DATE(:end_date)"); - } - - sql.append(" ORDER BY fi.date DESC, fi.id DESC"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public DailyNutritionSummary saveOrUpdate(DailyNutritionSummaryReq req) { - DailyNutritionSummary instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new DailyNutritionSummary(); - isNew = true; - } - - // 检查 user_id 是否为 null - if (req.getUser_id() == null) { - throw new IllegalArgumentException("user_id cannot be null"); - } - - BeanUtils.copyProperties(req, instance); - - // 设置创建和更新时间 - LocalDateTime now = LocalDateTime.now(); - if (isNew) { - instance.setDeleted(false); - instance.setVersion(0); - // 如果created字段为空,设置为当前时间 - if (instance.getCreated() == null) { - instance.setCreated(now); - } - } else { - // 增加版本号 - instance.setVersion(instance.getVersion() + 1); - } - // 更新modified字段 - instance.setModified(now); - - saveAndFlush(instance); - - return instance; - } - - /** - * 根据ID查找实体 - * @param id 实体ID - * @return 实体对象 - */ - public Optional find(Long id) { - return repository.findById(id); - } - - /** - * 保存并刷新实体 - * @param entity 实体对象 - * @return 保存后的实体对象 - */ - public DailyNutritionSummary saveAndFlush(DailyNutritionSummary entity) { - return repository.saveAndFlush(entity); - } - - public List> getWeeklyNutritionSummary(Long userId, LocalDateTime startDate, LocalDateTime endDate) { - StringBuilder sql = new StringBuilder( - "SELECT DATE(date) as date, " - + "SUM(total_calories) as total_calories, " - + "SUM(total_protein) as total_protein, " - + "SUM(total_fat) as total_fat, " - + "SUM(total_carbs) as total_carbs " - + "FROM daily_nutrition_summary " - + "WHERE user_id = :userId " - + "AND DATE(date) >= DATE(:startDate) " - + "AND DATE(date) <= DATE(:endDate) " - + "AND deleted = 0 " - + "GROUP BY DATE(date) " - + "ORDER BY date ASC" - ); - - Map params = Map.of( - "userId", userId, - "startDate", startDate, - "endDate", endDate - ); - - return jdbcDao.queryForList(sql.toString(), params); - } - - public List> getWeeklyNutritionSummary(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " DATE(fi.date) as date," - + " SUM(fi.total_calories) as total_calories," - + " SUM(fi.total_protein) as total_protein," - + " SUM(fi.total_fat) as total_fat," - + " SUM(fi.total_carbs) as total_carbs" - + " FROM daily_nutrition_summary fi" - + " WHERE 1=1 AND fi.deleted = 0"); - - if (args != null) { - if (args.containsKey("user_id")) sql.append(" AND fi.user_id = :user_id"); - if (args.containsKey("start_date")) sql.append(" AND DATE(fi.date) >= DATE(:start_date)"); - if (args.containsKey("end_date")) sql.append(" AND DATE(fi.date) <= DATE(:end_date)"); - } - - sql.append(" GROUP BY DATE(fi.date)"); - sql.append(" ORDER BY DATE(fi.date) ASC"); - - return jdbcDao.queryForList(sql.toString(), args); - } -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/web/DailyNutritionSummaryController.java b/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/web/DailyNutritionSummaryController.java deleted file mode 100644 index 7e4e7cd..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/DailyNutritionSummary/web/DailyNutritionSummaryController.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.ffii.fhsmsc.modules.DailyNutritionSummary.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.req.DailyNutritionSummaryReq; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.service.DailyNutritionSummaryService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/DailyNutritionSummary") -public class DailyNutritionSummaryController { - private DailyNutritionSummaryService DailyNutritionSummaryService; - - public DailyNutritionSummaryController( - DailyNutritionSummaryService DailyNutritionSummaryService - ) { - this.DailyNutritionSummaryService = DailyNutritionSummaryService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(DailyNutritionSummaryService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @GetMapping("/listByDate") - public RecordsRes> listByDate(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(DailyNutritionSummaryService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - .addDate("date") - .build())); - } - - @GetMapping("/listByWeek") - public RecordsRes> listByWeek(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(DailyNutritionSummaryService.getWeeklyNutritionSummary( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - .addDate("start_date") - .addDate("end_date") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid DailyNutritionSummaryReq req) { - return new IdRes(DailyNutritionSummaryService.saveOrUpdate(req).getId()); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperator.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperator.java deleted file mode 100644 index 67e8613..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperator.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "FBOperator") - -public class FBOperator extends BaseEntity { - @Column(name = "FB_name") - private String FB_name; - - @Column(name="FB_operator_address") - private String FB_operator_address; - - @Column(name="FB_operator_phone") - private String FB_operator_phone; - - public String getFB_name() { - return FB_name; - } - public void setFB_name(String FB_name) { - this.FB_name = FB_name; - } - public String getFB_operator_address() { - return FB_operator_address; - } - public void setFB_operator_address(String FB_operator_address) { - this.FB_operator_address = FB_operator_address; - } - - public String getFB_operator_phone() { - return FB_operator_phone; - } - public void setFB_operator_phone(String FB_operator_phone) { - this.FB_operator_phone = FB_operator_phone; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperatorRepository.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperatorRepository.java deleted file mode 100644 index 3bbd6e8..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FBOperatorRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.enity; -import com.ffii.core.support.AbstractRepository; -public interface FBOperatorRepository extends AbstractRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brand.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brand.java deleted file mode 100644 index 0e746bc..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brand.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "fb_brand") -//@AttributeOverride(name = "id", column = @Column(name = "FB_id")) -public class FB_brand extends BaseEntity { - // @Column(name = "FB_id", insertable = false, updatable = false) - @Column(name = "FB_operator_id") - private Long FB_operator_id; - - - @Column(name = "FB_name") - private String FB_name; - - @Column(name = "FB_type") - private String FB_type; - - @Column(name = "FB_cuisine") - private String FB_cuisine; - - public Long getFB_operator_id() { - return FB_operator_id; - } - public void setFB_operator_id(Long FB_operator_id) { - this.FB_operator_id = FB_operator_id; - } - public String getFB_name() { - return FB_name; - } - public void setFB_name(String FB_name) { - this.FB_name = FB_name; - } - public String getFB_type() { - return FB_type; - } - public void setFB_type(String FB_type) { - this.FB_type = FB_type; - } - public String getFB_cuisine() { - return FB_cuisine; - } - public void setFB_cuisine(String FB_cuisine) { - this.FB_cuisine = FB_cuisine; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brandRepository.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brandRepository.java deleted file mode 100644 index 493902e..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/enity/FB_brandRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.enity; -import com.ffii.core.support.AbstractRepository; -public interface FB_brandRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBCombinedSaveReq.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBCombinedSaveReq.java deleted file mode 100644 index d191558..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBCombinedSaveReq.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.req; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class FBCombinedSaveReq { - @JsonProperty("id") - private Long id; - - @JsonProperty("FB_operator_id") - private Long FB_operator_id; - - @JsonProperty("FB_id") - private Long FB_id; - - @JsonProperty("FB_name_en") - private String FB_name_en; - - @JsonProperty("FB_name_zh") - private String FB_name_zh; - - @JsonProperty("FB_type") - private String FB_type; - - @JsonProperty("FB_cuisine") - private String FB_cuisine; - - @JsonProperty("FB_outlet_district_en") - private String FB_outlet_district_en; - - @JsonProperty("FB_outlet_district_zh") - private String FB_outlet_district_zh; - - @JsonProperty("FB_outlet_address_en") - private String FB_outlet_address_en; - - @JsonProperty("FB_outlet_address_zh") - private String FB_outlet_address_zh; - - @JsonProperty("FB_outlet_phone") - private String FB_outlet_phone; - - @JsonProperty("User_Grp_Org_ID") - private String User_Grp_Org_ID; - - @JsonProperty("FB_type_en") - private String FB_type_en; - - @JsonProperty("FB_type_zh") - private String FB_type_zh; - - @JsonProperty("FB_cuisine_en") - private String FB_cuisine_en; - - @JsonProperty("FB_cuisine_zh") - private String FB_cuisine_zh; - - // Getters and setters - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_id() { - return FB_id; - } - public void setFB_id(Long FB_id) { - this.FB_id = FB_id; - } - public String getFB_name_en() { - return FB_name_en; - } - public void setFB_name_en(String FB_name_en) { - this.FB_name_en = FB_name_en; - } - public String getFB_name_zh() { - return FB_name_zh; - } - public void setFB_name_zh(String FB_name_zh) { - this.FB_name_zh = FB_name_zh; - } - public String getFB_type() { - return FB_type; - } - public void setFB_type(String FB_type) { - this.FB_type = FB_type; - } - public String getFB_cuisine() { - return FB_cuisine; - } - public void setFB_cuisine(String FB_cuisine) { - this.FB_cuisine = FB_cuisine; - } - public String getFB_outlet_district_en() { - return FB_outlet_district_en; - } - public void setFB_outlet_district_en(String FB_outlet_district_en) { - this.FB_outlet_district_en = FB_outlet_district_en; - } - public String getFB_outlet_district_zh() { - return FB_outlet_district_zh; - } - public void setFB_outlet_district_zh(String FB_outlet_district_zh) { - this.FB_outlet_district_zh = FB_outlet_district_zh; - } - public String getFB_outlet_address_en() { - return FB_outlet_address_en; - } - public void setFB_outlet_address_en(String FB_outlet_address_en) { - this.FB_outlet_address_en = FB_outlet_address_en; - } - public String getFB_outlet_address_zh() { - return FB_outlet_address_zh; - } - public void setFB_outlet_address_zh(String FB_outlet_address_zh) { - this.FB_outlet_address_zh = FB_outlet_address_zh; - } - public String getFB_outlet_phone() { - return FB_outlet_phone; - } - public void setFB_outlet_phone(String FB_outlet_phone) { - this.FB_outlet_phone = FB_outlet_phone; - } - public String getUser_Grp_Org_ID() { - return User_Grp_Org_ID; - } - public void setUser_Grp_Org_ID(String User_Grp_Org_ID) { - this.User_Grp_Org_ID = User_Grp_Org_ID; - } - public String getFB_type_en() { - return FB_type_en; - } - public void setFB_type_en(String FB_type_en) { - this.FB_type_en = FB_type_en; - } - public String getFB_type_zh() { - return FB_type_zh; - } - public void setFB_type_zh(String FB_type_zh) { - this.FB_type_zh = FB_type_zh; - } - public String getFB_cuisine_en() { - return FB_cuisine_en; - } - public void setFB_cuisine_en(String FB_cuisine_en) { - this.FB_cuisine_en = FB_cuisine_en; - } - public String getFB_cuisine_zh() { - return FB_cuisine_zh; - } - public void setFB_cuisine_zh(String FB_cuisine_zh) { - this.FB_cuisine_zh = FB_cuisine_zh; - } - public Long getFB_operator_id() { - return FB_operator_id; - } - public void setFB_operator_id(Long FB_operator_id) { - this.FB_operator_id = FB_operator_id; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBOperatorReq.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBOperatorReq.java deleted file mode 100644 index a656be9..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FBOperatorReq.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.req; - - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class FBOperatorReq { - @JsonProperty("id") - private Long id; - - @JsonProperty("FB_operator_id") - private Long FB_operator_id; - - @JsonProperty("FB_name") - private String FB_name; - - @JsonProperty("FB_name_en") - private String FB_name_en; - - @JsonProperty("FB_name_zh") - private String FB_name_zh; - - @JsonProperty("FB_operator_address") - private String FB_operator_address; - - @JsonProperty("FB_operator_address_en") - private String FB_operator_address_en; - - @JsonProperty("FB_operator_address_zh") - private String FB_operator_address_zh; - - @JsonProperty("FB_operator_phone") - private String FB_operator_phone; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_operator_id() { - return FB_operator_id; - } - public void setFB_operator_id(Long FB_operator_id) { - this.FB_operator_id = FB_operator_id; - } - public String getFB_name() { - return FB_name; - } - public void setFB_name(String FB_name) { - this.FB_name = FB_name; - } - - public String getFB_name_en() { - return FB_name_en; - } - public void setFB_name_en(String FB_name_en) { - this.FB_name_en = FB_name_en; - } - public String getFB_name_zh() { - return FB_name_zh; - } - public void setFB_name_zh(String FB_name_zh) { - this.FB_name_zh = FB_name_zh; - } - public String getFB_operator_address() { - return FB_operator_address; - } - public void setFB_operator_address(String FB_operator_address) { - this.FB_operator_address = FB_operator_address; - } - public String getFB_operator_address_en() { - return FB_operator_address_en; - } - public void setFB_operator_address_en(String FB_operator_address_en) { - this.FB_operator_address_en = FB_operator_address_en; - } - public String getFB_operator_address_zh() { - return FB_operator_address_zh; - } - public void setFB_operator_address_zh(String FB_operator_address_zh) { - this.FB_operator_address_zh = FB_operator_address_zh; - } - public String getFB_operator_phone() { - return FB_operator_phone; - } - public void setFB_operator_phone(String FB_operator_phone) { - this.FB_operator_phone = FB_operator_phone; - } - - - - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FB_brandReq.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FB_brandReq.java deleted file mode 100644 index e3b72cf..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/req/FB_brandReq.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.req; - - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class FB_brandReq { - @JsonProperty("id") - private Long id; - - @JsonProperty("FB_operator_id") - private Long FB_operator_id; - - @JsonProperty("FB_name") - private String FB_name; - - @JsonProperty("FB_type") - private String FB_type; - - @JsonProperty("FB_cuisine") - private String FB_cuisine; - - @JsonProperty("FB_cuisine_en") - private String FB_cuisine_en; - - @JsonProperty("FB_cuisine_zh") - private String FB_cuisine_zh; - - @JsonProperty("FB_name_en") - private String FB_name_en; - - @JsonProperty("FB_name_zh") - private String FB_name_zh; - - @JsonProperty("FB_type_en") - private String FB_type_en; - - @JsonProperty("FB_type_zh") - private String FB_type_zh; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_operator_id() { - return FB_operator_id; - } - public void setFB_operator_id(Long FB_operator_id) { - this.FB_operator_id = FB_operator_id; - } - public String getFB_name() { - return FB_name; - } - public void setFB_name(String FB_name) { - this.FB_name = FB_name; - } - public String getFB_type() { - return FB_type; - } - public void setFB_type(String FB_type) { - this.FB_type = FB_type; - } - public String getFB_cuisine() { - return FB_cuisine; - } - public void setFB_cuisine(String FB_cuisine) { - this.FB_cuisine = FB_cuisine; - } - public String getFB_cuisine_en() { - return FB_cuisine_en; - } - public void setFB_cuisine_en(String FB_cuisine_en) { - this.FB_cuisine_en = FB_cuisine_en; - } - public String getFB_cuisine_zh() { - return FB_cuisine_zh; - } - public void setFB_cuisine_zh(String FB_cuisine_zh) { - this.FB_cuisine_zh = FB_cuisine_zh; - } - public String getFB_name_en() { - return FB_name_en; - } - public void setFB_name_en(String FB_name_en) { - this.FB_name_en = FB_name_en; - } - public String getFB_name_zh() { - return FB_name_zh; - } - public void setFB_name_zh(String FB_name_zh) { - this.FB_name_zh = FB_name_zh; - } - public String getFB_type_en() { - return FB_type_en; - } - public void setFB_type_en(String FB_type_en) { - this.FB_type_en = FB_type_en; - } - public String getFB_type_zh() { - return FB_type_zh; - } - public void setFB_type_zh(String FB_type_zh) { - this.FB_type_zh = FB_type_zh; - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBCombinedService.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBCombinedService.java deleted file mode 100644 index 40d96c2..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBCombinedService.java +++ /dev/null @@ -1,315 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.support.JdbcDao; -//import com.ffii.fhsmsc.modules.Combine.res.FBCombineRes; -import com.ffii.fhsmsc.modules.FB_Operator.enity.FB_brand; -import com.ffii.fhsmsc.modules.FB_Operator.req.FBCombinedSaveReq; -import com.ffii.fhsmsc.modules.FB_Operator.req.FB_brandReq; -import com.ffii.fhsmsc.modules.FB_Outlets.enity.FB_outlets; -import com.ffii.fhsmsc.modules.FB_Outlets.req.FB_outletsReq; -import com.ffii.fhsmsc.modules.FB_Outlets.service.FB_outletsService; -import com.ffii.fhsmsc.modules.I18n.enity.i18n; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.service.fb_operator_and_organization_relationshipService; -import com.ffii.fhsmsc.modules.Combine.res.FBCombinedListRes; - -@Service -public class FBCombinedService { - private static final Logger logger = LoggerFactory.getLogger(FBCombinedService.class); - - private final FB_brandService fbBrandService; - private final FB_outletsService fbOutletsService; - private final i18nService i18nService; - private final fb_operator_and_organization_relationshipService fb_operator_and_organization_relationshipService; - private final JdbcDao jdbcDao; - - @Autowired - public FBCombinedService( - FB_brandService fbBrandService, - FB_outletsService fbOutletsService, - i18nService i18nService, - fb_operator_and_organization_relationshipService fb_operator_and_organization_relationshipService, - JdbcDao jdbcDao) { - this.fbBrandService = fbBrandService; - this.fbOutletsService = fbOutletsService; - this.i18nService = i18nService; - this.fb_operator_and_organization_relationshipService = fb_operator_and_organization_relationshipService; - this.jdbcDao = jdbcDao; - } - - @Transactional(rollbackFor = Exception.class) - public Long saveCombined(FBCombinedSaveReq req) { - logger.info("Received combined save request: {}", req); - - // Step 1: Save to fb_brand - FB_brandReq fbBrandReq = new FB_brandReq(); - fbBrandReq.setId(req.getId()); - fbBrandReq.setFB_operator_id(req.getFB_operator_id()); - fbBrandReq.setFB_name_en(req.getFB_name_en()); - fbBrandReq.setFB_name_zh(req.getFB_name_zh()); - fbBrandReq.setFB_type_en(req.getFB_type_en()); - fbBrandReq.setFB_type_zh(req.getFB_type_zh()); - fbBrandReq.setFB_cuisine_en(req.getFB_cuisine_en()); - fbBrandReq.setFB_cuisine_zh(req.getFB_cuisine_zh()); - - FB_brand fbBrand = fbBrandService.saveOrUpdate(fbBrandReq); - Long fbBrandId = fbBrand.getId(); - logger.info("Saved FB_brand with id: {}", fbBrandId); - - // Step 2: Save to fb_outlets - FB_outletsReq fbOutletsReq = new FB_outletsReq(); - fbOutletsReq.setId(req.getId()); - fbOutletsReq.setFB_id(fbBrandId); - fbOutletsReq.setFB_outlet_district_en(req.getFB_outlet_district_en()); - fbOutletsReq.setFB_outlet_district_zh(req.getFB_outlet_district_zh()); - fbOutletsReq.setFB_outlet_address_en(req.getFB_outlet_address_en()); - fbOutletsReq.setFB_outlet_address_zh(req.getFB_outlet_address_zh()); - fbOutletsReq.setFB_outlet_phone(req.getFB_outlet_phone()); - - FB_outlets fbOutlets = fbOutletsService.saveOrUpdate(fbOutletsReq); - Long fbOutletsId = fbOutlets.getId(); - logger.info("Saved FB_outlets with id: {}", fbOutletsId); - - return fbBrandId; - } - - public List listCombined() { - logger.info("Received combined list request"); - - List result = new ArrayList<>(); - - // Step 1: Get all operators - String operatorSql = "SELECT * FROM fboperator"; - List> operators = jdbcDao.queryForList(operatorSql); - logger.info("Found {} operators", operators.size()); - - for (Map operator : operators) { - FBCombinedListRes combinedRes = new FBCombinedListRes(); - - // Set operator info - FBCombinedListRes.OperatorInfo operatorInfo = new FBCombinedListRes.OperatorInfo(); - operatorInfo.setId(((Number) operator.get("id")).longValue()); - operatorInfo.setFB_name((String) operator.get("FB_name")); - operatorInfo.setFB_operator_address((String) operator.get("FB_operator_address")); - operatorInfo.setFB_operator_phone((String) operator.get("FB_operator_phone")); - - // Get User_Grp_Org_ID - Map relationshipArgs = new HashMap<>(); - relationshipArgs.put("FB_operator_id", operatorInfo.getId()); - List> relationships = fb_operator_and_organization_relationshipService.search(relationshipArgs); - String userGrpOrgId = relationships.isEmpty() ? null : relationships.get(0).get("User_Grp_Org_ID").toString(); - operatorInfo.setUser_Grp_Org_ID(userGrpOrgId); - - combinedRes.setOperator(operatorInfo); - - // Get brands for this operator - Map brandArgs = new HashMap<>(); - brandArgs.put("FB_operator_id", operatorInfo.getId()); - List> brands = fbBrandService.search(brandArgs); - logger.info("Found {} brands for operator id: {}", brands.size(), operatorInfo.getId()); - - List brandInfoList = new ArrayList<>(); - for (Map brand : brands) { - Long fbBrandId = ((Number) brand.get("id")).longValue(); - FBCombinedListRes.BrandInfo brandInfo = new FBCombinedListRes.BrandInfo(); - brandInfo.setFb_id(fbBrandId); - - // Get i18n translations for brand - Map i18nBrandArgs = new HashMap<>(); - i18nBrandArgs.put("table_name", "fb_brand"); - i18nBrandArgs.put("record_id", fbBrandId); - - // Get FB_name translations - i18nBrandArgs.put("field_name", "FB_name"); - List> nameTranslations = i18nService.search(i18nBrandArgs); - Map nameTranslationMap = nameTranslations.stream() - .collect(Collectors.toMap( - entry -> (String) entry.get("language"), - entry -> (String) entry.get("value"), - (v1, v2) -> v1 - )); - - // Get FB_type translations - i18nBrandArgs.put("field_name", "FB_type"); - List> typeTranslations = i18nService.search(i18nBrandArgs); - Map typeTranslationMap = typeTranslations.stream() - .collect(Collectors.toMap( - entry -> (String) entry.get("language"), - entry -> (String) entry.get("value"), - (v1, v2) -> v1 - )); - - // Get FB_cuisine translations - i18nBrandArgs.put("field_name", "FB_cuisine"); - List> cuisineTranslations = i18nService.search(i18nBrandArgs); - Map cuisineTranslationMap = cuisineTranslations.stream() - .collect(Collectors.toMap( - entry -> (String) entry.get("language"), - entry -> (String) entry.get("value"), - (v1, v2) -> v1 - )); - - brandInfo.setFb_name_en(nameTranslationMap.getOrDefault("en", (String) brand.get("FB_name"))); - brandInfo.setFb_name_zh(nameTranslationMap.getOrDefault("zh", (String) brand.get("FB_name"))); - brandInfo.setFb_type_en(typeTranslationMap.getOrDefault("en", (String) brand.get("FB_type"))); - brandInfo.setFb_type_zh(typeTranslationMap.getOrDefault("zh", (String) brand.get("FB_type"))); - brandInfo.setFb_cuisine_en(cuisineTranslationMap.getOrDefault("en", (String) brand.get("FB_cuisine"))); - brandInfo.setFb_cuisine_zh(cuisineTranslationMap.getOrDefault("zh", (String) brand.get("FB_cuisine"))); - - // Get outlets for this brand - Map outletArgs = new HashMap<>(); - outletArgs.put("FB_id", fbBrandId); - List> outlets = fbOutletsService.search(outletArgs); - logger.info("Found {} outlets for brand id: {}", outlets.size(), fbBrandId); - - List outletInfoList = new ArrayList<>(); - for (Map outlet : outlets) { - Long outletId = ((Number) outlet.get("id")).longValue(); - FBCombinedListRes.OutletInfo outletInfo = new FBCombinedListRes.OutletInfo(); - outletInfo.setId(outletId); - - // Get i18n translations for outlet - Map i18nOutletArgs = new HashMap<>(); - i18nOutletArgs.put("table_name", "fb_outlets"); - i18nOutletArgs.put("record_id", outletId); - - // District translations - i18nOutletArgs.put("field_name", "FB_outlet_district"); - List> districtTranslations = i18nService.search(i18nOutletArgs); - Map districtTranslationMap = districtTranslations.stream() - .collect(Collectors.toMap( - entry -> (String) entry.get("language"), - entry -> (String) entry.get("value"), - (v1, v2) -> v1 - )); - - // Address translations - i18nOutletArgs.put("field_name", "FB_outlet_address"); - List> addressTranslations = i18nService.search(i18nOutletArgs); - Map addressTranslationMap = addressTranslations.stream() - .collect(Collectors.toMap( - entry -> (String) entry.get("language"), - entry -> (String) entry.get("value"), - (v1, v2) -> v1 - )); - - outletInfo.setFb_outlet_district_en(districtTranslationMap.getOrDefault("en", (String) outlet.get("FB_outlet_district"))); - outletInfo.setFb_outlet_district_zh(districtTranslationMap.getOrDefault("zh", (String) outlet.get("FB_outlet_district"))); - outletInfo.setFb_outlet_address_en(addressTranslationMap.getOrDefault("en", (String) outlet.get("FB_outlet_address"))); - outletInfo.setFb_outlet_address_zh(addressTranslationMap.getOrDefault("zh", (String) outlet.get("FB_outlet_address"))); - outletInfo.setFb_outlet_phone((String) outlet.get("FB_outlet_phone")); - - outletInfoList.add(outletInfo); - } - - brandInfo.setOutlets(outletInfoList); - brandInfoList.add(brandInfo); - } - - combinedRes.setBrands(brandInfoList); - result.add(combinedRes); - } - - logger.info("Returning {} combined list entries", result.size()); - return result; - } - - @Transactional(rollbackFor = Exception.class) - public void deleteCombined(Long fbId) { - logger.info("Starting deletion process for FB_id: {}", fbId); - - try { - // 1. 首先检查是否存在 - Map checkParams = new HashMap<>(); - checkParams.put("id", fbId); - List> brands = fbBrandService.search(checkParams); - - if (brands.isEmpty()) { - throw new RuntimeException("Brand not found"); - } - - // 2. 删除相关的门店记录 - String outletSql = "DELETE FROM fb_outlets WHERE FB_id = :FB_id"; - Map outletParams = new HashMap<>(); - outletParams.put("FB_id", fbId); - jdbcDao.executeUpdate(outletSql, outletParams); - logger.info("Deleted outlets for FB_id: {}", fbId); - - // 3. 删除相关的 i18n 记录 - String i18nSql = "DELETE FROM i18n WHERE table_name = 'fb_brand' AND record_id = :FB_id"; - Map i18nParams = new HashMap<>(); - i18nParams.put("FB_id", fbId); - jdbcDao.executeUpdate(i18nSql, i18nParams); - logger.info("Deleted i18n entries for FB_id: {}", fbId); - - // 4. 删除品牌记录 - String brandSql = "DELETE FROM fb_brand WHERE id = :id"; - Map brandParams = new HashMap<>(); - brandParams.put("id", fbId); - jdbcDao.executeUpdate(brandSql, brandParams); - logger.info("Deleted brand with id: {}", fbId); - - // 5. 删除组织关系记录 - String relationshipSql = "DELETE FROM fb_operator_and_organization_relationship WHERE FB_id = :FB_id"; - Map relationshipParams = new HashMap<>(); - relationshipParams.put("FB_id", fbId); - jdbcDao.executeUpdate(relationshipSql, relationshipParams); - logger.info("Deleted organization relationships for FB_id: {}", fbId); - - } catch (Exception e) { - logger.error("Error during deletion process for FB_id: {}", fbId, e); - throw new RuntimeException("Failed to delete combined data", e); - } - } - - @Transactional(rollbackFor = Exception.class) - public void deleteOutlet(Long fbId, Long outletId) { - logger.info("Starting deletion process for outlet: FB_id={}, ", fbId, outletId); - - try { - // 1. 检查门店是否存在 - Map checkParams = new HashMap<>(); - checkParams.put("FB_id", fbId); - checkParams.put("id", outletId); - String checkSql = "SELECT COUNT(*) FROM fb_outlets WHERE FB_id = :FB_id AND id = :id"; - int count = jdbcDao.queryForInt(checkSql, checkParams); - - if (count == 0) { - throw new RuntimeException("Outlet not found"); - } - - // 2. 删除门店的 i18n 记录 - String i18nSql = "DELETE FROM i18n WHERE table_name = 'fb_outlets' AND record_id = :outletId"; - Map i18nParams = new HashMap<>(); - i18nParams.put("outletId", outletId); - jdbcDao.executeUpdate(i18nSql, i18nParams); - logger.info("Deleted i18n entries for outlet_id: {}", outletId); - - // 3. 删除门店记录 - String outletSql = "DELETE FROM fb_outlets WHERE FB_id = :FB_id AND id = :id"; - Map outletParams = new HashMap<>(); - outletParams.put("FB_id", fbId); - outletParams.put("id", outletId); - jdbcDao.executeUpdate(outletSql, outletParams); - logger.info("Deleted outlet: FB_id={}, ", fbId, outletId); - - } catch (Exception e) { - logger.error("Error during outlet deletion process: FB_id={}, ", fbId, outletId, e); - throw new RuntimeException("Failed to delete outlet", e); - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBOperatorService.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBOperatorService.java deleted file mode 100644 index e6bf001..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FBOperatorService.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.FB_Operator.enity.FBOperator; -import com.ffii.fhsmsc.modules.FB_Operator.enity.FBOperatorRepository; -import com.ffii.fhsmsc.modules.FB_Operator.req.FBOperatorReq; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; - -import jakarta.validation.Valid; - -@Service -public class FBOperatorService extends AbstractBaseEntityService { - - private static final Logger logger = LoggerFactory.getLogger(FBOperatorService.class); - - private final i18nService i18nService; - - public FBOperatorService(JdbcDao jdbcDao, FBOperatorRepository repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT fb.* FROM `fboperator` fb WHERE 1=1"); - - if (args != null) { - if (args.containsKey("id")) sql.append(" AND fb.id = :id"); - if (args.containsKey("FB_name")) sql.append(" AND fb.FB_name LIKE :FB_name"); - } - - sql.append(" ORDER BY fb.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public FBOperator saveOrUpdate(@Valid FBOperatorReq req) { - logger.info("Request: id={}, FB_name={}, FB_operator_address={}, FB_operator_phone={}", - req.getId(), req.getFB_name(), req.getFB_operator_address(), req.getFB_operator_phone()); - - FBOperator instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(() -> new InternalServerErrorException("Operator not found for id: " + req.getId())); - logger.info("Found existing operator: id={}, FB_name={}", instance.getId(), instance.getFB_name()); - } else { - instance = new FBOperator(); - isNew = true; - logger.info("Creating new operator"); - } - - // 设置字段 - instance.setFB_name(req.getFB_name_en()); - instance.setFB_operator_address(req.getFB_operator_address_en()); - instance.setFB_operator_phone(req.getFB_operator_phone()); - - if (isNew) { - instance.setCreated(LocalDateTime.now()); - } - instance.setModified(LocalDateTime.now()); - - try { - instance = repository.saveAndFlush(instance); - logger.info("After save - Saved operator: id={}, FB_name={}", - instance.getId(), instance.getFB_name()); - - Long operatorId = instance.getId(); - updateI18nEntry("fboperator", "FB_name", operatorId, "en", req.getFB_name_en()); - updateI18nEntry("fboperator", "FB_name", operatorId, "zh", req.getFB_name_zh()); - updateI18nEntry("fboperator", "FB_operator_address", operatorId, "en", req.getFB_operator_address_en()); - updateI18nEntry("fboperator", "FB_operator_address", operatorId, "zh", req.getFB_operator_address_zh()); - } catch (Exception e) { - logger.error("Failed to save FBOperator: id={}, error={}", req.getId(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save operator: " + e.getMessage()); - } - - return instance; - } - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - - public List findAll() { - return repository.findAll(); - } - - @Transactional(rollbackFor = Exception.class) - public void deleteById(Long id) { - logger.info("Deleting operator with id: {}", id); - String sql = "DELETE FROM fboperator WHERE id = :id"; - Map args = new HashMap<>(); - args.put("id", id); - jdbcDao.queryForList(sql, args); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FB_brandService.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FB_brandService.java deleted file mode 100644 index 6374cfb..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/service/FB_brandService.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.FB_Operator.enity.FB_brand; -import com.ffii.fhsmsc.modules.FB_Operator.enity.FB_brandRepository; -import com.ffii.fhsmsc.modules.FB_Operator.req.FB_brandReq; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; - -import jakarta.validation.Valid; - -@Service -public class FB_brandService extends AbstractBaseEntityService { - - private static final Logger logger = LoggerFactory.getLogger(FB_brandService.class); - - private final i18nService i18nService; - - public FB_brandService(JdbcDao jdbcDao, FB_brandRepository repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fb.*" - + " FROM `fb_brand` fb" - + " WHERE 1=1"); - - if (args != null) { - if (args.containsKey("id")) sql.append(" AND fb.id = :id"); - if (args.containsKey("FB_operator_id")) sql.append(" AND fb.FB_operator_id = :FB_operator_id"); - if (args.containsKey("FB_name")) sql.append(" AND fb.FB_name LIKE :FB_name"); - if (args.containsKey("FB_type")) sql.append(" AND fb.FB_type = :FB_type"); - } - - sql.append(" ORDER BY fb.id"); - - List> brands = jdbcDao.queryForList(sql.toString(), args); - - for (Map brand : brands) { - Long brandId = ((Number) brand.get("id")).longValue(); - - // 获取所有字段的翻译 - String[] fields = {"FB_name", "FB_type", "FB_cuisine"}; - String[] languages = {"en", "zh"}; - - for (String field : fields) { - Map fieldArgs = new HashMap<>(); - fieldArgs.put("table_name", "fb_brand"); - fieldArgs.put("field_name", field); - fieldArgs.put("record_id", brandId); - List> translations = i18nService.search(fieldArgs); - - // 添加翻译到结果中 - for (Map translation : translations) { - String language = (String) translation.get("language"); - String value = (String) translation.get("value"); - brand.put(field + "_" + language, value); - } - - // 如果没有找到翻译,使用默认值 - for (String lang : languages) { - if (!brand.containsKey(field + "_" + lang)) { - brand.put(field + "_" + lang, brand.get(field)); - } - } - } - } - - return brands; - } - - @Transactional(rollbackFor = Exception.class) - public FB_brand saveOrUpdate(@Valid FB_brandReq req) { - logger.info("Request: id={}, FB_operator_id={}, FB_name={}, FB_type={}, FB_cuisine={}", - req.getId(), req.getFB_operator_id(), req.getFB_name(), req.getFB_type(), req.getFB_cuisine()); - - FB_brand instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(() -> new InternalServerErrorException("Brand not found for id: " + req.getId())); - logger.info("Found existing brand: id={}, FB_name={}", instance.getId(), instance.getFB_name()); - } else { - instance = new FB_brand(); - isNew = true; - logger.info("Creating new brand"); - } - - // 手动设置字段 - instance.setId(req.getId()); - instance.setFB_operator_id(req.getFB_operator_id()); - instance.setFB_name(req.getFB_name_en()); - instance.setFB_type(req.getFB_type_en()); - instance.setFB_cuisine(req.getFB_cuisine_en()); - - logger.info("Before save - Setting values: FB_name={}, FB_type={}, FB_cuisine={}", - instance.getFB_name(), instance.getFB_type(), instance.getFB_cuisine()); - - if (isNew) { - instance.setCreated(LocalDateTime.now()); - } - instance.setModified(LocalDateTime.now()); - - try { - instance = repository.saveAndFlush(instance); - logger.info("After save - Saved brand: id={}, FB_name={}, FB_type={}, FB_cuisine={}", - instance.getId(), instance.getFB_name(), instance.getFB_type(), instance.getFB_cuisine()); - } catch (Exception e) { - logger.error("Failed to save FB_Operator: id={}, error={}", req.getId(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save brand: " + e.getMessage()); - } - - Long operatorId = instance.getId(); - logger.info("Processing i18n entries for operatorId={}", operatorId); - - // 更新 i18n 记录 - try { - updateI18nEntry("fb_brand", "FB_name", operatorId, "en", req.getFB_name_en()); - updateI18nEntry("fb_brand", "FB_name", operatorId, "zh", req.getFB_name_zh()); - - updateI18nEntry("fb_brand", "FB_type", operatorId, "en", req.getFB_type_en()); - updateI18nEntry("fb_brand", "FB_type", operatorId, "zh", req.getFB_type_zh()); - - updateI18nEntry("fb_brand", "FB_cuisine", operatorId, "en", req.getFB_cuisine_en()); - updateI18nEntry("fb_brand", "FB_cuisine", operatorId, "zh", req.getFB_cuisine_zh()); - - logger.info("Successfully updated all i18n entries"); - } catch (Exception e) { - logger.error("Failed to update i18n entries: error={}", e.getMessage(), e); - throw new InternalServerErrorException("Failed to update i18n entries: " + e.getMessage()); - } - - return instance; - } - - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - - public List findAll() { - return repository.findAll(); - } - - @Transactional(rollbackFor = Exception.class) - public void deleteById(Long id) { - logger.info("Deleting brand with id: {}", id); - String sql = "DELETE FROM fb_brand WHERE id = :id"; - Map args = new HashMap<>(); - args.put("id", id); - jdbcDao.queryForList(sql, args); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBCombinedController.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBCombinedController.java deleted file mode 100644 index baca76c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBCombinedController.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.web; - -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.fhsmsc.modules.FB_Operator.req.FBCombinedSaveReq; -import com.ffii.fhsmsc.modules.FB_Operator.service.FBCombinedService; -import com.ffii.fhsmsc.modules.Combine.res.FBCombinedListRes; - -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/combined") -public class FBCombinedController { - private static final Logger logger = LoggerFactory.getLogger(FBCombinedController.class); - private final FBCombinedService fbCombinedService; - - public FBCombinedController(FBCombinedService fbCombinedService) { - this.fbCombinedService = fbCombinedService; - } - - @PostMapping("/save") - public IdRes saveCombined(@RequestBody @Valid FBCombinedSaveReq req) { - try { - logger.info("Received combined save request: {}", req); - Long fbOperatorId = fbCombinedService.saveCombined(req); - logger.info("Successfully processed combined save request"); - return new IdRes(fbOperatorId); - } catch (Exception e) { - logger.error("Error processing combined save request", e); - throw e; - } - } - - @GetMapping("/list") - public List listCombined() { - try { - logger.info("Received combined list request"); - List result = fbCombinedService.listCombined(); - logger.info("Successfully processed combined list request"); - return result; - } catch (Exception e) { - logger.error("Error processing combined list request", e); - throw e; - } - } - - @DeleteMapping("/delete/{id}") - public void deleteCombined(@PathVariable Long id) { - try { - logger.info("Received combined delete request for id: {}", id); - fbCombinedService.deleteCombined(id); - logger.info("Successfully processed combined delete request"); - } catch (Exception e) { - logger.error("Error processing combined delete request", e); - throw e; - } - } - - @DeleteMapping("/deleteOutlet/{fbId}/{outletId}") - public void deleteOutlet(@PathVariable Long fbId, @PathVariable Long outletId) { - fbCombinedService.deleteOutlet(fbId, outletId); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FB_brandController.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FB_brandController.java deleted file mode 100644 index 34d48e0..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FB_brandController.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.web; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.FB_Operator.req.FB_brandReq; -import com.ffii.fhsmsc.modules.FB_Operator.service.FB_brandService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/FB_brand") -public class FB_brandController { - private static final Logger logger = LoggerFactory.getLogger(FB_brandController.class); - private FB_brandService FB_brandService; - - public FB_brandController(FB_brandService FB_brandService) { - this.FB_brandService = FB_brandService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(FB_brandService.search( - CriteriaArgsBuilder.withRequest(request) - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid FB_brandReq req) { - try { - logger.info("Received save request: {}", req); - IdRes result = new IdRes(FB_brandService.saveOrUpdate(req).getId()); - logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - logger.error("Error processing save request", e); - throw e; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBoperatorController.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBoperatorController.java deleted file mode 100644 index 4b17f44..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Operator/web/FBoperatorController.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Operator.web; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.FB_Operator.req.FBOperatorReq; -import com.ffii.fhsmsc.modules.FB_Operator.service.FBOperatorService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/FB_operator") -public class FBoperatorController { - private static final Logger logger = LoggerFactory.getLogger(FBoperatorController.class); - private final FBOperatorService fbOperatorService; - - public FBoperatorController(FBOperatorService fbOperatorService) { - this.fbOperatorService = fbOperatorService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fbOperatorService.search( - CriteriaArgsBuilder.withRequest(request) - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid FBOperatorReq req) { - try { - logger.info("Received save request: {}", req); - IdRes result = new IdRes(fbOperatorService.saveOrUpdate(req).getId()); - logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - logger.error("Error processing save request", e); - throw e; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outlets.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outlets.java deleted file mode 100644 index 550b889..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outlets.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Outlets.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.persistence.Id; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -/** @author Terence */ -@Entity -@Table(name = "FB_Outlets") -public class FB_outlets extends BaseEntity { - @Column - private Long FB_id; - @Column - private String FB_outlet_district; - @Column - private String FB_outlet_address; - @Column - private String FB_outlet_phone; - - - public Long getFB_id() { - return FB_id; - } - public void setFB_id(Long FB_id) { - this.FB_id = FB_id; - } - public String getFB_outlet_district() { - return FB_outlet_district; - } - public void setFB_outlet_district(String FB_outlet_district) { - this.FB_outlet_district = FB_outlet_district; - } - public String getFB_outlet_address() { - return FB_outlet_address; - } - public void setFB_outlet_address(String FB_outlet_address) { - this.FB_outlet_address = FB_outlet_address; - } - public String getFB_outlet_phone() { - return FB_outlet_phone; - } - public void setFB_outlet_phone(String FB_outlet_phone) { - this.FB_outlet_phone = FB_outlet_phone; - } - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outletsRepository.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outletsRepository.java deleted file mode 100644 index b7ac20a..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/enity/FB_outletsRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Outlets.enity; -import com.ffii.core.support.AbstractRepository; -public interface FB_outletsRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/req/FB_outletsReq.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/req/FB_outletsReq.java deleted file mode 100644 index 4c485be..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/req/FB_outletsReq.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Outlets.req; -import com.fasterxml.jackson.annotation.JsonProperty; -public class FB_outletsReq { - - @JsonProperty("id") - private Long id; - - @JsonProperty("FB_id") - private Long FB_id; - - @JsonProperty("FB_outlet_district") - private String FB_outlet_district; - - @JsonProperty("FB_outlet_address") - private String FB_outlet_address; - - @JsonProperty("FB_outlet_phone") - private String FB_outlet_phone; - - @JsonProperty("FB_outlet_district_en") - private String FB_outlet_district_en; - - @JsonProperty("FB_outlet_district_zh") - private String FB_outlet_district_zh; // 新增 - - @JsonProperty("FB_outlet_address_en") - private String FB_outlet_address_en; // 新增 - - @JsonProperty("FB_outlet_address_zh") - private String FB_outlet_address_zh; - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - - public Long getFB_id() { - return FB_id; - } - public void setFB_id(Long FB_id) { - this.FB_id = FB_id; - } - public String getFB_outlet_district() { - return FB_outlet_district; - } - public void setFB_outlet_district(String FB_outlet_district) { - this.FB_outlet_district = FB_outlet_district; - } - public String getFB_outlet_address() { - return FB_outlet_address; - } - public void setFB_outlet_address(String FB_outlet_address) { - this.FB_outlet_address = FB_outlet_address; - } - public String getFB_outlet_phone() { - return FB_outlet_phone; - } - public void setFB_outlet_phone(String FB_outlet_phone) { - this.FB_outlet_phone = FB_outlet_phone; - } - public String getFB_outlet_district_en() { - return FB_outlet_district_en; - } - public void setFB_outlet_district_en(String FB_outlet_district_en) { - this.FB_outlet_district_en = FB_outlet_district_en; - } - public String getFB_outlet_district_zh() { - return FB_outlet_district_zh; - } - public void setFB_outlet_district_zh(String FB_outlet_district_zh) { - this.FB_outlet_district_zh = FB_outlet_district_zh; - } - public String getFB_outlet_address_en() { - return FB_outlet_address_en; - } - public void setFB_outlet_address_en(String FB_outlet_address_en) { - this.FB_outlet_address_en = FB_outlet_address_en; - } - public String getFB_outlet_address_zh() { - return FB_outlet_address_zh; - } - public void setFB_outlet_address_zh(String FB_outlet_address_zh) { - this.FB_outlet_address_zh = FB_outlet_address_zh; - } - - - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/service/FB_outletsService.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/service/FB_outletsService.java deleted file mode 100644 index 3036dfd..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/service/FB_outletsService.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Outlets.service; - -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.FB_Outlets.enity.FB_outlets; -import com.ffii.fhsmsc.modules.FB_Outlets.enity.FB_outletsRepository; -import com.ffii.fhsmsc.modules.FB_Outlets.req.FB_outletsReq; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; - -import jakarta.validation.Valid; - -@Service -public class FB_outletsService extends AbstractBaseEntityService { - private static final Logger logger = LoggerFactory.getLogger(FB_outletsService.class); - private final i18nService i18nService; - public FB_outletsService(JdbcDao jdbcDao, FB_outletsRepository repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fo.*" - + " FROM `fb_outlets` fo" - + " WHERE 1=1"); - if (args.containsKey("FB_id")) { - sql.append(" AND fo.FB_id = :FB_id"); - } - - List> outlets = jdbcDao.queryForList(sql.toString(), args); - - for (Map outlet : outlets) { - Long outletId = ((Number) outlet.get("id")).longValue(); - - Map districtArgs = new HashMap<>(); - districtArgs.put("table_name", "fb_outlets"); - districtArgs.put("field_name", "FB_outlet_district"); - districtArgs.put("record_id", outletId); - List> districtTranslations = i18nService.search(districtArgs); - - Map addressArgs = new HashMap<>(); - addressArgs.put("table_name", "fb_outlets"); - addressArgs.put("field_name", "FB_outlet_address"); - addressArgs.put("record_id", outletId); - List> addressTranslations = i18nService.search(addressArgs); - - for (Map translation : districtTranslations) { - String language = (String) translation.get("language"); - String value = (String) translation.get("value"); - outlet.put("FB_outlet_district_" + language, value); - } - - for (Map translation : addressTranslations) { - String language = (String) translation.get("language"); - String value = (String) translation.get("value"); - outlet.put("FB_outlet_address_" + language, value); - } - } - - return outlets; - } - - @Transactional(rollbackFor = Exception.class) - public FB_outlets saveOrUpdate(@Valid FB_outletsReq req) { - logger.info("Request: id={}, FB_id={}, FB_outlet_district_en={}, FB_outlet_address_en={}, FB_outlet_phone={}", - req.getId(), req.getFB_id(), req.getFB_outlet_district_en(), req.getFB_outlet_address_en(), req.getFB_outlet_phone()); - - FB_outlets instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(() -> new InternalServerErrorException("Outlet not found for id: " + req.getId())); - logger.info("Found existing outlet: id={}, FB_outlet_district={}, FB_outlet_address={}", - instance.getId(), instance.getFB_outlet_district(), instance.getFB_outlet_address()); - } else { - instance = new FB_outlets(); - isNew = true; - logger.info("Creating new outlet"); - } - - // Set basic fields - instance.setFB_id(req.getFB_id()); - instance.setFB_outlet_phone(req.getFB_outlet_phone()); - - // 使用英文版本作为默认值 - String districtEn = req.getFB_outlet_district_en(); - String addressEn = req.getFB_outlet_address_en(); - - logger.info("Setting values - districtEn={}, addressEn={}", districtEn, addressEn); - - instance.setFB_outlet_district(districtEn); - instance.setFB_outlet_address(addressEn); - - logger.info("Before save - Setting values: FB_outlet_district={}, FB_outlet_address={}", - instance.getFB_outlet_district(), instance.getFB_outlet_address()); - - if (isNew) { - instance.setCreated(LocalDateTime.now()); - } - instance.setModified(LocalDateTime.now()); - - // Set createdBy and modifiedBy to null - instance.setCreatedBy(null); - instance.setModifiedBy(null); - - try { - instance = repository.saveAndFlush(instance); - logger.info("After save - Saved outlet: id={}, FB_outlet_district={}, FB_outlet_address={}", - instance.getId(), instance.getFB_outlet_district(), instance.getFB_outlet_address()); - } catch (Exception e) { - logger.error("Failed to save FB_outlets: id={}, error={}", req.getId(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save outlet: " + e.getMessage()); - } - - Long outletId = instance.getId(); - logger.info("Processing i18n entries for outletId={}", outletId); - - // Update i18n records - try { - updateI18nEntry("fb_outlets", "FB_outlet_district", outletId, "en", districtEn); - updateI18nEntry("fb_outlets", "FB_outlet_district", outletId, "zh", req.getFB_outlet_district_zh()); - updateI18nEntry("fb_outlets", "FB_outlet_address", outletId, "en", addressEn); - updateI18nEntry("fb_outlets", "FB_outlet_address", outletId, "zh", req.getFB_outlet_address_zh()); - logger.info("Successfully updated all i18n entries"); - } catch (Exception e) { - logger.error("Failed to update i18n entries: error={}", e.getMessage(), e); - throw new InternalServerErrorException("Failed to update i18n entries: " + e.getMessage()); - } - - return instance; - } - - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - - public List findAll() { - return repository.findAll(); - } - @Transactional(rollbackFor = Exception.class) - public void deleteByFBId(Long fbId) { - logger.info("Deleting operator with FB_id: {}", fbId); - String sql = "DELETE FROM fb_operator WHERE FB_id = :FB_id"; - Map args = new HashMap<>(); - args.put("FB_id", fbId); - jdbcDao.queryForList(sql, args); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/web/FB_outletsController.java b/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/web/FB_outletsController.java deleted file mode 100644 index 0a40fdf..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/FB_Outlets/web/FB_outletsController.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.ffii.fhsmsc.modules.FB_Outlets.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.FB_Outlets.req.FB_outletsReq; -import com.ffii.fhsmsc.modules.FB_Outlets.service.FB_outletsService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/FB_outlets") -public class FB_outletsController { - private FB_outletsService FB_outletsService; - - public FB_outletsController( - FB_outletsService FB_outletsService - ) { - this.FB_outletsService = FB_outletsService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(FB_outletsService.search( - CriteriaArgsBuilder.withRequest(request) - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid FB_outletsReq req) { - try { - //logger.info("Received save request: {}", req); - IdRes result = new IdRes(FB_outletsService.saveOrUpdate(req).getId()); - //logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - //logger.error("Error processing save request", e); - throw e; - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18n.java b/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18n.java deleted file mode 100644 index 74db17a..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18n.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ffii.fhsmsc.modules.I18n.enity; -import java.time.LocalDateTime; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; -import com.ffii.core.entity.BaseEntity; -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.AttributeOverrides; - -/** @author Terence */ -@Entity -@Table(name = "i18n") -@AttributeOverrides({ - @AttributeOverride(name = "version", column = @Column(name = "version", insertable = false, updatable = false)) -}) -public class i18n extends BaseEntity { - - @NotBlank - @Column - private String table_name; - @Column - private String field_name; - @Column - private Long record_id; - @Column - private String language; - @Column - private String value; - - public String getTable_name() { - return table_name; - } - public void setTable_name(String table_name) { - this.table_name = table_name; - } - public String getField_name() { - return field_name; - } - public void setField_name(String field_name) { - this.field_name = field_name; - } - public Long getRecord_id() { - return record_id; - } - public void setRecord_id(Long record_id) { - this.record_id = record_id; - } - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18nRepository.java b/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18nRepository.java deleted file mode 100644 index c1d2a06..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/I18n/enity/i18nRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ffii.fhsmsc.modules.I18n.enity; - - -import com.ffii.core.support.AbstractRepository; - -public interface i18nRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/I18n/req/i18nReq.java b/src/main/java/com/ffii/fhsmsc/modules/I18n/req/i18nReq.java deleted file mode 100644 index 17175ca..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/I18n/req/i18nReq.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.ffii.fhsmsc.modules.I18n.req; -import java.time.LocalDateTime; -import com.fasterxml.jackson.annotation.JsonProperty; -public class i18nReq { - @JsonProperty("id") - private Long id; - @JsonProperty("table_name") - private String table_name; - @JsonProperty("field_name") - private String field_name; - @JsonProperty("record_id") - private Long record_id; - @JsonProperty("language") - private String language; - @JsonProperty("value") - private String value; - - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public String getTable_name() { - return table_name; - } - public void setTable_name(String table_name) { - this.table_name = table_name; - } - public String getField_name() { - return field_name; - } - public void setField_name(String field_name) { - this.field_name = field_name; - } - public Long getRecord_id() { - return record_id; - } - public void setRecord_id(Long record_id) { - this.record_id = record_id; - } - public String getLanguage() { - return language; - } - public void setLanguage(String language) { - this.language = language; - } - public String getValue() { - return value; - } - public void setValue(String value) { - this.value = value; - } - -} - - - - - - - - - - - - - - - diff --git a/src/main/java/com/ffii/fhsmsc/modules/I18n/service/i18nService.java b/src/main/java/com/ffii/fhsmsc/modules/I18n/service/i18nService.java deleted file mode 100644 index 251f8e0..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/I18n/service/i18nService.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.ffii.fhsmsc.modules.I18n.service; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.I18n.enity.i18n; -import com.ffii.fhsmsc.modules.I18n.enity.i18nRepository; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; - -import jakarta.validation.Valid; - -@Service -public class i18nService extends AbstractBaseEntityService { - private static final Logger logger = LoggerFactory.getLogger(i18nService.class); - - public i18nService(JdbcDao jdbcDao, i18nRepository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `i18n` fi" - + " WHERE 1=1"); - if (args.containsKey("table_name")) { - sql.append(" AND fi.table_name = :table_name"); - } - if (args.containsKey("field_name")) { - sql.append(" AND fi.field_name = :field_name"); - } - if (args.containsKey("record_id")) { - sql.append(" AND fi.record_id = :record_id"); - } - if (args.containsKey("language")) { - sql.append(" AND fi.language = :language"); - } - sql.append(" ORDER BY fi.modified DESC"); // Ensure the most recent translation is first - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public i18n saveOrUpdate(@Valid i18nReq req) { - logger.info("Request: id={}, table_name={}, field_name={}, record_id={}, language={}, value={}", - req.getId(), req.getTable_name(), req.getField_name(), req.getRecord_id(), req.getLanguage(), req.getValue()); - - i18n instance; - - if (req.getId() != null) { - if (req.getId() > 0) { - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new i18n(); - } - } else { - instance = new i18n(); - } - - BeanUtils.copyProperties(req, instance); - logger.info("After BeanUtils: id={}, table_name={}, field_name={}, record_id={}, language={}, value={}", - instance.getId(), instance.getTable_name(), instance.getField_name(), instance.getRecord_id(), instance.getLanguage(), instance.getValue()); - - saveAndFlush(instance); - logger.info("After save: id={}, table_name={}, field_name={}, record_id={}, language={}, value={}", - instance.getId(), instance.getTable_name(), instance.getField_name(), instance.getRecord_id(), instance.getLanguage(), instance.getValue()); - - return instance; - } - - public void updateValue(String tableName, String fieldName, Long recordId, String language, String value) { - String sql = "UPDATE i18n SET value = :value WHERE table_name = :tableName AND field_name = :fieldName AND record_id = :recordId AND language = :language"; - Map params = new HashMap<>(); - params.put("value", value); - params.put("tableName", tableName); - params.put("fieldName", fieldName); - params.put("recordId", recordId); - params.put("language", language); - jdbcDao.executeUpdate(sql, params); - } - public void deleteByRecord(String tableName, Long recordId) { - String sql = "DELETE FROM i18n WHERE table_name = :tableName AND record_id = :recordId"; - Map params = new HashMap<>(); - params.put("tableName", tableName); - params.put("recordId", recordId); - jdbcDao.executeUpdate(sql, params); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/I18n/web/i18nController.java b/src/main/java/com/ffii/fhsmsc/modules/I18n/web/i18nController.java deleted file mode 100644 index 2df265b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/I18n/web/i18nController.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.ffii.fhsmsc.modules.I18n.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/i18n") -public class i18nController { - private i18nService i18nService; - - public i18nController(i18nService i18nService) { - this.i18nService = i18nService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(i18nService.search( - CriteriaArgsBuilder.withRequest(request) - .addString("table_name") - .addString("field_name") - .addString("record_id") - .addString("language") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid i18nReq req) { - try { - //logger.info("Received save request: {}", req); - IdRes result = new IdRes(i18nService.saveOrUpdate(req).getId()); - //logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - //logger.error("Error processing save request", e); - throw e; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group.java deleted file mode 100644 index 71b4d3f..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "fb_group") -//@AttributeOverride(name = "id", column = @Column(name = "FB_group_id")) -//@AttributeOverride(name = "id", column = @Column(name = "FB_menu_id")) -public class fb_group extends BaseEntity { -@Column(name="id") -private Long id; - -@Column(name="FB_brand_id") -private Long FB_brand_id; - -@Column(name="FB_group_Name") -private String FB_group_Name; -public Long getId() { - return id; -} -public void setId(Long id) { - this.id = id; -} -public Long getFB_brand_id() { - return FB_brand_id; -} -public void setFB_brand_id(Long FB_brand_id) { - this.FB_brand_id = FB_brand_id; -} -public String getFB_group_Name() { - return FB_group_Name; -} -public void setFB_group_Name(String FB_group_Name) { - this.FB_group_Name = FB_group_Name; -} -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_groupResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_groupResponsity.java deleted file mode 100644 index 5f7a75f..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_groupResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; - -import com.ffii.core.support.AbstractRepository; - -public interface fb_groupResponsity extends AbstractRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationship.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationship.java deleted file mode 100644 index 65381d7..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationship.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "fb_group_relationship") -//@AttributeOverride(name = "id", column = @Column(name = "FB_group_id")) -//@AttributeOverride(name = "id", column = @Column(name = "FB_menu_id")) -public class fb_group_relationship extends BaseEntity { -@Column(name="id") -private Long id; - -@Column(name="Fb_brand_id") -private Long Fb_brand_id; - -@Column(name="FB_group_id") -private Long FB_group_id; -@Column(name="FB_menu_id") -private Long FB_menu_id; -public Long getId () { - return id; -} -public void setId(Long id) { - this.id = id; -} -public Long getFb_brand_id() { - return Fb_brand_id; -} -public void setFb_brand_id(Long Fb_brand_id) { - this.Fb_brand_id = Fb_brand_id; -} -public Long getFB_group_id() { - return FB_group_id; -} -public void setFB_group_id(Long FB_group_id) { - this.FB_group_id = FB_group_id; -} -public Long getFB_menu_id() { - return FB_menu_id; -} -public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; -} -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationshipResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationshipResponsity.java deleted file mode 100644 index f85f675..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_relationshipResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; - -import com.ffii.core.support.AbstractRepository; - -public interface fb_group_relationshipResponsity extends AbstractRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_control.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_control.java deleted file mode 100644 index 6b342a7..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_control.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "fb_group_show_control") -//@AttributeOverride(name = "id", column = @Column(name = "FB_group_id")) -//@AttributeOverride(name = "id", column = @Column(name = "FB_menu_id")) -public class fb_group_show_control extends BaseEntity { -@Column(name="id") -private Long id; - -@Column(name="Fb_brand_id") -private Long Fb_brand_id; - -@Column(name="FB_group_id") -private Long FB_group_id; -@Column(name="show_table") -private Boolean show_table; - -public Long getFb_brand_id() { - return Fb_brand_id; -} -public void setFb_brand_id(Long Fb_brand_id) { - this.Fb_brand_id = Fb_brand_id; -} -public Long getFB_group_id() { - return FB_group_id; -} -public void setFB_group_id(Long FB_group_id) { - this.FB_group_id = FB_group_id; -} - -public Boolean getShow_table() { - return show_table; -} -public void setShow_table(Boolean show_table) { - this.show_table = show_table; -} -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_controlResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_controlResponsity.java deleted file mode 100644 index 05ed6f4..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_group_show_controlResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; - -import com.ffii.core.support.AbstractRepository; - -public interface fb_group_show_controlResponsity extends AbstractRepository { - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu.java deleted file mode 100644 index 67fa639..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; -import java.math.BigDecimal; -import com.fasterxml.jackson.annotation.JsonProperty; -/** @author Terence */ -@Entity -@Table(name = "fb_menu") - -public class fb_menu extends BaseEntity { - - @Column(name = "id") - private Long id; - - @Column - @JsonProperty("Menu_Item_Description") - private String Menu_Item_Description; - @Column - @JsonProperty("Category") - private String category; - @Column - @JsonProperty("Price") - private Double price; - @Column - @JsonProperty("Is_Vegan") - private Boolean is_vegan; - @Column - @JsonProperty("Is_Vegetarian") - private Boolean is_vegetarian; - @Column - @JsonProperty("Is_Gluten_Free") - private Boolean is_gluten_free; - @Column - @JsonProperty("Is_Spicy") - private Boolean is_spicy; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public String getMenu_Item_Description() { - return Menu_Item_Description; - } - public void setMenu_Item_Description(String Menu_Item_Description) { - this.Menu_Item_Description = Menu_Item_Description; - } - public String getCategory() { - return category; - } - public void setCategory(String category) { - this.category = category; - } - public Double getPrice() { - return price; - } - public void setPrice(Double price) { - this.price = price; - } - public Boolean getIs_vegan() { - return is_vegan; - } - public void setIs_vegan(Boolean is_vegan) { - this.is_vegan = is_vegan; - } - public Boolean getIs_vegetarian() { - return is_vegetarian; - } - public void setIs_vegetarian(Boolean is_vegetarian) { - this.is_vegetarian = is_vegetarian; - } - public Boolean getIs_gluten_free() { - return is_gluten_free; - } - public void setIs_gluten_free(Boolean is_gluten_free) { - this.is_gluten_free = is_gluten_free; - } - public Boolean getIs_spicy() { - return is_spicy; - } - public void setIs_spicy(Boolean is_spicy) { - this.is_spicy = is_spicy; - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menuResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menuResponsity.java deleted file mode 100644 index 3a95ae0..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menuResponsity.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.support.AbstractRepository; - -public interface fb_menuResponsity extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationship.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationship.java deleted file mode 100644 index ece43b8..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationship.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import com.ffii.core.entity.BaseEntity; - -/** @author Terence */ -@Entity -@Table(name = "fb_menu_and_outlet_relationship") -public class fb_menu_and_outlet_relationship extends BaseEntity { - @Column - private Long id; - @Column - private Long FB_id; - @Column - private Long FB_outlet_id; - @Column - private Long FB_menu_id; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getFB_id() { - return FB_id; - } - - public void setFB_id(Long FB_id) { - this.FB_id = FB_id; - } - - public Long getFB_outlet_id() { - return FB_outlet_id; - } - - public void setFB_outlet_id(Long FB_outlet_id) { - this.FB_outlet_id = FB_outlet_id; - } - - public Long getFB_menu_id() { - return FB_menu_id; - } - - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationshipResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationshipResponsity.java deleted file mode 100644 index eac9d7b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_and_outlet_relationshipResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.support.AbstractRepository; - -public interface fb_menu_and_outlet_relationshipResponsity extends AbstractRepository { - -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredient.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredient.java deleted file mode 100644 index f66faea..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredient.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** @author Terence */ -@Entity -@Table(name = "fb_menu_item_ingredient") -public class fb_menu_item_ingredient extends BaseEntity { - @Column - private Long id; - @Column - private Long FB_menu_id; - @Column - private Long Ingredient_id; - @Column - private Long Ingredient_volume; - @Column - private String Ingredient_volume_unit; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getFB_menu_id() { - return FB_menu_id; - } - - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - - public Long getIngredient_id() { - return Ingredient_id; - } - - public Long getIngredient_volume() { - return Ingredient_volume; - } - - public void setIngredient_volume(Long Ingredient_volume) { - this.Ingredient_volume = Ingredient_volume; - } - - public String getIngredient_volume_unit() { - return Ingredient_volume_unit; - } - - public void setIngredient_volume_unit(String Ingredient_volume_unit) { - this.Ingredient_volume_unit = Ingredient_volume_unit; - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredientResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredientResponsity.java deleted file mode 100644 index 3c9735e..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_ingredientResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; - -import com.ffii.core.support.AbstractRepository; - -public interface fb_menu_item_ingredientResponsity extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutrition.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutrition.java deleted file mode 100644 index 388587a..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutrition.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import java.math.BigDecimal; -import com.ffii.core.entity.BaseEntity; -import java.time.LocalDateTime; -/** @author Terence */ -@Entity -@Table(name = "fb_menu_item_nutrition") -public class fb_menu_item_nutrition extends BaseEntity { - @Column - private Long id; - - @Column(name = "FB_menu_id") - private Long FB_menu_id; - - @Column(name = "Calories") - private BigDecimal Calories; - - @Column(name = "Protein") - private BigDecimal Protein; - - @Column(name = "Fat") - private BigDecimal Fat; - - @Column(name = "Carbohydrate") - private BigDecimal Carbohydrate; - - @Column(name = "Sodium") - private BigDecimal Sodium; - - @Column(name = "Calcium") - private BigDecimal Calcium; - - @Column(name = "Phosphorus") - private BigDecimal Phosphorus; - - @Column(name = "Iron") - private BigDecimal Iron; - - @Column(name = "Potassium") - private BigDecimal Potassium; - - @Column(name = "VitaminA") - private BigDecimal VitaminA; - - @Column(name = "VitaminB1") - private BigDecimal VitaminB1; - - @Column(name = "VitaminB2") - private BigDecimal VitaminB2; - - @Column(name = "Niacin") - private BigDecimal Niacin; - - @Column(name = "VitaminC") - private BigDecimal VitaminC; - - @Column(name = "Nutrient_Volume") - private BigDecimal Nutrient_Volume; - - @Column(name = "Nutrient_Volume_Unit") - private String Nutrient_Volume_Unit; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getFB_menu_id() { - return FB_menu_id; - } - - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - - public BigDecimal getCalories() { - return Calories; - } - - public void setCalories(BigDecimal Calories) { - this.Calories = Calories; - } - - public BigDecimal getProtein() { - return Protein; - } - - public void setProtein(BigDecimal Protein) { - this.Protein = Protein; - } - - public BigDecimal getCarbs() { - return Carbohydrate; - } - - public void setCarbs(BigDecimal Carbohydrate) { - this.Carbohydrate = Carbohydrate; - } - - public BigDecimal getFat() { - return Fat; - } - - public void setFat(BigDecimal Fat) { - this.Fat = Fat; - } - - public BigDecimal getSodium() { - return Sodium; - } - - public void setSodium(BigDecimal Sodium) { - this.Sodium = Sodium; - } - - public BigDecimal getCalcium() { - return Calcium; - } - - public void setCalcium(BigDecimal Calcium) { - this.Calcium = Calcium; - } - - public BigDecimal getIron() { - return Iron; - } - - public void setIron(BigDecimal Iron) { - this.Iron = Iron; - } - - public BigDecimal getPotassium() { - return Potassium; - } - - public void setPotassium(BigDecimal Potassium) { - this.Potassium = Potassium; - } - - public BigDecimal getVitaminA() { - return VitaminA; - } - - public void setVitaminA(BigDecimal VitaminA) { - this.VitaminA = VitaminA; - } - - public BigDecimal getVitaminB1() { - return VitaminB1; - } - - public void setVitaminB1(BigDecimal VitaminB1) { - this.VitaminB1 = VitaminB1; - } - - public BigDecimal getVitaminB2() { - return VitaminB2; - } - - public void setVitaminB2(BigDecimal VitaminB2) { - this.VitaminB2 = VitaminB2; - } - - public BigDecimal getNiacin() { - return Niacin; - } - - public void setNiacin(BigDecimal Niacin) { - this.Niacin = Niacin; - } - - public BigDecimal getVitaminC() { - return VitaminC; - } - - public void setVitaminC(BigDecimal VitaminC) { - this.VitaminC = VitaminC; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutritionResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutritionResponsity.java deleted file mode 100644 index 710a739..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/fb_menu_item_nutritionResponsity.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.support.AbstractRepository; - -public interface fb_menu_item_nutritionResponsity extends AbstractRepository { - -} - \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredient.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredient.java deleted file mode 100644 index 4102a97..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredient.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "ingredient") -@AttributeOverride(name = "id", column = @Column(name = "Ingredient_id")) -//@AttributeOverride(name = "id", column = @Column(name = "FB_menu_id")) -public class ingredient extends BaseEntity { - - @Column(name = "Ingredient_id", insertable = false, updatable = false) - private Long Ingredient_id; - - @Column(name = "Ingredient_Name") - private String Ingredient_Name; - - @Column(name = "Allergy_Substance_ID") - private Long Allergy_Substance_ID; - - public void setIngredient_id(Long Ingredient_id) { - this.Ingredient_id = Ingredient_id; - } - public Long getIngredient_id() { - return Ingredient_id; - } - - public void setIngredient_Name(String Ingredient_Name) { - this.Ingredient_Name = Ingredient_Name; - } - public String getIngredient_Name() { - return Ingredient_Name; - } - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredientResponsity.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredientResponsity.java deleted file mode 100644 index 6911502..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/enity/ingredientResponsity.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.enity; -import com.ffii.core.support.AbstractRepository; - -public interface ingredientResponsity extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ deleted file mode 100644 index 6c50f02..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/.LCKfb_menuResponsity.java~ +++ /dev/null @@ -1 +0,0 @@ -C:\workspace\FHSMS-C-backend\src\main\java\com\ffii\fhsmsc\modules\Menu\req\fb_menuResponsity.java \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/FbMenuItemNutrientReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/FbMenuItemNutrientReq.java deleted file mode 100644 index aea63b9..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/FbMenuItemNutrientReq.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; -import java.math.BigDecimal; -import java.time.LocalDateTime; -public class FbMenuItemNutrientReq { - private Long id; - private Long FB_menu_id; - private BigDecimal Calories; - private BigDecimal Protein; - private BigDecimal Fat; - private BigDecimal Carbohydrate; - private BigDecimal Sodium; - private BigDecimal Calcium; - private BigDecimal Phosphorus; - private BigDecimal Iron; - private BigDecimal Potassium; - private BigDecimal VitaminA; - private BigDecimal VitaminB1; - private BigDecimal VitaminB2; - private BigDecimal Niacin; - private BigDecimal VitaminC; - private BigDecimal Nutrient_Volume; - private String Nutrient_Volume_Unit; - private LocalDateTime createdAt; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_menu_id() { - return FB_menu_id; - } - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - public BigDecimal getCalories() { - return Calories; - } - public void setCalories(BigDecimal Calories) { - this.Calories = Calories; - } - public BigDecimal getProtein() { - return Protein; - } - public void setProtein(BigDecimal Protein) { - this.Protein = Protein; - } - public BigDecimal getFat() { - return Fat; - } - public void setFat(BigDecimal Fat) { - this.Fat = Fat; - } - public BigDecimal getCarbohydrate() { - return Carbohydrate; - } - public void setCarbohydrate(BigDecimal Carbohydrate) { - this.Carbohydrate = Carbohydrate; - } - public BigDecimal getSodium() { - return Sodium; - } - public void setSodium(BigDecimal Sodium) { - this.Sodium = Sodium; - } - public BigDecimal getCalcium() { - return Calcium; - } - public void setCalcium(BigDecimal Calcium) { - this.Calcium = Calcium; - } - public BigDecimal getPhosphorus() { - return Phosphorus; - } - public void setPhosphorus(BigDecimal Phosphorus) { - this.Phosphorus = Phosphorus; - } - public BigDecimal getIron() { - return Iron; - } - public void setIron(BigDecimal Iron) { - this.Iron = Iron; - } - public BigDecimal getPotassium() { - return Potassium; - } - public void setPotassium(BigDecimal Potassium) { - this.Potassium = Potassium; - } - public BigDecimal getVitaminA() { - return VitaminA; - } - public void setVitaminA(BigDecimal VitaminA) { - this.VitaminA = VitaminA; - } - public BigDecimal getVitaminB1() { - return VitaminB1; - } - public void setVitaminB1(BigDecimal VitaminB1) { - this.VitaminB1 = VitaminB1; - } - public BigDecimal getVitaminB2() { - return VitaminB2; - } - public void setVitaminB2(BigDecimal VitaminB2) { - this.VitaminB2 = VitaminB2; - } - public BigDecimal getNiacin() { - return Niacin; - } - public void setNiacin(BigDecimal Niacin) { - this.Niacin = Niacin; - } - public BigDecimal getVitaminC() { - return VitaminC; - } - public void setVitaminC(BigDecimal VitaminC) { - this.VitaminC = VitaminC; - } - public BigDecimal getNutrient_Volume() { - return Nutrient_Volume; - } - public void setNutrient_Volume(BigDecimal Nutrient_Volume) { - this.Nutrient_Volume = Nutrient_Volume; - } - public String getNutrient_Volume_Unit() { - return Nutrient_Volume_Unit; - } - public void setNutrient_Volume_Unit(String Nutrient_Volume_Unit) { - this.Nutrient_Volume_Unit = Nutrient_Volume_Unit; - } - public LocalDateTime getCreatedAt() { - return createdAt; - } - public void setCreatedAt(LocalDateTime createdAt) { - this.createdAt = createdAt; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_groupReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_groupReq.java deleted file mode 100644 index bb82f7e..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_groupReq.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; -import com.fasterxml.jackson.annotation.JsonProperty; -public class fb_groupReq { - @JsonProperty("id") - private Long id; - @JsonProperty("FB_brand_id") - private Long FB_brand_id; - @JsonProperty("FB_group_Name") - private String FB_group_Name; - @JsonProperty("FB_group_Name_en") - private String FB_group_Name_en; - @JsonProperty("FB_group_Name_zh") - private String FB_group_Name_zh; - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_brand_id() { - return FB_brand_id; - } - public void setFB_brand_id(Long FB_brand_id) { - this.FB_brand_id = FB_brand_id; - } - public String getFB_group_Name() { - return FB_group_Name; - } - public void setFB_group_Name(String FB_group_Name) { - this.FB_group_Name = FB_group_Name; - } - public String getFB_group_Name_en() { - return FB_group_Name_en; - } - public void setFB_group_Name_en(String FB_group_Name_en) { - this.FB_group_Name_en = FB_group_Name_en; - } - public String getFB_group_Name_zh() { - return FB_group_Name_zh; - } - public void setFB_group_Name_zh(String FB_group_Name_zh) { - this.FB_group_Name_zh = FB_group_Name_zh; - } - - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_relationshipReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_relationshipReq.java deleted file mode 100644 index f8829c1..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_relationshipReq.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class fb_group_relationshipReq { - private Long id; - @JsonProperty("Fb_brand_id") - private Long Fb_brand_id; - @JsonProperty("FB_group_id") - private Long FB_group_id; - @JsonProperty("FB_menu_id") - private Long FB_menu_id; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFb_brand_id() { - return Fb_brand_id; - } - public void setFb_brand_id(Long Fb_brand_id) { - this.Fb_brand_id = Fb_brand_id; - } - public Long getFB_group_id() { - return FB_group_id; - } - public void setFB_group_id(Long FB_group_id) { - this.FB_group_id = FB_group_id; - } - public Long getFB_menu_id() { - return FB_menu_id; - } - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_show_controlReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_show_controlReq.java deleted file mode 100644 index 846df64..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_group_show_controlReq.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; -import com.fasterxml.jackson.annotation.JsonProperty; -public class fb_group_show_controlReq { - private Long id; - @JsonProperty("FB_group_id") - private Long FB_group_id; - @JsonProperty("FB_brand_id") - private Long FB_brand_id; - @JsonProperty("show_table") - private Boolean show_table; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_group_id() { - return FB_group_id; - } - public void setFB_group_id(Long FB_group_id) { - this.FB_group_id = FB_group_id; - } - public Long getFB_brand_id() { - return FB_brand_id; - } - public void setFB_brand_id(Long FB_brand_id) { - this.FB_brand_id = FB_brand_id; - } - public Boolean getShow_table() { - return show_table; - } - public void setShow_table(Boolean show_table) { - this.show_table = show_table; - } - - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menuReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menuReq.java deleted file mode 100644 index 1d205dc..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menuReq.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; - -import com.fasterxml.jackson.annotation.JsonProperty; -public class fb_menuReq { - @JsonProperty("id") - private Long id; - @JsonProperty("Menu_Item_Description") - private String Menu_Item_Description; - @JsonProperty("category") - private String category; - @JsonProperty("category_en") - private String category_en; - @JsonProperty("category_zh") - private String category_zh; - @JsonProperty("price") - private Double price; - @JsonProperty("is_vegan") - private Boolean is_vegan; - @JsonProperty("is_vegetarian") - private Boolean is_vegetarian; - @JsonProperty("is_gluten_free") - private Boolean is_gluten_free; - @JsonProperty("is_spicy") - private Boolean is_spicy; - @JsonProperty("Menu_Item_Description_en") - private String Menu_Item_Description_en; - @JsonProperty("Menu_Item_Description_zh") - private String Menu_Item_Description_zh; - @JsonProperty("userId") - private Long userId; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public String getMenu_Item_Description() { - return Menu_Item_Description; - } - public void setMenu_Item_Description(String Menu_Item_Description) { - this.Menu_Item_Description = Menu_Item_Description; - } - public String getCategory() { - return category; - } - public void setCategory(String category) { - this.category = category; - } - public String getCategory_en() { - return category_en; - } - public void setCategory_en(String category_en) { - this.category_en = category_en; - } - public String getCategory_zh() { - return category_zh; - } - public void setCategory_zh(String category_zh) { - this.category_zh = category_zh; - } - public Double getPrice() { - return price; - } - public void setPrice(Double price) { - this.price = price; - } - public Boolean getIs_vegan() { - return is_vegan; - } - public void setIs_vegan(Boolean is_vegan) { - this.is_vegan = is_vegan; - } - public Boolean getIs_vegetarian() { - return is_vegetarian; - } - public void setIs_vegetarian(Boolean is_vegetarian) { - this.is_vegetarian = is_vegetarian; - } - public Boolean getIs_gluten_free() { - return is_gluten_free; - } - public void setIs_gluten_free(Boolean is_gluten_free) { - this.is_gluten_free = is_gluten_free; - } - public Boolean getIs_spicy() { - return is_spicy; - } - public void setIs_spicy(Boolean is_spicy) { - this.is_spicy = is_spicy; - } - public String getMenu_Item_Description_en() { - return Menu_Item_Description_en; - } - public void setMenu_Item_Description_en(String Menu_Item_Description_en) { - this.Menu_Item_Description_en = Menu_Item_Description_en; - } - public String getMenu_Item_Description_zh() { - return Menu_Item_Description_zh; - } - public void setMenu_Item_Description_zh(String Menu_Item_Description_zh) { - this.Menu_Item_Description_zh = Menu_Item_Description_zh; - } - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_and_outlet_relationshipReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_and_outlet_relationshipReq.java deleted file mode 100644 index f47644a..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_and_outlet_relationshipReq.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; - -public class fb_menu_and_outlet_relationshipReq { - private Long id; - private Long FB_menu_id; - private Long Outlet_id; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_menu_id() { - return FB_menu_id; - } - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - public Long getOutlet_id() { - return Outlet_id; - } - public void setOutlet_id(Long Outlet_id) { - this.Outlet_id = Outlet_id; - } - - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_item_ingredientReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_item_ingredientReq.java deleted file mode 100644 index b6e406c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/fb_menu_item_ingredientReq.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; -import java.math.BigDecimal; -public class fb_menu_item_ingredientReq { - private Long id; - private Long FB_menu_id; - private Long Ingredient_id; - private BigDecimal Ingredient_Volume; - private String Ingredient_Volume_Unit; - - public Long getId() { - return id; - } - public void setId(Long id) { - this.id = id; - } - public Long getFB_menu_id() { - return FB_menu_id; - } - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - public Long getIngredient_id() { - return Ingredient_id; - } - public void setIngredient_id(Long Ingredient_id) { - this.Ingredient_id = Ingredient_id; - } - public BigDecimal getIngredient_Volume() { - return Ingredient_Volume; - } - public void setIngredient_Volume(BigDecimal Ingredient_Volume) { - this.Ingredient_Volume = Ingredient_Volume; - } - public String getIngredient_Volume_Unit() { - return Ingredient_Volume_Unit; - } - public void setIngredient_Volume_Unit(String Ingredient_Volume_Unit) { - this.Ingredient_Volume_Unit = Ingredient_Volume_Unit; - } - - - - - - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/ingredientReq.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/req/ingredientReq.java deleted file mode 100644 index 43b8309..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/req/ingredientReq.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.req; - -import com.fasterxml.jackson.annotation.JsonProperty; -public class ingredientReq { - @JsonProperty("Ingredient_id") - private Long Ingredient_id; - @JsonProperty("Ingredient_Name") - private String Ingredient_Name; - @JsonProperty("Ingredient_Name_en") - private String Ingredient_Name_en; - @JsonProperty("Ingredient_Name_zh") - private String Ingredient_Name_zh; - @JsonProperty("Allergy_Substance_ID") - private Long Allergy_Substance_ID; - public Long getIngredient_id() { - return Ingredient_id; - } - public void setIngredient_id(Long Ingredient_id) { - this.Ingredient_id = Ingredient_id; - } - public String getIngredient_Name() { - return Ingredient_Name; - } - public void setIngredient_Name(String Ingredient_Name) { - this.Ingredient_Name = Ingredient_Name; - } - public String getIngredient_Name_en() { - return Ingredient_Name_en; - } - public void setIngredient_Name_en(String Ingredient_Name_en) { - this.Ingredient_Name_en = Ingredient_Name_en; - } - public String getIngredient_Name_zh() { - return Ingredient_Name_zh; - } - public void setIngredient_Name_zh(String Ingredient_Name_zh) { - this.Ingredient_Name_zh = Ingredient_Name_zh; - } - public Long getAllergy_Substance_ID() { - return Allergy_Substance_ID; - } - public void setAllergy_Substance_ID(Long Allergy_Substance_ID) { - this.Allergy_Substance_ID = Allergy_Substance_ID; - } - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/FbMenuCombineService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/FbMenuCombineService.java deleted file mode 100644 index 5490252..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/FbMenuCombineService.java +++ /dev/null @@ -1,1225 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import com.ffii.fhsmsc.modules.Menu.req.fb_menu_item_ingredientReq; -@Service -public class FbMenuCombineService { - - private final JdbcDao jdbcDao; - private final fb_menuService menuService; - private final fb_menu_item_nutritionService nutritionService; - private final fb_menu_item_ingredientService ingredientService; - private final fb_menu_and_outlet_relationshipService relationshipService; - private final i18nService i18nService; - private static final Logger logger = LoggerFactory.getLogger(FbMenuCombineService.class); - @Autowired - public FbMenuCombineService( - JdbcDao jdbcDao, - fb_menuService menuService, - fb_menu_item_nutritionService nutritionService, - fb_menu_item_ingredientService ingredientService, - fb_menu_and_outlet_relationshipService relationshipService, - i18nService i18nService) { - this.jdbcDao = jdbcDao; - this.menuService = menuService; - this.nutritionService = nutritionService; - this.ingredientService = ingredientService; - this.relationshipService = relationshipService; - this.i18nService = i18nService; - } - - /** - * 获取完整的菜单信息,包括营养和配料 - */ - public Map getCompleteMenu(Long menuId) { - Map result = new HashMap<>(); - Map params = new HashMap<>(); - params.put("menuId", menuId); - - // 主表查询 - StringBuilder sql = new StringBuilder( - "SELECT m.*, " + - "i_en.value as en_description, " + - "i_zh.value as zh_description " + - "FROM fb_menu m " + - "LEFT JOIN i18n i_en ON m.id = i_en.record_id " + - "AND i_en.table_name = 'fb_menu' " + - "AND i_en.field_name = 'Menu_Item_Description' " + - "AND i_en.language = 'en' " + - "LEFT JOIN i18n i_zh ON m.id = i_zh.record_id " + - "AND i_zh.table_name = 'fb_menu' " + - "AND i_zh.field_name = 'Menu_Item_Description' " + - "AND i_zh.language = 'zh' " + - "WHERE m.id = :menuId"); // 这里改了 - - List> menuInfo = jdbcDao.queryForList(sql.toString(), params); - - if (menuInfo.isEmpty()) { - return null; - } - - // 基本菜单信息 - result.put("menu", menuInfo.get(0)); - - // 获取营养信息 - StringBuilder nutritionSql = new StringBuilder( - "SELECT * FROM fb_menu_item_nutrition WHERE FB_menu_id = :menuId"); // 这里改了 - List> nutritionData = jdbcDao.queryForList(nutritionSql.toString(), params); - result.put("nutritions", nutritionData); - - // 获取配料信息 - StringBuilder ingredientSql = new StringBuilder( - "SELECT i.*, ing.Ingredient_Name " + - "FROM fb_menu_item_ingredient i " + - "LEFT JOIN Ingredient ing ON i.ingredient_id = ing.Ingredient_id " + - "WHERE i.FB_menu_id = :menuId"); // 这里改了 - List> ingredientData = jdbcDao.queryForList(ingredientSql.toString(), params); - result.put("ingredients", ingredientData); - - return result; - } - /** - * 获取特定门店的所有菜单 - */ - public List> getOutletMenus(Long outletId) { - List> result = new ArrayList<>(); - - // 查询该门店关联的所有菜单ID - StringBuilder sql = new StringBuilder( - "SELECT FB_menu_id FROM fb_menu_and_outlet_relationship " + - "WHERE FB_outlet_id = :outletId"); - - Map args = new HashMap<>(); - args.put("outletId", outletId); - List> menuIds = jdbcDao.queryForList(sql.toString(), args); - - // 为每个菜单获取完整信息 - for (Map item : menuIds) { - Long menuId = ((Number) item.get("FB_menu_id")).longValue(); - Map completeMenu = getCompleteMenu(menuId); - if (completeMenu != null) { - result.add(completeMenu); - } - } - - return result; - } - - /** - * 一次性查询获取多个菜单的完整信息(更高效) - */ - public List> getBatchMenus(List menuIds) { - if (menuIds == null || menuIds.isEmpty()) { - return new ArrayList<>(); - } - - List> result = new ArrayList<>(); - - // 一次性查询所有菜单基本信息 - StringBuilder menuSql = new StringBuilder( - "SELECT * FROM fb_menu WHERE id IN (:menuIds)"); - Map args = new HashMap<>(); - args.put("menuIds", menuIds); - List> menus = menuService.search(args); - - // 一次性查询所有营养信息 - StringBuilder nutritionSql = new StringBuilder( - "SELECT * FROM fb_menu_item_nutrition WHERE FB_menu_id IN (:menuIds)"); - List> allNutritions = nutritionService.search(args); - - // 一次性查询所有配料信息 - StringBuilder ingredientSql = new StringBuilder( - "SELECT i.*, ing.Ingredient_Name " + - "FROM fb_menu_item_ingredient i " + - "LEFT JOIN Ingredient ing ON i.ingredient_id = ing.Ingredient_id " + - "WHERE i.FB_menu_id IN (:menuIds)"); - List> allIngredients = ingredientService.search(args); - - // 为每个菜单组装数据 - for (Map menu : menus) { - Long menuId = ((Number) menu.get("FB_menu_id")).longValue(); - Map completeMenu = new HashMap<>(); - completeMenu.put("menu", menu); - - // 过滤出当前菜单的营养信息 - List> menuNutritions = allNutritions.stream() - .filter(n -> menuId.equals(((Number) n.get("FB_menu_id")).longValue())) - .toList(); - completeMenu.put("nutritions", menuNutritions); - - // 过滤出当前菜单的配料信息 - List> menuIngredients = allIngredients.stream() - .filter(i -> menuId.equals(((Number) i.get("FB_menu_id")).longValue())) - .toList(); - completeMenu.put("ingredients", menuIngredients); - - result.add(completeMenu); - } - - return result; - } - - /** - * 保存完整的菜单信息,包括营养、配料和国际化信息 - */ - public void saveCompleteMenu(Map menuData) { - // 1. 保存菜单基本信息 - Map menu = (Map) menuData.get("menu"); - Long menuId = menu.get("FB_menu_id") != null ? ((Number) menu.get("FB_menu_id")).longValue() : null; - Long fbId = ((Number) menu.get("FB_id")).longValue(); - - // 检查菜单是否已存在 - StringBuilder checkSql = new StringBuilder( - "SELECT COUNT(*) FROM fb_menu WHERE FB_menu_id = :menuId"); - Map checkParams = new HashMap<>(); - checkParams.put("menuId", menuId); - int count = menuId != null ? jdbcDao.queryForInt(checkSql.toString(), checkParams) : 0; - - // 如果menuId为空,生成一个新的ID - if (menuId == null) { - StringBuilder maxIdSql = new StringBuilder("SELECT COALESCE(MAX(FB_menu_id), 0) AS max_id FROM fb_menu"); - List> result = jdbcDao.queryForList(maxIdSql.toString(), new HashMap<>()); - Long maxId = 0L; - if (!result.isEmpty()) { - Object maxIdObj = result.get(0).get("max_id"); - maxId = maxIdObj != null ? ((Number) maxIdObj).longValue() : 0L; - } - menuId = maxId + 1; - menu.put("FB_menu_id", menuId); - } - - // 根据是否存在决定是插入还是更新 - StringBuilder menuSql; - if (count == 0) { - menuSql = new StringBuilder( - "INSERT INTO fb_menu (FB_id, FB_menu_id, Menu_Item_Description) " + - "VALUES (:fbId, :menuId, :description)"); - } else { - menuSql = new StringBuilder( - "UPDATE fb_menu SET FB_id = :fbId, Menu_Item_Description = :description " + - "WHERE FB_menu_id = :menuId"); - } - - Map menuParams = new HashMap<>(); - menuParams.put("fbId", fbId); - menuParams.put("menuId", menuId); - menuParams.put("description", menu.get("Menu_Item_Description")); - jdbcDao.executeUpdate(menuSql.toString(), menuParams); - - // 2. 保存国际化信息 - i18nReq enReq = new i18nReq(); - enReq.setTable_name("fb_menu"); - enReq.setRecord_id(menuId); - enReq.setField_name("Menu_Item_Description"); - enReq.setLanguage("en"); - enReq.setValue((String) menu.get("en_description")); - i18nService.saveOrUpdate(enReq); - - i18nReq zhReq = new i18nReq(); - zhReq.setTable_name("fb_menu"); - zhReq.setRecord_id(menuId); - zhReq.setField_name("Menu_Item_Description"); - zhReq.setLanguage("zh"); - zhReq.setValue((String) menu.get("zh_description")); - i18nService.saveOrUpdate(zhReq); - - // 3. 保存配料信息 - StringBuilder deleteIngredientsSql = new StringBuilder( - "DELETE FROM fb_menu_item_ingredient WHERE FB_menu_id = :menuId"); - jdbcDao.executeUpdate(deleteIngredientsSql.toString(), checkParams); - - List> ingredients = (List>) menuData.get("ingredients"); - if (ingredients != null) { - for (Map ingredient : ingredients) { - Long ingredientId = ingredient.get("Ingredient_id") != null ? ((Number) ingredient.get("Ingredient_id")).longValue() : null; - - // Check if Ingredient_id is missing or out of range for a 32-bit INT - if (ingredientId == null || ingredientId > Integer.MAX_VALUE || ingredientId < Integer.MIN_VALUE) { - // Generate a new ingredient ID - StringBuilder maxIngredientIdSql = new StringBuilder("SELECT COALESCE(MAX(Ingredient_id), 0) AS max_id FROM Ingredient"); - List> ingredientResult = jdbcDao.queryForList(maxIngredientIdSql.toString(), new HashMap<>()); - Long maxIngredientId = 0L; - if (!ingredientResult.isEmpty()) { - Object maxIdObj = ingredientResult.get(0).get("max_id"); - maxIngredientId = maxIdObj != null ? ((Number) maxIdObj).longValue() : 0L; - } - ingredientId = maxIngredientId + 1; - - // Insert new ingredient into Ingredient table - StringBuilder insertIngredientSql = new StringBuilder( - "INSERT INTO Ingredient (Ingredient_id, Ingredient_Name) VALUES (:id, :name)"); - Map ingredientParams = new HashMap<>(); - ingredientParams.put("id", ingredientId); - ingredientParams.put("name", ingredient.get("Ingredient_Name")); - jdbcDao.executeUpdate(insertIngredientSql.toString(), ingredientParams); - } - - fb_menu_item_ingredientReq ingredientReq = new fb_menu_item_ingredientReq(); - if (menuData.get("FB_menu_id") != null) { - ingredientReq.setId(menuId); // 设置ID以更新现有记录 - } - ingredientReq.setFB_menu_id(menuId); - ingredientReq.setIngredient_id(((Number) ingredient.get("Ingredient_id")).longValue()); - ingredientReq.setIngredient_Volume(ingredient.get("Ingredient_Volume") != null ? - new BigDecimal(ingredient.get("Ingredient_Volume").toString()) : null); - ingredientReq.setIngredient_Volume_Unit((String) ingredient.get("Ingredient_Volume_Unit")); - /* - if (ingredient.get("Allergy_Substance_ID") != null) { - ingredientReq.setAllergy_Substance_ID(Long.valueOf(((Number) ingredient.get("Allergy_Substance_ID")).longValue())); - } - */ - ingredientService.saveOrUpdate(ingredientReq); - - // 保存配料名称的国际化信息 - i18nReq enIngredientReq = new i18nReq(); - enIngredientReq.setTable_name("Ingredient"); - enIngredientReq.setRecord_id(ingredientId); - enIngredientReq.setField_name("Ingredient_Name"); - enIngredientReq.setLanguage("en"); - enIngredientReq.setValue((String) ingredient.get("en_Ingredient_Name")); - i18nService.saveOrUpdate(enIngredientReq); - - i18nReq zhIngredientReq = new i18nReq(); - zhIngredientReq.setTable_name("Ingredient"); - zhIngredientReq.setRecord_id(ingredientId); - zhIngredientReq.setField_name("Ingredient_Name"); - zhIngredientReq.setLanguage("zh"); - zhIngredientReq.setValue((String) ingredient.get("zh_Ingredient_Name")); - i18nService.saveOrUpdate(zhIngredientReq); - } - } - - // 4. 保存营养信息 - StringBuilder deleteNutritionSql = new StringBuilder( - "DELETE FROM fb_menu_item_nutrition WHERE FB_menu_id = :menuId"); - jdbcDao.executeUpdate(deleteNutritionSql.toString(), checkParams); - - List> nutritions = (List>) menuData.get("nutritions"); - if (nutritions != null) { - for (Map nutrition : nutritions) { - StringBuilder nutritionSql = new StringBuilder( - "INSERT INTO fb_menu_item_nutrition " + - "(FB_menu_id, Calories, Protein, Fat, Carbohydrate, Sodium, Potassium, " + - "Calcium, Phosphorus, Iron, VitaminA, VitaminB1, VitaminB2, Niacin, " + - "VitaminC, Nutrient_Volume, Nutrient_Volume_Unit) " + - "VALUES (:menuId, :calories, :protein, :fat, :carbohydrate, :sodium, " + - ":potassium, :calcium, :phosphorus, :iron, :vitaminA, :vitaminB1, " + - ":vitaminB2, :niacin, :vitaminC, :volume, :unit)"); - - Map nutritionParams = new HashMap<>(); - nutritionParams.put("menuId", menuId); - nutritionParams.put("calories", nutrition.get("Calories")); - nutritionParams.put("protein", nutrition.get("Protein")); - nutritionParams.put("fat", nutrition.get("Fat")); - nutritionParams.put("carbohydrate", nutrition.get("Carbohydrate")); - nutritionParams.put("sodium", nutrition.get("Sodium")); - nutritionParams.put("potassium", nutrition.get("Potassium")); - nutritionParams.put("calcium", nutrition.get("Calcium")); - nutritionParams.put("phosphorus", nutrition.get("Phosphorus") != null ? nutrition.get("Phosphorus") : 0.0); - nutritionParams.put("iron", nutrition.get("Iron") != null ? nutrition.get("Iron") : 0.0); - nutritionParams.put("vitaminA", nutrition.get("VitaminA")); - nutritionParams.put("vitaminB1", nutrition.get("VitaminB1")); - nutritionParams.put("vitaminB2", nutrition.get("VitaminB2")); - nutritionParams.put("niacin", nutrition.get("Niacin")); - nutritionParams.put("vitaminC", nutrition.get("VitaminC")); - nutritionParams.put("volume", nutrition.get("Nutrient_Volume")); - nutritionParams.put("unit", nutrition.get("Nutrient_Volume_Unit")); - - jdbcDao.executeUpdate(nutritionSql.toString(), nutritionParams); - } - } - } - /** - * 获取特定FB_id的所有菜单项 - */ - public List> getFbMenus(Long fbId) { - List> result = new ArrayList<>(); - - // 1. 获取基本菜单信息和国际化描述,使用GROUP BY避免重复 - StringBuilder sql = new StringBuilder( - "SELECT m.*, " + - "MAX(CASE WHEN i.language = 'en' THEN i.value END) as en_description, " + - "MAX(CASE WHEN i.language = 'zh' THEN i.value END) as zh_description " + - "FROM fb_menu m " + - "LEFT JOIN i18n i ON m.FB_menu_id = i.record_id " + - "AND i.table_name = 'fb_menu' " + - "AND i.field_name = 'Menu_Item_Description' " + - "WHERE m.FB_id = :fbId " + - "GROUP BY m.FB_id, m.FB_menu_id, m.Menu_Item_Description, m.created_at"); - - Map params = new HashMap<>(); - params.put("fbId", fbId); - - List> menuItems = jdbcDao.queryForList(sql.toString(), params); - - if (menuItems.isEmpty()) { - return result; - } - - // 2. 获取所有相关的菜单ID - List menuIds = menuItems.stream() - .map(menu -> ((Number) menu.get("FB_menu_id")).longValue()) - .collect(Collectors.toList()); - - // 3. 获取营养成分信息 - StringBuilder nutritionSql = new StringBuilder( - "SELECT * FROM fb_menu_item_nutrition WHERE FB_menu_id IN (:menuIds)"); - Map batchParams = new HashMap<>(); - batchParams.put("menuIds", menuIds); - List> allNutritions = nutritionService.search(batchParams); - - // 4. 获取配料信息,使用GROUP BY避免重复 - StringBuilder ingredientSql = new StringBuilder( - "SELECT i.*, ing.Ingredient_Name, " + - "MAX(CASE WHEN i_en.language = 'en' THEN i_en.value END) as en_Ingredient_Name, " + - "MAX(CASE WHEN i_zh.language = 'zh' THEN i_zh.value END) as zh_Ingredient_Name " + - "FROM fb_menu_item_ingredient i " + - "LEFT JOIN Ingredient ing ON i.ingredient_id = ing.Ingredient_id " + - "LEFT JOIN i18n i_en ON i.ingredient_id = i_en.record_id " + - "AND i_en.table_name = 'Ingredient' " + - "AND i_en.field_name = 'Ingredient_Name' " + - "LEFT JOIN i18n i_zh ON i.ingredient_id = i_zh.record_id " + - "AND i_zh.table_name = 'Ingredient' " + - "AND i_zh.field_name = 'Ingredient_Name' " + - "WHERE i.FB_menu_id IN (:menuIds) " + - "GROUP BY i.id, i.FB_menu_id, i.Ingredient_id, i.Ingredient_Volume, " + - "i.Ingredient_Volume_Unit, i.Allergy_Substance_ID, i.created_at, " + - "ing.Ingredient_Name"); - - List> allIngredients = ingredientService.search(batchParams); - - // 5. 组装每个菜单项的完整信息 - for (Map menu : menuItems) { - Long menuId = ((Number) menu.get("FB_menu_id")).longValue(); - Map completeMenu = new HashMap<>(); - - completeMenu.put("menu", menu); - - // 添加营养成分信息 - List> menuNutritions = allNutritions.stream() - .filter(n -> menuId.equals(((Number) n.get("FB_menu_id")).longValue())) - .collect(Collectors.toList()); - completeMenu.put("nutritions", menuNutritions); - - // 添加配料信息 - List> menuIngredients = allIngredients.stream() - .filter(i -> menuId.equals(((Number) i.get("FB_menu_id")).longValue())) - .collect(Collectors.toList()); - completeMenu.put("ingredients", menuIngredients); - - result.add(completeMenu); - } - - return result; - } - - public List> getOperatorsWithOutletsAndMenus() { - List> result = new ArrayList<>(); - - // 1. 查询所有 operator - List> operators = jdbcDao.queryForList("SELECT * FROM fboperator WHERE deleted=0", new HashMap<>()); - Map> operatorMap = operators.stream().collect(Collectors.toMap( - m -> ((Number)m.get("id")).intValue(), - m -> m - )); - - // 2. 查询 operator 多语言 - Map operatorNameEnMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fboperator".equals(i.get("table_name")) && "FB_name".equals(i.get("field_name")) && "en".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - Map operatorNameZhMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fboperator".equals(i.get("table_name")) && "FB_name".equals(i.get("field_name")) && "zh".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - - // 3. 查询所有 brand - List> brands = jdbcDao.queryForList("SELECT * FROM fb_brand WHERE deleted=0", new HashMap<>()); - Map>> operatorIdToBrands = new HashMap<>(); - for (Map brand : brands) { - Integer operatorId = ((Number)brand.get("FB_operator_id")).intValue(); - operatorIdToBrands.computeIfAbsent(operatorId, k -> new ArrayList<>()).add(brand); - } - - // 4. 查询 brand 多语言 - Map brandNameEnMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fb_brand".equals(i.get("table_name")) && "FB_name".equals(i.get("field_name")) && "en".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - Map brandNameZhMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fb_brand".equals(i.get("table_name")) && "FB_name".equals(i.get("field_name")) && "zh".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - - // 5. 查询所有 outlet - List> outlets = jdbcDao.queryForList("SELECT * FROM fb_outlets WHERE deleted=0", new HashMap<>()); - Map>> brandIdToOutlets = new HashMap<>(); - for (Map outlet : outlets) { - Integer brandId = ((Number)outlet.get("FB_id")).intValue(); - brandIdToOutlets.computeIfAbsent(brandId, k -> new ArrayList<>()).add(outlet); - } - - // 6. 查询 outlet 多语言 - Map outletDistrictEnMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fb_outlets".equals(i.get("table_name")) && "FB_outlet_district".equals(i.get("field_name")) && "en".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - Map outletDistrictZhMap = i18nService.search(new HashMap<>()).stream() - .filter(i -> "fb_outlets".equals(i.get("table_name")) && "FB_outlet_district".equals(i.get("field_name")) && "zh".equals(i.get("language"))) - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).intValue(), - m -> (String)m.get("value") - )); - - // 7. 查询所有菜单-门店关系 - List> relationships = jdbcDao.queryForList("SELECT * FROM fb_menu_and_outlet_relationship", new HashMap<>()); - Map> outletIdToMenuIds = new HashMap<>(); - for (Map rel : relationships) { - Integer outletId = ((Number)rel.get("FB_outlet_id")).intValue(); - Integer menuId = ((Number)rel.get("FB_menu_id")).intValue(); - outletIdToMenuIds.computeIfAbsent(outletId, k -> new ArrayList<>()).add(menuId); - } - - // 8. 组装 - for (Map operator : operators) { - Map op = new LinkedHashMap<>(); - op.put("id", operator.get("id")); - op.put("FB_name_en", operatorNameEnMap.getOrDefault(operator.get("id"), "")); - op.put("FB_name_zh", operatorNameZhMap.getOrDefault(operator.get("id"), "")); - List> brandList = new ArrayList<>(); - List> brandsOfOp = operatorIdToBrands.get(operator.get("id")); - if (brandsOfOp != null) { - for (Map brand : brandsOfOp) { - Map br = new LinkedHashMap<>(); - br.put("id", brand.get("id")); - br.put("FB_operator_id", brand.get("FB_operator_id")); - br.put("FB_name_en", brandNameEnMap.getOrDefault(brand.get("id"), "")); - br.put("FB_name_zh", brandNameZhMap.getOrDefault(brand.get("id"), "")); - List> outletList = new ArrayList<>(); - List> outletsOfBrand = brandIdToOutlets.get(brand.get("id")); - if (outletsOfBrand != null) { - for (Map outlet : outletsOfBrand) { - Map out = new LinkedHashMap<>(); - out.put("id", outlet.get("id")); - out.put("FB_id", outlet.get("FB_id")); - out.put("FB_outlet_district_en", outletDistrictEnMap.getOrDefault(outlet.get("id"), "")); - out.put("FB_outlet_district_zh", outletDistrictZhMap.getOrDefault(outlet.get("id"), "")); - List> menuList = new ArrayList<>(); - List menuIds = outletIdToMenuIds.get(outlet.get("id")); - if (menuIds != null) { - for (Integer menuId : menuIds) { - Map m = new HashMap<>(); - m.put("FB_menu_id", menuId); - menuList.add(m); - } - } - out.put("menus", menuList); - outletList.add(out); - } - } - br.put("outlets", outletList); - brandList.add(br); - } - } - op.put("brands", brandList); - result.add(op); - } - return result; - } - - public void saveMenuOutletRelationshipsByBatch(Map data) { - Long fbId = data.get("FB_id") instanceof Number ? ((Number) data.get("FB_id")).longValue() : null; - if (fbId == null) throw new IllegalArgumentException("FB_id 不能为空"); - - List> outlets = (List>) data.get("outlets"); - if (outlets == null) throw new IllegalArgumentException("outlets 不能为空"); - - // 1. 删除该FB_id下所有现有关系 - jdbcDao.executeUpdate( - "DELETE FROM fb_menu_and_outlet_relationship WHERE FB_id = :fbId", - Map.of("fbId", fbId) - ); - - // 2. 批量插入新关系 - for (Map outlet : outlets) { - Object outletIdObj = outlet.get("FB_outlet_id"); - if (outletIdObj == null) { - throw new IllegalArgumentException("outlet缺少FB_outlet_id: " + outlet); - } - Long outletId = ((Number) outletIdObj).longValue(); - - List> menus = (List>) outlet.get("menus"); - if (menus == null) { - throw new IllegalArgumentException("outlet缺少menus: " + outlet); - } - for (Map menu : menus) { - Object menuIdObj = menu.get("FB_menu_id"); - if (menuIdObj == null) { - throw new IllegalArgumentException("menu缺少FB_menu_id: " + menu + " in outlet: " + outlet); - } - Long menuId = ((Number) menuIdObj).longValue(); - saveMenuOutletRelationship(menuId, outletId, fbId); - } - } - } - - /** - * 删除菜品和门店的关联 - */ - @Transactional(rollbackFor = Exception.class) - public void deleteMenuOutletRelationship(Long menuId, Long outletId) { - //logger.info("Deleting menu-outlet relationship: menuId={}, outletId={}", menuId, outletId); - - Map params = new HashMap<>(); - params.put("id", menuId); - params.put("outletId", outletId); - - String deleteSql = "DELETE FROM fb_menu_and_outlet_relationship " + - "WHERE id = :menuId AND FB_outlet_id = :outletId"; - - jdbcDao.executeUpdate(deleteSql, params); - //logger.info("Successfully deleted menu-outlet relationship"); - } - @Transactional(rollbackFor = Exception.class) - public void deleteMenu(Long menuId) { - //logger.info("Deleting menu and related data: menuId={}", menuId); - - Map params = new HashMap<>(); - params.put("menuId", menuId); - - try { - // 1. 删除菜品和门店的关联 - String deleteRelationshipSql = "DELETE FROM fb_menu_and_outlet_relationship " + - "WHERE FB_menu_id = :menuId"; - jdbcDao.executeUpdate(deleteRelationshipSql, params); - //logger.info("Deleted menu-outlet relationships"); - - // 2. 删除菜品的营养信息 - String deleteNutritionSql = "DELETE FROM fb_menu_item_nutrition " + - "WHERE FB_menu_id = :menuId"; - jdbcDao.executeUpdate(deleteNutritionSql, params); - //logger.info("Deleted menu nutrition data"); - - // 3. 删除菜品的配料信息 - String deleteIngredientSql = "DELETE FROM fb_menu_item_ingredient " + - "WHERE FB_menu_id = :menuId"; - jdbcDao.executeUpdate(deleteIngredientSql, params); - //logger.info("Deleted menu ingredient data"); - - // 4. 删除菜品的国际化信息 - String deleteI18nSql = "DELETE FROM i18n " + - "WHERE table_name = 'fb_menu' AND record_id = :menuId"; - jdbcDao.executeUpdate(deleteI18nSql, params); - //logger.info("Deleted menu i18n data"); - - // 5. 删除菜品本身 - String deleteMenuSql = "DELETE FROM fb_menu WHERE id = :menuId"; - jdbcDao.executeUpdate(deleteMenuSql, params); - //logger.info("Deleted menu"); - - } catch (Exception e) { - //logger.error("Error deleting menu: menuId={}", menuId, e); - throw new RuntimeException("Failed to delete menu", e); - } - } - - public List> getMenuListWithDetails() { - // 1. 查所有菜单 - List> menus = menuService.search(new HashMap<>()); - - // 2. 查所有营养 - List> nutritions = nutritionService.search(new HashMap<>()); - - // 3. 查所有配料 - List> ingredients = ingredientService.search(new HashMap<>()); - - // 4. 查所有门店关系 - List> relationships = relationshipService.search(new HashMap<>()); - - // 5. 查所有i18n(菜单描述、配料名) - Map menuI18nArgs = new HashMap<>(); - menuI18nArgs.put("table_name", "fb_menu"); - List> menuI18n = i18nService.search(menuI18nArgs); - - // 7. 组装 - List> result = new ArrayList<>(); - for (Map menu : menus) { - Long menuId = ((Number) menu.get("id")).longValue(); - Map item = new LinkedHashMap<>(); - item.put("id", menuId); - - // 多语言描述 - // 1. 先查询 Menu_Item_Description 的多语言 - item.put("Menu_Item_Description_en", menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == menuId - && "Menu_Item_Description".equals(i.get("field_name")) - && "en".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("")); - - item.put("Menu_Item_Description_zh", menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == menuId - && "Menu_Item_Description".equals(i.get("field_name")) - && "zh".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("")); - - // 2. 再查询 Category 的多语言 - item.put("category_en", menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == menuId - && "category".equals(i.get("field_name")) - && "en".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("")); - - item.put("category_zh", menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == menuId - && "category".equals(i.get("field_name")) - && "zh".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("")); - // 营养 - Map nutrition = nutritions.stream().filter(n -> ((Number)n.get("FB_menu_id")).longValue() == menuId).findFirst().orElse(new HashMap<>()); - // 只放你需要的字段 - item.put("Calories", nutrition.getOrDefault("Calories", null)); - item.put("Protein", nutrition.getOrDefault("Protein", null)); - item.put("Fat", nutrition.getOrDefault("Fat", null)); - item.put("Carbohydrate", nutrition.getOrDefault("Carbohydrate", null)); - item.put("Sodium", nutrition.getOrDefault("Sodium", null)); - item.put("Potassium", nutrition.getOrDefault("Potassium", null)); - item.put("Calcium", nutrition.getOrDefault("Calcium", null)); - item.put("Phosphorus", nutrition.getOrDefault("Phosphorus", null)); - item.put("Iron", nutrition.getOrDefault("Iron", null)); - item.put("VitaminA", nutrition.getOrDefault("VitaminA", null)); - item.put("VitaminB1", nutrition.getOrDefault("VitaminB1", null)); - item.put("VitaminB2", nutrition.getOrDefault("VitaminB2", null)); - item.put("Niacin", nutrition.getOrDefault("Niacin", null)); - item.put("VitaminC", nutrition.getOrDefault("VitaminC", null)); - item.put("Nutrient_Volume", nutrition.getOrDefault("Nutrient_Volume", null)); - item.put("Nutrient_Volume_Unit", nutrition.getOrDefault("Nutrient_Volume_Unit", null)); - - // 价格、标签等 - item.put("price", menu.get("price")); - item.put("is_vegan", menu.get("is_vegan")); - item.put("is_gluten_free", menu.get("is_gluten_free")); - item.put("is_spicy", menu.get("is_spicy")); - item.put("is_vegetarian", menu.get("is_vegetarian")); - // 门店列表 - List outletList = relationships.stream() - .filter(r -> ((Number)r.get("FB_menu_id")).longValue() == menuId) - .map(r -> ((Number)r.get("FB_outlet_id")).longValue()) - .collect(Collectors.toList()); - item.put("outletList", outletList); - - // 配料列表 - List> ingredientList = ingredients.stream() - .filter(ing -> ((Number)ing.get("FB_menu_id")).longValue() == menuId) - .map(ing -> { - Map ingItem = new HashMap<>(); - Long ingId = ((Number)ing.get("Ingredient_id")).longValue(); - ingItem.put("Ingredient_id", ingId); - ingItem.put( - "Ingredient_Name_en", - menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == ingId && "Ingredient_Name".equals(i.get("field_name")) && "en".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("") - ); - ingItem.put( - "Ingredient_Name_zh", - menuI18n.stream() - .filter(i -> ((Number)i.get("record_id")).longValue() == ingId && "Ingredient_Name".equals(i.get("field_name")) && "zh".equals(i.get("language"))) - .map(i -> i.get("value")) - .findFirst() - .orElse("") - ); - ingItem.put("Ingredient_Volume", ing.get("Ingredient_Volume")); - ingItem.put("Ingredient_Volume_Unit", ing.get("Ingredient_Volume_Unit")); - ingItem.put("Allergy_Substance_ID", ing.get("Allergy_Substance_ID")); - return ingItem; - }) - .collect(Collectors.toList()); - item.put("ingredients", ingredientList); - - result.add(item); - } - return result; - } - - @Transactional(rollbackFor = Exception.class) - public void saveMenuWithDetails(Map menuData) { - // 1. 更新 fb_menu 表的基本信息 - StringBuilder updateMenuSql = new StringBuilder( - "UPDATE fb_menu SET " + - "Menu_Item_Description = :description, " + - "category = :category, " + - "price = :price, " + - "is_vegetarian = :is_vegetarian, " + - "is_vegan = :is_vegan, " + - "is_gluten_free = :is_gluten_free, " + - "is_spicy = :is_spicy, " + - "modified = NOW() " + - "WHERE id = :id"); - - Map menuParams = new HashMap<>(); - menuParams.put("id", menuData.get("id")); - menuParams.put("description", menuData.get("Menu_Item_Description_en")); // 使用英文描述作为默认值 - menuParams.put("category", menuData.get("category_en")); // 使用英文分类作为默认值 - menuParams.put("price", menuData.get("price")); - menuParams.put("is_vegetarian", menuData.get("is_vegetarian")); - menuParams.put("is_vegan", menuData.get("is_vegan")); - menuParams.put("is_gluten_free", menuData.get("is_gluten_free")); - menuParams.put("is_spicy", menuData.get("is_spicy")); - - jdbcDao.executeUpdate(updateMenuSql.toString(), menuParams); - Long menuId = ((Number) menuData.get("id")).longValue(); - - // 2. 保存菜单描述的国际化信息 - // 英文描述 - upsertI18n("fb_menu", "Menu_Item_Description", menuId, "en", (String) menuData.get("Menu_Item_Description_en")); - - // 中文描述 - upsertI18n("fb_menu", "Menu_Item_Description", menuId, "zh", (String) menuData.get("Menu_Item_Description_zh")); - - // 3. 保存分类的国际化信息 - // 英文分类 - upsertI18n("fb_menu", "category", menuId, "en", (String) menuData.get("category_en")); - - // 中文分类 - upsertI18n("fb_menu", "category", menuId, "zh", (String) menuData.get("category_zh")); - - // 4. 保存配料信息 - List> ingredients = (List>) menuData.get("ingredients"); - if (ingredients != null) { - // 删除旧的配料信息 - jdbcDao.executeUpdate( - "DELETE FROM fb_menu_item_ingredient WHERE FB_menu_id = :menuId", - Map.of("menuId", menuId) - ); - - for (Map ingredient : ingredients) { - try { - Long ingredientId = ((Number) ingredient.get("Ingredient_id")).longValue(); - - // 更新 Ingredient 表中的过敏原信息 - List allergyIds = (List) ingredient.get("Allergy_Substance_IDs"); - String allergyJson = allergyIds != null ? new ObjectMapper().writeValueAsString(allergyIds) : "[]"; - - StringBuilder updateIngredientSql = new StringBuilder( - "UPDATE Ingredient SET Allergy_Substance_ID = :allergyJson " + - "WHERE Ingredient_id = :ingredientId"); - Map updateParams = new HashMap<>(); - updateParams.put("allergyJson", allergyJson); - updateParams.put("ingredientId", ingredientId); - jdbcDao.executeUpdate(updateIngredientSql.toString(), updateParams); - - // 保存配料关联信息 - fb_menu_item_ingredientReq ingredientReq = new fb_menu_item_ingredientReq(); - ingredientReq.setFB_menu_id(menuId); - ingredientReq.setIngredient_id(ingredientId); - ingredientReq.setIngredient_Volume(ingredient.get("Ingredient_Volume") != null ? - new BigDecimal(ingredient.get("Ingredient_Volume").toString()) : null); - ingredientReq.setIngredient_Volume_Unit((String) ingredient.get("Ingredient_Volume_Unit")); - - // 直接使用 SQL 插入,避免使用 service 层的自动字段处理 - StringBuilder insertIngredientSql = new StringBuilder( - "INSERT INTO fb_menu_item_ingredient " + - "(FB_menu_id, Ingredient_id, Ingredient_Volume, Ingredient_Volume_Unit, created_at) " + - "VALUES (:menuId, :ingredientId, :volume, :unit, NOW())"); - - Map insertParams = new HashMap<>(); - insertParams.put("menuId", menuId); - insertParams.put("ingredientId", ingredientId); - insertParams.put("volume", ingredientReq.getIngredient_Volume()); - insertParams.put("unit", ingredientReq.getIngredient_Volume_Unit()); - - jdbcDao.executeUpdate(insertIngredientSql.toString(), insertParams); - - // 保存配料名称的国际化信息 - i18nReq enIngredientReq = new i18nReq(); - enIngredientReq.setTable_name("Ingredient"); - enIngredientReq.setRecord_id(ingredientId); - enIngredientReq.setField_name("Ingredient_Name"); - enIngredientReq.setLanguage("en"); - enIngredientReq.setValue((String) ingredient.get("Ingredient_Name_en")); - i18nService.saveOrUpdate(enIngredientReq); - - i18nReq zhIngredientReq = new i18nReq(); - zhIngredientReq.setTable_name("Ingredient"); - zhIngredientReq.setRecord_id(ingredientId); - zhIngredientReq.setField_name("Ingredient_Name"); - zhIngredientReq.setLanguage("zh"); - zhIngredientReq.setValue((String) ingredient.get("Ingredient_Name_zh")); - i18nService.saveOrUpdate(zhIngredientReq); - } catch (JsonProcessingException e) { - logger.error("Error processing allergy IDs for ingredient: " + ingredient.get("Ingredient_id"), e); - throw new RuntimeException("Failed to process allergy IDs", e); - } - } - } - } - - private void upsertI18n(String table, String field, Long recordId, String lang, String value) { - // 1. 先查 - Map args = new HashMap<>(); - args.put("table_name", table); - args.put("field_name", field); - args.put("record_id", recordId); - args.put("language", lang); - List> exist = i18nService.search(args); - - if (exist != null && !exist.isEmpty()) { - // 有则更新 - i18nService.updateValue(table, field, recordId, lang, value); - } else { - // 没有则插入 - i18nReq req = new i18nReq(); - req.setTable_name(table); - req.setField_name(field); - req.setRecord_id(recordId); - req.setLanguage(lang); - req.setValue(value); - i18nService.saveOrUpdate(req); - } - } - - @Transactional(rollbackFor = Exception.class) - public void saveGroupRelationships(Map data) { - Long fbBrandId = ((Number) data.get("Fb_brand_id")).longValue(); - List> groups = (List>) data.get("Group"); - - // 验证品牌是否存在 - StringBuilder checkBrandSql = new StringBuilder( - "SELECT COUNT(*) FROM fb_brand WHERE id = :fbBrandId"); - Map checkBrandParams = new HashMap<>(); - checkBrandParams.put("fbBrandId", fbBrandId); - int brandCount = jdbcDao.queryForInt(checkBrandSql.toString(), checkBrandParams); - if (brandCount == 0) { - throw new RuntimeException("Brand not found: " + fbBrandId); - } - - // 验证所有分组是否存在 - for (Map group : groups) { - Long groupId = ((Number) group.get("FB_group_id")).longValue(); - StringBuilder checkGroupSql = new StringBuilder( - "SELECT COUNT(*) FROM fb_group WHERE id = :groupId"); - Map checkGroupParams = new HashMap<>(); - checkGroupParams.put("groupId", groupId); - int groupCount = jdbcDao.queryForInt(checkGroupSql.toString(), checkGroupParams); - if (groupCount == 0) { - throw new RuntimeException("Group not found: " + groupId); - } - } - - // 验证所有菜单是否存在 - for (Map group : groups) { - List menuIds = (List) group.get("id"); - if (menuIds != null && !menuIds.isEmpty()) { - StringBuilder checkMenuSql = new StringBuilder( - "SELECT COUNT(*) FROM fb_menu WHERE id IN (:menuIds)"); - Map checkMenuParams = new HashMap<>(); - checkMenuParams.put("menuIds", menuIds); - int menuCount = jdbcDao.queryForInt(checkMenuSql.toString(), checkMenuParams); - if (menuCount != menuIds.size()) { - throw new RuntimeException("Some menus not found"); - } - } - } - - // 删除现有关系 - StringBuilder deleteSql = new StringBuilder( - "DELETE FROM fb_group_relationship WHERE Fb_brand_id = :fbBrandId"); - Map deleteParams = new HashMap<>(); - deleteParams.put("fbBrandId", fbBrandId); - jdbcDao.executeUpdate(deleteSql.toString(), deleteParams); - - // 插入新关系 - for (Map group : groups) { - Long groupId = ((Number) group.get("FB_group_id")).longValue(); - List menuIds = (List) group.get("FB_menu_id"); - - if (menuIds != null && !menuIds.isEmpty()) { - StringBuilder insertSql = new StringBuilder( - "INSERT INTO fb_group_relationship " + - "(Fb_brand_id, FB_group_id, FB_menu_id, created) " + - "VALUES (:fbBrandId, :groupId, :menuId, NOW())"); - - for (Number menuId : menuIds) { - Map insertParams = new HashMap<>(); - insertParams.put("fbBrandId", fbBrandId); - insertParams.put("groupId", groupId); - insertParams.put("menuId", menuId); - jdbcDao.executeUpdate(insertSql.toString(), insertParams); - } - } - } - } - - @Transactional(rollbackFor = Exception.class) - public void saveGroupShowControl(Long brandId, List> groupShowList) { - // 先删除该品牌下所有分组的 show 控制 - String deleteSql = "DELETE FROM fb_group_show_control WHERE FB_brand_id = :brandId"; - Map params = new HashMap<>(); - params.put("brandId", brandId); - jdbcDao.executeUpdate(deleteSql, params); - - // 只插入 show_table 为 true 的记录 - String insertSql = "INSERT INTO fb_group_show_control (FB_brand_id, FB_group_id, show_table) VALUES (:brandId, :groupId, 1)"; - for (Map groupShow : groupShowList) { - // 只处理 show_table 为 true 的记录 - if (Boolean.TRUE.equals(groupShow.get("show_table"))) { - Map insertParams = new HashMap<>(); - insertParams.put("brandId", brandId); - insertParams.put("groupId", groupShow.get("FB_group_id")); - jdbcDao.executeUpdate(insertSql, insertParams); - } - } - } - - public List> getGroupShowControl(Long brandId) { - // 获取所有分组 - String groupSql = "SELECT id as FB_group_id FROM fb_group WHERE deleted = 0 AND (FB_brand_id = :brandId OR FB_brand_id IS NULL OR FB_brand_id = 0)"; - Map params = new HashMap<>(); - params.put("brandId", brandId); - List> allGroups = jdbcDao.queryForList(groupSql, params); - - // 获取已选中的分组 - String selectedSql = "SELECT FB_group_id FROM fb_group_show_control WHERE FB_brand_id = :brandId"; - List> selectedGroups = jdbcDao.queryForList(selectedSql, params); - - // 标记选中的分组 - Set selectedGroupIds = selectedGroups.stream() - .map(g -> ((Number) g.get("FB_group_id")).longValue()) - .collect(Collectors.toSet()); - - // 组装结果 - return allGroups.stream() - .map(group -> { - Map result = new HashMap<>(group); - result.put("show_table", selectedGroupIds.contains(((Number) group.get("FB_group_id")).longValue())); - return result; - }) - .collect(Collectors.toList()); - } - - public List> getGroupShowControlWithMenus(Long brandId, Boolean showTable) { - // 1. 获取所有分组(当前品牌+默认分组) - String groupSql = "SELECT id as FB_group_id FROM fb_group WHERE deleted = 0 AND (FB_brand_id = :brandId OR FB_brand_id IS NULL OR FB_brand_id = 0)"; - Map params = new HashMap<>(); - params.put("brandId", brandId); - List> allGroups = jdbcDao.queryForList(groupSql, params); - - // 2. 获取已选中的分组 - String selectedSql = "SELECT FB_group_id FROM fb_group_show_control WHERE FB_brand_id = :brandId"; - List> selectedGroups = jdbcDao.queryForList(selectedSql, params); - Set selectedGroupIds = selectedGroups.stream() - .map(g -> ((Number) g.get("FB_group_id")).longValue()) - .collect(Collectors.toSet()); - - // 获取所有分组-菜单关系 - String relSql = "SELECT FB_group_id, FB_menu_id FROM fb_group_relationship WHERE Fb_brand_id = :brandId"; - List> groupMenuRels = jdbcDao.queryForList(relSql, params); - - // 获取所有菜单 - String menuSql = "SELECT m.id as FB_menu_id, " + - "i_en.value AS Menu_Item_Description_en, " + - "i_zh.value AS Menu_Item_Description_zh " + - "FROM fb_menu m " + - "LEFT JOIN i18n i_en ON m.id = i_en.record_id " + - " AND i_en.table_name = 'fb_menu' " + - " AND i_en.field_name = 'Menu_Item_Description' " + - " AND i_en.language = 'en' " + - "LEFT JOIN i18n i_zh ON m.id = i_zh.record_id " + - " AND i_zh.table_name = 'fb_menu' " + - " AND i_zh.field_name = 'Menu_Item_Description' " + - " AND i_zh.language = 'zh'"; - List> allMenus = jdbcDao.queryForList(menuSql, new HashMap<>()); - Map> menuMap = allMenus.stream() - .collect(Collectors.toMap( - m -> ((Number)m.get("FB_menu_id")).longValue(), - m -> m - )); - - // 查询所有分组的英文和中文名称 - String groupNameEnSql = "SELECT record_id, value FROM i18n WHERE table_name = 'fb_group' AND field_name = 'FB_group_name' AND language = 'en'"; - String groupNameZhSql = "SELECT record_id, value FROM i18n WHERE table_name = 'fb_group' AND field_name = 'FB_group_name' AND language = 'zh'"; - List> groupNameEnList = jdbcDao.queryForList(groupNameEnSql, new HashMap<>()); - List> groupNameZhList = jdbcDao.queryForList(groupNameZhSql, new HashMap<>()); - - // 转为Map方便查找 - Map groupNameEnMap = groupNameEnList.stream() - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).longValue(), - m -> (String)m.get("value"), - (v1, v2) -> v1 - )); - Map groupNameZhMap = groupNameZhList.stream() - .collect(Collectors.toMap( - m -> ((Number)m.get("record_id")).longValue(), - m -> (String)m.get("value"), - (v1, v2) -> v1 - )); - - // 组装每个分组的菜单 - List> resultGroups = new ArrayList<>(); - for (Map group : allGroups) { - Long groupId = ((Number) group.get("FB_group_id")).longValue(); - boolean isSelected = selectedGroupIds.contains(groupId); - - // 如果 showTable 参数为 true,则只包含 show_table=true 的分组 - if (showTable != null && showTable && !isSelected) { - continue; - } - - Map orderedGroup = new LinkedHashMap<>(); - orderedGroup.put("FB_group_id", groupId); - orderedGroup.put("FB_group_Name_en", groupNameEnMap.getOrDefault(groupId, "")); - orderedGroup.put("FB_group_Name_zh", groupNameZhMap.getOrDefault(groupId, "")); - orderedGroup.put("show_table", isSelected); - - List> menus = groupMenuRels.stream() - .filter(rel -> ((Number)rel.get("FB_group_id")).longValue() == groupId) - .map(rel -> menuMap.get(((Number)rel.get("FB_menu_id")).longValue())) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - orderedGroup.put("menus", menus); - - resultGroups.add(orderedGroup); - } - return resultGroups; - } - - public List> getBrandMenusSimple(Long FB_id) { - // 1. 获取所有菜单的多语言详情 - List> allMenus = getMenuListWithDetails(); - - // 2. 获取该品牌所有菜单ID - String relSql = "SELECT DISTINCT FB_menu_id FROM fb_menu_and_outlet_relationship WHERE FB_id = :FB_id"; - Map params = new HashMap<>(); - params.put("FB_id", FB_id); - List> rels = jdbcDao.queryForList(relSql, params); - - // 添加空值检查 - Set brandMenuIds = rels.stream() - .map(r -> { - Object menuId = r.get("FB_menu_id"); - if (menuId == null) { - logger.warn("发现空的菜单ID,FB_id: {}", FB_id); - return null; - } - return ((Number)menuId).intValue(); - }) - .filter(Objects::nonNull) - .collect(Collectors.toSet()); - - // 3. 获取该品牌所有菜单-分组关系 - String groupRelSql = "SELECT FB_menu_id, FB_group_id FROM fb_group_relationship WHERE Fb_brand_id = :FB_id"; - List> groupRels = jdbcDao.queryForList(groupRelSql, params); - Map> menuIdToGroupIds = new HashMap<>(); - - for (Map gr : groupRels) { - Object menuId = gr.get("FB_menu_id"); - Object groupId = gr.get("FB_group_id"); - if (menuId != null && groupId != null) { - Integer menuIdInt = ((Number)menuId).intValue(); - Integer groupIdInt = ((Number)groupId).intValue(); - menuIdToGroupIds.computeIfAbsent(menuIdInt, k -> new ArrayList<>()).add(groupIdInt); - } - } - - // 4. 组装输出 - List> result = allMenus.stream() - .filter(menu -> { - Object menuId = menu.get("FB_menu_id"); - if (menuId == null) { - logger.warn("菜单数据中缺少FB_menu_id"); - return false; - } - return brandMenuIds.contains(((Number)menuId).intValue()); - }) - .map(menu -> { - Map simple = new HashMap<>(); - Integer menuId = ((Number)menu.get("FB_menu_id")).intValue(); - simple.put("FB_menu_id", menuId); - simple.put("Menu_Item_Description_en", menu.get("Menu_Item_Description_en")); - simple.put("Menu_Item_Description_zh", menu.get("Menu_Item_Description_zh")); - simple.put("FB_group_id", menuIdToGroupIds.getOrDefault(menuId, new ArrayList<>())); - return simple; - }) - .collect(Collectors.toList()); - - return result; - } - - @Transactional(rollbackFor = Exception.class) - public void saveMenuOutletRelationship(Long menuId, Long outletId, Long fbId) { - Map params = new HashMap<>(); - params.put("menuId", menuId); - params.put("outletId", outletId); - params.put("fbId", fbId); - - // 检查是否已存在 - String checkSql = "SELECT COUNT(*) FROM fb_menu_and_outlet_relationship WHERE FB_menu_id = :menuId AND FB_outlet_id = :outletId"; - int count = jdbcDao.queryForInt(checkSql, params); - if (count == 0) { - // 插入新关系 - String insertSql = "INSERT INTO fb_menu_and_outlet_relationship (FB_menu_id, FB_outlet_id, FB_id, created_at) VALUES (:menuId, :outletId, :fbId, NOW())"; - jdbcDao.executeUpdate(insertSql, params); - } - } - public void saveMenuOutletRelationshipsByMenu(Map data) { - Long menuId = data.get("FB_menu_id") instanceof Number ? ((Number) data.get("FB_menu_id")).longValue() : null; - if (menuId == null) throw new IllegalArgumentException("FB_menu_id 不能为空"); - - List> outlets = (List>) data.get("outlets"); - if (outlets == null) throw new IllegalArgumentException("outlets 不能为空"); - - // 1. 删除该菜单的所有门店关系 - jdbcDao.executeUpdate( - "DELETE FROM fb_menu_and_outlet_relationship WHERE FB_menu_id = :menuId", - Map.of("menuId", menuId) - ); - - // 2. 批量插入新关系 - for (Map outlet : outlets) { - Long fbId = outlet.get("FB_id") instanceof Number ? ((Number) outlet.get("FB_id")).longValue() : null; - Long outletId = outlet.get("FB_outlet_id") instanceof Number ? ((Number) outlet.get("FB_outlet_id")).longValue() : null; - if (fbId == null || outletId == null) continue; - saveMenuOutletRelationship(menuId, outletId, fbId); - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_groupService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_groupService.java deleted file mode 100644 index 487cd3c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_groupService.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import com.ffii.fhsmsc.modules.Menu.enity.fb_group; -import com.ffii.fhsmsc.modules.Menu.enity.fb_groupResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_groupReq; - -import jakarta.validation.Valid; -@Service - public class fb_groupService extends AbstractBaseEntityService { - private final i18nService i18nService; - private static final Logger logger = LoggerFactory.getLogger(fb_groupService.class); - public fb_groupService(JdbcDao jdbcDao, fb_groupResponsity repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `fb_group` fi" - + " WHERE 1=1"); - - if (args != null && args.containsKey("FB_brand_id")) { - // 修改SQL,使用OR条件来匹配brand_id或null - sql.append(" AND (fi.FB_brand_id = :FB_brand_id OR fi.FB_brand_id IS NULL)"); - } - - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_group saveOrUpdate(@Valid fb_groupReq req) { - logger.info("Request: Id={}, FB_group_Name_en={}, FB_group_Name_zh={}, FB_brand_id={}", - req.getId(), req.getFB_group_Name_en(), req.getFB_group_Name_zh(), req.getFB_brand_id()); - - fb_group instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(() -> - new InternalServerErrorException("Group not found for id: " + req.getId())); - } else { - instance = new fb_group(); - isNew = true; - } - - // 设置基本字段 - instance.setId(req.getId()); - instance.setFB_brand_id(req.getFB_brand_id()); - // 使用英文名称作为默认名称 - instance.setFB_group_Name(req.getFB_group_Name_en()); - - // 设置时间戳 - if (isNew) { - instance.setCreated(LocalDateTime.now()); - } - instance.setModified(LocalDateTime.now()); - - try { - instance = repository.saveAndFlush(instance); - - // 保存多语言信息 - if (req.getFB_group_Name_en() != null) { - updateI18nEntry("fb_group", "FB_group_name", instance.getId(), "en", req.getFB_group_Name_en()); - } - if (req.getFB_group_Name_zh() != null) { - updateI18nEntry("fb_group", "FB_group_name", instance.getId(), "zh", req.getFB_group_Name_zh()); - } - - logger.info("Saved group: id={}, FB_group_Name_en={}, FB_group_Name_zh={}", - instance.getId(), req.getFB_group_Name_en(), req.getFB_group_Name_zh()); - } catch (Exception e) { - logger.error("Failed to save group: id={}, error={}", - req.getId(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save group: " + e.getMessage()); - } - - return instance; - } - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - @Transactional - public void deleteById(Long id) { - repository.deleteById(id); - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_relationshipService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_relationshipService.java deleted file mode 100644 index edae7db..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_relationshipService.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; - -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.Menu.enity.fb_group_relationship; -import com.ffii.fhsmsc.modules.Menu.enity.fb_group_relationshipResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_group_relationshipReq; - -import jakarta.validation.Valid; -@Service -public class fb_group_relationshipService extends AbstractBaseEntityService { - public fb_group_relationshipService(JdbcDao jdbcDao, fb_group_relationshipResponsity repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.id," - + " fi.FB_brand_id," - + " fi.FB_group_id," - + " fi.show_table" - + " FROM `fb_group_show_control` fi" - + " WHERE 1=1" - ); - - if (args != null) { - if (args.containsKey("FB_brand_id")) { - sql.append(" AND fi.FB_brand_id = :FB_brand_id"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_group_relationship saveOrUpdate(@Valid fb_group_relationshipReq req) { - fb_group_relationship instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_group_relationship(); - } - } else { - instance = new fb_group_relationship(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_show_controlService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_show_controlService.java deleted file mode 100644 index 27c6985..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_group_show_controlService.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; - -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.Menu.enity.fb_group_show_control; -import com.ffii.fhsmsc.modules.Menu.enity.fb_group_show_controlResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_group_show_controlReq; - -import jakarta.validation.Valid; -@Service -public class fb_group_show_controlService extends AbstractBaseEntityService { - public fb_group_show_controlService(JdbcDao jdbcDao, fb_group_show_controlResponsity repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.id," - + " fi.FB_brand_id," - + " fi.FB_group_id," - + " fi.show_table" - + " FROM `fb_group_show_control` fi" - ); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("FB_group_id")) { - sql.append(" AND fi.FB_group_id = :FB_group_id"); - } - if (args.containsKey("FB_brand_id")) { - sql.append(" AND fi.FB_brand_id = :FB_brand_id"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_group_show_control saveOrUpdate(@Valid fb_group_show_controlReq req) { - fb_group_show_control instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_group_show_control(); - } - } else { - instance = new fb_group_show_control(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menuService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menuService.java deleted file mode 100644 index e3edcf9..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menuService.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menuResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_menuReq; - -import jakarta.validation.Valid; -@Service - public class fb_menuService extends AbstractBaseEntityService { - private final i18nService i18nService; - private static final Logger logger = LoggerFactory.getLogger(fb_menuService.class); - public fb_menuService(JdbcDao jdbcDao, fb_menuResponsity repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `fb_menu` fi" - ); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND fi.id = :userId"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_menu saveOrUpdate(@Valid fb_menuReq req) { - logger.info("Request: FB_menu_id={}, Menu_Item_Description={}, Menu_Item_Description_zh={}, Category={}, Price={}, Is_vegan={}, Is_vegetarian={}, Is_gluten_free={}, Is_spicy={}", - req.getId(), req.getMenu_Item_Description(), req.getMenu_Item_Description_zh(), - req.getCategory(), req.getPrice(), - req.getIs_vegan(), req.getIs_vegetarian(), req.getIs_gluten_free(), req.getIs_spicy()); - - fb_menu instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(() -> new InternalServerErrorException("Operator not found for id: " + req.getId())); - logger.info("Found existing operator: id={}, Menu_Item_Description={}", instance.getId(), instance.getMenu_Item_Description()); - } else { - instance = new fb_menu(); - isNew = true; - logger.info("Creating new operator"); - } - - // 手动设置字段 - instance.setId(req.getId()); - //instance.setFB_id(req.getFB_id()); - instance.setMenu_Item_Description(req.getMenu_Item_Description()); // 使用英文版本作为默认值 - instance.setCategory(req.getCategory()); // 使用英文版本作为默认值 - instance.setPrice(req.getPrice()); // 使用英文版本作为默认值 - instance.setIs_vegan(req.getIs_vegan()); - instance.setIs_vegetarian(req.getIs_vegetarian()); - instance.setIs_gluten_free(req.getIs_gluten_free()); - instance.setIs_spicy(req.getIs_spicy()); - - logger.info("Before save - Setting values: Menu_Item_Description={}, Category={}, Price={}, Is_vegan={}, Is_vegetarian={}, Is_gluten_free={}, Is_spicy={}", - instance.getMenu_Item_Description(), instance.getCategory(), instance.getPrice(), instance.getIs_vegan(), instance.getIs_vegetarian(), instance.getIs_gluten_free(), instance.getIs_spicy()); - - - - try { - instance = repository.saveAndFlush(instance); - logger.info("After save - Saved operator: id={}, Menu_Item_Description={}, Category={}, Price={}, Is_vegan={}, Is_vegetarian={}, Is_gluten_free={}, Is_spicy={}", - instance.getId(), instance.getMenu_Item_Description(), instance.getCategory(), instance.getPrice(), instance.getIs_vegan(), instance.getIs_vegetarian(), instance.getIs_gluten_free(), instance.getIs_spicy()); - } catch (Exception e) { - logger.error("Failed to save fb_menu: id={}, error={}", req.getId(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save operator: " + e.getMessage()); - } - - Long menuId = instance.getId(); - logger.info("Processing i18n entries for menuId={}", menuId); - - // 更新 i18n 记录 - try { - // Menu_Item_Description 的翻译 - updateI18nEntry("fb_menu", "Menu_Item_Description", menuId, "en", req.getMenu_Item_Description_en()); - updateI18nEntry("fb_menu", "Menu_Item_Description", menuId, "zh", req.getMenu_Item_Description_zh()); - - // Category 的翻译 - updateI18nEntry("fb_menu", "Category", menuId, "en", req.getCategory_en()); - updateI18nEntry("fb_menu", "Category", menuId, "zh", req.getCategory_zh()); - - logger.info("Successfully updated all i18n entries"); - } catch (Exception e) { - logger.error("Failed to update i18n entries: error={}", e.getMessage(), e); - throw new InternalServerErrorException("Failed to update i18n entries: " + e.getMessage()); - } - - return instance; - } - - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_and_outlet_relationshipService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_and_outlet_relationshipService.java deleted file mode 100644 index 52efbdd..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_and_outlet_relationshipService.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; - -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_and_outlet_relationship; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_and_outlet_relationshipResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_menu_and_outlet_relationshipReq; - -import jakarta.validation.Valid; -@Service -public class fb_menu_and_outlet_relationshipService extends AbstractBaseEntityService { - public fb_menu_and_outlet_relationshipService(JdbcDao jdbcDao, fb_menu_and_outlet_relationshipResponsity repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `fb_menu_and_outlet_relationship` fi" - ); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND fi.user_id = :userId"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_menu_and_outlet_relationship saveOrUpdate(@Valid fb_menu_and_outlet_relationshipReq req) { - fb_menu_and_outlet_relationship instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_menu_and_outlet_relationship(); - } - } else { - instance = new fb_menu_and_outlet_relationship(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_ingredientService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_ingredientService.java deleted file mode 100644 index fd42abd..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_ingredientService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_item_ingredient; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_item_ingredientResponsity; -import com.ffii.fhsmsc.modules.Menu.req.fb_menu_item_ingredientReq; - -import jakarta.validation.Valid; -@Service - public class fb_menu_item_ingredientService extends AbstractBaseEntityService { - public fb_menu_item_ingredientService(JdbcDao jdbcDao, fb_menu_item_ingredientResponsity repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `fb_menu_item_ingredient` fi" - ); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND fi.user_id = :userId"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_menu_item_ingredient saveOrUpdate(@Valid fb_menu_item_ingredientReq req) { - fb_menu_item_ingredient instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_menu_item_ingredient(); - } - } else { - instance = new fb_menu_item_ingredient(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_nutritionService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_nutritionService.java deleted file mode 100644 index e7cd82d..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/fb_menu_item_nutritionService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_item_nutrition; -import com.ffii.fhsmsc.modules.Menu.enity.fb_menu_item_nutritionResponsity; -import com.ffii.fhsmsc.modules.Menu.req.FbMenuItemNutrientReq; -import jakarta.validation.Valid; -@Service - public class fb_menu_item_nutritionService extends AbstractBaseEntityService { - public fb_menu_item_nutritionService(JdbcDao jdbcDao, fb_menu_item_nutritionResponsity repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `fb_menu_item_nutrition` fi" - ); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND fi.user_id = :userId"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_menu_item_nutrition saveOrUpdate(@Valid FbMenuItemNutrientReq req) { - fb_menu_item_nutrition instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_menu_item_nutrition(); - } - } else { - instance = new fb_menu_item_nutrition(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/ingredientService.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/service/ingredientService.java deleted file mode 100644 index 0208103..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/service/ingredientService.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.I18n.req.i18nReq; -import com.ffii.fhsmsc.modules.I18n.service.i18nService; -import com.ffii.fhsmsc.modules.Menu.enity.ingredient; -import com.ffii.fhsmsc.modules.Menu.enity.ingredientResponsity; -import com.ffii.fhsmsc.modules.Menu.req.ingredientReq; - -import jakarta.validation.Valid; -@Service - public class ingredientService extends AbstractBaseEntityService { - private final i18nService i18nService; - private static final Logger logger = LoggerFactory.getLogger(ingredientService.class); - public ingredientService(JdbcDao jdbcDao, ingredientResponsity repository, i18nService i18nService) { - super(jdbcDao, repository); - this.i18nService = i18nService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder( - "SELECT i.Ingredient_id, i.Ingredient_Name, i.Allergy_Substance_ID, " + // 只选择需要的字段 - "i_en.value as name_en, " + - "i_zh.value as name_zh " + - "FROM `ingredient` i " + - "LEFT JOIN i18n i_en ON i.Ingredient_id = i_en.record_id " + - "AND i_en.table_name = 'Ingredient' " + - "AND i_en.field_name = 'Ingredient_Name' " + - "AND i_en.language = 'en' " + - "LEFT JOIN i18n i_zh ON i.Ingredient_id = i_zh.record_id " + - "AND i_zh.table_name = 'Ingredient' " + - "AND i_zh.field_name = 'Ingredient_Name' " + - "AND i_zh.language = 'zh' "); - - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND i.user_id = :userId"); - } - } - sql.append(" ORDER BY i.Ingredient_id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public ingredient saveOrUpdate(@Valid ingredientReq req) { - logger.info("Request: Ingredient_id={}, Ingredient_Name={}", - req.getIngredient_id(), req.getIngredient_Name()); - - ingredient instance; - boolean isNew = false; - - if (req.getIngredient_id() != null && req.getIngredient_id() > 0) { - instance = find(req.getIngredient_id()).orElseThrow(() -> - new InternalServerErrorException("Ingredient not found for id: " + req.getIngredient_id())); - logger.info("Found existing ingredient: id={}, Ingredient_Name={}", - instance.getId(), instance.getIngredient_Name()); - } else { - instance = new ingredient(); - isNew = true; - logger.info("Creating new ingredient"); - } - - // 设置基本字段 - instance.setIngredient_id(req.getIngredient_id()); - instance.setIngredient_Name(req.getIngredient_Name()); - - // 设置时间戳 - if (isNew) { - instance.setCreated(LocalDateTime.now()); - } - instance.setModified(LocalDateTime.now()); - - try { - instance = repository.saveAndFlush(instance); - logger.info("After save - Saved ingredient: id={}, Ingredient_Name={}", - instance.getId(), instance.getIngredient_Name()); - } catch (Exception e) { - logger.error("Failed to save ingredient: id={}, error={}", - req.getIngredient_id(), e.getMessage(), e); - throw new InternalServerErrorException("Failed to save ingredient: " + e.getMessage()); - } - - return instance; - } - - private void updateI18nEntry(String tableName, String fieldName, Long recordId, String language, String value) { - if (value != null) { - logger.info("Updating i18n entry: tableName={}, fieldName={}, recordId={}, language={}, value={}", - tableName, fieldName, recordId, language, value); - - // 先检查是否存在记录 - Map checkArgs = new HashMap<>(); - checkArgs.put("table_name", tableName); - checkArgs.put("field_name", fieldName); - checkArgs.put("record_id", recordId); - checkArgs.put("language", language); - - List> existingEntries = i18nService.search(checkArgs); - logger.info("Found {} existing entries", existingEntries.size()); - - if (!existingEntries.isEmpty()) { - // 如果存在记录,更新它 - Map existingEntry = existingEntries.get(0); - Long id = ((Number) existingEntry.get("id")).longValue(); - logger.info("Updating existing i18n entry with id={}", id); - i18nService.updateValue(tableName, fieldName, recordId, language, value); - } else { - // 如果不存在记录,创建新记录 - logger.info("Creating new i18n entry"); - i18nReq i18nReq = new i18nReq(); - i18nReq.setTable_name(tableName); - i18nReq.setField_name(fieldName); - i18nReq.setRecord_id(recordId); - i18nReq.setLanguage(language); - i18nReq.setValue(value); - - i18nService.saveOrUpdate(i18nReq); - } - } else { - logger.warn("Skipping i18n update for null value: tableName={}, fieldName={}, recordId={}, language={}", - tableName, fieldName, recordId, language); - } - } - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/FbMenuCombineController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/FbMenuCombineController.java deleted file mode 100644 index 6f9409f..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/FbMenuCombineController.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.List; -import java.util.Map; - -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.DataRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.Menu.service.FbMenuCombineService; -@RestController -@RequestMapping("/menu") -public class FbMenuCombineController { - private final FbMenuCombineService fbMenuCombineService; - private final JdbcDao jdbcDao; - public FbMenuCombineController(FbMenuCombineService fbMenuCombineService, JdbcDao jdbcDao) { - this.fbMenuCombineService = fbMenuCombineService; - this.jdbcDao = jdbcDao; - } - - /** - * 获取完整的菜单信息,包括营养和配料 - */ - @GetMapping("/complete/{menuId}") - public DataRes> getCompleteMenu(@PathVariable Long menuId) { - return new DataRes<>(fbMenuCombineService.getCompleteMenu(menuId)); - } - - /** - * 获取特定门店的所有菜单 - */ - @GetMapping("/outlet/{outletId}") - public RecordsRes> getOutletMenus(@PathVariable Long outletId) { - return new RecordsRes<>(fbMenuCombineService.getOutletMenus(outletId)); - } - @PostMapping("/save") - public DataRes saveMenu(@RequestBody Map menuData) { - fbMenuCombineService.saveCompleteMenu(menuData); - return new DataRes<>(); - } - /** - * 批量获取多个菜单的完整信息 - */ - @GetMapping("/batch") - public RecordsRes> getBatchMenus(@RequestParam List menuIds) { - return new RecordsRes<>(fbMenuCombineService.getBatchMenus(menuIds)); - } - - - @PostMapping("/complete") - public DataRes saveCompleteMenu(@RequestBody Map menuData) { - fbMenuCombineService.saveCompleteMenu(menuData); - return new DataRes<>(); - } - @GetMapping("/fb/{fbId}") - public RecordsRes> getFbMenus(@PathVariable Long fbId) { - return new RecordsRes<>(fbMenuCombineService.getFbMenus(fbId)); - } - - @GetMapping("/operators-with-outlets-and-menus") - public RecordsRes> getOperatorsWithOutletsAndMenus() { - return new RecordsRes<>(fbMenuCombineService.getOperatorsWithOutletsAndMenus()); - } - - @PostMapping("/menu-outlet-relationships/batch-update") - public DataRes batchUpdateMenuOutletRelationships(@RequestBody Map data) { - fbMenuCombineService.saveMenuOutletRelationshipsByMenu(data); - return new DataRes<>(); - } - /** - * 删除菜品和门店的关联 - */ - @DeleteMapping("/outlet-relationship/delete/{menuId}/{outletId}") - public DataRes deleteMenuOutletRelationship( - @PathVariable Long menuId, - @PathVariable Long outletId) { - fbMenuCombineService.deleteMenuOutletRelationship(menuId, outletId); - return new DataRes<>(); - } - @DeleteMapping("/delete/{menuId}") - public DataRes deleteMenu(@PathVariable Long menuId) { - fbMenuCombineService.deleteMenu(menuId); - return new DataRes<>(); - } - - @GetMapping("/list-with-details") - public RecordsRes> getMenuListWithDetails() { - return new RecordsRes<>(fbMenuCombineService.getMenuListWithDetails()); - } - @PostMapping("/save-with-details") - public DataRes saveMenuWithDetails(@RequestBody Map menuData) { - fbMenuCombineService.saveMenuWithDetails(menuData); - return new DataRes<>(); - } - @PostMapping("/group-relationships/save") - public DataRes saveGroupRelationships(@RequestBody Map data) { - fbMenuCombineService.saveGroupRelationships(data); - return new DataRes<>(); - } - // FbMenuCombineController.java - - @PostMapping("/group-show-control/save") - public DataRes saveGroupShowControl(@RequestBody Map data) { - Long brandId = ((Number) data.get("FB_brand_id")).longValue(); - List> groupShowList = (List>) data.get("groupShowList"); - fbMenuCombineService.saveGroupShowControl(brandId, groupShowList); - return new DataRes<>(); - } - - @GetMapping("/group-show-control/list") - public RecordsRes> getGroupShowControlWithMenus( - @RequestParam Long FB_brand_id, - @RequestParam(required = false) Boolean showTable) { - return new RecordsRes<>(fbMenuCombineService.getGroupShowControlWithMenus(FB_brand_id, showTable)); - } - - // FbMenuCombineController.java - @GetMapping("/brand-menus") - public RecordsRes> getBrandMenus(@RequestParam Long FB_id) { - // 只返回菜单精简信息 - List> menus = fbMenuCombineService.getBrandMenusSimple(FB_id); - return new RecordsRes<>(menus); - } - - @PostMapping("/outlet-relationships/batch-update") - public DataRes batchUpdateOutletRelationships(@RequestBody Map data) { - fbMenuCombineService.saveMenuOutletRelationshipsByBatch(data); - return new DataRes<>(); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_groupController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_groupController.java deleted file mode 100644 index a5ddea9..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_groupController.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_groupReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_groupService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_group") -public class fb_groupController { - private fb_groupService fb_groupService; - private static final Logger logger = LoggerFactory.getLogger(fb_groupController.class); - public fb_groupController( - fb_groupService fb_groupService - ) { - this.fb_groupService = fb_groupService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_groupService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("FB_brand_id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_groupReq req) { - try { - logger.info("Received save request: {}", req); - IdRes result = new IdRes(fb_groupService.saveOrUpdate(req).getId()); - logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - logger.error("Error processing save request", e); - throw e; - } - } - @DeleteMapping("/delete/{id}") - public void deleteGroup(@PathVariable Long id) { - fb_groupService.deleteById(id); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_relationshipController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_relationshipController.java deleted file mode 100644 index e43e74b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_relationshipController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_group_relationshipReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_group_relationshipService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_group_relationship") -public class fb_group_relationshipController { - private fb_group_relationshipService fb_group_relationshipService; - - public fb_group_relationshipController( - fb_group_relationshipService fb_group_relationshipService - ) { - this.fb_group_relationshipService = fb_group_relationshipService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_group_relationshipService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("FB_brand_id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_group_relationshipReq req) { - return new IdRes(fb_group_relationshipService.saveOrUpdate(req).getId()); - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_show_controlController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_show_controlController.java deleted file mode 100644 index 46da154..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_group_show_controlController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_group_show_controlReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_group_show_controlService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_group_show_control") -public class fb_group_show_controlController { - private fb_group_show_controlService fb_group_show_controlService; - - public fb_group_show_controlController( - fb_group_show_controlService fb_group_show_controlService - ) { - this.fb_group_show_controlService = fb_group_show_controlService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_group_show_controlService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_group_show_controlReq req) { - return new IdRes(fb_group_show_controlService.saveOrUpdate(req).getId()); - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menuController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menuController.java deleted file mode 100644 index 13ef3f3..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menuController.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_menuReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_menuService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_menu") -public class fb_menuController { - private fb_menuService fb_menuService; - private static final Logger logger = LoggerFactory.getLogger(fb_menuController.class); - public fb_menuController( - fb_menuService fb_menuService - ) { - this.fb_menuService = fb_menuService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_menuService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_menuReq req) { - try { - logger.info("Received save request: {}", req); - IdRes result = new IdRes(fb_menuService.saveOrUpdate(req).getId()); - logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - logger.error("Error processing save request", e); - throw e; - } - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_and_outlet_relationshipController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_and_outlet_relationshipController.java deleted file mode 100644 index 76c47ef..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_and_outlet_relationshipController.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_menu_and_outlet_relationshipReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_menu_and_outlet_relationshipService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_menu_and_outlet_relationship") -public class fb_menu_and_outlet_relationshipController { - private fb_menu_and_outlet_relationshipService fb_menu_and_outlet_relationshipService; - - public fb_menu_and_outlet_relationshipController( - fb_menu_and_outlet_relationshipService fb_menu_and_outlet_relationshipService - ) { - this.fb_menu_and_outlet_relationshipService = fb_menu_and_outlet_relationshipService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_menu_and_outlet_relationshipService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_menu_and_outlet_relationshipReq req) { - return new IdRes(fb_menu_and_outlet_relationshipService.saveOrUpdate(req).getId()); - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_ingredientController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_ingredientController.java deleted file mode 100644 index 9990996..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_ingredientController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.fb_menu_item_ingredientReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_menu_item_ingredientService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_menu_item_ingredient") -public class fb_menu_item_ingredientController { - private fb_menu_item_ingredientService fb_menu_item_ingredientService; - - public fb_menu_item_ingredientController( - fb_menu_item_ingredientService fb_menu_item_ingredientService - ) { - this.fb_menu_item_ingredientService = fb_menu_item_ingredientService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_menu_item_ingredientService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_menu_item_ingredientReq req) { - return new IdRes(fb_menu_item_ingredientService.saveOrUpdate(req).getId()); - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_nutritionController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_nutritionController.java deleted file mode 100644 index 8fa7e94..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/fb_menu_item_nutritionController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.FbMenuItemNutrientReq; -import com.ffii.fhsmsc.modules.Menu.service.fb_menu_item_nutritionService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_menu_item_nutrition") -public class fb_menu_item_nutritionController { - private fb_menu_item_nutritionService fb_menu_item_nutritionService; - - public fb_menu_item_nutritionController( - fb_menu_item_nutritionService fb_menu_item_nutritionService - ) { - this.fb_menu_item_nutritionService = fb_menu_item_nutritionService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_menu_item_nutritionService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid FbMenuItemNutrientReq req) { - return new IdRes(fb_menu_item_nutritionService.saveOrUpdate(req).getId()); - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/ingredientController.java b/src/main/java/com/ffii/fhsmsc/modules/Menu/web/ingredientController.java deleted file mode 100644 index 8fe11b6..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/Menu/web/ingredientController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.Menu.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.Menu.req.ingredientReq; -import com.ffii.fhsmsc.modules.Menu.service.ingredientService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/ingredient") -public class ingredientController { - private ingredientService ingredientService; - - public ingredientController( - ingredientService ingredientService - ) { - this.ingredientService = ingredientService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(ingredientService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid ingredientReq req) { - return new IdRes(ingredientService.saveOrUpdate(req).getId()); - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/Allergy.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/Allergy.java deleted file mode 100644 index d969659..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/Allergy.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.enity; -import java.time.LocalDateTime; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; - -/** @author Terence */ -@Entity -@Table(name = "allergies") -public class Allergy extends BaseEntity { - - @NotBlank - @Column - private int allergy_id; - - @Column - private String allergy_name; - - @Column - private LocalDateTime created_at; - - public int getAllergy_id() { - return allergy_id; - } - - public void setAllergy_id(int allergy_id) { - this.allergy_id = allergy_id; - } - - public String getallergy_name() { - return allergy_name; - } - - public void setallergy_name(String allergy_name) { - this.allergy_name = allergy_name; - } - - public LocalDateTime getcreated_at() { - return created_at; - } - - public void setcreated_at(LocalDateTime created_at) { - this.created_at = created_at; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/AllergyReponsitory.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/AllergyReponsitory.java deleted file mode 100644 index 130becb..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/AllergyReponsitory.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.enity; -import com.ffii.core.support.AbstractRepository; - -public interface AllergyReponsitory extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergy.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergy.java deleted file mode 100644 index 744da41..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergy.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.enity; -import java.time.LocalDateTime; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; - -/** @author Terence */ -@Entity -@Table(name = "user_allergies") -public class UserAllergy extends BaseEntity { - - @Column - private int user_allergy_id; - - @Column - private int user_id; - - @Column - private int allergy_id; - - @Column - private LocalDateTime created_at; - - public int getAllergy_id() { - return allergy_id; - } - - public void setAllergy_id(int allergy_id) { - this.allergy_id = allergy_id; - } - public int getUser_allergy_id() { - return user_allergy_id; - } - - public void setUser_allergy_id(int user_allergy_id) { - this.user_allergy_id = user_allergy_id; - } - - public int getUser_id() { - return user_id; - } - - public void setUser_id(int user_id) { - this.user_id = user_id; - } - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergyReponsitory.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergyReponsitory.java deleted file mode 100644 index 430d7bc..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/enity/UserAllergyReponsitory.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.enity; -import com.ffii.core.support.AbstractRepository; - -public interface UserAllergyReponsitory extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/req/AllergyReq.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/req/AllergyReq.java deleted file mode 100644 index 469a47e..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/req/AllergyReq.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.req; -import java.time.LocalDateTime; -import java.util.List; -public class AllergyReq { - private Long allergy_id; - private Long user_id; - private String allergy_name; - private LocalDateTime created_at; - private List allergyIds; - - public List getAllergyIds() { - return allergyIds; - } - - public void setAllergyIds(List allergyIds) { - this.allergyIds = allergyIds; - } - - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } - public Long getAllergy_id() { - return allergy_id; - } - - public void setAllergy_id(Long allergy_id) { - this.allergy_id = allergy_id; - } - - public String getAllergy_name() { - return allergy_name; - } - - public void setAllergy_name(String allergy_name) { - this.allergy_name = allergy_name; - } - - public LocalDateTime getCreated_at() { - return created_at; - } - - public void setCreated_at(LocalDateTime created_at) { - this.created_at = created_at; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/req/UserAllergyReq.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/req/UserAllergyReq.java deleted file mode 100644 index f7e1ebe..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/req/UserAllergyReq.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.req; -import java.time.LocalDateTime; -import java.util.List; - -public class UserAllergyReq { - private Long user_allergy_id; - private Long user_id; - private Long allergy_id; - public Long getUser_allergy_id() { - return user_allergy_id; - } - - public void setUser_allergy_id(Long user_allergy_id) { - this.user_allergy_id = user_allergy_id; - } - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } - public Long getAllergy_id() { - return allergy_id; - } - - public void setAllergy_id(Long allergy_id) { - this.allergy_id = allergy_id; - } - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/service/AllergyService.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/service/AllergyService.java deleted file mode 100644 index 5b933b5..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/service/AllergyService.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.service; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.beans.factory.annotation.Autowired; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.allergy.enity.Allergy; -import com.ffii.fhsmsc.modules.allergy.enity.AllergyReponsitory; -import com.ffii.fhsmsc.modules.allergy.req.AllergyReq; -import java.util.ArrayList; -import java.util.HashMap; - -import jakarta.validation.Valid; -@Service -public class AllergyService extends AbstractBaseEntityService { - @Autowired - private JdbcTemplate jdbcTemplate; - - public AllergyService(JdbcDao jdbcDao, AllergyReponsitory repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder( - "SELECT a.allergy_id, " + - "i_en.value as name_en, " + - "i_zh.value as name_zh " + - "FROM `allergies` a " + - "LEFT JOIN i18n i_en ON a.allergy_id = i_en.record_id " + - "AND i_en.table_name = 'allergies' " + - "AND i_en.field_name = 'allergy_name' " + - "AND i_en.language = 'en' " + - "LEFT JOIN i18n i_zh ON a.allergy_id = i_zh.record_id " + - "AND i_zh.table_name = 'allergies' " + - "AND i_zh.field_name = 'allergy_name' " + - "AND i_zh.language = 'zh' " + - "WHERE 1=1"); - - if (args != null) { - if (args.containsKey("user_id")) { - sql.append(" AND a.user_id = :user_id"); - } - } - sql.append(" ORDER BY a.allergy_id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public Allergy saveOrUpdate(@Valid AllergyReq req) { - Allergy instance; - - if (req.getAllergy_id() != null) { - if(req.getAllergy_id()>0){ - instance = find(req.getAllergy_id()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new Allergy(); - } - } else { - instance = new Allergy(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } - - @Transactional(rollbackFor = Exception.class) - public void updateUserAllergies(int userId, List allergyIds) { - - String deleteSql = "DELETE FROM user_allergies WHERE user_id = ?"; - jdbcTemplate.update(deleteSql, userId); - - - if (allergyIds != null && !allergyIds.isEmpty()) { - String insertSql = "INSERT INTO user_allergies (user_id, allergy_id, created_at) VALUES (?, ?, NOW())"; - List batchArgs = new ArrayList<>(); - - for (Integer allergyId : allergyIds) { - batchArgs.add(new Object[]{userId, allergyId}); - } - - jdbcTemplate.batchUpdate(insertSql, batchArgs); - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/service/UserAllergyService.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/service/UserAllergyService.java deleted file mode 100644 index 341c850..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/service/UserAllergyService.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.service; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.Collections; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.beans.factory.annotation.Autowired; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.allergy.enity.UserAllergy; -import com.ffii.fhsmsc.modules.allergy.enity.UserAllergyReponsitory; -import com.ffii.fhsmsc.modules.allergy.req.UserAllergyReq; -import java.util.ArrayList; -import java.util.HashMap; - -import jakarta.validation.Valid; -@Service -public class UserAllergyService extends AbstractBaseEntityService { - @Autowired - private JdbcTemplate jdbcTemplate; - - public UserAllergyService(JdbcDao jdbcDao, UserAllergyReponsitory repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - // 检查是否提供了user_id - if (!args.containsKey("user_id")) { - throw new IllegalArgumentException("user_id is required"); - } - - StringBuilder sql = new StringBuilder( - "SELECT a.allergy_id, " + - "i_en.value as name_en, " + - "i_zh.value as name_zh " + - "FROM user_allergies ua " + - "JOIN allergies a ON ua.allergy_id = a.allergy_id " + - "LEFT JOIN i18n i_en ON a.allergy_id = i_en.record_id " + - "AND i_en.table_name = 'allergies' " + - "AND i_en.field_name = 'allergy_name' " + - "AND i_en.language = 'en' " + - "LEFT JOIN i18n i_zh ON a.allergy_id = i_zh.record_id " + - "AND i_zh.table_name = 'allergies' " + - "AND i_zh.field_name = 'allergy_name' " + - "AND i_zh.language = 'zh' " + - "WHERE ua.user_id = :user_id " + - "ORDER BY a.allergy_id"); - - List> results = jdbcDao.queryForList(sql.toString(), args); - - // 将结果转换为所需的格式 - List> allergyList = results.stream() - .map(row -> { - Map allergy = new HashMap<>(); - allergy.put("allergy_id", row.get("allergy_id")); - allergy.put("name_en", row.get("name_en")); - allergy.put("name_zh", row.get("name_zh")); - return allergy; - }) - .collect(Collectors.toList()); - - Map response = new HashMap<>(); - response.put("user_allerg", allergyList); - - return Collections.singletonList(response); - } - - @Transactional(rollbackFor = Exception.class) - public UserAllergy saveOrUpdate(@Valid UserAllergyReq req) { - UserAllergy instance; - - if (req.getAllergy_id() != null) { - if(req.getAllergy_id()>0){ - instance = find(req.getAllergy_id()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new UserAllergy(); - } - } else { - instance = new UserAllergy(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } - - @Transactional(rollbackFor = Exception.class) - public void updateUserAllergies(int userId, List allergyIds) { - - String deleteSql = "DELETE FROM user_allergies WHERE user_id = ?"; - jdbcTemplate.update(deleteSql, userId); - - - if (allergyIds != null && !allergyIds.isEmpty()) { - String insertSql = "INSERT INTO user_allergies (user_id, allergy_id, created_at) VALUES (?, ?, NOW())"; - List batchArgs = new ArrayList<>(); - - for (Integer allergyId : allergyIds) { - batchArgs.add(new Object[]{userId, allergyId}); - } - - jdbcTemplate.batchUpdate(insertSql, batchArgs); - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/web/AllergyController.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/web/AllergyController.java deleted file mode 100644 index 5af5778..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/web/AllergyController.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.allergy.req.AllergyReq; -import com.ffii.fhsmsc.modules.allergy.service.AllergyService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/allergy") -public class AllergyController { - private AllergyService allergyService; - public AllergyController( - AllergyService allergyService - ) { - this.allergyService = allergyService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(allergyService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid AllergyReq req) { - return new IdRes(allergyService.saveOrUpdate(req).getAllergy_id()); - } - @PostMapping("/update") - public void updateUserAllergies(@RequestBody @Valid AllergyReq req) { - allergyService.updateUserAllergies(req.getUser_id().intValue(), req.getAllergyIds()); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/allergy/web/UserAllergyController.java b/src/main/java/com/ffii/fhsmsc/modules/allergy/web/UserAllergyController.java deleted file mode 100644 index 6caa97c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/allergy/web/UserAllergyController.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.ffii.fhsmsc.modules.allergy.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.allergy.req.UserAllergyReq; -import com.ffii.fhsmsc.modules.allergy.service.UserAllergyService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/user-allergy") -public class UserAllergyController { - private final UserAllergyService userAllergyService; - - public UserAllergyController(UserAllergyService userAllergyService) { - this.userAllergyService = userAllergyService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(userAllergyService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid UserAllergyReq req) { - return new IdRes(userAllergyService.saveOrUpdate(req).getUser_allergy_id()); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embedding.java b/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embedding.java deleted file mode 100644 index 7c9ebd1..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embedding.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.ffii.fhsmsc.modules.embedding.enity; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; -/** @author Terence */ -@Entity -@Table(name = "menu_item_base_embedding") -public class embedding extends BaseEntity { - - @NotBlank - @Column - private Long embedding_id; - - @Column - private Long FB_menu_id; - - @Column - private String embedding_vector; - - @Column - private String embedding_text; - - @Column - private String language; - - public Long getembedding_id() { - return embedding_id; - } - - public void setembedding_id(Long embedding_id) { - this.embedding_id = embedding_id; - } - - public Long getFB_menu_id() { - return FB_menu_id; - } - - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - - public String getembedding_vector() { - return embedding_vector; - } - - public void setembedding_vector(String embedding_vector) { - this.embedding_vector = embedding_vector; - } - - public String getembedding_text() { - return embedding_text; - } - - public void setembedding_text(String embedding_text) { - this.embedding_text = embedding_text; - } - - public String getlanguage() { - return language; - } - - public void setlanguage(String language) { - this.language = language; - } - - - - - - - - - - - -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embeddingRepository.java b/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embeddingRepository.java deleted file mode 100644 index 845846b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/embedding/enity/embeddingRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.embedding.enity; -import com.ffii.core.support.AbstractRepository; -public interface embeddingRepository extends AbstractRepository { - -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/embedding/req/embeddingReq.java b/src/main/java/com/ffii/fhsmsc/modules/embedding/req/embeddingReq.java deleted file mode 100644 index e6846e9..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/embedding/req/embeddingReq.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ffii.fhsmsc.modules.embedding.req; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class embeddingReq { - @JsonProperty("embedding_id") - private Long embedding_id; - - @JsonProperty("FB_menu_id") - private Long FB_menu_id; - - @JsonProperty("embedding_vector") - private String embedding_vector; - - @JsonProperty("embedding_text") - private String embedding_text; - - @JsonProperty("language") - private String language; - - public Long getembedding_id() { - return embedding_id; - } - public void setembedding_id(Long embedding_id) { - this.embedding_id = embedding_id; - } - public Long getFB_menu_id() { - return FB_menu_id; - } - public void setFB_menu_id(Long FB_menu_id) { - this.FB_menu_id = FB_menu_id; - } - public String getembedding_vector() { - return embedding_vector; - } - public void setembedding_vector(String embedding_vector) { - this.embedding_vector = embedding_vector; - } - public String getembedding_text() { - return embedding_text; - } - public void setembedding_text(String embedding_text) { - this.embedding_text = embedding_text; - } - public String getlanguage() { - return language; - } - public void setlanguage(String language) { - this.language = language; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/embedding/service/embeddingService.java b/src/main/java/com/ffii/fhsmsc/modules/embedding/service/embeddingService.java deleted file mode 100644 index a90445b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/embedding/service/embeddingService.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.ffii.fhsmsc.modules.embedding.service; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.BeanUtils; -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.fhsmsc.modules.embedding.enity.embedding; -import com.ffii.fhsmsc.modules.embedding.enity.embeddingRepository; -import com.ffii.fhsmsc.modules.embedding.req.embeddingReq; - -import jakarta.validation.Valid; - -@Service -public class embeddingService extends AbstractBaseEntityService { - - private static final Logger logger = LoggerFactory.getLogger(embeddingService.class); - - public embeddingService(JdbcDao jdbcDao, embeddingRepository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM menu_item_base_embedding fi" - + " WHERE 1=1"); - - if (args != null) { - if (args.containsKey("embedding_id")) sql.append(" AND fi.embedding_id = :embedding_id"); - if (args.containsKey("FB_menu_id")) sql.append(" AND fi.FB_menu_id = :FB_menu_id"); - if (args.containsKey("embedding_vector")) sql.append(" AND fi.embedding_vector = :embedding_vector"); - if (args.containsKey("embedding_text")) sql.append(" AND fi.embedding_text = :embedding_text"); - if (args.containsKey("language")) sql.append(" AND fi.language = :language"); - } - - sql.append(" ORDER BY fi.embedding_id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public embedding saveOrUpdate(@Valid embeddingReq req) { - logger.info("Request: embedding_id={}, FB_menu_id={}, embedding_vector={}, embedding_text={}, language={}", - req.getembedding_id(), req.getFB_menu_id(), req.getembedding_vector(), req.getembedding_text(), req.getlanguage()); - - embedding instance; - boolean isNew = false; - - if (req.getembedding_id() != null && req.getembedding_id() > 0) { - instance = find(req.getembedding_id()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new embedding(); - isNew = true; - } - - BeanUtils.copyProperties(req, instance); - logger.info("After BeanUtils: id={}, FB_menu_id={}, embedding_vector={}, embedding_text={}, language={}", - instance.getId(), instance.getFB_menu_id(), instance.getembedding_vector(), instance.getembedding_text(), instance.getlanguage()); - - if (instance.getCreated() == null) { - instance.setCreated(LocalDateTime.now()); - } - saveAndFlush(instance); - logger.info("After save: id={}, FB_menu_id={}, embedding_vector={}, embedding_text={}, language={}", - instance.getId(), instance.getFB_menu_id(), instance.getembedding_vector(), instance.getembedding_text(), instance.getlanguage()); - - return instance; - } - public List findAll() { - return repository.findAll(); - } - @Transactional(rollbackFor = Exception.class) - public void deleteByFBId(Long fbId) { - logger.info("Deleting operator with FB_id: {}", fbId); - String sql = "DELETE FROM fb_operator WHERE FB_id = :FB_id"; - Map args = new HashMap<>(); - args.put("FB_id", fbId); - jdbcDao.queryForList(sql, args); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/embedding/web/embeddingController.java b/src/main/java/com/ffii/fhsmsc/modules/embedding/web/embeddingController.java deleted file mode 100644 index 40ab1b6..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/embedding/web/embeddingController.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ffii.fhsmsc.modules.embedding.web; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.embedding.req.embeddingReq; -import com.ffii.fhsmsc.modules.embedding.service.embeddingService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/embedding") -public class embeddingController { - private static final Logger logger = LoggerFactory.getLogger(embeddingController.class); - private embeddingService embeddingService; - - public embeddingController(embeddingService embeddingService) { - this.embeddingService = embeddingService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(embeddingService.search( - CriteriaArgsBuilder.withRequest(request) - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid embeddingReq req) { - try { - logger.info("Received save request: {}", req); - IdRes result = new IdRes(embeddingService.saveOrUpdate(req).getId()); - logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - logger.error("Error processing save request", e); - throw e; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/Req/fb_operator_and_organization_relationshipReq.java b/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/Req/fb_operator_and_organization_relationshipReq.java deleted file mode 100644 index 6c303a6..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/Req/fb_operator_and_organization_relationshipReq.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.Req; - -import com.fasterxml.jackson.annotation.JsonProperty; -public class fb_operator_and_organization_relationshipReq { - @JsonProperty("id") - private Long id; - @JsonProperty("FB_id") - private String FB_id; - @JsonProperty("User_Grp_Org_ID") - private String User_Grp_Org_ID; - public Long getId() { - return id; - } - public String getFB_id() { - return FB_id; - } - public String getUser_Grp_Org_ID() { - return User_Grp_Org_ID; - } - public void setId(Long id) { - this.id = id; - } - public void setFB_id(String FB_id) { - this.FB_id = FB_id; - } - public void setUser_Grp_Org_ID(String User_Grp_Org_ID) { - this.User_Grp_Org_ID = User_Grp_Org_ID; - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationship.java b/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationship.java deleted file mode 100644 index 3b48907..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationship.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.enity; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** @author Terence */ -@Entity -@Table(name = "fb_operator_and_organization_relationship") -public class fb_operator_and_organization_relationship extends BaseEntity { - @Column - private Long id; - @Column - private String FB_id; - @Column - private String User_Grp_Org_ID; - - - - public String getFB_id() { - return FB_id; - } - - public String getUser_Grp_Org_ID() { - return User_Grp_Org_ID; - } - - public void setFB_id(String FB_id) { - this.FB_id = FB_id; - } - - public void setUser_Grp_Org_ID(String User_Grp_Org_ID) { - this.User_Grp_Org_ID = User_Grp_Org_ID; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationshipRepository.java b/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationshipRepository.java deleted file mode 100644 index c5539eb..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/enity/fb_operator_and_organization_relationshipRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.enity; - -import com.ffii.core.support.AbstractRepository; -public interface fb_operator_and_organization_relationshipRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/service/fb_operator_and_organization_relationshipService.java b/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/service/fb_operator_and_organization_relationshipService.java deleted file mode 100644 index dcc9523..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/service/fb_operator_and_organization_relationshipService.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.service; -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.Req.fb_operator_and_organization_relationshipReq; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.enity.fb_operator_and_organization_relationship; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.enity.fb_operator_and_organization_relationshipRepository; - -import jakarta.validation.Valid; - -@Service -public class fb_operator_and_organization_relationshipService extends AbstractBaseEntityService { - private static final Logger logger = LoggerFactory.getLogger(fb_operator_and_organization_relationshipService.class); - - public fb_operator_and_organization_relationshipService(JdbcDao jdbcDao, fb_operator_and_organization_relationshipRepository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fo.*" - + " FROM `fb_operator_and_organization_relationship` fo" - + " WHERE 1=1"); - if (args.containsKey("FB_id")) { - sql.append(" AND fo.FB_id = :FB_id"); - } - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public fb_operator_and_organization_relationship saveOrUpdate(@Valid fb_operator_and_organization_relationshipReq req) { - logger.info("Request: id={}, FB_id={}, User_Grp_Org_ID={}", - req.getId(), req.getFB_id(), req.getUser_Grp_Org_ID()); - - fb_operator_and_organization_relationship instance; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new fb_operator_and_organization_relationship(); - } - - BeanUtils.copyProperties(req, instance); - logger.info("After BeanUtils: id={}, FB_id={}, User_Grp_Org_ID={}", - instance.getId(), instance.getFB_id(), instance.getUser_Grp_Org_ID()); - - if (instance.getCreated() == null) { - instance.setCreated(LocalDateTime.now()); - } - saveAndFlush(instance); - logger.info("After save: id={}, FB_id={}, User_Grp_Org_ID={}", - instance.getId(), instance.getFB_id(), instance.getUser_Grp_Org_ID()); - - return instance; - } - @Transactional(rollbackFor = Exception.class) - public void deleteByFBId(Long fbId) { - logger.info("Deleting organization relationships for FB_id: {}", fbId); - String sql = "DELETE FROM fb_operator_and_organization_relationship WHERE FB_id = :FB_id"; - Map args = new HashMap<>(); - args.put("FB_id", fbId); - jdbcDao.queryForList(sql, args); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/web/fb_operator_and_organization_relationshipController.java b/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/web/fb_operator_and_organization_relationshipController.java deleted file mode 100644 index 3e4209c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/fb_operator_and_organization_relationship/web/fb_operator_and_organization_relationshipController.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.Req.fb_operator_and_organization_relationshipReq; -import com.ffii.fhsmsc.modules.fb_operator_and_organization_relationship.service.fb_operator_and_organization_relationshipService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/fb_operator_and_organization_relationship") -public class fb_operator_and_organization_relationshipController { - private fb_operator_and_organization_relationshipService fb_operator_and_organization_relationshipService; - - public fb_operator_and_organization_relationshipController( - fb_operator_and_organization_relationshipService fb_operator_and_organization_relationshipService - ) { - this.fb_operator_and_organization_relationshipService = fb_operator_and_organization_relationshipService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(fb_operator_and_organization_relationshipService.search( - CriteriaArgsBuilder.withRequest(request) - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid fb_operator_and_organization_relationshipReq req) { - try { - //logger.info("Received save request: {}", req); - IdRes result = new IdRes(fb_operator_and_organization_relationshipService.saveOrUpdate(req).getId()); - //logger.info("Successfully processed save request"); - return result; - } catch (Exception e) { - //logger.error("Error processing save request", e); - throw e; - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1.java b/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1.java deleted file mode 100644 index e73f21e..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1.java +++ /dev/null @@ -1,290 +0,0 @@ -package com.ffii.fhsmsc.modules.food1.entity; -import java.math.BigDecimal; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -/** @author Terence */ -@Entity -@Table(name = "food1") -public class Food1 extends BaseEntity{ - @Column(name = "name") - private String name; - - @Column(name = "Weight") - private BigDecimal weight; - - @Column(name = "Calories") - private BigDecimal calories; - - @Column(name = "Protein") - private BigDecimal protein; - - @Column(name = "Fat") - private BigDecimal fat; - - @Column(name = "Carbohydrate") - private BigDecimal carbohydrate; - - @Column(name = "Sodium") - private BigDecimal sodium; - - @Column(name = "Potassium") - private BigDecimal potassium; - - @Column(name = "Calcium") - private BigDecimal calcium; - - @Column(name = "Phosphorus") - private BigDecimal phosphorus; - - @Column(name = "Iron") - private BigDecimal iron; - - @Column(name = "VitaminA") - private BigDecimal vitaminA; - - @Column(name = "VitaminB1") - private BigDecimal vitaminB1; - - @Column(name = "VitaminB2") - private BigDecimal vitaminB2; - - @Column(name = "Niacin") - private BigDecimal niacin; - - @Column(name = "VitaminC") - private BigDecimal vitaminC; - - @Column(name = "food_type") - private String foodType; - - @Column(name = "contains_egg") - private Boolean containsEgg; - - @Column(name = "contains_milk") - private Boolean containsMilk; - - @Column(name = "contains_wheat") - private Boolean containsWheat; - - @Column(name = "contains_shrimp") - private Boolean containsShrimp; - - @Column(name = "contains_crab") - private Boolean containsCrab; - - @Column(name = "contains_buckwheat") - private Boolean containsBuckwheat; - - @Column(name = "contains_peanut") - private Boolean containsPeanut; - - @Column(name = "contains_walnut") - private Boolean containsWalnut; - - @Column(name = "Restaurant_ID") - private Integer restaurant_id; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public BigDecimal getWeight() { - return weight; - } - - public void setWeight(BigDecimal weight) { - this.weight = weight; - } - - public BigDecimal getCalories() { - return calories; - } - - public void setCalories(BigDecimal calories) { - this.calories = calories; - } - - public BigDecimal getProtein() { - return protein; - } - - public void setProtein(BigDecimal protein) { - this.protein = protein; - } - - public BigDecimal getFat() { - return fat; - } - - public void setfat(BigDecimal fat) { - this.fat = fat; - } - - public BigDecimal getCarbohydrate() { - return carbohydrate; - } - - public void setCarbohydrate(BigDecimal carbohydrate) { - this.carbohydrate = carbohydrate; - } - - public BigDecimal getSodium() { - return sodium; - } - - public void setSodium(BigDecimal sodium) { - this.sodium = sodium; - } - - public String getFoodType() { - return foodType; - } - - public void setFoodType(String foodType) { - this.foodType = foodType; - } - - public Boolean getContainsEgg() { - return containsEgg; - } - - public void setContainsEgg(Boolean containsEgg) { - this.containsEgg = containsEgg; - } - - public Boolean getContainsMilk() { - return containsMilk; - } - - public void setContainsMilk(Boolean containsMilk) { - this.containsMilk = containsMilk; - } - - public Boolean getContainsWheat() { - return containsWheat; - } - - public void setContainsWheat(Boolean containsWheat) { - this.containsWheat = containsWheat; - } - - public Boolean getContainsShrimp() { - return containsShrimp; - } - - public void setContainsShrimp(Boolean containsShrimp) { - this.containsShrimp = containsShrimp; - } - - public Boolean getContainsCrab() { - return containsCrab; - } - - public void setContainsCrab(Boolean containsCrab) { - this.containsCrab = containsCrab; - } - - public Boolean getContainsBuckwheat() { - return containsBuckwheat; - } - - public void setContainsBuckwheat(Boolean containsBuckwheat) { - this.containsBuckwheat = containsBuckwheat; - } - - public Boolean getContainsPeanut() { - return containsPeanut; - } - - public void setContainsPeanut(Boolean containsPeanut) { - this.containsPeanut = containsPeanut; - } - - public Boolean getContainsWalnut() { - return containsWalnut; - } - - public void setContainsWalnut(Boolean containsWalnut) { - this.containsWalnut = containsWalnut; - } - public BigDecimal getPotassium() { - return potassium; - } - - public void setPotassium(BigDecimal potassium) { - this.potassium = potassium; - } - public BigDecimal getCalcium() { - return calcium; - } - - public void setCalcium(BigDecimal calcium) { - this.calcium = calcium; - } - public BigDecimal getPhosphorus() { - return phosphorus; - } - - public void setPhosphorus(BigDecimal phosphorus) { - this.phosphorus = phosphorus; - } - public BigDecimal getIron() { - return iron; - } - - public void setIron(BigDecimal iron) { - this.iron = iron; - } - public BigDecimal getVitaminA() { - return vitaminA; - } - - public void setVitaminA(BigDecimal vitaminA) { - this.vitaminA = vitaminA; - } - public BigDecimal getVitaminB1() { - return vitaminB1; - } - - public void setVitaminB1(BigDecimal vitaminB1) { - this.vitaminB1 = vitaminB1; - } - public BigDecimal getVitaminB2() { - return vitaminB2; - } - - public void setVitaminB2(BigDecimal vitaminB2) { - this.vitaminB2 = vitaminB2; - } - public BigDecimal getNiacin() { - return niacin; - } - - public void setNiacin(BigDecimal niacin) { - this.niacin = niacin; - } - public BigDecimal getVitaminC() { - return vitaminC; - } - - public void setVitaminC(BigDecimal vitaminC) { - this.vitaminC = vitaminC; - } - - public Integer getRestaurant_id() { - return restaurant_id; - } - - public void setRestaurant_id(Integer restaurant_id) { - this.restaurant_id = restaurant_id; - - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1Repository.java b/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1Repository.java deleted file mode 100644 index 6c009bd..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/food1/entity/Food1Repository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.food1.entity; - -import com.ffii.core.support.AbstractRepository; - -public interface Food1Repository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/food1/req/SaveFood1Req.java b/src/main/java/com/ffii/fhsmsc/modules/food1/req/SaveFood1Req.java deleted file mode 100644 index a582785..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/food1/req/SaveFood1Req.java +++ /dev/null @@ -1,257 +0,0 @@ -package com.ffii.fhsmsc.modules.food1.req; -import java.math.BigDecimal; - -import jakarta.validation.constraints.NotNull; - -public class SaveFood1Req { - private Long id; - @NotNull - private String name; - private BigDecimal weight; - private BigDecimal calories; - private BigDecimal protein; - private BigDecimal fat; - private BigDecimal carbohydrate; - private BigDecimal sodium; - private BigDecimal potassium; - private BigDecimal calcium; - private BigDecimal phosphorus; - private BigDecimal iron; - private BigDecimal vitaminA; - private BigDecimal vitaminB1; - private BigDecimal vitaminB2; - private BigDecimal niacin; - private BigDecimal vitaminC; - private String foodType; - private Integer contains_egg; - private Integer contains_milk; - private Integer contains_wheat; - private Integer contains_shrimp; - private Integer contains_crab; - private Integer contains_buckwheat; - private Integer contains_peanut; - private Integer contains_walnut; - private Integer restaurant_id; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - public String getfood_type() { - return foodType; - } - - public void setfood_type(String foodType) { - this.foodType = foodType; - } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public BigDecimal getWeight() { - return weight; - } - - public void setWeight(BigDecimal weight) { - this.weight = weight; - } - - public BigDecimal getCalories() { - return calories; - } - - public void setCalories(BigDecimal calories) { - this.calories = calories; - } - - public BigDecimal getProtein() { - return protein; - } - - public void setProtein(BigDecimal protein) { - this.protein = protein; - } - - public BigDecimal getFat() { - return fat; - } - - public void setfat(BigDecimal fat) { - this.fat = fat; - } - - public BigDecimal getCarbohydrate() { - return carbohydrate; - } - - public void setCarbohydrate(BigDecimal carbohydrate) { - this.carbohydrate = carbohydrate; - } - - public BigDecimal getSodium() { - return sodium; - } - - public void setSodium(BigDecimal sodium) { - this.sodium = sodium; - } - - public BigDecimal getPotassium() { - return potassium; - } - - public void setPotassium(BigDecimal potassium) { - this.potassium = potassium; - } - - public BigDecimal getCalcium() { - return calcium; - } - - public void setCalcium(BigDecimal calcium) { - this.calcium = calcium; - } - - public BigDecimal getPhosphorus() { - return phosphorus; - } - - public void setPhosphorus(BigDecimal phosphorus) { - this.phosphorus = phosphorus; - } - - public BigDecimal getIron() { - return iron; - } - - public void setIron(BigDecimal iron) { - this.iron = iron; - } - - public BigDecimal getVitaminA() { - return vitaminA; - } - - public void setVitaminA(BigDecimal vitaminA) { - this.vitaminA = vitaminA; - } - - public BigDecimal getVitaminB1() { - return vitaminB1; - } - - public void setVitaminB1(BigDecimal vitaminB1) { - this.vitaminB1 = vitaminB1; - } - - public BigDecimal getVitaminB2() { - return vitaminB2; - } - - public void setVitaminB2(BigDecimal vitaminB2) { - this.vitaminB2 = vitaminB2; - } - - public BigDecimal getNiacin() { - return niacin; - } - - public void setNiacin(BigDecimal niacin) { - this.niacin = niacin; - } - - public BigDecimal getVitaminC() { - return vitaminC; - } - - public void setVitaminC(BigDecimal vitaminC) { - this.vitaminC = vitaminC; - } - - public String getFoodType() { - return foodType; - } - - public void setFoodType(String foodType) { - this.foodType = foodType; - } - - public Integer getContainsEgg() { - return contains_egg; - } - - public void setContainsEgg(Integer contains_egg) { - this.contains_egg = contains_egg; - } - - public Integer getContainsMilk() { - return contains_milk; - } - - public void setContainsMilk(Integer contains_milk) { - this.contains_milk = contains_milk; - } - - public Integer getContainsWheat() { - return contains_wheat; - } - - public void setContainsWheat(Integer contains_wheat) { - this.contains_wheat = contains_wheat; - } - - public Integer getContainsShrimp() { - return contains_shrimp; - } - - public void setContainsShrimp(Integer contains_shrimp) { - this.contains_shrimp = contains_shrimp; - } - - public Integer getContainsCrab() { - return contains_crab; - } - - public void setContainsCrab(Integer contains_crab) { - this.contains_crab = contains_crab; - } - - public Integer getContainsBuckwheat() { - return contains_buckwheat; - } - - public void setContainsBuckwheat(Integer contains_buckwheat) { - this.contains_buckwheat = contains_buckwheat; - } - - public Integer getContainsPeanut() { - return contains_peanut; - } - - public void setContainsPeanut(Integer contains_peanut) { - this.contains_peanut = contains_peanut; - } - - public Integer getContainsWalnut() { - return contains_walnut; - } - - public void setContainsWalnut(Integer contains_walnut) { - this.contains_walnut = contains_walnut; - } - - public Integer getRestaurant_id() { - return restaurant_id; - } - - public void setRestaurant_id(Integer restaurant_id) { - this.restaurant_id = restaurant_id; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/food1/service/Food1Service.java b/src/main/java/com/ffii/fhsmsc/modules/food1/service/Food1Service.java deleted file mode 100644 index c6b4606..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/food1/service/Food1Service.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.ffii.fhsmsc.modules.food1.service; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.food1.entity.Food1; -import com.ffii.fhsmsc.modules.food1.entity.Food1Repository; -import com.ffii.fhsmsc.modules.food1.req.SaveFood1Req; - -import jakarta.validation.Valid; - -@Service -public class Food1Service extends AbstractBaseEntityService{ - public Food1Service(JdbcDao jdbcDao, Food1Repository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.id," - + " fi.name," - + " fi.`Weight`," - + " fi.`Calories`," - + " fi.`Protein`," - + " fi.`Fat`," - + " fi.`Carbohydrate`," - + " fi.`Sodium`," - + " fi.`Potassium`," - + " fi.`Calcium`, fi.`Phosphorus`, fi.`Iron`," - + " fi.`VitaminA`, fi.`VitaminB1`, fi.`VitaminB2`," - + " fi.`Niacin`, fi.`VitaminC`, " - + " fi.food_type," - + " fi.contains_egg," - + " fi.contains_milk," - + " fi.contains_wheat," - + " fi.contains_shrimp," - + " fi.contains_crab," - + " fi.contains_buckwheat," - + " fi.contains_peanut," - + " fi.contains_walnut," - + " fi.restaurant_id" - + " FROM food1 fi" - + " WHERE 1=1"); - - if (args != null) { - if (args.containsKey("id")) sql.append(" AND fi.id = :id"); - if (args.containsKey("name")) sql.append(" AND fi.name LIKE :name"); - if (args.containsKey("food_type")) sql.append(" AND fi.food_type = :food_type"); - } - - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public Food1 saveOrUpdate(@Valid SaveFood1Req req) { - Food1 instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new Food1(); - } - } else { - instance = new Food1(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/food1/web/Food1Controller.java b/src/main/java/com/ffii/fhsmsc/modules/food1/web/Food1Controller.java deleted file mode 100644 index 39a20bc..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/food1/web/Food1Controller.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.ffii.fhsmsc.modules.food1.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.food1.req.SaveFood1Req; -import com.ffii.fhsmsc.modules.food1.service.Food1Service; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/food1") -public class Food1Controller { - private Food1Service food1Service; - - public Food1Controller( - Food1Service food1Service - ) { - this.food1Service = food1Service; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(food1Service.search( - CriteriaArgsBuilder.withRequest(request) - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid SaveFood1Req req) { - return new IdRes(food1Service.saveOrUpdate(req).getId()); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItems.java b/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItems.java deleted file mode 100644 index 1a5f979..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItems.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.ffii.fhsmsc.modules.foodItems.entity; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; - -/** @author Terence */ -@Entity -@Table(name = "food_items") -public class FoodItems extends BaseEntity { - - @NotBlank - @Column - private String name; - - @Column - private BigDecimal kcal; - - @Column - private BigDecimal carbo; - - @Column - private LocalDateTime date; - - @Column - private BigDecimal fat; - - @Column - private String meal; - - @Column - private BigDecimal protein; - - - @Column - private BigDecimal size; - - - @Column - private BigDecimal sodium; - - @Column - private BigDecimal potassium; - - @Column - private BigDecimal calcium; - - @Column - private BigDecimal phosphorus; - - @Column - private BigDecimal iron; - - @Column - private BigDecimal vitaminA; - - @Column - private BigDecimal vitaminB1; - - @Column - private BigDecimal vitaminB2; - - @Column - private BigDecimal niacin; - - @Column - private BigDecimal vitaminC; - - @Column - private Long user_id; - - - - // getter & setter - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public BigDecimal getKcal() { - return kcal; - } - - public void setKcal(BigDecimal kcal) { - this.kcal = kcal; - } - - public BigDecimal getCarbo() { - return carbo; - } - - public void setCarbo(BigDecimal carbo) { - this.carbo = carbo; - } - - public LocalDateTime getDate() { - return date; - } - - public void setDate(LocalDateTime date) { - this.date = date; - } - - public BigDecimal getFat() { - return fat; - } - - public void setFat(BigDecimal fat) { - this.fat = fat; - } - - public String getMeal() { - return meal; - } - - public void setMeal(String meal) { - this.meal = meal; - } - - public BigDecimal getProtein() { - return protein; - } - - public void setProtein(BigDecimal protein) { - this.protein = protein; - } - - public BigDecimal getSize() { - return size; - } - - public void setSize(BigDecimal size) { - this.size = size; - } - - public BigDecimal getSodium() { - return sodium; - } - - public void setSodium(BigDecimal sodium) { - this.sodium = sodium; - } - public BigDecimal getpotassium() { - return potassium; - } - - public void setpotassium(BigDecimal potassium) { - this.potassium = potassium; - } - - public BigDecimal getcalcium() { - return calcium; - } - - public void setcalcium(BigDecimal calcium) { - this.calcium = calcium; - } - - public BigDecimal getphosphorus() { - return phosphorus; - } - - public void setphosphorus(BigDecimal phosphorus) { - this.phosphorus = phosphorus; - } - public BigDecimal getiron() { - return iron; - } - - public void setiron(BigDecimal iron) { - this.iron = iron; - } - - public BigDecimal getvitaminA() { - return vitaminA; - } - - public void setvitaminA(BigDecimal vitaminA) { - this.vitaminA = vitaminA; - } - - public BigDecimal getvitaminB1() { - return vitaminB1; - } - - public void setvitaminB1(BigDecimal vitaminB1) { - this.vitaminB1 = vitaminB1; - } - - public BigDecimal getvitaminB2() { - return vitaminB2; - } - - public void setvitaminB2(BigDecimal vitaminB2) { - this.vitaminB2 = vitaminB2; - } - - public BigDecimal getniacin() { - return niacin; - } - - public void setniacin(BigDecimal niacin) { - this.niacin = niacin; - } - public BigDecimal getvitaminC() { - return vitaminC; - } - - public void setvitaminC(BigDecimal vitaminC) { - this.vitaminC = vitaminC; - } - - - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItemsRepository.java b/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItemsRepository.java deleted file mode 100644 index b911c5d..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/foodItems/entity/FoodItemsRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.foodItems.entity; - -import com.ffii.core.support.AbstractRepository; - -public interface FoodItemsRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/foodItems/req/SaveFoodItemsReq.java b/src/main/java/com/ffii/fhsmsc/modules/foodItems/req/SaveFoodItemsReq.java deleted file mode 100644 index 5864667..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/foodItems/req/SaveFoodItemsReq.java +++ /dev/null @@ -1,216 +0,0 @@ -package com.ffii.fhsmsc.modules.foodItems.req; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import jakarta.validation.constraints.NotNull; - -public class SaveFoodItemsReq { - private Long id; - - @NotNull - private String name; - private BigDecimal kcal; - private BigDecimal carbo; - private LocalDateTime date; - private BigDecimal fat; - private String meal; - private BigDecimal protein; - private BigDecimal size; - private BigDecimal sodium; - private BigDecimal potassium; - - private BigDecimal calcium; - - private BigDecimal phosphorus; - - private BigDecimal iron; - - private BigDecimal vitaminA; - - private BigDecimal vitaminB1; - - private BigDecimal vitaminB2; - - private BigDecimal niacin; - - private BigDecimal vitaminC; - private Long user_id; - - //private LocalDateTime created; - - private String meal_type; - /* - public LocalDateTime getCreated() { - return created; - } - - public void setCreated(LocalDateTime created) { - this.created = created; - } - */ - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public BigDecimal getKcal() { - return kcal; - } - - public void setKcal(BigDecimal kcal) { - this.kcal = kcal; - } - - public BigDecimal getCarbo() { - return carbo; - } - - public void setCarbo(BigDecimal carbo) { - this.carbo = carbo; - } - - public LocalDateTime getDate() { - return date; - } - - public void setDate(LocalDateTime date) { - this.date = date; - } - - public BigDecimal getFat() { - return fat; - } - - public void setFat(BigDecimal fat) { - this.fat = fat; - } - - public String getMeal() { - return meal; - } - - public void setMeal(String meal) { - this.meal = meal; - } - - public BigDecimal getProtein() { - return protein; - } - - public void setProtein(BigDecimal protein) { - this.protein = protein; - } - - public BigDecimal getSize() { - return size; - } - - public void setSize(BigDecimal size) { - this.size = size; - } - - public BigDecimal getSodium() { - return sodium; - } - - public void setSodium(BigDecimal sodium) { - this.sodium = sodium; - } - - public Long getUser_id() { - return user_id; - } - - public void setUser_id(Long user_id) { - this.user_id = user_id; - } - - public BigDecimal getPotassium() { - return potassium; - } - - public void setPotassium(BigDecimal potassium) { - this.potassium = potassium; - } - - public BigDecimal getCalcium() { - return calcium; - } - - public void setCalcium(BigDecimal calcium) { - this.calcium = calcium; - } - - public BigDecimal getPhosphorus() { - return phosphorus; - } - - public BigDecimal getIron() { - return iron; - } - - public void setIron(BigDecimal iron) { - this.iron = iron; - } - - public BigDecimal getVitaminA() { - return vitaminA; - } - - public void setVitaminA(BigDecimal vitaminA) { - this.vitaminA = vitaminA; - } - - public BigDecimal getVitaminB1() { - return vitaminB1; - } - - public void setVitaminB1(BigDecimal vitaminB1) { - this.vitaminB1 = vitaminB1; - } - - public BigDecimal getVitaminB2() { - return vitaminB2; - } - - public void setVitaminB2(BigDecimal vitaminB2) { - this.vitaminB2 = vitaminB2; - } - - public BigDecimal getNiacin() { - return niacin; - } - - public void setNiacin(BigDecimal niacin) { - this.niacin = niacin; - } - - public BigDecimal getVitaminC() { - return vitaminC; - } - - public void setVitaminC(BigDecimal vitaminC) { - this.vitaminC = vitaminC; - } - - public String getMeal_type() { - return meal_type; - } - - public void setMeal_type(String meal_type) { - this.meal_type = meal_type; - } -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/foodItems/service/FoodItemsService.java b/src/main/java/com/ffii/fhsmsc/modules/foodItems/service/FoodItemsService.java deleted file mode 100644 index 5bda46c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/foodItems/service/FoodItemsService.java +++ /dev/null @@ -1,443 +0,0 @@ -package com.ffii.fhsmsc.modules.foodItems.service; - -import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.enity.DailyNutritionSummary; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.req.DailyNutritionSummaryReq; -import com.ffii.fhsmsc.modules.DailyNutritionSummary.service.DailyNutritionSummaryService; -import com.ffii.fhsmsc.modules.foodItems.entity.FoodItems; -import com.ffii.fhsmsc.modules.foodItems.entity.FoodItemsRepository; -import com.ffii.fhsmsc.modules.foodItems.req.SaveFoodItemsReq; - -import jakarta.validation.Valid; - -@Service -public class FoodItemsService extends AbstractBaseEntityService{ - private final DailyNutritionSummaryService dailyNutritionSummaryService; - - public FoodItemsService(JdbcDao jdbcDao, FoodItemsRepository repository, - DailyNutritionSummaryService dailyNutritionSummaryService) { - super(jdbcDao, repository); - this.dailyNutritionSummaryService = dailyNutritionSummaryService; - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `food_items` fi" - + " WHERE fi.deleted = FALSE"); - - if (args != null) { - if (args.containsKey("userId")) { - sql.append(" AND fi.user_id = :userId"); - } - if (args.containsKey("date")) { - sql.append(" AND DATE(fi.date) = DATE(:date)"); - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - /** - * 根据日期范围和用户ID查询食物项 - * @param startDate 开始日期 - * @param endDate 结束日期 - * @param userId 用户ID - * @return 符合条件的食物项列表 - */ - public List> searchByDateRange(LocalDate startDate, LocalDate endDate, Integer userId) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `food_items` fi" - + " WHERE fi.deleted = FALSE"); - - // 添加日期范围条件 - sql.append(" AND DATE(fi.date) BETWEEN :startDate AND :endDate"); - - // 添加用户ID条件 - sql.append(" AND fi.user_id = :userId"); - - // 按日期和ID排序 - sql.append(" ORDER BY fi.date, fi.id"); - - // 准备参数 - Map params = new HashMap<>(); - params.put("startDate", java.sql.Date.valueOf(startDate)); - params.put("endDate", java.sql.Date.valueOf(endDate)); - params.put("userId", userId); - - // 执行查询 - return jdbcDao.queryForList(sql.toString(), params); - } - -@Transactional(rollbackFor = Exception.class) - public FoodItems saveOrUpdate(@Valid SaveFoodItemsReq req) { - FoodItems instance; - boolean isNew = false; - - if (req.getId() != null && req.getId() > 0) { - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new FoodItems(); - isNew = true; - } - - BeanUtils.copyProperties(req, instance); - if (instance.getCreated() == null) { - instance.setCreated(LocalDateTime.now()); - } - - // 先保存食物项 - saveAndFlush(instance); - - // 更新每日营养汇总数据 - updateDailyNutritionSummary(instance, isNew); - - return instance; - } - - /** - * 更新每日营养汇总数据 - */ - private void updateDailyNutritionSummary(FoodItems foodItem, boolean isNew) { - if (foodItem.getUser_id() == null || foodItem.getDate() == null) { - return; // 如果没有用户ID或日期,则不更新汇总数据 - } - - // 获取食物项的日期 - LocalDate localDate = foodItem.getDate().toLocalDate(); - Date foodDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); - - // 查找当天的营养汇总记录 - Map args = new HashMap<>(); - args.put("user_id", foodItem.getUser_id()); - args.put("date", foodDate); // 添加日期参数,确保只查询当天的记录 - List> summaries = dailyNutritionSummaryService.search(args); - - DailyNutritionSummaryReq summaryReq = new DailyNutritionSummaryReq(); - boolean found = false; - - // 查找对应日期的汇总记录(由于已经按日期过滤,这里只需要检查是否有记录) - if (!summaries.isEmpty()) { - Map item = summaries.get(0); - // 安全地将 id 转换为 Long 类型 - Object idObj = item.get("id"); - if (idObj instanceof Integer) { - summaryReq.setId(((Integer) idObj).longValue()); - } else if (idObj instanceof Long) { - summaryReq.setId((Long) idObj); - } else if (idObj != null) { - summaryReq.setId(Long.valueOf(idObj.toString())); - } - found = true; - } - - if (found) { - // 如果找到了记录,获取当前值并更新 - DailyNutritionSummary summary = dailyNutritionSummaryService.find(summaryReq.getId()).orElse(null); - if (summary != null) { - // 复制现有记录的值到请求对象 - copyNutritionValues(summaryReq, summary); - - // 更新营养汇总数据 - if (isNew) { - // 如果是新增食物项,增加营养值 - addNutritionValues(summaryReq, foodItem); - } else { - // 如果是更新食物项,重新计算当天所有食物项的总和 - recalculateNutritionSummary(summaryReq, foodItem.getUser_id(), localDate); - } - } - } else { - // 如果没有找到记录,创建新记录 - createNewNutritionSummary(summaryReq, foodItem, foodDate); - } - - // 确保 user_id 字段不为 null - if (summaryReq.getUser_id() == null) { - summaryReq.setUser_id(foodItem.getUser_id()); - } - - // 保存更新后的营养汇总数据 - dailyNutritionSummaryService.saveOrUpdate(summaryReq); - } - - /** - * 创建新的营养汇总记录 - */ - private void createNewNutritionSummary(DailyNutritionSummaryReq summaryReq, FoodItems foodItem, Date foodDate) { - summaryReq.setUser_id(foodItem.getUser_id()); - summaryReq.setDate(foodDate); - - // 设置创建和更新时间 - LocalDateTime now = LocalDateTime.now(); - summaryReq.setCreated(now); - summaryReq.setModified(now); - summaryReq.setDeleted(false); - summaryReq.setVersion(0); - - // 初始化营养值为0 - initializeNutritionValues(summaryReq); - - // 添加食物项的营养值 - addNutritionValues(summaryReq, foodItem); - } - - /** - * 复制营养汇总记录的值 - */ - private void copyNutritionValues(DailyNutritionSummaryReq summaryReq, DailyNutritionSummary summary) { - summaryReq.setTotal_calories(summary.getTotal_calories() != null ? summary.getTotal_calories() : BigDecimal.ZERO); - summaryReq.setTotal_protein(summary.getTotal_protein() != null ? summary.getTotal_protein() : BigDecimal.ZERO); - summaryReq.setTotal_fat(summary.getTotal_fat() != null ? summary.getTotal_fat() : BigDecimal.ZERO); - summaryReq.setTotal_carbs(summary.getTotal_carbs() != null ? summary.getTotal_carbs() : BigDecimal.ZERO); - summaryReq.setTotal_sodium(summary.getTotal_sodium() != null ? summary.getTotal_sodium() : BigDecimal.ZERO); - summaryReq.setTotal_potassium(summary.getTotal_potassium() != null ? summary.getTotal_potassium() : BigDecimal.ZERO); - summaryReq.setTotal_calcium(summary.getTotal_calcium() != null ? summary.getTotal_calcium() : BigDecimal.ZERO); - summaryReq.setTotal_phosphorus(summary.getTotal_phosphorus() != null ? summary.getTotal_phosphorus() : BigDecimal.ZERO); - summaryReq.setTotal_iron(summary.getTotal_iron() != null ? summary.getTotal_iron() : BigDecimal.ZERO); - summaryReq.setTotal_vitamin_a(summary.getTotal_vitamin_a() != null ? summary.getTotal_vitamin_a() : BigDecimal.ZERO); - summaryReq.setTotal_vitamin_b1(summary.getTotal_vitamin_b1() != null ? summary.getTotal_vitamin_b1() : BigDecimal.ZERO); - summaryReq.setTotal_vitamin_b2(summary.getTotal_vitamin_b2() != null ? summary.getTotal_vitamin_b2() : BigDecimal.ZERO); - summaryReq.setTotal_niacin(summary.getTotal_niacin() != null ? summary.getTotal_niacin() : BigDecimal.ZERO); - summaryReq.setTotal_vitamin_c(summary.getTotal_vitamin_c() != null ? summary.getTotal_vitamin_c() : BigDecimal.ZERO); - summaryReq.setBreakfast_calories(summary.getBreakfast_calories() != null ? summary.getBreakfast_calories() : BigDecimal.ZERO); - summaryReq.setLunch_calories(summary.getLunch_calories() != null ? summary.getLunch_calories() : BigDecimal.ZERO); - summaryReq.setDinner_calories(summary.getDinner_calories() != null ? summary.getDinner_calories() : BigDecimal.ZERO); - summaryReq.setSnack_calories(summary.getSnack_calories() != null ? summary.getSnack_calories() : BigDecimal.ZERO); - - // 保留其他元数据 - summaryReq.setUser_id(summary.getUser_id()); - summaryReq.setDate(summary.getDate()); - summaryReq.setCreated(summary.getCreated()); - summaryReq.setCreatedBy(summary.getCreatedBy()); - summaryReq.setModified(LocalDateTime.now()); - summaryReq.setDeleted(summary.getDeleted()); - summaryReq.setVersion(summary.getVersion()); - } - - /** - * 初始化营养值为0 - */ - private void initializeNutritionValues(DailyNutritionSummaryReq summaryReq) { - summaryReq.setTotal_calories(BigDecimal.ZERO); - summaryReq.setTotal_protein(BigDecimal.ZERO); - summaryReq.setTotal_fat(BigDecimal.ZERO); - summaryReq.setTotal_carbs(BigDecimal.ZERO); - summaryReq.setTotal_sodium(BigDecimal.ZERO); - summaryReq.setTotal_potassium(BigDecimal.ZERO); - summaryReq.setTotal_calcium(BigDecimal.ZERO); - summaryReq.setTotal_phosphorus(BigDecimal.ZERO); - summaryReq.setTotal_iron(BigDecimal.ZERO); - summaryReq.setTotal_vitamin_a(BigDecimal.ZERO); - summaryReq.setTotal_vitamin_b1(BigDecimal.ZERO); - summaryReq.setTotal_vitamin_b2(BigDecimal.ZERO); - summaryReq.setTotal_niacin(BigDecimal.ZERO); - summaryReq.setTotal_vitamin_c(BigDecimal.ZERO); - summaryReq.setBreakfast_calories(BigDecimal.ZERO); - summaryReq.setLunch_calories(BigDecimal.ZERO); - summaryReq.setDinner_calories(BigDecimal.ZERO); - summaryReq.setSnack_calories(BigDecimal.ZERO); - } - - /** - * 增加营养值 - */ - private void addNutritionValues(DailyNutritionSummaryReq summaryReq, FoodItems foodItem) { - // 获取食物的份量,如果为空则默认为1 - BigDecimal size = foodItem.getSize(); - if (size == null) { - size = BigDecimal.ONE; - } - - // 总卡路里 - if (foodItem.getKcal() != null) { - BigDecimal calories = foodItem.getKcal(); - // 根据份量调整卡路里 - // calories = calories.multiply(size).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); - - summaryReq.setTotal_calories(summaryReq.getTotal_calories().add(calories)); - - // 根据餐点类型更新对应的卡路里 - String meal = foodItem.getMeal(); - if (meal != null) { - if ("breakfast".equalsIgnoreCase(meal)) { - summaryReq.setBreakfast_calories(summaryReq.getBreakfast_calories().add(calories)); - } else if ("lunch".equalsIgnoreCase(meal)) { - summaryReq.setLunch_calories(summaryReq.getLunch_calories().add(calories)); - } else if ("dinner".equalsIgnoreCase(meal)) { - summaryReq.setDinner_calories(summaryReq.getDinner_calories().add(calories)); - } else if ("snack".equalsIgnoreCase(meal)) { - summaryReq.setSnack_calories(summaryReq.getSnack_calories().add(calories)); - } - } - } - - // 其他营养素 - if (foodItem.getProtein() != null) { - BigDecimal protein = foodItem.getProtein(); - // 根据份量调整蛋白质 - // protein = protein.multiply(size).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); - - summaryReq.setTotal_protein(summaryReq.getTotal_protein().add(protein)); - } - - // 其他营养素也类似处理... - - if (foodItem.getFat() != null) { - summaryReq.setTotal_fat(summaryReq.getTotal_fat().add(foodItem.getFat())); - } - if (foodItem.getCarbo() != null) { - summaryReq.setTotal_carbs(summaryReq.getTotal_carbs().add(foodItem.getCarbo())); - } - if (foodItem.getSodium() != null) { - summaryReq.setTotal_sodium(summaryReq.getTotal_sodium().add(foodItem.getSodium())); - } - if (foodItem.getpotassium() != null) { - summaryReq.setTotal_potassium(summaryReq.getTotal_potassium().add(foodItem.getpotassium())); - } - if (foodItem.getcalcium() != null) { - summaryReq.setTotal_calcium(summaryReq.getTotal_calcium().add(foodItem.getcalcium())); - } - if (foodItem.getphosphorus() != null) { - summaryReq.setTotal_phosphorus(summaryReq.getTotal_phosphorus().add(foodItem.getphosphorus())); - } - if (foodItem.getiron() != null) { - summaryReq.setTotal_iron(summaryReq.getTotal_iron().add(foodItem.getiron())); - } - if (foodItem.getvitaminA() != null) { - summaryReq.setTotal_vitamin_a(summaryReq.getTotal_vitamin_a().add(foodItem.getvitaminA())); - } - if (foodItem.getvitaminB1() != null) { - summaryReq.setTotal_vitamin_b1(summaryReq.getTotal_vitamin_b1().add(foodItem.getvitaminB1())); - } - if (foodItem.getvitaminB2() != null) { - summaryReq.setTotal_vitamin_b2(summaryReq.getTotal_vitamin_b2().add(foodItem.getvitaminB2())); - } - if (foodItem.getniacin() != null) { - summaryReq.setTotal_niacin(summaryReq.getTotal_niacin().add(foodItem.getniacin())); - } - if (foodItem.getvitaminC() != null) { - summaryReq.setTotal_vitamin_c(summaryReq.getTotal_vitamin_c().add(foodItem.getvitaminC())); - } - } - - /** - * 重新计算营养汇总数据 - */ - private void recalculateNutritionSummary(DailyNutritionSummaryReq summaryReq, Long userId, LocalDate date) { - // 查询当天该用户的所有食物项 - Map args = new HashMap<>(); - args.put("userId", userId); - Date foodDate = Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()); - args.put("date", foodDate); - List> foodItems = search(args); - - // 保存日期和用户ID字段 - Date originalDate = summaryReq.getDate(); - Long originalUserId = summaryReq.getUser_id(); - - // 重置所有营养值 - initializeNutritionValues(summaryReq); - - // 恢复日期字段 - if (originalDate == null) { - // 如果原始日期为空,使用传入的日期 - summaryReq.setDate(foodDate); - } else { - // 否则恢复原始日期 - summaryReq.setDate(originalDate); - } - - // 恢复用户ID字段 - if (originalUserId == null) { - // 如果原始用户ID为空,使用传入的用户ID - summaryReq.setUser_id(userId); - } else { - // 否则恢复原始用户ID - summaryReq.setUser_id(originalUserId); - } - - // 遍历所有食物项,累加营养值 - for (Map item : foodItems) { - FoodItems tempItem = createTempFoodItem(item); - if (tempItem != null) { - addNutritionValues(summaryReq, tempItem); - } - } - } - - /** - * 从Map创建临时FoodItems对象 - */ - private FoodItems createTempFoodItem(Map item) { - FoodItems tempItem = new FoodItems(); - - // 获取食物的份量 - BigDecimal size = (BigDecimal) item.get("size"); - - // 设置基本属性 - tempItem.setKcal((BigDecimal) item.get("kcal")); - tempItem.setProtein((BigDecimal) item.get("protein")); - tempItem.setFat((BigDecimal) item.get("fat")); - tempItem.setCarbo((BigDecimal) item.get("carbo")); - tempItem.setSodium((BigDecimal) item.get("sodium")); - tempItem.setpotassium((BigDecimal) item.get("potassium")); - tempItem.setcalcium((BigDecimal) item.get("calcium")); - tempItem.setphosphorus((BigDecimal) item.get("phosphorus")); - tempItem.setiron((BigDecimal) item.get("iron")); - tempItem.setvitaminA((BigDecimal) item.get("vitaminA")); - tempItem.setvitaminB1((BigDecimal) item.get("vitaminB1")); - tempItem.setvitaminB2((BigDecimal) item.get("vitaminB2")); - tempItem.setniacin((BigDecimal) item.get("niacin")); - tempItem.setvitaminC((BigDecimal) item.get("vitaminC")); - tempItem.setMeal((String) item.get("meal")); - tempItem.setSize(size); - - return tempItem; - } - - /** - * 判断两个日期是否是同一天 - */ - private boolean isSameDay(Date date1, Date date2) { - if (date1 == null || date2 == null) { - return false; - } - - // 安全地转换日期为 LocalDate - LocalDate localDate1 = convertToLocalDate(date1); - LocalDate localDate2 = convertToLocalDate(date2); - - return localDate1.equals(localDate2); - } - - /** - * 安全地将 Date 转换为 LocalDate - */ - private LocalDate convertToLocalDate(Date date) { - if (date instanceof java.sql.Date) { - // 处理 java.sql.Date - return ((java.sql.Date) date).toLocalDate(); - } else { - // 处理 java.util.Date - return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); - } - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/foodItems/web/FoodItemsController.java b/src/main/java/com/ffii/fhsmsc/modules/foodItems/web/FoodItemsController.java deleted file mode 100644 index 1e1d49d..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/foodItems/web/FoodItemsController.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ffii.fhsmsc.modules.foodItems.web; - -import java.util.Map; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.List; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.foodItems.req.SaveFoodItemsReq; -import com.ffii.fhsmsc.modules.foodItems.service.FoodItemsService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/foodItems") -public class FoodItemsController { - private FoodItemsService foodItemsService; - - public FoodItemsController( - FoodItemsService foodItemsService - ) { - this.foodItemsService = foodItemsService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(foodItemsService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("userId") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @GetMapping("/listByDateRange") - public RecordsRes> listByDateRange( - @RequestParam("startDate") String startDateStr, - @RequestParam("endDate") String endDateStr, - @RequestParam("userId") Integer userId) { - - // 将字符串日期解析为LocalDate - DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE; - LocalDate startDate = LocalDate.parse(startDateStr, formatter); - LocalDate endDate = LocalDate.parse(endDateStr, formatter); - - // 调用服务层方法获取数据 - List> results = foodItemsService.searchByDateRange(startDate, endDate, userId); - - return new RecordsRes<>(results); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid SaveFoodItemsReq req) { - return new IdRes(foodItemsService.saveOrUpdate(req).getId()); - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impact.java b/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impact.java deleted file mode 100644 index a82bd5d..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impact.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrient_impact.enity; - - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; - -/** @author Terence */ -@Entity -@Table(name = "nutrient_impact") -public class nutrient_impact extends BaseEntity { - - @NotBlank - @Column - private String nutrient_name; - - @Column - private String nutrient_impact; - - @Column - private String organ_affected; - - - @Column - - private String impact_description; -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impactRepository.java b/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impactRepository.java deleted file mode 100644 index 28b6a20..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrient_impact/enity/nutrient_impactRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrient_impact.enity; - -public class nutrient_impactRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_need.java b/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_need.java deleted file mode 100644 index 050560f..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_need.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrients_need.enity; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import jakarta.validation.constraints.NotBlank; - -/** @author Terence */ -@Entity -@Table(name = "nutrients_need") -public class Nutrients_need extends BaseEntity { - - @NotBlank - @Column - private int id; - - @Column - private BigDecimal bmr; - - @Column - private BigDecimal tdee; - - @Column - private BigDecimal fat_need; - - @Column - private BigDecimal protein_need; - - @Column - private BigDecimal carbo_need; - - @Column - private LocalDateTime last_updated; - - // getter & setter - - public int getid() { - return id; - } - - public void setid(int id) { - this.id = id; - } - public BigDecimal getbmr() { - return bmr; - } - public void setbmr(BigDecimal bmr) { - this.bmr = bmr; - } - public BigDecimal gettdee() { - return tdee; - } - public void settdee(BigDecimal tdee) { - this.tdee = tdee; - } - public BigDecimal getfat_need() { - return fat_need; - } - public void setfat_need(BigDecimal fat_need) { - this.fat_need = fat_need; - } - public BigDecimal getprotein_need() { - return protein_need; - } - public void setprotein_need(BigDecimal protein_need) { - this.protein_need = protein_need; - } - public BigDecimal getcarbo_need() { - return carbo_need; - } - public void setcarbo_need(BigDecimal carbo_need) { - this.carbo_need = carbo_need; - } - public LocalDateTime getlast_updated() { - return last_updated; - } - public void setlast_updated(LocalDateTime last_updated) { - this.last_updated = last_updated; - } - - - - - - - - -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_needRepository.java b/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_needRepository.java deleted file mode 100644 index d26d436..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/enity/Nutrients_needRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrients_need.enity; -import com.ffii.core.support.AbstractRepository; - -public interface Nutrients_needRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/req/SaveNutrients_needReq.java b/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/req/SaveNutrients_needReq.java deleted file mode 100644 index edf0e50..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/req/SaveNutrients_needReq.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrients_need.req; -import java.math.BigDecimal; -import java.time.LocalDateTime; - -public class SaveNutrients_needReq { - private Long id; - private BigDecimal bmr; - private BigDecimal tdee; - private BigDecimal fat_need; - private BigDecimal protein_need; - private BigDecimal carbo_need; - private LocalDateTime last_updated; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public BigDecimal getBmr() { - return bmr; - } - public void setBmr(BigDecimal bmr) { - this.bmr = bmr; - } - public BigDecimal getTdee() { - return tdee; - } - public BigDecimal getFat_need() { - return fat_need; - } - public void setFat_need(BigDecimal fat_need) { - this.fat_need = fat_need; - } - public BigDecimal getProtein_need() { - return protein_need; - } - public void setProtein_need(BigDecimal protein_need) { - this.protein_need = protein_need; - } - public BigDecimal getCarbo_need() { - return carbo_need; - } - public void setCarbo_need(BigDecimal carbo_need) { - this.carbo_need = carbo_need; - } - public LocalDateTime getLast_updated() { - return last_updated; - } - public void setLast_updated(LocalDateTime last_updated) { - this.last_updated = last_updated; - } - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/service/Nutrients_needService.java b/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/service/Nutrients_needService.java deleted file mode 100644 index 0e2245b..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/service/Nutrients_needService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrients_need.service; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.nutrients_need.enity.Nutrients_need; -import com.ffii.fhsmsc.modules.nutrients_need.enity.Nutrients_needRepository; -import com.ffii.fhsmsc.modules.nutrients_need.req.SaveNutrients_needReq; - -import jakarta.validation.Valid; -@Service -public class Nutrients_needService extends AbstractBaseEntityService { - public Nutrients_needService(JdbcDao jdbcDao, Nutrients_needRepository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - StringBuilder sql = new StringBuilder("SELECT" - + " fi.*" - + " FROM `nutrients_need` fi" - + " WHERE 1=1"); - - // if (args != null) { - // if (args.containsKey(Params.QUERY)) sql.append(" AND (g.name LIKE :query)"); - // if (args.containsKey(Params.ID)) sql.append(" AND g.id = :id"); - // if (args.containsKey(Params.NAME)) sql.append(" AND g.name LIKE :name"); - // if (args.containsKey("description")) sql.append(" AND g.description LIKE :description"); - // } - if (args != null) { - if (args.containsKey("user_Id")) { - sql.append(" AND fi.id = :user_Id"); // 使用 id 而不是 user_id - } - } - sql.append(" ORDER BY fi.id"); - - return jdbcDao.queryForList(sql.toString(), args); - } - - @Transactional(rollbackFor = Exception.class) - public Nutrients_need saveOrUpdate(@Valid SaveNutrients_needReq req) { - Nutrients_need instance; - - if (req.getId() != null) { - if(req.getId()>0){ - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - } else { - instance = new Nutrients_need(); - } - } else { - instance = new Nutrients_need(); - } - BeanUtils.copyProperties(req, instance); - saveAndFlush(instance); - - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/web/Nutrients_needController.java b/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/web/Nutrients_needController.java deleted file mode 100644 index 4a4b65c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/nutrients_need/web/Nutrients_needController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.ffii.fhsmsc.modules.nutrients_need.web; -import java.util.Map; - -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.nutrients_need.req.SaveNutrients_needReq; -import com.ffii.fhsmsc.modules.nutrients_need.service.Nutrients_needService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/nutrients_need") -public class Nutrients_needController { - private Nutrients_needService nutrients_needService; - - public Nutrients_needController( - Nutrients_needService nutrients_needService - ) { - this.nutrients_needService = nutrients_needService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - return new RecordsRes<>(nutrients_needService.search( - CriteriaArgsBuilder.withRequest(request) - .addInteger("user_Id") - // .addInteger(Params.ID) - // .addStringLike(Params.NAME) - // .addStringLike("description") - // .addInteger("userId") - .build())); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid SaveNutrients_needReq req) { - return new IdRes(nutrients_needService.saveOrUpdate(req).getId()); - } - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_information.java b/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_information.java new file mode 100644 index 0000000..fa96227 --- /dev/null +++ b/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_information.java @@ -0,0 +1,19 @@ +package com.ffii.fhsmsc.modules.pet_information.enity; + +import com.ffii.core.entity.BaseEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +@Entity +@Table(name = "pet_information") +public class pet_information extends BaseEntity { + @Column(name = "owner_id") + private Long owner_id; + + @Column(name = "pet_name") + private String pet_name; + + @Column(name = "gender") + private String gender; +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_informationRepository.java b/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_informationRepository.java new file mode 100644 index 0000000..b0e4f2c --- /dev/null +++ b/src/main/java/com/ffii/fhsmsc/modules/pet_information/enity/pet_informationRepository.java @@ -0,0 +1,6 @@ +package com.ffii.fhsmsc.modules.pet_information.enity; + +import com.ffii.core.support.AbstractRepository; + +public interface pet_informationRepository extends AbstractRepository { +} diff --git a/src/main/java/com/ffii/fhsmsc/modules/user/service/UserAuthorityService.java b/src/main/java/com/ffii/fhsmsc/modules/user/service/UserAuthorityService.java index e49c14c..82a19c7 100644 --- a/src/main/java/com/ffii/fhsmsc/modules/user/service/UserAuthorityService.java +++ b/src/main/java/com/ffii/fhsmsc/modules/user/service/UserAuthorityService.java @@ -34,7 +34,8 @@ public class UserAuthorityService extends AbstractService { @Transactional(rollbackFor = Exception.class) public List>/*Set*/ getUserAuthority(User user) { - List> records = jdbcDao.queryForList(USER_AUTH_SQL + UNION_SQL + GROUP_AUTH_SQL, + //List> records = jdbcDao.queryForList(USER_AUTH_SQL + UNION_SQL + GROUP_AUTH_SQL, + List> records = jdbcDao.queryForList(USER_AUTH_SQL, Map.of("userId", user.getId())); //records.forEach(item -> auths.add(new SimpleGrantedAuthority((String) item.get("authority")))); diff --git a/src/main/java/com/ffii/fhsmsc/modules/user/service/UserService.java b/src/main/java/com/ffii/fhsmsc/modules/user/service/UserService.java index acebed9..22918bf 100644 --- a/src/main/java/com/ffii/fhsmsc/modules/user/service/UserService.java +++ b/src/main/java/com/ffii/fhsmsc/modules/user/service/UserService.java @@ -89,7 +89,8 @@ public class UserService extends AbstractBaseEntityService { Set auths = new LinkedHashSet(); auths.add(new SimpleGrantedAuthority("ROLE_USER")); - jdbcDao.queryForList(USER_AUTH_SQL + UNION_SQL + GROUP_AUTH_SQL, Map.of("userId", user.getId())) + //jdbcDao.queryForList(USER_AUTH_SQL + UNION_SQL + GROUP_AUTH_SQL, Map.of("userId", user.getId())) + jdbcDao.queryForList(USER_AUTH_SQL , Map.of("userId", user.getId())) .forEach(item -> auths.add(new SimpleGrantedAuthority((String) item.get("authority")))); user.setAuthorities(auths); diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/User_information.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/User_information.java deleted file mode 100644 index aafa579..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/User_information.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.entity; - -import java.time.LocalDateTime; - -import com.ffii.core.entity.BaseEntity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** @author Terence */ -@Entity -@Table(name = "user_information") -public class User_information extends BaseEntity { - @Column - private Long user_id; - @Column - private Long id; - //@NotBlank - - - @Column - private String gender; - - @Column - private String name; - - @Column - private LocalDateTime date_of_birth; - - @Column - private String height; - - @Column - private String weight; - - - - @Column - private String goal; - - - @Column - private String experience; - - @Column - private String activitylevel; - - - // getter & setter - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - public Long getuser_id() { - return user_id; - } - - public void setuser_id(Long user_id) { - this.user_id = user_id; - } - - public String getgender() { - return gender; - } - - public void setgender(String gender) { - this.gender = gender; - } - - public String getname() { - return name; - } - - public void setname(String name) { - this.name = name; - } - - public LocalDateTime getdate_of_birth() { - return date_of_birth; - } - - public void setdate_of_birth(LocalDateTime date_of_birth) { - this.date_of_birth = date_of_birth; - } - - public String getheight() { - return height; - } - - public void setheight(String height) { - this.height = height; - } - - public String getweight() { - return weight; - } - - public void setweight(String weight) { - this.weight = weight; - } - - - public String getgoal() { - return goal; - } - - public void setgoal(String goal) { - this.goal = goal; - } - - public String getexperience() { - return experience; - } - - public void setexperience(String experience) { - this.experience = experience; - } - public String getactivitylevel() { - return activitylevel; - } - - public void setactivitylevel(String activitylevel) { - this.activitylevel = activitylevel; - } - - -} - diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/user_informationRepository.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/user_informationRepository.java deleted file mode 100644 index e9f855c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/entity/user_informationRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.entity; - -import com.ffii.core.support.AbstractRepository; - -public interface user_informationRepository extends AbstractRepository { - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/req/Saveuser_informationReq.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/req/Saveuser_informationReq.java deleted file mode 100644 index cd9a8f4..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/req/Saveuser_informationReq.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.req; - -import java.time.LocalDateTime; - -import jakarta.validation.constraints.NotNull; - -public class Saveuser_informationReq { - private Long id; - @NotNull - private Long user_id; - private String gender; - private String name; - private LocalDateTime date_of_birth; - private String height; - private String weight; - private String goal; - private String experience; - private String activitylevel; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getuser_id() { - return user_id; - } - - public void setuser_id(Long user_id) { - this.user_id = user_id; - } - - public String getgender() { - return gender; - } - - public void setgender(String gender) { - this.gender = gender; - } - - public String getname() { - return name; - } - - public void setname(String name) { - this.name = name; - } - - public LocalDateTime getdate_of_birth() { - return date_of_birth; - } - - public void setdate_of_birth(LocalDateTime date_of_birth) { - this.date_of_birth = date_of_birth; - } - - public String getheight() { - return height; - } - - public void setheight(String height) { - this.height = height; - } - - public String getweight() { - return weight; - } - - public void setweight(String weight) { - this.weight = weight; - } - - - public String getgoal() { - return goal; - } - - public void setgoal(String goal) { - this.goal = goal; - } - - public String getexperience() { - return experience; - } - - public void setexperience(String experience) { - this.experience = experience; - } - public String getactivitylevel() { - return activitylevel; - } - - public void setactivitylevel(String activitylevel) { - this.activitylevel = activitylevel; - } - - -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/req/UserInfoCombineReq.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/req/UserInfoCombineReq.java deleted file mode 100644 index 935c59c..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/req/UserInfoCombineReq.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.req; - -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotNull; -import java.util.List; - -public class UserInfoCombineReq { - @Valid - @NotNull - private Saveuser_informationReq userInformation; - - private List allergyIds; - - // Getters and setters - public Saveuser_informationReq getUserInformation() { - return userInformation; - } - - public void setUserInformation(Saveuser_informationReq userInformation) { - this.userInformation = userInformation; - } - - public List getAllergyIds() { - return allergyIds; - } - - public void setAllergyIds(List allergyIds) { - this.allergyIds = allergyIds; - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/service/UserInformationCombineService.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/service/UserInformationCombineService.java deleted file mode 100644 index 1ee5479..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/service/UserInformationCombineService.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.service; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.fhsmsc.modules.allergy.service.UserAllergyService; -import com.ffii.fhsmsc.modules.user_information.entity.User_information; -import com.ffii.fhsmsc.modules.user_information.req.UserInfoCombineReq; - -@Service -public class UserInformationCombineService { - private final user_informationService userInformationService; - private final UserAllergyService userAllergyService; - - public UserInformationCombineService( - user_informationService userInformationService, - UserAllergyService userAllergyService) { - this.userInformationService = userInformationService; - this.userAllergyService = userAllergyService; - } - - public Map getCombinedUserInfo(Integer userId) { - Map args = new HashMap<>(); - args.put("user_id", userId); - - // 获取用户基本信息 - List> userInfo = userInformationService.search(args); - // 获取用户过敏信息 - List> userAllergyInfo = userAllergyService.search(args); - - Map combinedInfo = new HashMap<>(); - combinedInfo.put("user_information", userInfo.isEmpty() ? null : userInfo.get(0)); - combinedInfo.put("allergies", userAllergyInfo); - - return combinedInfo; - } - - @Transactional(rollbackFor = Exception.class) - public Long saveCombinedInfo(UserInfoCombineReq req) { - // 保存用户基本信息 - User_information userInfo = userInformationService.saveOrUpdate(req.getUserInformation()); - - // 更新用户过敏信息 - if (req.getAllergyIds() != null) { - // 将 Long 转换为 int - int userId = req.getUserInformation().getuser_id().intValue(); - userAllergyService.updateUserAllergies(userId, req.getAllergyIds()); - } - - return userInfo.getId(); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/service/user_informationService.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/service/user_informationService.java deleted file mode 100644 index d00c453..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/service/user_informationService.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.service; - -import java.util.List; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.ffii.core.exception.InternalServerErrorException; -import com.ffii.core.support.AbstractBaseEntityService; -import com.ffii.core.support.JdbcDao; -import com.ffii.core.utils.BeanUtils; -import com.ffii.fhsmsc.modules.user_information.entity.User_information; -import com.ffii.fhsmsc.modules.user_information.entity.user_informationRepository; -import com.ffii.fhsmsc.modules.user_information.req.Saveuser_informationReq; - -import jakarta.validation.Valid; - -@Service -public class user_informationService extends AbstractBaseEntityService{ - private static final Logger logger = LoggerFactory.getLogger(user_informationService.class); - - public user_informationService(JdbcDao jdbcDao, user_informationRepository repository) { - super(jdbcDao, repository); - } - - public List> search(Map args) { - logger.info("Search called with args: {}", args); - StringBuilder sql = new StringBuilder("SELECT" - + " fi.id," - + " fi.user_id," - + " fi.gender," - + " fi.name," - + " fi.activitylevel," - + " fi.date_of_birth," - + " fi.height," - + " fi.weight," - + " fi.goal," - + " fi.experience" - + " FROM user_information fi" - + " WHERE 1=1" - ); - if (args != null) { - if (args.containsKey("user_id")) { - sql.append(" AND fi.user_id = :user_id"); - logger.info("Added user_id filter: {}", args.get("user_id")); - } - } - - sql.append(" ORDER BY fi.id"); - logger.info("Final SQL query: {}", sql.toString()); - - List> result = jdbcDao.queryForList(sql.toString(), args); - logger.info("Query returned {} results", result.size()); - return result; - } - - @Transactional(rollbackFor = Exception.class) - public User_information saveOrUpdate(@Valid Saveuser_informationReq req) { - User_information instance; - - if (req.getId() != null && req.getId() > 0) { - // 更新现有记录 - instance = find(req.getId()).orElseThrow(InternalServerErrorException::new); - - // 只更新非空字段 - if (req.getuser_id() != null) { - instance.setuser_id(req.getuser_id()); - } - if (req.getgender() != null) { - instance.setgender(req.getgender()); - } - if (req.getname() != null) { - instance.setname(req.getname()); - } - if (req.getdate_of_birth() != null) { - instance.setdate_of_birth(req.getdate_of_birth()); - } - if (req.getheight() != null) { - instance.setheight(req.getheight()); - } - if (req.getweight() != null) { - instance.setweight(req.getweight()); - } - - if (req.getgoal() != null) { - instance.setgoal(req.getgoal()); - } - if (req.getexperience() != null) { - instance.setexperience(req.getexperience()); - } - if (req.getactivitylevel() != null) { - instance.setactivitylevel(req.getactivitylevel()); - } - } else { - // 创建新记录 - instance = new User_information(); - BeanUtils.copyProperties(req, instance); - } - - saveAndFlush(instance); - return instance; - } -} diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/web/UserInformationCombineController.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/web/UserInformationCombineController.java deleted file mode 100644 index f41f320..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/web/UserInformationCombineController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.web; - -import org.springframework.web.bind.annotation.*; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.response.IdRes; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; // 添加这个导入 -import java.util.Map; -import java.util.List; // 添加这个导入 -import com.ffii.fhsmsc.modules.user_information.service.UserInformationCombineService; -import com.ffii.fhsmsc.modules.user_information.req.UserInfoCombineReq; - -@RestController -@RequestMapping("/user_information_combine") -public class UserInformationCombineController { - private final UserInformationCombineService userInformationCombineService; - - public UserInformationCombineController(UserInformationCombineService userInformationCombineService) { - this.userInformationCombineService = userInformationCombineService; - } - - @GetMapping("/get") - public RecordsRes> getUserCombinedInfo(@RequestParam("user_id") Integer userId) { - Map result = userInformationCombineService.getCombinedUserInfo(userId); - return new RecordsRes>(List.of(result)); // 明确指定类型 - } - - @PostMapping("/save") - public IdRes saveUserCombinedInfo(@RequestBody @Valid UserInfoCombineReq req) { - return new IdRes(userInformationCombineService.saveCombinedInfo(req)); - } -} \ No newline at end of file diff --git a/src/main/java/com/ffii/fhsmsc/modules/user_information/web/user_informationController.java b/src/main/java/com/ffii/fhsmsc/modules/user_information/web/user_informationController.java deleted file mode 100644 index 42d0244..0000000 --- a/src/main/java/com/ffii/fhsmsc/modules/user_information/web/user_informationController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.ffii.fhsmsc.modules.user_information.web; - -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.ServletRequestBindingException; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import com.ffii.core.response.IdRes; -import com.ffii.core.response.RecordsRes; -import com.ffii.core.utils.CriteriaArgsBuilder; -import com.ffii.fhsmsc.modules.user_information.req.Saveuser_informationReq; -import com.ffii.fhsmsc.modules.user_information.service.user_informationService; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.Valid; - -@RestController -@RequestMapping("/user_information") -public class user_informationController { - private static final Logger logger = LoggerFactory.getLogger(user_informationController.class); - private user_informationService user_informationService; - - public user_informationController( - user_informationService user_informationService - ) { - this.user_informationService = user_informationService; - } - - @GetMapping("/list") - public RecordsRes> listJson(HttpServletRequest request) throws ServletRequestBindingException { - logger.info("Received list request with parameters: {}", request.getParameterMap()); - Map args = CriteriaArgsBuilder.withRequest(request) - .addInteger("user_id") - .build(); - logger.info("Built args: {}", args); - return new RecordsRes<>(user_informationService.search(args)); - } - - @PostMapping("/save") - public IdRes saveOrUpdate(@RequestBody @Valid Saveuser_informationReq req) { - return new IdRes(user_informationService.saveOrUpdate(req).getId()); - } -} diff --git a/src/main/resources/application-db-anna.yml b/src/main/resources/application-db-anna.yml index 55fe7cd..d8f403e 100644 --- a/src/main/resources/application-db-anna.yml +++ b/src/main/resources/application-db-anna.yml @@ -1,7 +1,7 @@ spring: datasource: - jdbc-url: jdbc:mysql://192.168.1.228:3306/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + jdbc-url: jdbc:mysql://192.168.1.228:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application-db-prod.yml b/src/main/resources/application-db-prod.yml index a1509bf..fef53ad 100644 --- a/src/main/resources/application-db-prod.yml +++ b/src/main/resources/application-db-prod.yml @@ -1,7 +1,7 @@ spring: datasource: - jdbc-url: jdbc:mysql://127.0.0.1:3306/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + jdbc-url: jdbc:mysql://127.0.0.1:3308/fhsmscdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 username: root password: secret driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/db/changelog/changes/enson_change/05_create_food1.sql b/src/main/resources/db/changelog/changes/enson_change/05_create_food1.sql deleted file mode 100644 index aed6f3e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/05_create_food1.sql +++ /dev/null @@ -1,54 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `food1` ( - `id` int(11) NOT NULL, - `name` varchar(100) NOT NULL, - `kcal` decimal(10,2) DEFAULT NULL, - `protein` decimal(10,2) NOT NULL DEFAULT 0.00, - `fat` decimal(10,2) NOT NULL DEFAULT 0.00, - `satFat` decimal(10,2) NOT NULL DEFAULT 0.00, - `carbo` decimal(10,2) NOT NULL DEFAULT 0.00, - `sodium` decimal(10,2) NOT NULL DEFAULT 0.00, - `Ingredients` varchar(255) DEFAULT NULL, - `food_type` varchar(255) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -INSERT INTO `food1` (`id`, `name`, `kcal`, `protein`, `fat`, `satFat`, `carbo`, `sodium`, `Ingredients`, `food_type`) VALUES -(1, 'Apple', 52.00, 0.00, 0.00, 0.00, 14.00, 0.00, NULL, 'fruit'), -(2, 'Banana', 105.00, 1.30, 0.30, 0.10, 27.00, 1.00, NULL, 'fruit'), -(3, 'Chicken breast', 165.00, 31.00, 6.10, 2.00, 1.00, 69.00, NULL, 'food'), -(4, 'Brown rice', 216.00, 5.00, 3.00, 0.40, 45.00, 0.00, NULL, 'food'), -(5, 'Yogurt', 148.00, 5.20, 6.10, 3.40, 10.00, 125.00, NULL, 'food'), -(6, 'Egg', 78.00, 6.30, 5.60, 1.60, 0.40, 62.00, NULL, 'food'), -(7, 'Avocado', 160.00, 2.00, 14.60, 2.00, 8.50, 7.00, NULL, 'fruit'), -(8, 'Salmon', 206.00, 22.00, 13.60, 3.80, 5.00, 0.00, NULL, 'food'), -(9, 'Spinach', 23.00, 2.70, 0.40, 0.10, 3.60, 79.00, NULL, 'vegetable'), -(10, 'Carrot', 41.00, 0.90, 0.20, 0.00, 9.60, 69.00, NULL, 'vegetable'), -(11, 'Broccoli', 34.00, 2.80, 0.60, 0.20, 6.60, 66.00, NULL, 'vegetable'), -(12, 'Potato', 77.00, 2.00, 0.10, 0.00, 17.30, 10.00, NULL, 'vegetable'), -(13, 'Sweet potato', 101.00, 1.60, 0.10, 0.00, 22.00, 3.00, NULL, 'vegetable'), -(14, 'Onion', 40.00, 1.40, 0.10, 0.00, 9.30, 3.00, NULL, 'vegetable'), -(15, 'Garlic', 140.00, 6.70, 15.40, 3.30, 6.20, 167.00, NULL, 'food'), -(16, 'Tomato', 18.00, 0.90, 0.20, 0.00, 3.90, 5.00, NULL, 'vegetable'), -(17, 'Cucumber', 16.00, 0.70, 0.10, 0.00, 3.80, 2.00, NULL, 'fruit'), -(18, 'Lettuce', 8.00, 0.80, 0.20, 0.10, 1.70, 5.00, NULL, 'vegetable'), -(19, 'Bread', 265.00, 9.40, 4.60, 1.30, 52.00, 150.00, NULL, 'food'), -(20, 'Pasta', 131.00, 5.50, 1.00, 0.20, 26.00, 0.00, NULL, 'food'), -(21, 'Cheese', 402.00, 20.60, 33.10, 23.20, 1.30, 0.00, NULL, 'food'), -(22, 'Milk', 50.00, 3.30, 3.30, 1.70, 4.80, 120.00, NULL, 'drink'), -(23, 'Beef', 250.00, 22.00, 21.00, 8.00, 0.00, 50.00, NULL, 'food'), -(24, 'Pork', 241.00, 15.10, 19.70, 7.30, 0.00, 49.00, NULL, 'food'), -(25, 'Lamb', 294.00, 17.50, 23.20, 9.20, 0.00, 0.00, NULL, 'food'), -(26, 'Chicken thigh', 197.00, 27.00, 14.90, 5.20, 0.00, 0.00, NULL, 'food'); - - -ALTER TABLE `food1` - ADD PRIMARY KEY (`id`); - -ALTER TABLE `food1` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27; -COMMIT; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/06_create_food_information.sql b/src/main/resources/db/changelog/changes/enson_change/06_create_food_information.sql deleted file mode 100644 index 4420cb9..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/06_create_food_information.sql +++ /dev/null @@ -1,19 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `food_items` ( - `id` int(11) NOT NULL, - `name` varchar(255) NOT NULL, - `kcal` float DEFAULT NULL, - `protein` float DEFAULT NULL, - `fat` float DEFAULT NULL, - `sat_fat` float DEFAULT NULL, - `carbo` float DEFAULT NULL, - `sodium` float DEFAULT NULL, - `date` datetime DEFAULT NULL, - `size` float DEFAULT NULL, - `meal` varchar(50) DEFAULT NULL, - `user_id` int(11) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/07_alter_food_information.sql b/src/main/resources/db/changelog/changes/enson_change/07_alter_food_information.sql deleted file mode 100644 index 214f255..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/07_alter_food_information.sql +++ /dev/null @@ -1,352 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Alter table and insert data - -INSERT INTO `food_items` (`id`, `name`, `kcal`, `protein`, `fat`, `sat_fat`, `carbo`, `sodium`, `date`, `size`, `meal`, `user_id`) VALUES -(4, 'Banana', 105, 1.3, 0.3, 0.1, 27, 1, '2024-11-12 03:36:53', 100, 'breakfast', 1), -(5, 'Banana', 105, 1.3, 0.3, 0.1, 27, 1, '2024-11-10 04:04:28', 100, 'breakfast', 2), -(7, 'Banana', 9450, 117, 27, 9, 2430, 90, '2024-11-11 14:20:39', 9000, 'breakfast', 1), -(16, 'Salmon', 206, 22, 13.6, 3.8, 5, 0, '2024-11-14 02:02:19', 100, 'Dinner', 1), -(21, 'Pork', 180.8, 11.3, 14.8, 5.5, 0, 36.8, '2024-11-04 06:09:00', 75, 'Breakfast', 1), -(22, 'Pork', 337.4, 21.1, 27.6, 10.2, 0, 68.6, '2024-11-04 13:06:00', 140, 'Lunch', 1), -(23, 'Bread', 532.6, 18.9, 9.2, 2.6, 104.5, 301.5, '2024-11-04 17:28:00', 201, 'Dinner', 1), -(24, 'Garlic', 436.8, 20.9, 48, 10.3, 19.3, 521, '2024-11-04 17:28:00', 312, 'Dinner', 1), -(25, 'Bread', 1240.2, 44, 21.5, 6.1, 243.4, 702, '2024-11-05 06:40:00', 468, 'Breakfast', 1), -(26, 'Cucumber', 26.4, 1.2, 0.2, 0, 6.3, 3.3, '2024-11-05 06:40:00', 165, 'Breakfast', 1), -(27, 'Apple', 86.8, 0, 0, 0, 23.4, 0, '2024-11-05 12:35:00', 167, 'Lunch', 1), -(28, 'Bread', 638.7, 22.7, 11.1, 3.1, 125.3, 361.5, '2024-11-05 12:35:00', 241, 'Lunch', 1), -(29, 'Milk', 63.5, 4.2, 4.2, 2.2, 6.1, 152.4, '2024-11-05 17:36:00', 127, 'Dinner', 1), -(30, 'Broccoli', 31.6, 2.6, 0.6, 0.2, 6.1, 61.4, '2024-11-06 08:02:00', 93, 'Breakfast', 1), -(31, 'Potato', 184, 4.8, 0.2, 0, 41.3, 23.9, '2024-11-06 11:54:00', 239, 'Lunch', 1), -(32, 'Brown rice', 395.3, 9.2, 5.5, 0.7, 82.4, 0, '2024-11-06 11:54:00', 183, 'Lunch', 1), -(33, 'Yogurt', 130.2, 4.6, 5.4, 3, 8.8, 110, '2024-11-06 17:23:00', 88, 'Dinner', 1), -(34, 'Milk', 235, 15.5, 15.5, 8, 22.6, 564, '2024-11-07 06:00:00', 470, 'Breakfast', 1), -(35, 'Pasta', 279, 11.7, 2.1, 0.4, 55.4, 0, '2024-11-07 06:00:00', 213, 'Breakfast', 1), -(36, 'Lamb', 385.1, 22.9, 30.4, 12.1, 0, 0, '2024-11-07 13:43:00', 131, 'Lunch', 1), -(37, 'Yogurt', 497.3, 17.5, 20.5, 11.4, 33.6, 420, '2024-11-07 13:43:00', 336, 'Lunch', 1), -(38, 'Egg', 122.5, 9.9, 8.8, 2.5, 0.6, 97.3, '2024-11-07 19:13:00', 157, 'Dinner', 1), -(39, 'Carrot', 89, 2, 0.4, 0, 20.8, 149.7, '2024-11-07 19:13:00', 217, 'Dinner', 1), -(40, 'Garlic', 680.4, 32.6, 74.8, 16, 30.1, 811.6, '2024-11-08 08:52:00', 486, 'Breakfast', 1), -(41, 'Egg', 79.6, 6.4, 5.7, 1.6, 0.4, 63.2, '2024-11-08 08:52:00', 102, 'Breakfast', 1), -(42, 'Potato', 63.9, 1.7, 0.1, 0, 14.4, 8.3, '2024-11-08 13:22:00', 83, 'Lunch', 1), -(43, 'Salmon', 984.7, 105.2, 65, 18.2, 23.9, 0, '2024-11-08 19:18:00', 478, 'Dinner', 1), -(44, 'Tomato', 86, 4.3, 1, 0, 18.6, 23.9, '2024-11-09 06:19:00', 478, 'Breakfast', 1), -(45, 'Garlic', 518, 24.8, 57, 12.2, 22.9, 617.9, '2024-11-09 11:32:00', 370, 'Lunch', 1), -(46, 'Beef', 907.5, 79.9, 76.2, 29, 0, 181.5, '2024-11-09 11:32:00', 363, 'Lunch', 1), -(47, 'Beef', 517.5, 45.5, 43.5, 16.6, 0, 103.5, '2024-11-09 18:54:00', 207, 'Dinner', 1), -(48, 'Brown rice', 658.8, 15.2, 9.1, 1.2, 137.2, 0, '2024-11-09 18:54:00', 305, 'Dinner', 1), -(49, 'Egg', 69.4, 5.6, 5, 1.4, 0.4, 55.2, '2024-11-10 08:40:00', 89, 'Breakfast', 1), -(50, 'Apple', 90, 0, 0, 0, 24.2, 0, '2024-11-10 11:17:00', 173, 'Lunch', 1), -(51, 'Chicken breast', 227.7, 42.8, 8.4, 2.8, 0, 95.2, '2024-11-10 11:17:00', 138, 'Lunch', 1), -(52, 'Brown rice', 561.6, 13, 7.8, 1, 117, 0, '2024-11-10 17:05:00', 260, 'Dinner', 1), -(53, 'Spinach', 85.3, 10, 1.5, 0.4, 13.4, 293.1, '2024-11-04 08:47:00', 371, 'Breakfast', 2), -(54, 'Potato', 224.8, 5.8, 0.3, 0, 50.5, 29.2, '2024-11-04 08:47:00', 292, 'Breakfast', 2), -(55, 'Pork', 282, 17.7, 23, 8.5, 0, 57.3, '2024-11-04 13:48:00', 117, 'Lunch', 2), -(56, 'Cheese', 695.5, 35.6, 57.3, 40.1, 2.2, 0, '2024-11-04 19:05:00', 173, 'Dinner', 2), -(57, 'Cucumber', 16, 0.7, 0.1, 0, 3.8, 2, '2024-11-05 07:37:00', 100, 'Breakfast', 2), -(58, 'Cheese', 1523.6, 78.1, 125.4, 87.9, 4.9, 0, '2024-11-05 07:37:00', 379, 'Breakfast', 2), -(59, 'Chicken thigh', 374.3, 51.3, 28.3, 9.9, 0, 0, '2024-11-05 13:53:00', 190, 'Lunch', 2), -(60, 'Chicken thigh', 439.3, 60.2, 33.2, 11.6, 0, 0, '2024-11-05 13:53:00', 223, 'Lunch', 2), -(61, 'Garlic', 520.8, 24.9, 57.3, 12.3, 23.1, 621.2, '2024-11-05 18:09:00', 372, 'Dinner', 2), -(62, 'Apple', 210.6, 0, 0, 0, 56.7, 0, '2024-11-05 18:09:00', 405, 'Dinner', 2), -(63, 'Pasta', 191.3, 8, 1.5, 0.3, 38, 0, '2024-11-06 08:19:00', 146, 'Breakfast', 2), -(64, 'Yogurt', 338.9, 11.9, 14, 7.8, 22.9, 286.2, '2024-11-06 13:41:00', 229, 'Lunch', 2), -(65, 'Cucumber', 41.9, 1.8, 0.3, 0, 10, 5.2, '2024-11-06 13:41:00', 262, 'Lunch', 2), -(66, 'Potato', 170.2, 4.4, 0.2, 0, 38.2, 22.1, '2024-11-06 17:15:00', 221, 'Dinner', 2), -(67, 'Carrot', 125.5, 2.8, 0.6, 0, 29.4, 211.1, '2024-11-06 17:15:00', 306, 'Dinner', 2), -(68, 'Chicken thigh', 496.4, 68, 37.5, 13.1, 0, 0, '2024-11-07 08:03:00', 252, 'Breakfast', 2), -(69, 'Egg', 59.3, 4.8, 4.3, 1.2, 0.3, 47.1, '2024-11-07 08:03:00', 76, 'Breakfast', 2), -(70, 'Onion', 117.2, 4.1, 0.3, 0, 27.2, 8.8, '2024-11-07 12:33:00', 293, 'Lunch', 2), -(71, 'Pasta', 119.2, 5, 0.9, 0.2, 23.7, 0, '2024-11-07 12:33:00', 91, 'Lunch', 2), -(72, 'Carrot', 81.2, 1.8, 0.4, 0, 19, 136.6, '2024-11-07 17:09:00', 198, 'Dinner', 2), -(73, 'Spinach', 70.4, 8.3, 1.2, 0.3, 11, 241.7, '2024-11-08 07:29:00', 306, 'Breakfast', 2), -(74, 'Bread', 1240.2, 44, 21.5, 6.1, 243.4, 702, '2024-11-08 07:29:00', 468, 'Breakfast', 2), -(75, 'Apple', 225.7, 0, 0, 0, 60.8, 0, '2024-11-08 13:24:00', 434, 'Lunch', 2), -(76, 'Garlic', 491.4, 23.5, 54.1, 11.6, 21.8, 586.2, '2024-11-08 13:24:00', 351, 'Lunch', 2), -(77, 'Chicken breast', 183.2, 34.4, 6.8, 2.2, 0, 76.6, '2024-11-08 18:06:00', 111, 'Dinner', 2), -(78, 'Banana', 487.2, 6, 1.4, 0.5, 125.3, 4.6, '2024-11-08 18:06:00', 464, 'Dinner', 2), -(79, 'Tomato', 21.2, 1.1, 0.2, 0, 4.6, 5.9, '2024-11-09 06:11:00', 118, 'Breakfast', 2), -(80, 'Spinach', 110.9, 13, 1.9, 0.5, 17.4, 380.8, '2024-11-09 06:11:00', 482, 'Breakfast', 2), -(81, 'Cucumber', 68, 3, 0.4, 0, 16.1, 8.5, '2024-11-09 12:33:00', 425, 'Lunch', 2), -(82, 'Chicken breast', 189.7, 35.6, 7, 2.3, 0, 79.3, '2024-11-09 17:53:00', 115, 'Dinner', 2), -(83, 'Lamb', 1396.5, 83.1, 110.2, 43.7, 0, 0, '2024-11-10 08:16:00', 475, 'Breakfast', 2), -(84, 'Lamb', 1437.7, 85.6, 113.4, 45, 0, 0, '2024-11-10 12:08:00', 489, 'Lunch', 2), -(85, 'Bread', 561.8, 19.9, 9.8, 2.8, 110.2, 318, '2024-11-10 12:08:00', 212, 'Lunch', 2), -(86, 'Chicken thigh', 478.7, 65.6, 36.2, 12.6, 0, 0, '2024-11-10 18:47:00', 243, 'Dinner', 2), -(87, 'Apple', 43.2, 0, 0, 0, 11.6, 0, '2024-11-04 08:13:00', 83, 'Breakfast', 3), -(88, 'Garlic', 109.2, 5.2, 12, 2.6, 4.8, 130.3, '2024-11-04 11:22:00', 78, 'Lunch', 3), -(89, 'Broccoli', 158.8, 13.1, 2.8, 0.9, 30.8, 308.2, '2024-11-04 11:22:00', 467, 'Lunch', 3), -(90, 'Milk', 200, 13.2, 13.2, 6.8, 19.2, 480, '2024-11-04 18:25:00', 400, 'Dinner', 3), -(91, 'Cheese', 1290.4, 66.1, 106.3, 74.5, 4.2, 0, '2024-11-05 07:51:00', 321, 'Breakfast', 3), -(92, 'Tomato', 71.6, 3.6, 0.8, 0, 15.5, 19.9, '2024-11-05 07:51:00', 398, 'Breakfast', 3), -(93, 'Lamb', 308.7, 18.4, 24.4, 9.7, 0, 0, '2024-11-05 13:43:00', 105, 'Lunch', 3), -(94, 'Yogurt', 464.7, 16.3, 19.2, 10.7, 31.4, 392.5, '2024-11-05 17:15:00', 314, 'Dinner', 3), -(95, 'Lamb', 726.2, 43.2, 57.3, 22.7, 0, 0, '2024-11-06 08:12:00', 247, 'Breakfast', 3), -(96, 'Beef', 607.5, 53.5, 51, 19.4, 0, 121.5, '2024-11-06 08:12:00', 243, 'Breakfast', 3), -(97, 'Garlic', 427, 20.4, 47, 10.1, 18.9, 509.3, '2024-11-06 11:43:00', 305, 'Lunch', 3), -(98, 'Salmon', 271.9, 29, 18, 5, 6.6, 0, '2024-11-06 19:18:00', 132, 'Dinner', 3), -(99, 'Salmon', 366.7, 39.2, 24.2, 6.8, 8.9, 0, '2024-11-07 07:44:00', 178, 'Breakfast', 3), -(100, 'Sweet potato', 404, 6.4, 0.4, 0, 88, 12, '2024-11-07 12:21:00', 400, 'Lunch', 3), -(101, 'Sweet potato', 101, 1.6, 0.1, 0, 22, 3, '2024-11-07 18:45:00', 100, 'Dinner', 3), -(102, 'Lettuce', 8.6, 0.9, 0.2, 0.1, 1.8, 5.4, '2024-11-08 08:42:00', 107, 'Breakfast', 3), -(103, 'Garlic', 233.8, 11.2, 25.7, 5.5, 10.4, 278.9, '2024-11-08 08:42:00', 167, 'Breakfast', 3), -(104, 'Milk', 207.5, 13.7, 13.7, 7.1, 19.9, 498, '2024-11-08 11:06:00', 415, 'Lunch', 3), -(105, 'Cheese', 747.7, 38.3, 61.6, 43.2, 2.4, 0, '2024-11-08 11:06:00', 186, 'Lunch', 3), -(106, 'Salmon', 828.1, 88.4, 54.7, 15.3, 20.1, 0, '2024-11-08 19:08:00', 402, 'Dinner', 3), -(107, 'Yogurt', 216.1, 7.6, 8.9, 5, 14.6, 182.5, '2024-11-08 19:08:00', 146, 'Dinner', 3), -(108, 'Bread', 816.2, 29, 14.2, 4, 160.2, 462, '2024-11-09 06:17:00', 308, 'Breakfast', 3), -(109, 'Onion', 190.4, 6.7, 0.5, 0, 44.3, 14.3, '2024-11-09 13:04:00', 476, 'Lunch', 3), -(110, 'Banana', 280.3, 3.5, 0.8, 0.3, 72.1, 2.7, '2024-11-09 13:04:00', 267, 'Lunch', 3), -(111, 'Avocado', 574.4, 7.2, 52.4, 7.2, 30.5, 25.1, '2024-11-09 17:53:00', 359, 'Dinner', 3), -(112, 'Carrot', 41.4, 0.9, 0.2, 0, 9.7, 69.7, '2024-11-10 06:57:00', 101, 'Breakfast', 3), -(113, 'Cheese', 1093.4, 56, 90, 63.1, 3.5, 0, '2024-11-10 11:51:00', 272, 'Lunch', 3), -(114, 'Pork', 253.1, 15.9, 20.7, 7.7, 0, 51.5, '2024-11-10 11:51:00', 105, 'Lunch', 3), -(115, 'Lettuce', 8.6, 0.9, 0.2, 0.1, 1.8, 5.4, '2024-11-10 17:02:00', 108, 'Dinner', 3), -(116, 'Milk', 98, 6.5, 6.5, 3.3, 9.4, 235.2, '2024-11-10 17:02:00', 196, 'Dinner', 3), -(117, 'Cucumber', 69.3, 3, 0.4, 0, 16.5, 8.7, '2024-11-04 07:44:00', 433, 'Breakfast', 4), -(118, 'Pasta', 482.1, 20.2, 3.7, 0.7, 95.7, 0, '2024-11-04 07:44:00', 368, 'Breakfast', 4), -(119, 'Lamb', 358.7, 21.3, 28.3, 11.2, 0, 0, '2024-11-04 11:37:00', 122, 'Lunch', 4), -(120, 'Pork', 257.9, 16.2, 21.1, 7.8, 0, 52.4, '2024-11-04 11:37:00', 107, 'Lunch', 4), -(121, 'Banana', 269.8, 3.3, 0.8, 0.3, 69.4, 2.6, '2024-11-04 18:32:00', 257, 'Dinner', 4), -(122, 'Tomato', 24.7, 1.2, 0.3, 0, 5.3, 6.9, '2024-11-04 18:32:00', 137, 'Dinner', 4), -(123, 'Yogurt', 384.8, 13.5, 15.9, 8.8, 26, 325, '2024-11-05 06:05:00', 260, 'Breakfast', 4), -(124, 'Yogurt', 380.4, 13.4, 15.7, 8.7, 25.7, 321.2, '2024-11-05 06:05:00', 257, 'Breakfast', 4), -(125, 'Lettuce', 17, 1.7, 0.4, 0.2, 3.6, 10.6, '2024-11-05 12:17:00', 212, 'Lunch', 4), -(126, 'Milk', 214, 14.1, 14.1, 7.3, 20.5, 513.6, '2024-11-05 12:17:00', 428, 'Lunch', 4), -(127, 'Egg', 244.9, 19.8, 17.6, 5, 1.3, 194.7, '2024-11-05 17:57:00', 314, 'Dinner', 4), -(128, 'Pork', 1185.7, 74.3, 96.9, 35.9, 0, 241.1, '2024-11-05 17:57:00', 492, 'Dinner', 4), -(129, 'Yogurt', 519.5, 18.3, 21.4, 11.9, 35.1, 438.8, '2024-11-06 06:03:00', 351, 'Breakfast', 4), -(130, 'Sweet potato', 502, 8, 0.5, 0, 109.3, 14.9, '2024-11-06 06:03:00', 497, 'Breakfast', 4), -(131, 'Bread', 1017.6, 36.1, 17.7, 5, 199.7, 576, '2024-11-06 12:56:00', 384, 'Lunch', 4), -(132, 'Lamb', 1237.7, 73.7, 97.7, 38.7, 0, 0, '2024-11-06 18:02:00', 421, 'Dinner', 4), -(133, 'Avocado', 384, 4.8, 35, 4.8, 20.4, 16.8, '2024-11-07 07:48:00', 240, 'Breakfast', 4), -(134, 'Milk', 103.5, 6.8, 6.8, 3.5, 9.9, 248.4, '2024-11-07 07:48:00', 207, 'Breakfast', 4), -(135, 'Broccoli', 124.8, 10.3, 2.2, 0.7, 24.2, 242.2, '2024-11-07 13:38:00', 367, 'Lunch', 4), -(136, 'Cheese', 932.6, 47.8, 76.8, 53.8, 3, 0, '2024-11-07 13:38:00', 232, 'Lunch', 4), -(137, 'Lettuce', 19.2, 1.9, 0.5, 0.2, 4.1, 12, '2024-11-07 17:46:00', 240, 'Dinner', 4), -(138, 'Lamb', 655.6, 39, 51.7, 20.5, 0, 0, '2024-11-07 17:46:00', 223, 'Dinner', 4), -(139, 'Chicken thigh', 922, 126.4, 69.7, 24.3, 0, 0, '2024-11-08 06:52:00', 468, 'Breakfast', 4), -(140, 'Chicken thigh', 165.5, 22.7, 12.5, 4.4, 0, 0, '2024-11-08 06:52:00', 84, 'Breakfast', 4), -(141, 'Brown rice', 607, 14.1, 8.4, 1.1, 126.5, 0, '2024-11-08 11:38:00', 281, 'Lunch', 4), -(142, 'Yogurt', 627.5, 22, 25.9, 14.4, 42.4, 530, '2024-11-08 18:25:00', 424, 'Dinner', 4), -(143, 'Chicken breast', 94, 17.7, 3.5, 1.1, 0, 39.3, '2024-11-09 08:14:00', 57, 'Breakfast', 4), -(144, 'Cucumber', 64.2, 2.8, 0.4, 0, 15.2, 8, '2024-11-09 11:24:00', 401, 'Lunch', 4), -(145, 'Cucumber', 20.5, 0.9, 0.1, 0, 4.9, 2.6, '2024-11-09 19:34:00', 128, 'Dinner', 4), -(146, 'Yogurt', 569.8, 20, 23.5, 13.1, 38.5, 481.2, '2024-11-09 19:34:00', 385, 'Dinner', 4), -(147, 'Egg', 172.4, 13.9, 12.4, 3.5, 0.9, 137, '2024-11-10 06:41:00', 221, 'Breakfast', 4), -(148, 'Milk', 218.5, 14.4, 14.4, 7.4, 21, 524.4, '2024-11-10 12:55:00', 437, 'Lunch', 4), -(149, 'Brown rice', 712.8, 16.5, 9.9, 1.3, 148.5, 0, '2024-11-10 12:55:00', 330, 'Lunch', 4), -(150, 'Garlic', 324.8, 15.5, 35.7, 7.7, 14.4, 387.4, '2024-11-10 18:24:00', 232, 'Dinner', 4), -(151, 'Potato', 57.8, 1.5, 0.1, 0, 13, 7.5, '2024-11-10 18:24:00', 75, 'Dinner', 4), -(152, 'Potato', 60.8, 1.6, 0.1, 0, 13.7, 7.9, '2024-11-04 07:23:00', 79, 'Breakfast', 5), -(153, 'Tomato', 85, 4.2, 0.9, 0, 18.4, 23.6, '2024-11-04 07:23:00', 472, 'Breakfast', 5), -(154, 'Sweet potato', 484.8, 7.7, 0.5, 0, 105.6, 14.4, '2024-11-04 11:51:00', 480, 'Lunch', 5), -(155, 'Lamb', 820.3, 48.8, 64.7, 25.7, 0, 0, '2024-11-04 17:50:00', 279, 'Dinner', 5), -(156, 'Pork', 301.2, 18.9, 24.6, 9.1, 0, 61.2, '2024-11-05 06:15:00', 125, 'Breakfast', 5), -(157, 'Bread', 1057.4, 37.5, 18.4, 5.2, 207.5, 598.5, '2024-11-05 06:15:00', 399, 'Breakfast', 5), -(158, 'Tomato', 85.9, 4.3, 1, 0, 18.6, 23.8, '2024-11-05 11:50:00', 477, 'Lunch', 5), -(159, 'Pork', 819.4, 51.3, 67, 24.8, 0, 166.6, '2024-11-05 11:50:00', 340, 'Lunch', 5), -(160, 'Egg', 48.4, 3.9, 3.5, 1, 0.2, 38.4, '2024-11-05 18:51:00', 62, 'Dinner', 5), -(161, 'Cucumber', 58.1, 2.5, 0.4, 0, 13.8, 7.3, '2024-11-05 18:51:00', 363, 'Dinner', 5), -(162, 'Garlic', 642.6, 30.8, 70.7, 15.1, 28.5, 766.5, '2024-11-06 08:26:00', 459, 'Breakfast', 5), -(163, 'Lettuce', 11, 1.1, 0.3, 0.1, 2.3, 6.9, '2024-11-06 08:26:00', 137, 'Breakfast', 5), -(164, 'Garlic', 253.4, 12.1, 27.9, 6, 11.2, 302.3, '2024-11-06 11:43:00', 181, 'Lunch', 5), -(165, 'Yogurt', 389.2, 13.7, 16, 8.9, 26.3, 328.8, '2024-11-06 11:43:00', 263, 'Lunch', 5), -(166, 'Beef', 1125, 99, 94.5, 36, 0, 225, '2024-11-06 18:56:00', 450, 'Dinner', 5), -(167, 'Brown rice', 382.3, 8.8, 5.3, 0.7, 79.7, 0, '2024-11-07 07:09:00', 177, 'Breakfast', 5), -(168, 'Avocado', 540.8, 6.8, 49.3, 6.8, 28.7, 23.7, '2024-11-07 13:16:00', 338, 'Lunch', 5), -(169, 'Broccoli', 154.7, 12.7, 2.7, 0.9, 30, 300.3, '2024-11-07 13:16:00', 455, 'Lunch', 5), -(170, 'Apple', 215.8, 0, 0, 0, 58.1, 0, '2024-11-07 18:54:00', 415, 'Dinner', 5), -(171, 'Spinach', 50.1, 5.9, 0.9, 0.2, 7.8, 172.2, '2024-11-08 07:10:00', 218, 'Breakfast', 5), -(172, 'Broccoli', 24.1, 2, 0.4, 0.1, 4.7, 46.9, '2024-11-08 11:41:00', 71, 'Lunch', 5), -(173, 'Milk', 189.5, 12.5, 12.5, 6.4, 18.2, 454.8, '2024-11-08 17:13:00', 379, 'Dinner', 5), -(174, 'Cheese', 1893.4, 97, 155.9, 109.3, 6.1, 0, '2024-11-08 17:13:00', 471, 'Dinner', 5), -(175, 'Salmon', 253.4, 27.1, 16.7, 4.7, 6.2, 0, '2024-11-09 07:15:00', 123, 'Breakfast', 5), -(176, 'Lettuce', 34.6, 3.5, 0.9, 0.4, 7.3, 21.6, '2024-11-09 07:15:00', 432, 'Breakfast', 5), -(177, 'Lettuce', 7.4, 0.7, 0.2, 0.1, 1.6, 4.7, '2024-11-09 12:38:00', 93, 'Lunch', 5), -(178, 'Spinach', 57.5, 6.8, 1, 0.2, 9, 197.5, '2024-11-09 12:38:00', 250, 'Lunch', 5), -(179, 'Cucumber', 27, 1.2, 0.2, 0, 6.4, 3.4, '2024-11-09 17:59:00', 169, 'Dinner', 5), -(180, 'Egg', 81.1, 6.6, 5.8, 1.7, 0.4, 64.5, '2024-11-09 17:59:00', 104, 'Dinner', 5), -(181, 'Tomato', 45.9, 2.3, 0.5, 0, 9.9, 12.8, '2024-11-10 07:50:00', 255, 'Breakfast', 5), -(182, 'Tomato', 81.9, 4.1, 0.9, 0, 17.7, 22.8, '2024-11-10 12:02:00', 455, 'Lunch', 5), -(183, 'Salmon', 379, 40.5, 25, 7, 9.2, 0, '2024-11-10 18:02:00', 184, 'Dinner', 5), -(184, 'Lamb', 308.7, 18.4, 24.4, 9.7, 0, 0, '2024-11-04 07:46:00', 105, 'Breakfast', 6), -(185, 'Lamb', 787.9, 46.9, 62.2, 24.7, 0, 0, '2024-11-04 07:46:00', 268, 'Breakfast', 6), -(186, 'Tomato', 76, 3.8, 0.8, 0, 16.5, 21.1, '2024-11-04 12:48:00', 422, 'Lunch', 6), -(187, 'Potato', 370.4, 9.6, 0.5, 0, 83.2, 48.1, '2024-11-04 12:48:00', 481, 'Lunch', 6), -(188, 'Lettuce', 21, 2.1, 0.5, 0.3, 4.5, 13.1, '2024-11-04 18:25:00', 263, 'Dinner', 6), -(189, 'Avocado', 552, 6.9, 50.4, 6.9, 29.3, 24.2, '2024-11-05 06:11:00', 345, 'Breakfast', 6), -(190, 'Carrot', 62.7, 1.4, 0.3, 0, 14.7, 105.6, '2024-11-05 11:02:00', 153, 'Lunch', 6), -(191, 'Yogurt', 134.7, 4.7, 5.6, 3.1, 9.1, 113.8, '2024-11-05 11:02:00', 91, 'Lunch', 6), -(192, 'Tomato', 78.8, 3.9, 0.9, 0, 17.1, 21.9, '2024-11-05 19:27:00', 438, 'Dinner', 6), -(193, 'Beef', 340, 29.9, 28.6, 10.9, 0, 68, '2024-11-05 19:27:00', 136, 'Dinner', 6), -(194, 'Onion', 108.4, 3.8, 0.3, 0, 25.2, 8.1, '2024-11-06 06:42:00', 271, 'Breakfast', 6), -(195, 'Egg', 350.2, 28.3, 25.1, 7.2, 1.8, 278.4, '2024-11-06 13:46:00', 449, 'Lunch', 6), -(196, 'Sweet potato', 494.9, 7.8, 0.5, 0, 107.8, 14.7, '2024-11-06 17:34:00', 490, 'Dinner', 6), -(197, 'Tomato', 83.7, 4.2, 0.9, 0, 18.1, 23.2, '2024-11-06 17:34:00', 465, 'Dinner', 6), -(198, 'Brown rice', 110.2, 2.5, 1.5, 0.2, 22.9, 0, '2024-11-07 06:48:00', 51, 'Breakfast', 6), -(199, 'Pasta', 615.7, 25.9, 4.7, 0.9, 122.2, 0, '2024-11-07 06:48:00', 470, 'Breakfast', 6), -(200, 'Potato', 150.2, 3.9, 0.2, 0, 33.7, 19.5, '2024-11-07 13:42:00', 195, 'Lunch', 6), -(201, 'Brown rice', 708.5, 16.4, 9.8, 1.3, 147.6, 0, '2024-11-07 13:42:00', 328, 'Lunch', 6), -(202, 'Lettuce', 25.9, 2.6, 0.6, 0.3, 5.5, 16.2, '2024-11-07 19:44:00', 324, 'Dinner', 6), -(203, 'Brown rice', 490.3, 11.3, 6.8, 0.9, 102.2, 0, '2024-11-08 08:13:00', 227, 'Breakfast', 6), -(204, 'Banana', 113.4, 1.4, 0.3, 0.1, 29.2, 1.1, '2024-11-08 08:13:00', 108, 'Breakfast', 6), -(205, 'Banana', 300.3, 3.7, 0.9, 0.3, 77.2, 2.9, '2024-11-08 12:25:00', 286, 'Lunch', 6), -(206, 'Pork', 848.3, 53.2, 69.3, 25.7, 0, 172.5, '2024-11-08 18:46:00', 352, 'Dinner', 6), -(207, 'Cucumber', 75.5, 3.3, 0.5, 0, 17.9, 9.4, '2024-11-09 07:57:00', 472, 'Breakfast', 6), -(208, 'Sweet potato', 361.6, 5.7, 0.4, 0, 78.8, 10.7, '2024-11-09 12:22:00', 358, 'Lunch', 6), -(209, 'Lettuce', 8.3, 0.8, 0.2, 0.1, 1.8, 5.2, '2024-11-09 12:22:00', 104, 'Lunch', 6), -(210, 'Pasta', 200.4, 8.4, 1.5, 0.3, 39.8, 0, '2024-11-09 17:26:00', 153, 'Dinner', 6), -(211, 'Pasta', 117.9, 5, 0.9, 0.2, 23.4, 0, '2024-11-10 07:29:00', 90, 'Breakfast', 6), -(212, 'Brown rice', 738.7, 17.1, 10.3, 1.4, 153.9, 0, '2024-11-10 07:29:00', 342, 'Breakfast', 6), -(213, 'Onion', 55.6, 1.9, 0.1, 0, 12.9, 4.2, '2024-11-10 11:18:00', 139, 'Lunch', 6), -(214, 'Potato', 338.8, 8.8, 0.4, 0, 76.1, 44, '2024-11-10 18:58:00', 440, 'Dinner', 6), -(215, 'Bread', 339.2, 12, 5.9, 1.7, 66.6, 192, '2024-11-10 18:58:00', 128, 'Dinner', 6), -(216, 'Carrot', 145.5, 3.2, 0.7, 0, 34.1, 244.9, '2024-11-04 06:16:00', 355, 'Breakfast', 7), -(217, 'Bread', 667.8, 23.7, 11.6, 3.3, 131, 378, '2024-11-04 13:58:00', 252, 'Lunch', 7), -(218, 'Tomato', 39.4, 2, 0.4, 0, 8.5, 10.9, '2024-11-04 13:58:00', 219, 'Lunch', 7), -(219, 'Cheese', 1234.1, 63.2, 101.6, 71.2, 4, 0, '2024-11-04 18:34:00', 307, 'Dinner', 7), -(220, 'Chicken thigh', 933.8, 128, 70.6, 24.6, 0, 0, '2024-11-04 18:34:00', 474, 'Dinner', 7), -(221, 'Banana', 155.4, 1.9, 0.4, 0.1, 40, 1.5, '2024-11-05 07:24:00', 148, 'Breakfast', 7), -(222, 'Yogurt', 464.7, 16.3, 19.2, 10.7, 31.4, 392.5, '2024-11-05 11:29:00', 314, 'Lunch', 7), -(223, 'Beef', 367.5, 32.3, 30.9, 11.8, 0, 73.5, '2024-11-05 11:29:00', 147, 'Lunch', 7), -(224, 'Yogurt', 122.8, 4.3, 5.1, 2.8, 8.3, 103.8, '2024-11-05 17:20:00', 83, 'Dinner', 7), -(225, 'Apple', 144, 0, 0, 0, 38.8, 0, '2024-11-06 07:30:00', 277, 'Breakfast', 7), -(226, 'Beef', 840, 73.9, 70.6, 26.9, 0, 168, '2024-11-06 07:30:00', 336, 'Breakfast', 7), -(227, 'Garlic', 522.2, 25, 57.4, 12.3, 23.1, 622.9, '2024-11-06 12:35:00', 373, 'Lunch', 7), -(228, 'Chicken thigh', 823.5, 112.9, 62.3, 21.7, 0, 0, '2024-11-06 12:35:00', 418, 'Lunch', 7), -(229, 'Salmon', 115.4, 12.3, 7.6, 2.1, 2.8, 0, '2024-11-06 17:54:00', 56, 'Dinner', 7), -(230, 'Tomato', 37.1, 1.9, 0.4, 0, 8, 10.3, '2024-11-07 06:25:00', 206, 'Breakfast', 7), -(231, 'Avocado', 537.6, 6.7, 49.1, 6.7, 28.6, 23.5, '2024-11-07 12:48:00', 336, 'Lunch', 7), -(232, 'Broccoli', 32, 2.6, 0.6, 0.2, 6.2, 62, '2024-11-07 12:48:00', 94, 'Lunch', 7), -(233, 'Brown rice', 477.4, 11.1, 6.6, 0.9, 99.5, 0, '2024-11-07 17:31:00', 221, 'Dinner', 7), -(234, 'Cucumber', 72.3, 3.2, 0.5, 0, 17.2, 9, '2024-11-08 07:09:00', 452, 'Breakfast', 7), -(235, 'Garlic', 512.4, 24.5, 56.4, 12.1, 22.7, 611.2, '2024-11-08 11:58:00', 366, 'Lunch', 7), -(236, 'Chicken thigh', 240.3, 32.9, 18.2, 6.3, 0, 0, '2024-11-08 11:58:00', 122, 'Lunch', 7), -(237, 'Onion', 137.2, 4.8, 0.3, 0, 31.9, 10.3, '2024-11-08 19:26:00', 343, 'Dinner', 7), -(238, 'Pork', 607.3, 38.1, 49.6, 18.4, 0, 123.5, '2024-11-08 19:26:00', 252, 'Dinner', 7), -(239, 'Banana', 297.2, 3.7, 0.8, 0.3, 76.4, 2.8, '2024-11-09 07:33:00', 283, 'Breakfast', 7), -(240, 'Chicken breast', 790.4, 148.5, 29.2, 9.6, 0, 330.5, '2024-11-09 07:33:00', 479, 'Breakfast', 7), -(241, 'Lamb', 311.6, 18.6, 24.6, 9.8, 0, 0, '2024-11-09 13:15:00', 106, 'Lunch', 7), -(242, 'Chicken thigh', 784.1, 107.5, 59.3, 20.7, 0, 0, '2024-11-09 13:15:00', 398, 'Lunch', 7), -(243, 'Apple', 116, 0, 0, 0, 31.2, 0, '2024-11-09 18:17:00', 223, 'Dinner', 7), -(244, 'Salmon', 945.5, 101, 62.4, 17.4, 22.9, 0, '2024-11-09 18:17:00', 459, 'Dinner', 7), -(245, 'Banana', 498.8, 6.2, 1.4, 0.5, 128.2, 4.8, '2024-11-10 06:40:00', 475, 'Breakfast', 7), -(246, 'Lamb', 1111.3, 66.1, 87.7, 34.8, 0, 0, '2024-11-10 11:17:00', 378, 'Lunch', 7), -(247, 'Avocado', 475.2, 5.9, 43.4, 5.9, 25.2, 20.8, '2024-11-10 11:17:00', 297, 'Lunch', 7), -(248, 'Banana', 183.8, 2.3, 0.5, 0.2, 47.2, 1.8, '2024-11-10 17:29:00', 175, 'Dinner', 7), -(249, 'Onion', 119.6, 4.2, 0.3, 0, 27.8, 9, '2024-11-04 07:58:00', 299, 'Breakfast', 8), -(250, 'Beef', 465, 40.9, 39.1, 14.9, 0, 93, '2024-11-04 13:10:00', 186, 'Lunch', 8), -(251, 'Bread', 871.9, 30.9, 15.1, 4.3, 171.1, 493.5, '2024-11-04 19:57:00', 329, 'Dinner', 8), -(252, 'Lamb', 884.9, 52.7, 69.8, 27.7, 0, 0, '2024-11-05 06:10:00', 301, 'Breakfast', 8), -(253, 'Milk', 230, 15.2, 15.2, 7.8, 22.1, 552, '2024-11-05 06:10:00', 460, 'Breakfast', 8), -(254, 'Lettuce', 35.8, 3.6, 0.9, 0.4, 7.6, 22.4, '2024-11-05 11:42:00', 448, 'Lunch', 8), -(255, 'Salmon', 786.9, 84, 52, 14.5, 19.1, 0, '2024-11-05 11:42:00', 382, 'Lunch', 8), -(256, 'Beef', 535, 47.1, 44.9, 17.1, 0, 107, '2024-11-05 19:16:00', 214, 'Dinner', 8), -(257, 'Cucumber', 71.2, 3.1, 0.4, 0, 16.9, 8.9, '2024-11-06 08:21:00', 445, 'Breakfast', 8), -(258, 'Chicken thigh', 396, 54.3, 29.9, 10.5, 0, 0, '2024-11-06 08:21:00', 201, 'Breakfast', 8), -(259, 'Chicken breast', 513.1, 96.4, 19, 6.2, 0, 214.6, '2024-11-06 12:27:00', 311, 'Lunch', 8), -(260, 'Sweet potato', 212.1, 3.4, 0.2, 0, 46.2, 6.3, '2024-11-06 18:02:00', 210, 'Dinner', 8), -(261, 'Chicken thigh', 439.3, 60.2, 33.2, 11.6, 0, 0, '2024-11-06 18:02:00', 223, 'Dinner', 8), -(262, 'Sweet potato', 211.1, 3.3, 0.2, 0, 46, 6.3, '2024-11-07 07:56:00', 209, 'Breakfast', 8), -(263, 'Pasta', 94.3, 4, 0.7, 0.1, 18.7, 0, '2024-11-07 07:56:00', 72, 'Breakfast', 8), -(264, 'Spinach', 74.5, 8.7, 1.3, 0.3, 11.7, 256, '2024-11-07 11:35:00', 324, 'Lunch', 8), -(265, 'Chicken breast', 669.9, 125.9, 24.8, 8.1, 0, 280.1, '2024-11-07 18:49:00', 406, 'Dinner', 8), -(266, 'Cheese', 888.4, 45.5, 73.2, 51.3, 2.9, 0, '2024-11-08 07:19:00', 221, 'Breakfast', 8), -(267, 'Potato', 168.6, 4.4, 0.2, 0, 37.9, 21.9, '2024-11-08 07:19:00', 219, 'Breakfast', 8), -(268, 'Banana', 203.7, 2.5, 0.6, 0.2, 52.4, 1.9, '2024-11-08 12:42:00', 194, 'Lunch', 8), -(269, 'Yogurt', 284.2, 10, 11.7, 6.5, 19.2, 240, '2024-11-08 12:42:00', 192, 'Lunch', 8), -(270, 'Sweet potato', 403, 6.4, 0.4, 0, 87.8, 12, '2024-11-08 18:37:00', 399, 'Dinner', 8), -(271, 'Chicken breast', 785.4, 147.6, 29, 9.5, 0, 328.4, '2024-11-09 07:08:00', 476, 'Breakfast', 8), -(272, 'Avocado', 612.8, 7.7, 55.9, 7.7, 32.6, 26.8, '2024-11-09 07:08:00', 383, 'Breakfast', 8), -(273, 'Egg', 131, 10.6, 9.4, 2.7, 0.7, 104.2, '2024-11-09 12:47:00', 168, 'Lunch', 8), -(274, 'Lettuce', 20.7, 2.1, 0.5, 0.3, 4.4, 12.9, '2024-11-09 12:47:00', 259, 'Lunch', 8), -(275, 'Salmon', 222.5, 23.8, 14.7, 4.1, 5.4, 0, '2024-11-09 18:20:00', 108, 'Dinner', 8), -(276, 'Spinach', 111.3, 13.1, 1.9, 0.5, 17.4, 382.4, '2024-11-10 06:56:00', 484, 'Breakfast', 8), -(277, 'Garlic', 460.6, 22, 50.7, 10.9, 20.4, 549.4, '2024-11-10 11:47:00', 329, 'Lunch', 8), -(278, 'Lamb', 643.9, 38.3, 50.8, 20.1, 0, 0, '2024-11-10 19:54:00', 219, 'Dinner', 8), -(279, 'Beef', 1125, 99, 94.5, 36, 0, 225, '2024-11-10 19:54:00', 450, 'Dinner', 8), -(280, 'Lamb', 929, 55.3, 73.3, 29.1, 0, 0, '2024-11-04 07:54:00', 316, 'Breakfast', 9), -(281, 'Pork', 443.4, 27.8, 36.2, 13.4, 0, 90.2, '2024-11-04 12:05:00', 184, 'Lunch', 9), -(282, 'Beef', 885, 77.9, 74.3, 28.3, 0, 177, '2024-11-04 12:05:00', 354, 'Lunch', 9), -(283, 'Brown rice', 276.5, 6.4, 3.8, 0.5, 57.6, 0, '2024-11-04 18:57:00', 128, 'Dinner', 9), -(284, 'Banana', 265.6, 3.3, 0.8, 0.3, 68.3, 2.5, '2024-11-04 18:57:00', 253, 'Dinner', 9), -(285, 'Bread', 1298.5, 46.1, 22.5, 6.4, 254.8, 735, '2024-11-05 07:40:00', 490, 'Breakfast', 9), -(286, 'Milk', 105, 6.9, 6.9, 3.6, 10.1, 252, '2024-11-05 07:40:00', 210, 'Breakfast', 9), -(287, 'Pasta', 531.9, 22.3, 4.1, 0.8, 105.6, 0, '2024-11-05 12:21:00', 406, 'Lunch', 9), -(288, 'Sweet potato', 169.7, 2.7, 0.2, 0, 37, 5, '2024-11-05 12:21:00', 168, 'Lunch', 9), -(289, 'Onion', 198.8, 7, 0.5, 0, 46.2, 14.9, '2024-11-05 19:11:00', 497, 'Dinner', 9), -(290, 'Avocado', 140.8, 1.8, 12.8, 1.8, 7.5, 6.2, '2024-11-05 19:11:00', 88, 'Dinner', 9), -(291, 'Lamb', 423.4, 25.2, 33.4, 13.2, 0, 0, '2024-11-06 07:39:00', 144, 'Breakfast', 9), -(292, 'Bread', 800.3, 28.4, 13.9, 3.9, 157, 453, '2024-11-06 13:54:00', 302, 'Lunch', 9), -(293, 'Carrot', 37.3, 0.8, 0.2, 0, 8.7, 62.8, '2024-11-06 13:54:00', 91, 'Lunch', 9), -(294, 'Broccoli', 49.3, 4.1, 0.9, 0.3, 9.6, 95.7, '2024-11-06 17:03:00', 145, 'Dinner', 9), -(295, 'Carrot', 123.4, 2.7, 0.6, 0, 28.9, 207.7, '2024-11-06 17:03:00', 301, 'Dinner', 9), -(296, 'Chicken thigh', 855, 117.2, 64.7, 22.6, 0, 0, '2024-11-07 08:12:00', 434, 'Breakfast', 9), -(297, 'Chicken breast', 585.8, 110, 21.7, 7.1, 0, 244.9, '2024-11-07 08:12:00', 355, 'Breakfast', 9), -(298, 'Salmon', 931.1, 99.4, 61.5, 17.2, 22.6, 0, '2024-11-07 12:45:00', 452, 'Lunch', 9), -(299, 'Bread', 556.5, 19.7, 9.7, 2.7, 109.2, 315, '2024-11-07 12:45:00', 210, 'Lunch', 9), -(300, 'Carrot', 96.8, 2.1, 0.5, 0, 22.7, 162.8, '2024-11-07 17:14:00', 236, 'Dinner', 9), -(301, 'Chicken thigh', 382.2, 52.4, 28.9, 10.1, 0, 0, '2024-11-08 06:20:00', 194, 'Breakfast', 9), -(302, 'Yogurt', 679.3, 23.9, 28, 15.6, 45.9, 573.8, '2024-11-08 06:20:00', 459, 'Breakfast', 9), -(303, 'Lettuce', 23.2, 2.3, 0.6, 0.3, 4.9, 14.5, '2024-11-08 13:27:00', 290, 'Lunch', 9), -(304, 'Lettuce', 28.4, 2.8, 0.7, 0.4, 6, 17.8, '2024-11-08 13:27:00', 355, 'Lunch', 9), -(305, 'Spinach', 77.7, 9.1, 1.4, 0.3, 12.2, 267, '2024-11-08 19:43:00', 338, 'Dinner', 9), -(306, 'Banana', 420, 5.2, 1.2, 0.4, 108, 4, '2024-11-09 06:39:00', 400, 'Breakfast', 9), -(307, 'Banana', 475.7, 5.9, 1.4, 0.5, 122.3, 4.5, '2024-11-09 12:24:00', 453, 'Lunch', 9), -(308, 'Beef', 1110, 97.7, 93.2, 35.5, 0, 222, '2024-11-09 17:23:00', 444, 'Dinner', 9), -(309, 'Lettuce', 36.2, 3.6, 0.9, 0.5, 7.7, 22.6, '2024-11-09 17:23:00', 452, 'Dinner', 9), -(310, 'Chicken thigh', 979.1, 134.2, 74.1, 25.8, 0, 0, '2024-11-10 07:24:00', 497, 'Breakfast', 9), -(311, 'Broccoli', 154.7, 12.7, 2.7, 0.9, 30, 300.3, '2024-11-10 07:24:00', 455, 'Breakfast', 9), -(312, 'Egg', 84.2, 6.8, 6, 1.7, 0.4, 67, '2024-11-10 12:42:00', 108, 'Lunch', 9), -(313, 'Pork', 903.8, 56.6, 73.9, 27.4, 0, 183.8, '2024-11-10 17:50:00', 375, 'Dinner', 9), -(314, 'Avocado', 348.8, 4.4, 31.8, 4.4, 18.5, 15.3, '2024-11-04 07:54:00', 218, 'Breakfast', 10), -(315, 'Spinach', 87.9, 10.3, 1.5, 0.4, 13.8, 301.8, '2024-11-04 07:54:00', 382, 'Breakfast', 10), -(316, 'Carrot', 203.4, 4.5, 1, 0, 47.6, 342.2, '2024-11-04 12:17:00', 496, 'Lunch', 10), -(317, 'Cucumber', 47.8, 2.1, 0.3, 0, 11.4, 6, '2024-11-04 12:17:00', 299, 'Lunch', 10), -(318, 'Yogurt', 217.6, 7.6, 9, 5, 14.7, 183.8, '2024-11-04 19:25:00', 147, 'Dinner', 10), -(319, 'Avocado', 281.6, 3.5, 25.7, 3.5, 15, 12.3, '2024-11-04 19:25:00', 176, 'Dinner', 10), -(320, 'Sweet potato', 168.7, 2.7, 0.2, 0, 36.7, 5, '2024-11-05 08:55:00', 167, 'Breakfast', 10), -(321, 'Milk', 187, 12.3, 12.3, 6.4, 18, 448.8, '2024-11-05 13:51:00', 374, 'Lunch', 10), -(322, 'Sweet potato', 95.9, 1.5, 0.1, 0, 20.9, 2.8, '2024-11-05 18:32:00', 95, 'Dinner', 10), -(323, 'Salmon', 883.7, 94.4, 58.3, 16.3, 21.4, 0, '2024-11-06 06:57:00', 429, 'Breakfast', 10), -(324, 'Yogurt', 125.8, 4.4, 5.2, 2.9, 8.5, 106.2, '2024-11-06 06:57:00', 85, 'Breakfast', 10), -(325, 'Cheese', 1949.7, 99.9, 160.5, 112.5, 6.3, 0, '2024-11-06 11:31:00', 485, 'Lunch', 10), -(326, 'Broccoli', 32, 2.6, 0.6, 0.2, 6.2, 62, '2024-11-06 11:31:00', 94, 'Lunch', 10), -(327, 'Sweet potato', 99, 1.6, 0.1, 0, 21.6, 2.9, '2024-11-06 18:01:00', 98, 'Dinner', 10), -(328, 'Broccoli', 133.3, 11, 2.4, 0.8, 25.9, 258.7, '2024-11-06 18:01:00', 392, 'Dinner', 10), -(329, 'Pasta', 615.7, 25.9, 4.7, 0.9, 122.2, 0, '2024-11-07 06:30:00', 470, 'Breakfast', 10), -(330, 'Banana', 113.4, 1.4, 0.3, 0.1, 29.2, 1.1, '2024-11-07 06:30:00', 108, 'Breakfast', 10), -(331, 'Bread', 429.3, 15.2, 7.5, 2.1, 84.2, 243, '2024-11-07 11:27:00', 162, 'Lunch', 10), -(332, 'Bread', 927.5, 32.9, 16.1, 4.5, 182, 525, '2024-11-07 11:27:00', 350, 'Lunch', 10), -(333, 'Brown rice', 995.8, 23.1, 13.8, 1.8, 207.5, 0, '2024-11-07 19:52:00', 461, 'Dinner', 10), -(334, 'Potato', 325.7, 8.5, 0.4, 0, 73.2, 42.3, '2024-11-08 06:05:00', 423, 'Breakfast', 10), -(335, 'Egg', 43.7, 3.5, 3.1, 0.9, 0.2, 34.7, '2024-11-08 12:47:00', 56, 'Lunch', 10), -(336, 'Potato', 139.4, 3.6, 0.2, 0, 31.3, 18.1, '2024-11-08 12:47:00', 181, 'Lunch', 10), -(337, 'Yogurt', 722.2, 25.4, 29.8, 16.6, 48.8, 610, '2024-11-08 19:02:00', 488, 'Dinner', 10), -(338, 'Egg', 373.6, 30.2, 26.8, 7.7, 1.9, 297, '2024-11-08 19:02:00', 479, 'Dinner', 10), -(339, 'Pasta', 313.1, 13.1, 2.4, 0.5, 62.1, 0, '2024-11-09 06:07:00', 239, 'Breakfast', 10), -(340, 'Egg', 213.7, 17.3, 15.3, 4.4, 1.1, 169.9, '2024-11-09 06:07:00', 274, 'Breakfast', 10), -(341, 'Garlic', 254.8, 12.2, 28, 6, 11.3, 303.9, '2024-11-09 11:31:00', 182, 'Lunch', 10), -(342, 'Sweet potato', 388.9, 6.2, 0.4, 0, 84.7, 11.6, '2024-11-09 11:31:00', 385, 'Lunch', 10), -(343, 'Banana', 158.6, 2, 0.5, 0.2, 40.8, 1.5, '2024-11-09 19:46:00', 151, 'Dinner', 10), -(344, 'Tomato', 15.7, 0.8, 0.2, 0, 3.4, 4.3, '2024-11-10 08:40:00', 87, 'Breakfast', 10), -(345, 'Carrot', 44.7, 1, 0.2, 0, 10.5, 75.2, '2024-11-10 12:45:00', 109, 'Lunch', 10), -(346, 'Sweet potato', 170.7, 2.7, 0.2, 0, 37.2, 5.1, '2024-11-10 19:16:00', 169, 'Dinner', 10), -(347, 'Egg', 624, 50.4, 44.8, 12.8, 3.2, 496, '2024-11-14 08:57:54', 800, 'Breakfast', 11), -(348, 'Spinach', 690, 81, 12, 3, 108, 2370, '2024-11-14 08:58:17', 3000, 'Dinner', 11), -(349, 'Chicken breast', 1650, 310, 61, 20, 10, 690, '2024-11-28 11:05:49', 1000, 'Breakfast', 1), -(350, 'Chicken breast', 1725.9, 324.26, 63.806, 20.92, 10.46, 721.74, '2024-11-28 15:04:46', 1046, 'Breakfast', 1); - -ALTER TABLE `food_items` - ADD PRIMARY KEY (`id`), - ADD KEY `user_id` (`user_id`); - - -ALTER TABLE `food_items` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=351; - -/* -ALTER TABLE `food_items` - ADD CONSTRAINT `food_items_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`); - */ \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/08_alter_food_information.sql b/src/main/resources/db/changelog/changes/enson_change/08_alter_food_information.sql deleted file mode 100644 index 5103e00..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/08_alter_food_information.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`food_items` - add `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `createdBy` int DEFAULT NULL, - add `version` int NOT NULL DEFAULT '0', - add `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `modifiedBy` int DEFAULT NULL, - add `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/09_alter_food_information.sql b/src/main/resources/db/changelog/changes/enson_change/09_alter_food_information.sql deleted file mode 100644 index 4f616b8..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/09_alter_food_information.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - -ALTER TABLE `food_items` -CHANGE COLUMN `kcal` `kcal` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `protein` `protein` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `fat` `fat` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `sat_fat` `sat_fat` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `carbo` `carbo` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `sodium` `sodium` DECIMAL(14,2) NULL DEFAULT NULL , -CHANGE COLUMN `size` `size` DECIMAL(14,2) NULL DEFAULT NULL ; diff --git a/src/main/resources/db/changelog/changes/enson_change/10_alter_food_items.sql b/src/main/resources/db/changelog/changes/enson_change/10_alter_food_items.sql deleted file mode 100644 index b9bc01e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/10_alter_food_items.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql - ---changeset cyril:alter food items ---comment: alter food items - -ALTER TABLE `food_items` - CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `id`, - CHANGE COLUMN `createdBy` `createdBy` INT NULL DEFAULT NULL AFTER `created`, - CHANGE COLUMN `version` `version` INT NOT NULL DEFAULT '0' AFTER `createdBy`, - CHANGE COLUMN `modified` `modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `version`, - CHANGE COLUMN `modifiedBy` `modifiedBy` INT NULL DEFAULT NULL AFTER `modified`, - CHANGE COLUMN `deleted` `deleted` TINYINT(1) NOT NULL DEFAULT '0' AFTER `modifiedBy`; diff --git a/src/main/resources/db/changelog/changes/enson_change/11_create_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/11_create_user_information.sql deleted file mode 100644 index 7dfe625..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/11_create_user_information.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- Create table structure -CREATE TABLE `user_information` ( - `id` int(11) NOT NULL, - `user_id` int(11) NOT NULL, - `gender` varchar(10) DEFAULT NULL, - `name` varchar(50) DEFAULT NULL, - `date_of_birth` date DEFAULT NULL, - `height` varchar(20) DEFAULT NULL, - `weight` varchar(20) DEFAULT NULL, - `allergy` varchar(50) DEFAULT NULL, - `goal` varchar(20) DEFAULT NULL, - `experience` varchar(20) DEFAULT NULL, - `created_at` timestamp NOT NULL DEFAULT current_timestamp() -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/12_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/12_alter_user_information.sql deleted file mode 100644 index cb8cba3..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/12_alter_user_information.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Alter table and insert data - -INSERT INTO `user_information` (`id`, `user_id`, `gender`, `name`, `date_of_birth`, `height`, `weight`, `allergy`, `goal`, `experience`, `created_at`) VALUES -(2, 1, 'Male', 'test', '2000-01-01', '175 cm', '61 kg', 'Peanuts', 'Muscle Gain', 'Expert', '2024-11-13 09:23:46'), -(3, 3, 'Male', 'm2', '2003-01-01', '162 cm', '80 kg', 'Egg', 'Muscle Gain', 'Intermediate', '2024-11-13 17:18:38'), -(4, 2, 'Male', 'm1', '2000-01-01', '162 cm', '53 kg', 'Fish', 'Muscle Gain', 'Expert', '2024-11-13 17:25:06'), -(5, 4, 'Male', 'm3', '2018-01-01', '164 cm', '125 lbs', 'Fish, Peanuts, Wheat', 'Muscle Gain', 'Intermediate', '2024-11-13 17:28:51'), -(6, 5, 'Male', 'm4', '2008-12-15', '169 cm', '108 kg', 'Peanuts, Fish', 'Nutrition', 'Beginner', '2024-11-13 17:32:53'), -(7, 6, 'Female', 'g1', '2015-01-01', '158 cm', '46 kg', 'Egg, Fish, Peanuts, Wheat, Soy, Milk', 'Muscle Gain', 'Expert', '2024-11-13 17:35:00'), -(8, 10, 'Female', 'g5', '1992-05-01', '213 cm', '140 kg', 'None', 'Muscle Gain', 'Beginner', '2024-11-13 17:37:00'), -(9, 9, 'Female', 'g4', '1989-01-01', '4 ft 11 in', '54 kg', 'Wheat', 'Nutrition', 'Beginner', '2024-11-13 17:37:25'), -(10, 8, 'Female', 'g3', '2006-06-03', '6 ft 4 in', '89 lbs', 'Egg', 'Diet', 'Intermediate', '2024-11-13 17:38:21'), -(11, 7, 'Female', 'g2', '2000-01-01', '170 cm', '60 kg', 'None', 'Diet', 'Beginner', '2024-11-13 17:38:46'), -(12, 11, 'Male', 'example', '2022-07-01', '171 cm', '54 kg', 'Peanuts, Wheat', 'Diet', 'Intermediate', '2024-11-14 08:58:59'); - -ALTER TABLE `user_information` - ADD PRIMARY KEY (`id`), - ADD KEY `user_id` (`user_id`); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/13_alter_information.sql b/src/main/resources/db/changelog/changes/enson_change/13_alter_information.sql deleted file mode 100644 index 9d1a2ad..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/13_alter_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user-table ---comment: Alter table - -ALTER TABLE `fhsmscdb`.`user` - ADD `has_information` TINYINT NOT NULL DEFAULT 0; diff --git a/src/main/resources/db/changelog/changes/enson_change/14_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/14_alter_user_information.sql deleted file mode 100644 index 22f7bd6..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/14_alter_user_information.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - add `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `createdBy` int DEFAULT NULL, - add `version` int NOT NULL DEFAULT '0', - add `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - add `modifiedBy` int DEFAULT NULL, - add `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/15_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/15_alter_user_information.sql deleted file mode 100644 index decf572..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/15_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - DROP COLUMN `created_at`; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/16_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/16_alter_user_information.sql deleted file mode 100644 index 2cf9807..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/16_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=27; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/17_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/17_alter_user_information.sql deleted file mode 100644 index 4dbcb5f..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/17_alter_user_information.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `age` int DEFAULT NULL, - add `activityLevel` varchar(20) DEFAULT NULL; diff --git a/src/main/resources/db/changelog/changes/enson_change/18_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/18_alter_user_information.sql deleted file mode 100644 index de7a3d4..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/18_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY `activityLevel` varchar(20) DEFAULT NULL; diff --git a/src/main/resources/db/changelog/changes/enson_change/19_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/19_alter_user_information.sql deleted file mode 100644 index 100883a..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/19_alter_user_information.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-user_information-table ---comment: Alter table - -Alter TABLE `fhsmscdb`.`user_information` - MODIFY COLUMN `age` int DEFAULT NULL AFTER `gender`, - MODIFY COLUMN `activityLevel` varchar(20) DEFAULT NULL AFTER `experience`; diff --git a/src/main/resources/db/changelog/changes/enson_change/20_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/20_alter_food1.sql deleted file mode 100644 index 540ca11..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/20_alter_food1.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Weight (g)` decimal(10,2) DEFAULT NULL, -ADD COLUMN `contains_egg` tinyint DEFAULT 3, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `contains_milk` tinyint DEFAULT 3, -ADD COLUMN `contains_wheat` tinyint DEFAULT 3, -ADD COLUMN `contains_shrimp` tinyint DEFAULT 3, -ADD COLUMN `contains_crab` tinyint DEFAULT 3, -ADD COLUMN `contains_buckwheat` tinyint DEFAULT 3, -ADD COLUMN `contains_peanut` tinyint DEFAULT 3, -ADD COLUMN `contains_walnut` tinyint DEFAULT 3; - --- 重命名现有列以添加单位 -ALTER TABLE `fhsmscdb`.`food1` -CHANGE COLUMN `kcal` `Calories (kcal)` decimal(10,2), -CHANGE COLUMN `protein` `Protein (g)` decimal(10,2), -CHANGE COLUMN `fat` `Fat (g)` decimal(10,2), -DROP COLUMN `satFat`, -CHANGE COLUMN `carbo` `Carbohydrate (g)` decimal(10,2), -CHANGE COLUMN `sodium` `Sodium (mg)` decimal(10,2); - diff --git a/src/main/resources/db/changelog/changes/enson_change/21_alter_food_items.sql b/src/main/resources/db/changelog/changes/enson_change/21_alter_food_items.sql deleted file mode 100644 index 5c9388f..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/21_alter_food_items.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - - - --- 重命名现有列以添加单位 -ALTER TABLE `fhsmscdb`.`food_items` -DROP COLUMN `sat_fat`; - - diff --git a/src/main/resources/db/changelog/changes/enson_change/22_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/22_alter_food1.sql deleted file mode 100644 index 3352387..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/22_alter_food1.sql +++ /dev/null @@ -1,16 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Postassium (mg)` decimal(10,2) DEFAULT 0, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `Calcium (mg)`decimal(10,2) DEFAULT 0, -ADD COLUMN `Phosphorus (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Iron (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin A (μg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin B1 (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin B2 (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Niacin (mg)` decimal(10,2) DEFAULT 0, -ADD COLUMN `Vitamin C (mg)` decimal(10,2) DEFAULT 0; - diff --git a/src/main/resources/db/changelog/changes/enson_change/23_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/23_alter_food1.sql deleted file mode 100644 index 94c15e5..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/23_alter_food1.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food1-table ---comment: Alter table - --- 添加新列 -Alter TABLE `fhsmscdb`.`food1` -DROP COLUMN `Ingredients`; -ALTER TABLE `fhsmscdb`.`food1` -MODIFY COLUMN `Postassium (mg)` decimal(10,2) DEFAULT 0 AFTER `Sodium (mg)`, -MODIFY COLUMN `Calcium (mg)` decimal(10,2) DEFAULT 0 AFTER `Postassium (mg)`, -MODIFY COLUMN `Phosphorus (mg)` decimal(10,2) DEFAULT 0 AFTER `Calcium (mg)`, -MODIFY COLUMN `Iron (mg)` decimal(10,2) DEFAULT 0 AFTER `Phosphorus (mg)`, -MODIFY COLUMN `Vitamin A (μg)` decimal(10,2) DEFAULT 0 AFTER `Iron (mg)`, -MODIFY COLUMN `Vitamin B1 (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin A (μg)`, -MODIFY COLUMN `Vitamin B2 (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin B1 (mg)`, -MODIFY COLUMN `Niacin (mg)` decimal(10,2) DEFAULT 0 AFTER `Vitamin B2 (mg)`, -MODIFY COLUMN `Vitamin C (mg)` decimal(10,2)DEFAULT 0 AFTER `Niacin (mg)`; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/24_alter_food_items.sql b/src/main/resources/db/changelog/changes/enson_change/24_alter_food_items.sql deleted file mode 100644 index 6dad3d5..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/24_alter_food_items.sql +++ /dev/null @@ -1,27 +0,0 @@ ---liquibase formatted sql ---changeset terence:alter-food_items-table ---comment: Alter table - --- 添加新列 -/* -Alter TABLE `fhsmscdb`.`food_items` -ADD COLUMN `potassium` decimal(10,2) DEFAULT 0, -- 0:●(使用) 1:○(油) 2:▲(接触) 3:×(未使用) -ADD COLUMN `calcium`decimal(10,2) DEFAULT 0, -ADD COLUMN `phosphorus` decimal(10,2) DEFAULT 0, -ADD COLUMN `iron` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminA` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminB1` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminB2` decimal(10,2) DEFAULT 0, -ADD COLUMN `niacin` decimal(10,2) DEFAULT 0, -ADD COLUMN `vitaminC` decimal(10,2) DEFAULT 0; -*/ -ALTER TABLE `fhsmscdb`.`food_items` -MODIFY COLUMN `potassium` decimal(10,2) DEFAULT 0 AFTER `sodium`, -MODIFY COLUMN `calcium` decimal(10,2) DEFAULT 0 AFTER `potassium`, -MODIFY COLUMN `phosphorus` decimal(10,2) DEFAULT 0 AFTER `calcium`, -MODIFY COLUMN `iron` decimal(10,2) DEFAULT 0 AFTER `phosphorus`, -MODIFY COLUMN `vitaminA` decimal(10,2) DEFAULT 0 AFTER `iron`, -MODIFY COLUMN `vitaminB1` decimal(10,2) DEFAULT 0 AFTER `vitaminA`, -MODIFY COLUMN `vitaminB2` decimal(10,2) DEFAULT 0 AFTER `vitaminB1`, -MODIFY COLUMN `niacin` decimal(10,2) DEFAULT 0 AFTER `vitaminB2`, -MODIFY COLUMN `vitaminC` decimal(10,2)DEFAULT 0 AFTER `niacin`; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/25_create_Nutrients.sql b/src/main/resources/db/changelog/changes/enson_change/25_create_Nutrients.sql deleted file mode 100644 index 5a8f65e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/25_create_Nutrients.sql +++ /dev/null @@ -1,40 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Nutrients` ( - `nutrient_id` int NOT NULL AUTO_INCREMENT, - `nutrient_name` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`nutrient_id`), - UNIQUE KEY `idx_nutrient_name` (`nutrient_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `Nutrient_Impacts` ( - `impact_id` int NOT NULL AUTO_INCREMENT, - `nutrient_id` int NOT NULL, - `organ_affected` varchar(100) NOT NULL, - `impact_type` ENUM('Positive', 'Negative') NOT NULL, - `impact_description` text NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`impact_id`), - FOREIGN KEY (`nutrient_id`) REFERENCES `Nutrients`(`nutrient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入基础营养素数据 -INSERT INTO `Nutrients` (nutrient_name) VALUES -('Calories'), -('Protein'), -('Fat'), -('Carbohydrate'), -('Sodium'), -('Potassium'), -('Calcium'), -('Phosphorus'), -('Iron'), -('Vitamin A'), -('Vitamin B1'), -('Vitamin B2'), -('Niacin'), -('Vitamin C'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql b/src/main/resources/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql deleted file mode 100644 index 1d3d939..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/26_alter_Nutrients_impacts.sql +++ /dev/null @@ -1,26 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -INSERT INTO `Nutrient_Impacts` -(nutrient_id, organ_affected, impact_type, impact_description) -VALUES -(2, 'Muscles', 'Positive', 'Essential for muscle growth and repair'), -(2, 'Bones', 'Positive', 'Helps maintain bone mass'), -(2, 'Immune System', 'Positive', 'Supports immune system function'), - --- Vitamin C impacts (假设 nutrient_id = 14) -(14, 'Immune System', 'Positive', 'Strengthens immune system and fights infections'), -(14, 'Skin', 'Positive', 'Promotes collagen production for healthy skin'), -(14, 'Blood Vessels', 'Positive', 'Supports blood vessel health'), - --- Iron impacts (假设 nutrient_id = 9) -(9, 'Blood', 'Positive', 'Essential for red blood cell production'), -(9, 'Brain', 'Positive', 'Supports cognitive function'), -(9, 'Immune System', 'Positive', 'Helps maintain immune system'), - --- Calcium impacts (假设 nutrient_id = 7) -(7, 'Bones', 'Positive', 'Essential for bone strength and density'), -(7, 'Teeth', 'Positive', 'Maintains dental health'), -(7, 'Muscles', 'Positive', 'Required for proper muscle function'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/27_create_Allergy.sql b/src/main/resources/db/changelog/changes/enson_change/27_create_Allergy.sql deleted file mode 100644 index 9158c2f..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/27_create_Allergy.sql +++ /dev/null @@ -1,49 +0,0 @@ -/* ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Allergies` ( - `allergy_id` int NOT NULL AUTO_INCREMENT, - `allergy_name` varchar(50) NOT NULL, - `description` text, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`allergy_id`), - UNIQUE KEY `idx_allergy_name` (`allergy_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 用户过敏记录表 -CREATE TABLE `User_Allergies` ( - `user_allergy_id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `allergy_id` int NOT NULL, - `diagnosed_date` date, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`user_allergy_id`), - UNIQUE KEY `idx_user_allergy` (`user_id`, `allergy_id`), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), - FOREIGN KEY (`allergy_id`) REFERENCES `Allergies`(`allergy_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入常见过敏原数据 -INSERT INTO `Allergies` (allergy_name, description) VALUES -('Peanuts', 'Common legume that can cause severe allergic reactions'), -('Tree Nuts', 'Including almonds, walnuts, cashews, etc.'), -('Milk', 'Dairy products and lactose'), -('Eggs', 'Both egg whites and yolks'), -('Soy', 'Soybeans and soy-based products'), -('Wheat', 'Including gluten sensitivity'), -('Fish', 'Various types of fish'), -('Shellfish', 'Crustaceans and mollusks'), -('Sesame', 'Seeds and sesame oil'), -('Sulfites', 'Common food preservative'); - --- 插入示例用户过敏数据 -INSERT INTO `User_Allergies` -(user_id, allergy_id, severity_level, symptoms, diagnosed_date) -VALUES -(1, 1, 'Severe', 'Anaphylaxis, difficulty breathing, swelling', '2023-01-15'), -(1, 3, 'Moderate', 'Digestive issues, skin rash', '2023-02-20'), -(2, 4, 'Mild', 'Mild skin irritation', '2023-03-10'), -(2, 8, 'Severe', 'Severe rash, breathing difficulties', '2023-04-05'); -*/ \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/28_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/28_alter_food1.sql deleted file mode 100644 index 54c725a..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/28_alter_food1.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -Alter TABLE `fhsmscdb`.`food1` -ADD COLUMN `Restaurant_ID` int(11) DEFAULT NULL; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/29_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/29_alter_food1.sql deleted file mode 100644 index 4f03ee5..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/29_alter_food1.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - - -INSERT INTO `food1` (`name`, `Calories (kcal)`, `Protein (g)`, `Fat (g)`, `Carbohydrate (g)`, `Sodium (mg)`, `Postassium (mg)`, `Calcium (mg)`, `Phosphorus (mg)`,`Iron (mg)`,`Vitamin A (μg)`,`Vitamin B1 (mg)`,`Vitamin B2 (mg)`,`Niacin (mg)`,`Vitamin C (mg)`,`food_type`,`Weight (g)`,`contains_egg`, `contains_milk`, `contains_wheat`, `contains_shrimp`,`contains_crab`,`contains_buckwheat`,`contains_peanut`,`contains_walnut`,`Restaurant_ID`) VALUES -('N.Y. Barbecue Sausage & Cheese McMuffin',504,16.6,32.9,35.1,952,263,162,190,1.1,60,0.2,0.21,6,3,'food',152,0,0,0,3,3,3,3,3,1); diff --git a/src/main/resources/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql b/src/main/resources/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql deleted file mode 100644 index 6af4d2e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/30_create_Nutrients_Need.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `Nutrients_Need` ( - `id` int NOT NULL, - `bmr` DECIMAL(10,2) NOT NULL, - `tdee` DECIMAL(10,2) NOT NULL, - `protein_need` DECIMAL(10,2) NOT NULL, - `fat_need` DECIMAL(10,2) NOT NULL, - `carbo_need` DECIMAL(10,2) NOT NULL, - `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - FOREIGN KEY (`id`) REFERENCES `user` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/src/main/resources/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql b/src/main/resources/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql deleted file mode 100644 index 2c04e59..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/31_create_Nutrients_Need_update.sql +++ /dev/null @@ -1,64 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-update-trigger splitStatements:false ---comment: Create update trigger - -CREATE TRIGGER update_user_Nutrients_Need -AFTER UPDATE ON user_information -FOR EACH ROW -BEGIN - DECLARE calculated_bmr DECIMAL(10,2); - DECLARE calculated_tdee DECIMAL(10,2); - DECLARE user_age INT; - DECLARE weight_kg DECIMAL(5,2); - DECLARE height_cm DECIMAL(5,2); - - -- Extract numeric values from weight and height - SET weight_kg = CAST(REPLACE(NEW.weight, ' kg', '') AS DECIMAL(5,2)); - SET height_cm = CAST(REPLACE(NEW.height, ' cm', '') AS DECIMAL(5,2)); - - -- Calculate age - SET user_age = FLOOR(DATEDIFF(CURRENT_DATE, FROM_UNIXTIME(NEW.date_of_birth/1000)) / 365); - - -- Calculate BMR based on gender - IF NEW.gender = 'Male' THEN - SET calculated_bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * user_age); - ELSE - SET calculated_bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * user_age); - END IF; - - -- Calculate TDEE based on activity level - SET calculated_tdee = calculated_bmr * - CASE NEW.activitylevel - WHEN 'Sedentary' THEN 1.2 - WHEN '1-2 times' THEN 1.375 - WHEN '3-5 times' THEN 1.55 - WHEN '6-7 times' THEN 1.725 - WHEN 'Professional' THEN 1.9 - ELSE 1.2 - END; - - -- Insert or update TDEE record - INSERT INTO User_TDEE ( - user_id, - bmr, - tdee, - protein_need, - fat_need, - carbo_need - ) - VALUES ( - NEW.user_id, - calculated_bmr, - calculated_tdee, - weight_kg * 2, - (calculated_tdee * 0.25) / 9, - (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4 - ) - ON DUPLICATE KEY UPDATE - bmr = calculated_bmr, - tdee = calculated_tdee, - protein_need = weight_kg * 2, - fat_need = (calculated_tdee * 0.25) / 9, - carbo_need = (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4, - last_updated = CURRENT_TIMESTAMP; -END; diff --git a/src/main/resources/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql b/src/main/resources/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql deleted file mode 100644 index 946d78a..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/32_create_Nutrients_Need_update.sql +++ /dev/null @@ -1,64 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-update-trigger splitStatements:false ---comment: Create update trigger - -CREATE TRIGGER update_user_Nutrients_Need -AFTER UPDATE ON user_information -FOR EACH ROW -BEGIN - DECLARE calculated_bmr DECIMAL(10,2); - DECLARE calculated_tdee DECIMAL(10,2); - DECLARE user_age INT; - DECLARE weight_kg DECIMAL(5,2); - DECLARE height_cm DECIMAL(5,2); - - -- Extract numeric values from weight and height - SET weight_kg = CAST(REPLACE(NEW.weight, ' kg', '') AS DECIMAL(5,2)); - SET height_cm = CAST(REPLACE(NEW.height, ' cm', '') AS DECIMAL(5,2)); - - -- Calculate age - SET user_age = FLOOR(DATEDIFF(CURRENT_DATE, FROM_UNIXTIME(NEW.date_of_birth/1000)) / 365); - - -- Calculate BMR based on gender - IF NEW.gender = 'Male' THEN - SET calculated_bmr = 88.362 + (13.397 * weight_kg) + (4.799 * height_cm) - (5.677 * user_age); - ELSE - SET calculated_bmr = 447.593 + (9.247 * weight_kg) + (3.098 * height_cm) - (4.330 * user_age); - END IF; - - -- Calculate TDEE based on activity level - SET calculated_tdee = calculated_bmr * - CASE NEW.activitylevel - WHEN 'Sedentary' THEN 1.2 - WHEN '1-2 times' THEN 1.375 - WHEN '3-5 times' THEN 1.55 - WHEN '6-7 times' THEN 1.725 - WHEN 'Professional' THEN 1.9 - ELSE 1.2 - END; - - -- Insert or update TDEE record - INSERT INTO nutrients_need ( - user_id, - bmr, - tdee, - protein_need, - fat_need, - carbo_need - ) - VALUES ( - NEW.user_id, - calculated_bmr, - calculated_tdee, - weight_kg * 2, - (calculated_tdee * 0.25) / 9, - (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4 - ) - ON DUPLICATE KEY UPDATE - bmr = calculated_bmr, - tdee = calculated_tdee, - protein_need = weight_kg * 2, - fat_need = (calculated_tdee * 0.25) / 9, - carbo_need = (calculated_tdee - (weight_kg * 2 * 4) - (calculated_tdee * 0.25)) / 4, - last_updated = CURRENT_TIMESTAMP; -END; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/33_create_Allergy.sql b/src/main/resources/db/changelog/changes/enson_change/33_create_Allergy.sql deleted file mode 100644 index cf83fa7..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/33_create_Allergy.sql +++ /dev/null @@ -1,44 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -CREATE TABLE `Allergies` ( - `allergy_id` int NOT NULL AUTO_INCREMENT, - `allergy_name` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`allergy_id`), - UNIQUE KEY `idx_allergy_name` (`allergy_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -*/ -CREATE TABLE `User_Allergies` ( - `user_allergy_id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `allergy_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`user_allergy_id`), - UNIQUE KEY `idx_user_allergy` (`user_id`, `allergy_id`), - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`), - FOREIGN KEY (`allergy_id`) REFERENCES `Allergies`(`allergy_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 插入常见过敏原数据 -INSERT INTO `Allergies` (allergy_name) VALUES -('Peanuts'), -('Tree Nuts'), -('Milk'), -('Eggs'), -('Soy' ), -('Wheat'), -('Fish'), -('Shellfish'), -('Sesame'), -('Sulfites'); - --- 插入示例用户过敏数据 -INSERT INTO `User_Allergies` -(user_id, allergy_id ) -VALUES -(1, 1), -(1, 3), -(2, 4), -(2, 8); diff --git a/src/main/resources/db/changelog/changes/enson_change/34_alter_food1.sql b/src/main/resources/db/changelog/changes/enson_change/34_alter_food1.sql deleted file mode 100644 index 1af82b9..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/34_alter_food1.sql +++ /dev/null @@ -1,19 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -Alter TABLE `fhsmscdb`.`food1` - CHANGE `Calories (kcal)` Calories decimal(10,2), - CHANGE `Protein (g)` Protein decimal(10,2), - CHANGE `Fat (g)` Fat decimal(10,2), - CHANGE `Carbohydrate (g)` Carbohydrate decimal(10,2), - CHANGE `Sodium (mg)` Sodium decimal(10,2), - CHANGE `Postassium (mg)` Potassium decimal(10,2), - CHANGE `Calcium (mg)` Calcium decimal(10,2), - CHANGE `Phosphorus (mg)` Phosphorus decimal(10,2), - CHANGE `Iron (mg)` Iron decimal(10,2), - CHANGE `Vitamin A (μg)` VitaminA decimal(10,2), - CHANGE `Vitamin B1 (mg)` VitaminB1 decimal(10,2), - CHANGE `Vitamin B2 (mg)` VitaminB2 decimal(10,2), - CHANGE `Niacin (mg)` Niacin decimal(10,2), - CHANGE `Vitamin C (mg)` VitaminC decimal(10,2), - CHANGE `Weight (g)` Weight decimal(10,2); diff --git a/src/main/resources/db/changelog/changes/enson_change/35_alter_user_information.sql b/src/main/resources/db/changelog/changes/enson_change/35_alter_user_information.sql deleted file mode 100644 index b0069cf..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/35_alter_user_information.sql +++ /dev/null @@ -1,6 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -Alter TABLE `fhsmscdb`.`user_information` - drop column `allergy`; - diff --git a/src/main/resources/db/changelog/changes/enson_change/36_create_restaurant_information.sql b/src/main/resources/db/changelog/changes/enson_change/36_create_restaurant_information.sql deleted file mode 100644 index 5a23e72..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/36_create_restaurant_information.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `FB_Operator` ( - - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_name` varchar(50) NOT NULL, - `FB_type` varchar(255) NOT NULL, - `FB_cuisine` varchar(20) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`) -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/src/main/resources/db/changelog/changes/enson_change/37_alter_restaurant_information.sql b/src/main/resources/db/changelog/changes/enson_change/37_alter_restaurant_information.sql deleted file mode 100644 index a46cb1b..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/37_alter_restaurant_information.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -INSERT INTO `FB_Operator` -(FB_id, FB_name, FB_type, FB_cuisine) -VALUES -(1, 'KFC', 'Fast Food', 'Fast Food'), -(2, 'McDonald', 'Fast Food', 'Fast Food'), -(3, '大家樂', 'Cha Chaan Teng', 'Hong Kong Style'), -(4, '翠華餐廳', 'Cha Chaan Teng', 'Hong Kong Style'), -(5, '美心', 'Chinese Restaurant', 'Cantonese'), -(6, '點點心', 'Dim Sum', 'Cantonese'), -(7, '吉野家', 'Fast Food', 'Japanese'), -(8, '壽司郎', 'Japanese Restaurant', 'Japanese'), -(9, '譚仔雲南米線', 'Noodle Shop', 'Chinese'), -(10, '大快活', 'Fast Food', 'Hong Kong Style') diff --git a/src/main/resources/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql deleted file mode 100644 index c1f612d..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/38_create_restaurant_informatio.sql +++ /dev/null @@ -1,14 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -CREATE TABLE `FB_Outlets` ( - - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_outlet_id` int NOT NULL, - `FB_outlet_district` varchar(255) NOT NULL, - `FB_outlet_address` varchar(255) NOT NULL, - `FB_outlet_phone` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`) -)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/src/main/resources/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql deleted file mode 100644 index 40b5021..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/39_alter_restaurant_informatio.sql +++ /dev/null @@ -1,14 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_id` int NOT NULL; -ALTER TABLE `FB_Outlets` DROP PRIMARY KEY; - -ALTER TABLE `FB_Outlets` ADD PRIMARY KEY (`FB_outlet_id`); - - -ALTER TABLE `FB_Outlets` ADD CONSTRAINT `fk_fb_outlets_operator` -FOREIGN KEY (`FB_id`) REFERENCES `fb_operator`(`FB_id`); - - -ALTER TABLE `FB_Outlets` ADD INDEX `idx_fb_id` (`FB_id`); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql deleted file mode 100644 index 966b425..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/40_alter_restaurant_informatio.sql +++ /dev/null @@ -1,7 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_outlet_id` int NOT NULL FIRST; - - -ALTER TABLE `FB_Outlets` MODIFY COLUMN `FB_id` int NOT NULL AFTER `FB_outlet_id`; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql deleted file mode 100644 index 2d17218..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/41_alter_restaurant_informatio.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -DROP TABLE `FB_Outlets`; - --- 用新结构创建表 -CREATE TABLE `FB_Outlets` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_outlet_id` int NOT NULL, - `FB_id` int NOT NULL, - `FB_outlet_district` varchar(255), - `FB_outlet_address` varchar(255), - `FB_outlet_phone` varchar(255), - `created_at` timestamp, - PRIMARY KEY (`id`), - INDEX `idx_fb_outlet_id` (`FB_outlet_id`), - INDEX `idx_fb_id` (`FB_id`), - CONSTRAINT `fk_fb_outlets_operator` FOREIGN KEY (`FB_id`) - REFERENCES `fb_operator` (`FB_id`) -); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql deleted file mode 100644 index 364fe21..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/42_alter_restaurant_informatio.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -INSERT INTO `FB_Outlets` (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(201, 2, '金鐘', '夏愨道18號海富中心地下1-41號舖A部份', '2520 1329', CURRENT_TIMESTAMP), -(202, 2, '灣仔', '軒尼詩道302-308號集成中心Shop G11-17 ,G/F', '2893 9503', CURRENT_TIMESTAMP); - - -INSERT INTO FB_Outlets (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(301, 3, '銅鑼灣', '波斯富街48號軒尼詩大廈3樓', '2808 0139', CURRENT_TIMESTAMP), -(302, 3, '銅鑼灣', '地下英皇道6-8 號香港天后百利大廈', '2807 3864', CURRENT_TIMESTAMP); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql b/src/main/resources/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql deleted file mode 100644 index 76c796d..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/43_alter_restaurant_informatio.sql +++ /dev/null @@ -1,8 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -INSERT INTO `fb_outlets` (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) -VALUES -(201, 2, '金鐘', '夏愨道18號海富中心地下1-41號舖A部份', '2520 1329', CURRENT_TIMESTAMP), -(202, 2, '灣仔', '軒尼詩道302-308號集成中心Shop G11-17 ,G/F', '2893 9503', CURRENT_TIMESTAMP); - diff --git a/src/main/resources/db/changelog/changes/enson_change/44_create_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/44_create_muti_table.sql deleted file mode 100644 index 93df43d..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/44_create_muti_table.sql +++ /dev/null @@ -1,71 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - --- 餐厅菜单表 -CREATE TABLE `FB_Menu` ( - `FB_id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Menu_Item_Description` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_id`), - UNIQUE KEY `UK_FB_menu_id` (`FB_menu_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 菜单项成分表 -CREATE TABLE `FB_Menu_Item_Ingredient` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Ingredient_id` int NOT NULL, - `Ingredient_Volume` decimal(10,2) NOT NULL, - `Ingredient_Volume_Unit` varchar(50) NOT NULL, - `Allergy_Substance_ID` int, - `Nutrient_ID` int, - `Nutrient_Volume` decimal(10,2), - `Nutrient_Volume_Unit` varchar(50), - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 菜单与门店关系表 -CREATE TABLE `FB_Menu_and_Outlet_Relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `FB_outlet_id` int NOT NULL, - `FB_menu_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_rel_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_rel_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 每日营养摄入汇总表 -CREATE TABLE `daily_nutrition_summary` ( - `id` int NOT NULL AUTO_INCREMENT, - `user_id` int NOT NULL, - `date` date NOT NULL, - `total_calories` decimal(10,2) DEFAULT 0, - `total_protein` decimal(10,2) DEFAULT 0, - `total_fat` decimal(10,2) DEFAULT 0, - `total_carbs` decimal(10,2) DEFAULT 0, - `total_sodium` decimal(10,2) DEFAULT 0, - `total_potassium` decimal(10,2) DEFAULT 0, - `total_calcium` decimal(10,2) DEFAULT 0, - `total_phosphorus` decimal(10,2) DEFAULT 0, - `total_iron` decimal(10,2) DEFAULT 0, - `total_vitamin_a` decimal(10,2) DEFAULT 0, - `total_vitamin_b1` decimal(10,2) DEFAULT 0, - `total_vitamin_b2` decimal(10,2) DEFAULT 0, - `total_niacin` decimal(10,2) DEFAULT 0, - `total_vitamin_c` decimal(10,2) DEFAULT 0, - `breakfast_calories` decimal(10,2) DEFAULT 0, - `lunch_calories` decimal(10,2) DEFAULT 0, - `dinner_calories` decimal(10,2) DEFAULT 0, - `snack_calories` decimal(10,2) DEFAULT 0, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - UNIQUE KEY `UK_user_date` (`user_id`, `date`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/45_alter_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/45_alter_muti_table.sql deleted file mode 100644 index 7cb0ec1..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/45_alter_muti_table.sql +++ /dev/null @@ -1,43 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -CREATE TABLE `FB_Menu_Item_Nutrition` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Calories` decimal(10,2) DEFAULT 0, - `Protein` decimal(10,2) DEFAULT 0, - `Fat` decimal(10,2) DEFAULT 0, - `Carbohydrate` decimal(10,2) DEFAULT 0, - `Sodium` decimal(10,2) DEFAULT 0, - `Potassium` decimal(10,2) DEFAULT 0, - `Calcium` decimal(10,2) DEFAULT 0, - `Phosphorus` decimal(10,2) DEFAULT 0, - `Iron` decimal(10,2) DEFAULT 0, - `VitaminA` decimal(10,2) DEFAULT 0, - `VitaminB1` decimal(10,2) DEFAULT 0, - `VitaminB2` decimal(10,2) DEFAULT 0, - `Niacin` decimal(10,2) DEFAULT 0, - `VitaminC` decimal(10,2) DEFAULT 0, - `Nutrient_Volume` decimal(10,2) DEFAULT 0, - `Nutrient_Volume_Unit` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `UK_FB_menu_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_nutrition_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `FB_Menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -*/ -CREATE TABLE `Ingredient` ( - `Ingredient_id` int NOT NULL AUTO_INCREMENT, - `Ingredient_Name` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`Ingredient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -ALTER TABLE `fhsmscdb`.`fb_menu_item_ingredient` - DROP COLUMN `Nutrient_ID`, - DROP COLUMN `Nutrient_Volume`, - DROP COLUMN `Nutrient_Volume_Unit`; - - - diff --git a/src/main/resources/db/changelog/changes/enson_change/46_alter_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/46_alter_muti_table.sql deleted file mode 100644 index 44e0013..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/46_alter_muti_table.sql +++ /dev/null @@ -1,175 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data - -DROP TABLE IF EXISTS fb_menu_and_outlet_relationship; -DROP TABLE IF EXISTS fb_menu_item_ingredient; -DROP TABLE IF EXISTS fb_menu_item_nutrition; -DROP TABLE IF EXISTS fb_menu; -DROP TABLE IF EXISTS ingredient; - - -CREATE TABLE `ingredient` ( - `Ingredient_id` int NOT NULL AUTO_INCREMENT, - `Ingredient_Name` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`Ingredient_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - --- 重新创建fb_menu表,使用FB_menu_id作为主键 -CREATE TABLE `fb_menu` ( - `FB_id` int NOT NULL, - `FB_menu_id` int NOT NULL AUTO_INCREMENT, - `Menu_Item_Description` varchar(255) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`FB_menu_id`), - INDEX `idx_FB_id` (`FB_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `fb_menu_item_nutrition` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Calories` decimal(10,2) DEFAULT 0, - `Protein` decimal(10,2) DEFAULT 0, - `Fat` decimal(10,2) DEFAULT 0, - `Carbohydrate` decimal(10,2) DEFAULT 0, - `Sodium` decimal(10,2) DEFAULT 0, - `Potassium` decimal(10,2) DEFAULT 0, - `Calcium` decimal(10,2) DEFAULT 0, - `Phosphorus` decimal(10,2) DEFAULT 0, - `Iron` decimal(10,2) DEFAULT 0, - `VitaminA` decimal(10,2) DEFAULT 0, - `VitaminB1` decimal(10,2) DEFAULT 0, - `VitaminB2` decimal(10,2) DEFAULT 0, - `Niacin` decimal(10,2) DEFAULT 0, - `VitaminC` decimal(10,2) DEFAULT 0, - `Nutrient_Volume` decimal(10,2) DEFAULT 0, - `Nutrient_Volume_Unit` varchar(50) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_nutrition_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_nutrition_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - - -CREATE TABLE `fb_menu_item_ingredient` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_menu_id` int NOT NULL, - `Ingredient_id` int NOT NULL, - `Ingredient_Volume` decimal(10,2) NOT NULL, - `Ingredient_Volume_Unit` varchar(50) NOT NULL, - `Allergy_Substance_ID` int, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_id` (`FB_menu_id`), - KEY `FK_Ingredient_id` (`Ingredient_id`), - CONSTRAINT `FK_FB_menu_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE, - CONSTRAINT `FK_Ingredient_id` FOREIGN KEY (`Ingredient_id`) REFERENCES `ingredient` (`Ingredient_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -CREATE TABLE `fb_menu_and_outlet_relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `FB_outlet_id` int NOT NULL, - `FB_menu_id` int NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), - KEY `FK_FB_menu_rel_id` (`FB_menu_id`), - CONSTRAINT `FK_FB_menu_rel_id` FOREIGN KEY (`FB_menu_id`) REFERENCES `fb_menu` (`FB_menu_id`) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO fb_menu (FB_id, FB_menu_id, Menu_Item_Description, created_at) VALUES -(1, 101, '香煎三文鱼配时蔬', NOW()), -(1, 102, '黑椒牛排配蘑菇酱', NOW()), -(1, 103, '泰式青咖喱鸡', NOW()), -(1, 104, '意式肉酱面配帕玛森芝士', NOW()), -(1, 105, '地中海风味沙拉', NOW()), -(2, 201, '清蒸鲈鱼配姜葱', NOW()), -(2, 202, '红烧狮子头', NOW()), -(2, 203, '宫保鸡丁配花生米', NOW()); - --- 插入营养信息数据 -INSERT INTO fb_menu_item_nutrition (FB_menu_id, Calories, Protein, Fat, Carbohydrate, Sodium, Potassium, Calcium, Phosphorus, Iron, VitaminA, VitaminB1, VitaminB2, Niacin, VitaminC, Nutrient_Volume, Nutrient_Volume_Unit, created_at) VALUES - -(101, 275.00, 25.00, 15.00, 10.00, 150.00, 450.00, 30.00, 250.00, 1.80, 120.00, 0.15, 0.20, 5.00, 15.00, 350.00, 'g', NOW()), - - -(102, 320.00, 30.00, 20.00, 5.00, 200.00, 500.00, 20.00, 200.00, 3.50, 50.00, 0.10, 0.15, 7.00, 5.00, 300.00, 'g', NOW()), - - -(103, 310.00, 22.00, 18.00, 15.00, 300.00, 400.00, 50.00, 180.00, 2.00, 80.00, 0.12, 0.18, 6.00, 20.00, 350.00, 'g', NOW()), - - -(104, 480.00, 20.00, 15.00, 65.00, 800.00, 350.00, 150.00, 200.00, 2.50, 100.00, 0.20, 0.25, 4.00, 10.00, 400.00, 'g', NOW()), - - -(105, 200.00, 8.00, 12.00, 15.00, 120.00, 300.00, 100.00, 120.00, 1.20, 150.00, 0.08, 0.12, 2.00, 45.00, 250.00, 'g', NOW()); - - -INSERT INTO ingredient (Ingredient_id, Ingredient_Name, created_at) VALUES -(1, '三文鱼', NOW()), -(2, '橄榄油', NOW()), -(3, '西兰花', NOW()), -(4, '胡萝卜', NOW()), -(5, '牛排', NOW()), -(6, '黑胡椒', NOW()), -(7, '蘑菇', NOW()), -(8, '鸡胸肉', NOW()), -(9, '青咖喱酱', NOW()), -(10, '椰奶', NOW()), -(11, '意大利面', NOW()), -(12, '番茄', NOW()), -(13, '牛肉碎', NOW()), -(14, '帕玛森芝士', NOW()), -(15, '生菜', NOW()), -(16, '黄瓜', NOW()), -(17, '橄榄', NOW()), -(18, '羊奶芝士', NOW()); - - -INSERT INTO fb_menu_item_ingredient (FB_menu_id, Ingredient_id, Ingredient_Volume, Ingredient_Volume_Unit, Allergy_Substance_ID, created_at) VALUES - -(101, 1, 200.00, 'g', 7, NOW()), -- 三文鱼 (鱼类过敏 -(101, 2, 15.00, 'ml', NULL, NOW()), -(101, 3, 100.00, 'g', NULL, NOW()), -(101, 4, 50.00, 'g', NULL, NOW()), - - -(102, 5, 250.00, 'g', NULL, NOW()), -(102, 6, 5.00, 'g', NULL, NOW()), -(102, 7, 100.00, 'g', NULL, NOW()), -(102, 2, 10.00, 'ml', NULL, NOW()), - - -(103, 8, 180.00, 'g', NULL, NOW()), -(103, 9, 30.00, 'g', 5, NOW()), -- 咖喱酱 (可能含大豆) -(103, 10, 150.00, 'ml', 3, NOW()), -- 椰奶 (可能含乳制品) -(103, 3, 80.00, 'g', NULL, NOW()), - - -(104, 11, 120.00, 'g', 6, NOW()), -- 意大利面 (含麦麸) -(104, 12, 150.00, 'g', NULL, NOW()), -(104, 13, 100.00, 'g', NULL, NOW()), -(104, 14, 20.00, 'g', 3, NOW()), -- 帕玛森芝士 (含乳制品) - - -(105, 15, 100.00, 'g', NULL, NOW()), -(105, 16, 80.00, 'g', NULL, NOW()), -(105, 17, 30.00, 'g', NULL, NOW()), -(105, 18, 40.00, 'g', 3, NOW()), -- 羊奶芝士 (含乳制品) -(105, 2, 15.00, 'ml', NULL, NOW()); - - -INSERT INTO fb_menu_and_outlet_relationship (FB_id, FB_outlet_id, FB_menu_id, created_at) VALUES -(1, 1001, 101, NOW()), -(1, 1001, 102, NOW()), -(1, 1001, 103, NOW()), -(1, 1002, 101, NOW()), -(1, 1002, 104, NOW()), -(1, 1002, 105, NOW()), -(2, 2001, 201, NOW()), -(2, 2001, 202, NOW()), -(2, 2001, 203, NOW()), -(2, 2002, 201, NOW()), -(2, 2002, 202, NOW()); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/47_alter_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/47_alter_muti_table.sql deleted file mode 100644 index 64b8088..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/47_alter_muti_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-table-and-insert-data ---comment: Create table and insert data -/* -INSERT INTO fb_operator (FB_id, FB_name, FB_type, FB_cuisine, created_at) VALUES -(1, 'Healthy Eater', 'Fast Food', 'Chinese', NOW()), -(2, 'Seafood World', 'Dinner', 'Cantonese', NOW()), -*/ - -INSERT INTO fb_outlets (FB_outlet_id, FB_id, FB_outlet_district, FB_outlet_address, FB_outlet_phone, created_at) VALUES - -(1001, 1, 'Central', 'Central Financial Street 88, 1st Floor', '2345-6789', NOW()), -(1002, 1, 'Causeway Bay', 'Causeway Bay Times Square 2nd Floor', '2345-6790', NOW()), - - -(2001, 2, 'Tsim Sha Tsui', 'Tsim Sha Tsui Guangdong Road 30', '3456-7890', NOW()), -(2002, 2, 'Sha Tin', 'Sha Tin New City Plaza 5th Floor', '3456-7891', NOW()); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/48_build_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/48_build_muti_table.sql deleted file mode 100644 index ab373ea..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/48_build_muti_table.sql +++ /dev/null @@ -1,85 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-organization-tables ---comment: Create organization related tables - - -DROP TABLE daily_nutrition_summary; - - -CREATE TABLE User_Group_Organization ( - User_Grp_Org_ID INT AUTO_INCREMENT PRIMARY KEY, - User_Grp_Org_Name VARCHAR(100) NOT NULL, - Creator_User_ID INT NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - - -CREATE TABLE User_Group_Members ( - User_Grp_Org_ID INT NOT NULL, - User_ID INT NOT NULL, - R_Ship_Creator VARCHAR(50), - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_Grp_Org_ID, User_ID), - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE TABLE User_Group_Admin ( - User_Grp_Org_ID INT NOT NULL, - Admin_User_ID INT NOT NULL, - Organization_Role VARCHAR(50) NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_Grp_Org_ID, Admin_User_ID), - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE TABLE User_Delegation ( - User_ID INT NOT NULL, - Delegate_To_User_ID INT NOT NULL, - Data_Group_ID INT NOT NULL, - Delegation_Start_Date DATE NOT NULL, - Delegation_Expiry_Date DATE NOT NULL, - Creation_Date_Time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (User_ID, Delegate_To_User_ID, Data_Group_ID) -); - - -CREATE TABLE daily_nutrition_summary ( - id INT AUTO_INCREMENT PRIMARY KEY, - user_id INT NOT NULL, - User_Grp_Org_ID INT, - date DATE NOT NULL, - visibility_level INT DEFAULT 1, - data_category VARCHAR(50) DEFAULT 'regular', - reference_group_id INT, - health_metrics_reference_id INT, - total_calories DECIMAL(10,2) DEFAULT 0, - total_protein DECIMAL(10,2) DEFAULT 0, - total_fat DECIMAL(10,2) DEFAULT 0, - total_carbs DECIMAL(10,2) DEFAULT 0, - total_sodium DECIMAL(10,2) DEFAULT 0, - total_potassium DECIMAL(10,2) DEFAULT 0, - total_calcium DECIMAL(10,2) DEFAULT 0, - total_phosphorus DECIMAL(10,2) DEFAULT 0, - total_iron DECIMAL(10,2) DEFAULT 0, - total_vitamin_a DECIMAL(10,2) DEFAULT 0, - total_vitamin_b1 DECIMAL(10,2) DEFAULT 0, - total_vitamin_b2 DECIMAL(10,2) DEFAULT 0, - total_niacin DECIMAL(10,2) DEFAULT 0, - total_vitamin_c DECIMAL(10,2) DEFAULT 0, - breakfast_calories DECIMAL(10,2) DEFAULT 0, - lunch_calories DECIMAL(10,2) DEFAULT 0, - dinner_calories DECIMAL(10,2) DEFAULT 0, - snack_calories DECIMAL(10,2) DEFAULT 0, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - FOREIGN KEY (User_Grp_Org_ID) REFERENCES User_Group_Organization(User_Grp_Org_ID) -); - - -CREATE INDEX idx_daily_nutrition_user_date ON daily_nutrition_summary(user_id, date); -CREATE INDEX idx_daily_nutrition_org_date ON daily_nutrition_summary(User_Grp_Org_ID, date); - - - diff --git a/src/main/resources/db/changelog/changes/enson_change/49_alter_muti_table.sql b/src/main/resources/db/changelog/changes/enson_change/49_alter_muti_table.sql deleted file mode 100644 index 7f1981e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/49_alter_muti_table.sql +++ /dev/null @@ -1,71 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-organization-tables ---comment: Create organization related tables - - - -INSERT INTO User_Group_Organization (User_Grp_Org_ID, User_Grp_Org_Name, Creator_User_ID, Creation_Date_Time) -VALUES -(1, 'Aschool', 1001, NOW()), -(2, 'Bschool', 1002, NOW()), -(3, 'Cschool', 1003, NOW()), -(4, 'Dschool', 1004, NOW()), -(5, 'Eschool', 1005, NOW()); - - -INSERT INTO User_Group_Members (User_Grp_Org_ID, User_ID, R_Ship_Creator, Creation_Date_Time) -VALUES - -(1, 1001, 'Creator', NOW()), -(1, 1010, 'Student', NOW()), -(1, 1011, 'Student', NOW()), -(1, 1012, 'Teacher', NOW()), -(1, 1013, 'Teacher', NOW()), - -(2, 1002, 'Creator', NOW()), -(2, 1020, 'Student', NOW()), -(2, 1021, 'Student', NOW()), -(2, 1022, 'Teacher', NOW()), - -(3, 1003, 'Creator', NOW()), -(3, 1030, 'Student', NOW()), -(3, 1031, 'Student', NOW()), - -(4, 1004, 'Creator', NOW()), -(4, 1040, 'Student', NOW()), - -(5, 1005, 'Creator', NOW()), -(5, 1050, 'Student', NOW()); - - -INSERT INTO User_Group_Admin (User_Grp_Org_ID, Admin_User_ID, Organization_Role, Creation_Date_Time) -VALUES - -(1, 1001, 'President', NOW()), -(1, 1012, 'Dean', NOW()), -(1, 1013, 'Dean', NOW()), - -(2, 1002, 'President', NOW()), -(2, 1022, 'Dean', NOW()), - -(3, 1003, 'President', NOW()), -(3, 1031, 'President', NOW()), - -(4, 1004, 'President', NOW()), - -(5, 1005, 'President', NOW()); - - -INSERT INTO User_Delegation (User_ID, Delegate_To_User_ID, Data_Group_ID, Delegation_Start_Date, Delegation_Expiry_Date, Creation_Date_Time) -VALUES - -(1001, 1012, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), - -(1001, 1013, 2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 6 MONTH), NOW()), - -(1002, 1022, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), -(1002, 1022, 2, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 1 YEAR), NOW()), - -(1003, 1031, 3, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 3 MONTH), NOW()), - -(1010, 1011, 4, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 7 DAY), NOW()); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/50_alter_table.sql b/src/main/resources/db/changelog/changes/enson_change/50_alter_table.sql deleted file mode 100644 index 9413a3a..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/50_alter_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:insert-sample-data ---comment: Insert sample data for testing - -ALTER TABLE `fhsmscdb`.`daily_nutrition_summary` -CHANGE COLUMN `created_at` `created` datetime, -CHANGE COLUMN `updated_at` `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, -ADD COLUMN `createdBy` bigint DEFAULT NULL, -ADD COLUMN `version` int NOT NULL DEFAULT '0', -ADD COLUMN `modifiedBy` bigint DEFAULT NULL, -ADD COLUMN `deleted` tinyint(1) NOT NULL DEFAULT '0'; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/51_alter_i18n.sql b/src/main/resources/db/changelog/changes/enson_change/51_alter_i18n.sql deleted file mode 100644 index 4080519..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/51_alter_i18n.sql +++ /dev/null @@ -1,35 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -UPDATE fb_menu SET Menu_Item_Description = CASE FB_menu_id - WHEN 101 THEN 'Pan-fried Salmon with Seasonal Vegetables' - WHEN 102 THEN 'Black Pepper Steak with Mushroom Sauce' - WHEN 103 THEN 'Thai Green Curry Chicken' - WHEN 104 THEN 'Spaghetti Bolognese with Parmesan Cheese' - WHEN 105 THEN 'Mediterranean Salad' - WHEN 201 THEN 'Steamed Sea Bass with Ginger and Spring Onion' - WHEN 202 THEN 'Braised Lion Head Meatballs' - WHEN 203 THEN 'Kung Pao Chicken with Peanuts' -END -WHERE FB_menu_id IN (101,102,103,104,105,201,202,203); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_menu', 'Menu_Item_Description', 101, 'zh', '香煎鮭魚配時蔬'), -('fb_menu', 'Menu_Item_Description', 102, 'zh', '黑椒牛排佐蘑菇醬'), -('fb_menu', 'Menu_Item_Description', 103, 'zh', '泰國青咖哩雞'), -('fb_menu', 'Menu_Item_Description', 104, 'zh', '義式肉醬麵配帕瑪森起司'), -('fb_menu', 'Menu_Item_Description', 105, 'zh', '地中海風味沙拉'), -('fb_menu', 'Menu_Item_Description', 201, 'zh', '清蒸鱸魚配薑蔥'), -('fb_menu', 'Menu_Item_Description', 202, 'zh', '紅燒獅子頭'), -('fb_menu', 'Menu_Item_Description', 203, 'zh', '宮保雞丁配花生米'); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_menu', 'Menu_Item_Description', 101, 'en', 'Pan-fried Salmon with Seasonal Vegetables'), -('fb_menu', 'Menu_Item_Description', 102, 'en', 'Black Pepper Steak with Mushroom Sauce'), -('fb_menu', 'Menu_Item_Description', 103, 'en', 'Thai Green Curry Chicken'), -('fb_menu', 'Menu_Item_Description', 104, 'en', 'Spaghetti Bolognese with Parmesan Cheese'), -('fb_menu', 'Menu_Item_Description', 105, 'en', 'Mediterranean Salad'), -('fb_menu', 'Menu_Item_Description', 201, 'en', 'Steamed Sea Bass with Ginger and Spring Onion'), -('fb_menu', 'Menu_Item_Description', 202, 'en', 'Braised Lion Head Meatballs'), -('fb_menu', 'Menu_Item_Description', 203, 'en', 'Kung Pao Chicken with Peanuts'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/51_create_i18n.sql b/src/main/resources/db/changelog/changes/enson_change/51_create_i18n.sql deleted file mode 100644 index a34fb27..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/51_create_i18n.sql +++ /dev/null @@ -1,20 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -CREATE TABLE `I18n` ( - `id` int NOT NULL AUTO_INCREMENT, - `table_name` varchar(50) NOT NULL, - `field_name` varchar(50) NOT NULL , - `record_id` int NOT NULL, - `language` varchar(10) NOT NULL, - `value` text NOT NULL, - `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `modified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `createdBy` int DEFAULT NULL, - `modifiedBy` int DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `UK_translation` (`table_name`, `field_name`, `record_id`, `language`), - KEY `IDX_table_field` (`table_name`, `field_name`), - KEY `IDX_language` (`language`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/53_alter_i18n.sql b/src/main/resources/db/changelog/changes/enson_change/53_alter_i18n.sql deleted file mode 100644 index d4d0b34..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/53_alter_i18n.sql +++ /dev/null @@ -1,31 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -UPDATE fb_outlets SET FB_outlet_district = CASE id - WHEN 1 THEN 'Admiralty' - WHEN 2 THEN 'Wan Chai' - WHEN 3 THEN 'Kwun Tong' - WHEN 4 THEN 'Kwun Tong' -END -WHERE id IN (1,2,3,4); - -UPDATE fb_outlets SET FB_outlet_address = CASE id - WHEN 1 THEN 'Shop A, No.1-41, G/F, Admiralty Centre, 18 Harcourt Road' - WHEN 2 THEN 'Shop G11-17 ,G/F, C.c. Wu Building,11-17, 302-308, Hennessy Road' - WHEN 3 THEN 'Speedy Industrial Building, 2nd Floor, Room B, 114, Kwun Tong Road' - WHEN 4 THEN 'Shop No. L2-1 Level 2, apm, 418 Kwun Tong Rd' -END -WHERE id IN (1,2,3,4); -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 1, 'zh', '中環'), -('fb_outlets', 'FB_outlet_district', 2, 'zh', '灣仔'), -('fb_outlets', 'FB_outlet_district', 3, 'zh', '觀塘'), -('fb_outlets', 'FB_outlet_district', 4, 'zh', '觀塘'); - - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_address', 1, 'en', 'Shop A, No.1-41, G/F, Admiralty Centre, 18 Harcourt Road'), -('fb_outlets', 'FB_outlet_address', 2, 'en', 'Shop G11-17 ,G/F, C.c. Wu Building,11-17, 302-308, Hennessy Road'), -('fb_outlets', 'FB_outlet_address', 3, 'en', 'Speedy Industrial Building, 2nd Floor, Room B, 114, Kwun Tong Road'), -('fb_outlets', 'FB_outlet_address', 4, 'en', 'Shop No. L2-1 Level 2, apm, 418 Kwun Tong Rd'); diff --git a/src/main/resources/db/changelog/changes/enson_change/54_alter_i18n.sql b/src/main/resources/db/changelog/changes/enson_change/54_alter_i18n.sql deleted file mode 100644 index e7b54b2..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/54_alter_i18n.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 1, 'en', 'Admiralty'), -('fb_outlets', 'FB_outlet_district', 2, 'en', 'Wan Chai'), -('fb_outlets', 'FB_outlet_district', 3, 'en', 'Kwun Tong'), -('fb_outlets', 'FB_outlet_district', 4, 'en', 'Kwun Tong'); - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_address', 1, 'zh', '夏愨道18號海富中心地下1-41號A鋪'), -('fb_outlets', 'FB_outlet_address', 2, 'zh', '灣仔軒尼詩道302-308號皇后大廈地下G11-17號鋪'), -('fb_outlets', 'FB_outlet_address', 3, 'zh', '觀塘鯉魚門道114號迅達工業大廈2樓B室'), -('fb_outlets', 'FB_outlet_address', 4, 'zh', '觀塘鯉魚門道418號apm2樓L2-1號鋪'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/55_alter_i18n.sql b/src/main/resources/db/changelog/changes/enson_change/55_alter_i18n.sql deleted file mode 100644 index 64105b1..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/55_alter_i18n.sql +++ /dev/null @@ -1,24 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - - - -INSERT INTO i18n (table_name, field_name, record_id, language, value) VALUES -('fb_outlets', 'FB_outlet_district', 7, 'en', 'Central'), -('fb_outlets', 'FB_outlet_district', 8, 'en', 'Causeway Bay'), -('fb_outlets', 'FB_outlet_district', 9, 'en', 'Tsim Sha Tsui'), -('fb_outlets', 'FB_outlet_district', 10, 'en', 'Sha Tin'), -('fb_outlets', 'FB_outlet_district', 7, 'zh', '中環'), -('fb_outlets', 'FB_outlet_district', 8, 'zh', '銅鑼灣'), -('fb_outlets', 'FB_outlet_district', 9, 'zh', '尖沙咀'), -('fb_outlets', 'FB_outlet_district', 10, 'zh', '沙田'), - -('fb_outlets', 'FB_outlet_address', 7, 'en', 'Central Financial Street 88, 1st Floor'), -('fb_outlets', 'FB_outlet_address', 8, 'en', 'Causeway Bay Times Square 2nd Floor'), -('fb_outlets', 'FB_outlet_address', 9, 'en', 'Tsim Sha Tsui Guangdong Road 30'), -('fb_outlets', 'FB_outlet_address', 10, 'en', 'Sha Tin New City Plaza 5th Floor'), -('fb_outlets', 'FB_outlet_address', 7, 'zh', '金融街88號1樓'), -('fb_outlets', 'FB_outlet_address', 8, 'zh', '時代廣場2樓'), -('fb_outlets', 'FB_outlet_address', 9, 'zh', '廣東道30號'), -('fb_outlets', 'FB_outlet_address', 10, 'zh', '新城市廣場52樓'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/56_create_table.sql b/src/main/resources/db/changelog/changes/enson_change/56_create_table.sql deleted file mode 100644 index 61d17c3..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/56_create_table.sql +++ /dev/null @@ -1,15 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - - - -CREATE TABLE `UserAccessControl` ( - `UserId` int NOT NULL AUTO_INCREMENT, - `FunctionId` int NOT NULL, - `Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `Modified` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, - `CreatedBy` int DEFAULT NULL, - `ModifiedBy` int DEFAULT NULL, - PRIMARY KEY (`UserId`, `FunctionId`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/58_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/58_insert_data.sql deleted file mode 100644 index 35e02d7..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/58_insert_data.sql +++ /dev/null @@ -1,63 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', 'USER_MANAGEMENT', 'Maintain user master data'), -(2, 'VIEW_USER', 'View User', 'USER_MANAGEMENT', 'View user master data'), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', 'USER_MANAGEMENT', 'Maintain user group master data'), -(4, 'VIEW_USER_GROUP', 'View User Group', 'USER_MANAGEMENT', 'View user group master data'), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu', 'FOOD_MANAGEMENT', 'Maintain food and menu data'), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', 'FOOD_MANAGEMENT', 'View food and menu data'), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', 'FOOD_MANAGEMENT', 'Maintain food intake records'), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', 'FOOD_MANAGEMENT', 'View food intake records'), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', 'NUTRITION_MANAGEMENT', 'Maintain nutrition standards'), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', 'NUTRITION_MANAGEMENT', 'View nutrition standards'), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', 'NUTRITION_MANAGEMENT', 'Maintain nutrition analysis'), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', 'NUTRITION_MANAGEMENT', 'View nutrition analysis'), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', 'HEALTH_MANAGEMENT', 'Maintain health development data'), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', 'HEALTH_MANAGEMENT', 'View health development data'), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', 'HEALTH_MANAGEMENT', 'Maintain allergy data'), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', 'HEALTH_MANAGEMENT', 'View allergy data'), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', 'AI_MANAGEMENT', 'Maintain food AI models'), -(18, 'VIEW_AI_MODEL', 'View AI Model', 'AI_MANAGEMENT', 'View food AI models'), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', 'REPORT_MANAGEMENT', 'Generate nutrition trend analysis reports'), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', 'REPORT_MANAGEMENT', 'Generate health statistics reports'), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', 'REPORT_MANAGEMENT', 'Generate food leftover analysis reports'), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', 'FB_MANAGEMENT', 'Maintain F&B operator data'), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', 'FB_MANAGEMENT', 'View F&B operator data'), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', 'FB_MANAGEMENT', 'Maintain F&B outlet data'), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', 'FB_MANAGEMENT', 'View F&B outlet data'), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', 'ADVICE_MANAGEMENT', 'Maintain dietary advice data'), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', 'ADVICE_MANAGEMENT', 'View dietary advice data'), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', 'ACCESS_MANAGEMENT', 'Maintain access control settings'), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', 'ACCESS_MANAGEMENT', 'View access control settings'), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', 'ACCESS_MANAGEMENT', 'Maintain access delegation settings'), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', 'ACCESS_MANAGEMENT', 'View access delegation settings'); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/59_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/59_insert_data.sql deleted file mode 100644 index 9f6c03a..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/59_insert_data.sql +++ /dev/null @@ -1,63 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/60_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/60_insert_data.sql deleted file mode 100644 index aff3bc6..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/60_insert_data.sql +++ /dev/null @@ -1,67 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Insert user authority mapping - --- System Admin -INSERT INTO user_authority (userId, authId) VALUES --- user and access control management -(2, 1), -- MAINTAIN_USER -(1, 2), -- VIEW_USER -(1, 3), -- MAINTAIN_GROUP -(1, 4), -- VIEW_USER_GROUP -(1, 28), -- MAINTAIN_ACCESS_CONTROL -(1, 29), -- VIEW_ACCESS_CONTROL -(1, 30), -- MAINTAIN_ACCESS_DELEGATION -(1, 31), -- VIEW_ACCESS_DELEGATION --- AI和餐饮管理 -(1, 17), -- MAINTAIN_AI_MODEL -(1, 18), -- VIEW_AI_MODEL -(1, 22), -- MAINTAIN_FB_OPERATOR -(1, 23), -- VIEW_FB_OPERATOR -(1, 24), -- MAINTAIN_FB_OUTLET -(1, 25); -- VIEW_FB_OUTLET - --- School Admin -INSERT INTO user_authority (userId, authId) VALUES --- basic view permission -(2, 2), -- VIEW_USER -(2, 4), -- VIEW_USER_GROUP -(2, 29), -- VIEW_ACCESS_CONTROL --- report permission -(2, 19), -- G_NUTRITION_TREND_REPORT -(2, 20), -- G_HEALTH_STATISTICS_REPORT -(2, 21), -- G_FOOD_LEFTOVER_REPORT --- food and menu view permission -(2, 6), -- VIEW_FOOD_MENU -(2, 23), -- VIEW_FB_OPERATOR -(2, 25); -- VIEW_FB_OUTLET - --- Student User -INSERT INTO user_authority (userId, authId) VALUES --- personal data management -(9, 7), -- MAINTAIN_FOOD_INTAKE -(9, 8), -- VIEW_FOOD_INTAKE -(9, 13), -- MAINTAIN_HEALTH_DATA -(9, 14), -- VIEW_HEALTH_DATA -(9, 15), -- MAINTAIN_ALLERGY_DATA -(9, 16), -- VIEW_ALLERGY_DATA --- view permission -(9, 6), -- VIEW_FOOD_MENU -(9, 10), -- VIEW_NUTRITION_STANDARD -(9, 12), -- VIEW_NUTRITION_ANALYSIS -(9, 27); -- VIEW_DIETARY_ADVICE - --- Nutritionist/Health Advisor -INSERT INTO user_authority (userId, authId) VALUES --- nutrition and health management -(8, 11), -- MAINTAIN_NUTRITION_ANALYSIS -(8, 12), -- VIEW_NUTRITION_ANALYSIS -(8, 26), -- MAINTAIN_DIETARY_ADVICE -(8, 27), -- VIEW_DIETARY_ADVICE --- data view permission -(8, 14), -- VIEW_HEALTH_DATA -(8, 16), -- VIEW_ALLERGY_DATA -(8, 8), -- VIEW_FOOD_INTAKE --- report generation -(8, 19), -- G_NUTRITION_TREND_REPORT -(8, 20); -- G_HEALTH_STATISTICS_REPORT \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/61_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/61_insert_data.sql deleted file mode 100644 index 497e21f..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/61_insert_data.sql +++ /dev/null @@ -1,12 +0,0 @@ ---liquibase formatted sql ---changeset terence:create-i18n-table ---comment: Create i18n table - -INSERT INTO authority (id, authority, name, module, description) VALUES --- Access Control Management -(32, 'MAINTAIN_MENU_ITEM', 'Maintain Menu Item', null, null), -(33, 'VIEW_MENU_ITEM', 'View Menu Item', null, null), -(34, 'MAINTAIN_INGREDIENT', 'Maintain Ingredient', null, null), -(35, 'VIEW_INGREDIENT', 'View Ingredient', null, null), -(36, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', null, null), -(37, 'VIEW_MENU_OUTLET', 'View Menu Outlet', null, null); diff --git a/src/main/resources/db/changelog/changes/enson_change/62_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/62_insert_data.sql deleted file mode 100644 index b503cba..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/62_insert_data.sql +++ /dev/null @@ -1,61 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - --- 插入权限数据(添加条件检查) -INSERT INTO authority (id, authority, name, module, description) -SELECT 38, 'MAINTAIN_FB_OPERATOR', 'Maintain F&B Operator', 'F&B', 'Permission to maintain F&B operator information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_FB_OPERATOR'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 39, 'VIEW_FB_OPERATOR', 'View F&B Operator', 'F&B', 'Permission to view F&B operator information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_FB_OPERATOR'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 40, 'MAINTAIN_FB_OUTLET', 'Maintain F&B Outlet', 'F&B', 'Permission to maintain F&B outlet information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_FB_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 41, 'VIEW_FB_OUTLET', 'View F&B Outlet', 'F&B', 'Permission to view F&B outlet information' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_FB_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 42, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', 'F&B', 'Permission to maintain menu-outlet relationship' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'MAINTAIN_MENU_OUTLET'); - -INSERT INTO authority (id, authority, name, module, description) -SELECT 43, 'VIEW_MENU_OUTLET', 'View Menu Outlet', 'F&B', 'Permission to view menu-outlet relationship' -WHERE NOT EXISTS (SELECT 1 FROM authority WHERE authority = 'VIEW_MENU_OUTLET'); - --- 插入用户权限关联(添加条件检查) -INSERT INTO user_authority (userId, authId) -SELECT 6, 38 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 38); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 39 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 39); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 40 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 40); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 41 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 41); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 42 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 42); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 43 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 43); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 32 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 32); - -INSERT INTO user_authority (userId, authId) -SELECT 6, 33 -WHERE NOT EXISTS (SELECT 1 FROM user_authority WHERE userId = 6 AND authId = 33); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/63_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/63_insert_data.sql deleted file mode 100644 index f8fde29..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/63_insert_data.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - --- 插入权限数据(使用INSERT IGNORE避免重复) -INSERT IGNORE INTO authority (id, authority, name, module, description) -VALUES -(38, 'MAINTAIN_FB_OPERATOR', 'Maintain F&B Operator', 'F&B', 'Permission to maintain F&B operator information'), -(39, 'VIEW_FB_OPERATOR', 'View F&B Operator', 'F&B', 'Permission to view F&B operator information'), -(40, 'MAINTAIN_FB_OUTLET', 'Maintain F&B Outlet', 'F&B', 'Permission to maintain F&B outlet information'), -(41, 'VIEW_FB_OUTLET', 'View F&B Outlet', 'F&B', 'Permission to view F&B outlet information'), -(42, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', 'F&B', 'Permission to maintain menu-outlet relationship'), -(43, 'VIEW_MENU_OUTLET', 'View Menu Outlet', 'F&B', 'Permission to view menu-outlet relationship'); - --- 插入用户权限关联(使用INSERT IGNORE避免重复) -INSERT IGNORE INTO user_authority (userId, authId) -VALUES -(6, 38), -(6, 39), -(6, 40), -(6, 41), -(6, 42), -(6, 43), -(6, 32), -(6, 33); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/64_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/64_insert_data.sql deleted file mode 100644 index 785fb95..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/64_insert_data.sql +++ /dev/null @@ -1,66 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); - - diff --git a/src/main/resources/db/changelog/changes/enson_change/65_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/65_insert_data.sql deleted file mode 100644 index 785fb95..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/65_insert_data.sql +++ /dev/null @@ -1,66 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -drop table if exists authority; -CREATE TABLE `authority` ( - `id` int NOT NULL AUTO_INCREMENT, - `authority` varchar(100) NOT NULL, - `name` varchar(255) NOT NULL, - `module` varchar(100) DEFAULT NULL, - `description` varchar(500) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `uk_authority` (`authority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO authority (id, authority, name, module, description) VALUES --- User Management -(1, 'MAINTAIN_USER', 'Maintain User', null, null), -(2, 'VIEW_USER', 'View User', null, null), -(3, 'MAINTAIN_GROUP', 'Maintain User Group', null, null), -(4, 'VIEW_USER_GROUP', 'View User Group', null, null), - --- Food and Menu Management -(5, 'MAINTAIN_FOOD_MENU', 'Maintain Food Menu' , null, null), -(6, 'VIEW_FOOD_MENU', 'View Food Menu', null, null), -(7, 'MAINTAIN_FOOD_INTAKE', 'Maintain Food Intake', null, null), -(8, 'VIEW_FOOD_INTAKE', 'View Food Intake', null, null), - --- Nutrition Management -(9, 'MAINTAIN_NUTRITION_STANDARD', 'Maintain Nutrition Standard', null, null), -(10, 'VIEW_NUTRITION_STANDARD', 'View Nutrition Standard', null, null), -(11, 'MAINTAIN_NUTRITION_ANALYSIS', 'Maintain Nutrition Analysis', null, null), -(12, 'VIEW_NUTRITION_ANALYSIS', 'View Nutrition Analysis', null, null), - --- Health Data Management -(13, 'MAINTAIN_HEALTH_DATA', 'Maintain Health Data', null, null), -(14, 'VIEW_HEALTH_DATA', 'View Health Data', null, null), -(15, 'MAINTAIN_ALLERGY_DATA', 'Maintain Allergy Data', null, null), -(16, 'VIEW_ALLERGY_DATA', 'View Allergy Data', null, null), - --- AI Model Management -(17, 'MAINTAIN_AI_MODEL', 'Maintain AI Model', null, null), -(18, 'VIEW_AI_MODEL', 'View AI Model', null, null), - --- Report Generation -(19, 'G_NUTRITION_TREND_REPORT', 'Generate Nutrition Trend Report', null, null), -(20, 'G_HEALTH_STATISTICS_REPORT', 'Generate Health Statistics Report', null, null), -(21, 'G_FOOD_LEFTOVER_REPORT', 'Generate Food Leftover Report', null, null), - --- F&B Management -(22, 'MAINTAIN_FB_OPERATOR', 'Maintain Food Operator', null, null), -(23, 'VIEW_FB_OPERATOR', 'View Food Operator', null, null), -(24, 'MAINTAIN_FB_OUTLET', 'Maintain Food Outlet', null, null), -(25, 'VIEW_FB_OUTLET', 'View Food Outlet', null, null), - --- Dietary Advice Management -(26, 'MAINTAIN_DIETARY_ADVICE', 'Maintain Dietary Advice', null, null), -(27, 'VIEW_DIETARY_ADVICE', 'View Dietary Advice', null, null), - --- Access Control Management -(28, 'MAINTAIN_ACCESS_CONTROL', 'Maintain Access Control', null, null), -(29, 'VIEW_ACCESS_CONTROL', 'View Access Control', null, null), -(30, 'MAINTAIN_ACCESS_DELEGATION', 'Maintain Access Delegation', null, null), -(31, 'VIEW_ACCESS_DELEGATION', 'View Access Delegation', null, null); - - diff --git a/src/main/resources/db/changelog/changes/enson_change/66_insert_data.sql b/src/main/resources/db/changelog/changes/enson_change/66_insert_data.sql deleted file mode 100644 index bdf5207..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/66_insert_data.sql +++ /dev/null @@ -1,16 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -INSERT INTO authority (id, authority, name, module, description) VALUES --- Access Control Management -(32, 'MAINTAIN_MENU_ITEM', 'Maintain Menu Item', null, null), -(33, 'VIEW_MENU_ITEM', 'View Menu Item', null, null), -(34, 'MAINTAIN_INGREDIENT', 'Maintain Ingredient', null, null), -(35, 'VIEW_INGREDIENT', 'View Ingredient', null, null), -(36, 'MAINTAIN_MENU_OUTLET', 'Maintain Menu Outlet', null, null), -(37, 'VIEW_MENU_OUTLET', 'View Menu Outlet', null, null); - - - - diff --git a/src/main/resources/db/changelog/changes/enson_change/67_edit_table.sql b/src/main/resources/db/changelog/changes/enson_change/67_edit_table.sql deleted file mode 100644 index 4e82707..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/67_edit_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - -ALTER TABLE `FB_Operator` DROP COLUMN created_at; - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `FB_Operator` -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/src/main/resources/db/changelog/changes/enson_change/68_edit_table.sql b/src/main/resources/db/changelog/changes/enson_change/68_edit_table.sql deleted file mode 100644 index 7304e84..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/68_edit_table.sql +++ /dev/null @@ -1,17 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - -ALTER TABLE `fb_outlets` DROP COLUMN created_at; - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `fb_outlets` -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/src/main/resources/db/changelog/changes/enson_change/69_edit_table.sql b/src/main/resources/db/changelog/changes/enson_change/69_edit_table.sql deleted file mode 100644 index 5806a6e..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/69_edit_table.sql +++ /dev/null @@ -1,13 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - - --- 添加 BaseEntity 需要的字段 -ALTER TABLE `i18n` - -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; - - diff --git a/src/main/resources/db/changelog/changes/enson_change/70_edit_table.sql b/src/main/resources/db/changelog/changes/enson_change/70_edit_table.sql deleted file mode 100644 index adf3ea7..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/70_edit_table.sql +++ /dev/null @@ -1,72 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - - - -INSERT INTO user_authority (userId, authId) VALUES --- ARestaurantManager (userid 6) - 可以查看和编辑 -(6, 5), -- MAINTAIN_FOOD_MENU -(6, 6), -- VIEW_FOOD_MENU -(6, 7), -- MAINTAIN_FOOD_INTAKE -(6, 8), -- VIEW_FOOD_INTAKE -(6, 32), -- MAINTAIN_MENU_ITEM -(6, 33), -- VIEW_MENU_ITEM -(6, 34), -- MAINTAIN_INGREDIENT -(6, 35), -- VIEW_INGREDIENT -(6, 36), -- MAINTAIN_MENU_OUTLET -(6, 37), -- VIEW_MENU_OUTLET - --- ARestaurantclerk (userid 8) - 只能查看 -(8, 6), -- VIEW_FOOD_MENU -(8, 8), -- VIEW_FOOD_INTAKE -(8, 33), -- VIEW_MENU_ITEM -(8, 35), -- VIEW_INGREDIENT -(8, 37), -- VIEW_MENU_OUTLET - --- BRestaurantManager (userid 10) - 可以查看和编辑 -(10, 5), -- MAINTAIN_FOOD_MENU -(10, 6), -- VIEW_FOOD_MENU -(10, 7), -- MAINTAIN_FOOD_INTAKE -(10, 8), -- VIEW_FOOD_INTAKE -(10, 32), -- MAINTAIN_MENU_ITEM -(10, 33), -- VIEW_MENU_ITEM -(10, 34), -- MAINTAIN_INGREDIENT -(10, 35), -- VIEW_INGREDIENT -(10, 36), -- MAINTAIN_MENU_OUTLET -(10, 37), -- VIEW_MENU_OUTLET - --- BRestaurantclerk (userid 11) - 只能查看 -(11, 6), -- VIEW_FOOD_MENU -(11, 8), -- VIEW_FOOD_INTAKE -(11, 33), -- VIEW_MENU_ITEM -(11, 35), -- VIEW_INGREDIENT -(11, 37), -- VIEW_MENU_OUTLET - --- ASchoolheadmaster (userid 12) - 可以查看和编辑 -(12, 13), -- MAINTAIN_HEALTH_DATA -(12, 14), -- VIEW_HEALTH_DATA -(12, 15), -- MAINTAIN_ALLERGY_DATA -(12, 16), -- VIEW_ALLERGY_DATA -(12, 26), -- MAINTAIN_DIETARY_ADVICE -(12, 27), -- VIEW_DIETARY_ADVICE -(12, 20), -- G_HEALTH_STATISTICS_REPORT - --- ASchoolteacher (userid 13) - 只能查看 -(13, 14), -- VIEW_HEALTH_DATA -(13, 16), -- VIEW_ALLERGY_DATA -(13, 27), -- VIEW_DIETARY_ADVICE - --- BSchoolheadmaster (userid 14) - 可以查看和编辑 -(14, 13), -- MAINTAIN_HEALTH_DATA -(14, 14), -- VIEW_HEALTH_DATA -(14, 15), -- MAINTAIN_ALLERGY_DATA -(14, 16), -- VIEW_ALLERGY_DATA -(14, 26), -- MAINTAIN_DIETARY_ADVICE -(14, 27), -- VIEW_DIETARY_ADVICE -(14, 20), -- G_HEALTH_STATISTICS_REPORT - --- BSchoolteacher (userid 15) - 只能查看 -(15, 14), -- VIEW_HEALTH_DATA -(15, 16), -- VIEW_ALLERGY_DATA -(15, 27); -- VIEW_DIETARY_ADVICE \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/71_edit_table.sql b/src/main/resources/db/changelog/changes/enson_change/71_edit_table.sql deleted file mode 100644 index 5ed5092..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/71_edit_table.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:62-insert-fb-permissions ---comment: Insert F&B related permissions and user authorities - -INSERT INTO user_authority (userId, authId) VALUES --- ARestaurantManager (userid 6) - 可以查看和编辑 -(6, 22), -- MAINTAIN_FB_OPERATOR -(6, 23), -- VIEW_FB_OPERATOR -(6, 24), -- MAINTAIN_FB_OUTLET -(6, 25), -- VIEW_FB_OUTLET - --- ARestaurantclerk (userid 8) - 只能查看 -(8, 23), -- VIEW_FOOD_MENU -(8, 25), -- VIEW_FOOD_INTAKE - --- BRestaurantManager (userid 10) - 可以查看和编辑 -(10, 22), -- MAINTAIN_FB_OPERATOR -(10, 23), -- VIEW_FB_OPERATOR -(10, 24), -- MAINTAIN_FB_OUTLET -(10, 25), -- VIEW_FB_OUTLET - --- BRestaurantclerk (userid 11) - 只能查看 -(11, 23), -- VIEW_FOOD_MENU -(11, 25); -- VIEW_FOOD_INTAKE - diff --git a/src/main/resources/db/changelog/changes/enson_change/72_create_table.sql b/src/main/resources/db/changelog/changes/enson_change/72_create_table.sql deleted file mode 100644 index a6fea54..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/72_create_table.sql +++ /dev/null @@ -1,24 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -CREATE TABLE `fb_operator_and_organization_relationship` ( - `id` int NOT NULL AUTO_INCREMENT, - `FB_id` int NOT NULL, - `User_Grp_Org_ID` int NOT NULL, - `created` timestamp NULL, - `createdBy` varchar(255) NULL, - `modified` timestamp NULL, - `modifiedBy` varchar(255) NULL, - `deleted` bit(1) DEFAULT 0, - `version` int DEFAULT 0, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; - -INSERT INTO `fb_operator_and_organization_relationship` -(id, FB_id, User_Grp_Org_ID) VALUES --- User Management -(1, 1, 1), -(2, 2, 2), -(3, 3, 2), -(4, 4, 1); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/73_ALTER_table.sql b/src/main/resources/db/changelog/changes/enson_change/73_ALTER_table.sql deleted file mode 100644 index 05105fa..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/73_ALTER_table.sql +++ /dev/null @@ -1,8 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_authority -DROP PRIMARY KEY, -ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY FIRST, -ADD UNIQUE KEY unique_user_auth (userId, authId); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/74_ALTER_table.sql b/src/main/resources/db/changelog/changes/enson_change/74_ALTER_table.sql deleted file mode 100644 index 51ba038..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/74_ALTER_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_authority -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/75_ALTER_table.sql b/src/main/resources/db/changelog/changes/enson_change/75_ALTER_table.sql deleted file mode 100644 index e661d5d..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/75_ALTER_table.sql +++ /dev/null @@ -1,11 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - -ALTER TABLE user_group_members -ADD COLUMN `created` timestamp NULL, -ADD COLUMN `createdBy` varchar(255) NULL, -ADD COLUMN `modified` timestamp NULL, -ADD COLUMN `modifiedBy` varchar(255) NULL, -ADD COLUMN `deleted` bit(1) DEFAULT 0, -ADD COLUMN `version` int DEFAULT 0; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/76_ALTER_table.sql b/src/main/resources/db/changelog/changes/enson_change/76_ALTER_table.sql deleted file mode 100644 index 653520d..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/76_ALTER_table.sql +++ /dev/null @@ -1,25 +0,0 @@ ---liquibase formatted sql ---changeset terence:72-create-fb_operator_and_organization_relationship-table ---comment: Insert F&B related permissions and user authorities - --- First, drop the foreign key constraint -ALTER TABLE user_group_members -DROP FOREIGN KEY user_group_members_ibfk_1; - --- Then drop the primary key -ALTER TABLE user_group_members -DROP PRIMARY KEY; - --- Add the new id column -ALTER TABLE user_group_members -ADD COLUMN id BIGINT AUTO_INCREMENT PRIMARY KEY; - --- Re-add the foreign key constraint -ALTER TABLE user_group_members -ADD CONSTRAINT user_group_members_ibfk_1 -FOREIGN KEY (User_Grp_Org_ID) -REFERENCES user_group_organization (User_Grp_Org_ID); - --- Add unique constraint for the original composite key -ALTER TABLE user_group_members -ADD CONSTRAINT uk_org_user UNIQUE (User_Grp_Org_ID, User_ID); \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/77_create_table.sql b/src/main/resources/db/changelog/changes/enson_change/77_create_table.sql deleted file mode 100644 index b357104..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/77_create_table.sql +++ /dev/null @@ -1,26 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table -ALTER TABLE fb_menu - Add category VARCHAR(50), - Add price DECIMAL(10,2), - Add is_vegetarian BOOLEAN DEFAULT FALSE, - Add is_vegan BOOLEAN DEFAULT FALSE, - Add is_gluten_free BOOLEAN DEFAULT FALSE, - Add is_spicy BOOLEAN DEFAULT FALSE - - - ---changeset yourname:004-create-menu_embedding-table -CREATE TABLE menu_item_base_embedding ( - embedding_id INT NOT NULL AUTO_INCREMENT, - FB_menu_id INT NOT NULL, - embedding_vector JSON NOT NULL, - embedding_text TEXT NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (embedding_id), - FOREIGN KEY (FB_menu_id) REFERENCES fb_menu(FB_menu_id) ON DELETE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/78_create_table.sql b/src/main/resources/db/changelog/changes/enson_change/78_create_table.sql deleted file mode 100644 index 7fb99a6..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/78_create_table.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table -CREATE TABLE fboperator ( - id INT AUTO_INCREMENT PRIMARY KEY, - FB_name VARCHAR(255) NOT NULL, - FB_operator_address VARCHAR(255), - FB_operator_phone VARCHAR(255), - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); diff --git a/src/main/resources/db/changelog/changes/enson_change/79_alter_table.sql b/src/main/resources/db/changelog/changes/enson_change/79_alter_table.sql deleted file mode 100644 index 54efd95..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/79_alter_table.sql +++ /dev/null @@ -1,18 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table - -CREATE TABLE fb_operator_backup AS SELECT * FROM fb_operator; - - -ALTER TABLE fb_operator -ADD COLUMN FB_operator_id INT NULL AFTER FB_id; - - -ALTER TABLE fb_operator -CHANGE COLUMN FB_id id INT AUTO_INCREMENT; - -RENAME TABLE fb_operator TO fb_brand; \ No newline at end of file diff --git a/src/main/resources/db/changelog/changes/enson_change/80_create_table.sql b/src/main/resources/db/changelog/changes/enson_change/80_create_table.sql deleted file mode 100644 index c1ff9f9..0000000 --- a/src/main/resources/db/changelog/changes/enson_change/80_create_table.sql +++ /dev/null @@ -1,30 +0,0 @@ ---liquibase formatted sql ---changeset terence:77-create-embedding-table ---comment: Insert F&B related permissions and user authorities - ---liquibase formatted sql ---changeset yourname:001-create-menu_item-table - -CREATE TABLE fb_group ( - id INT AUTO_INCREMENT PRIMARY KEY, - FB_brand_id INT NOT NULL, - FB_group_name VARCHAR(255) NOT NULL, - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); -CREATE TABLE fb_group_relationship ( - id INT AUTO_INCREMENT PRIMARY KEY, - Fb_brand_id INT NOT NULL, - FB_group_id INT NOT NULL, - FB_menu_id INT NOT NULL, - created TIMESTAMP, - createdBy VARCHAR(255), - modified TIMESTAMP, - modifiedBy VARCHAR(255), - deleted BIT(1), - version INT -); diff --git a/src/test/java/com/ffii/ars/FhsmsCApplicationTests.java b/src/test/java/com/ffii/ars/Pet_AppTests.java similarity index 84% rename from src/test/java/com/ffii/ars/FhsmsCApplicationTests.java rename to src/test/java/com/ffii/ars/Pet_AppTests.java index 7ae2c11..e5f2e07 100644 --- a/src/test/java/com/ffii/ars/FhsmsCApplicationTests.java +++ b/src/test/java/com/ffii/ars/Pet_AppTests.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class FhsmsCApplicationTests { +class Pet_AppTests { @Test void contextLoads() {