From 322af0b4ca2271c0f1e897b7b47e8e7d6e71947f Mon Sep 17 00:00:00 2001 From: DecDuck Date: Wed, 20 Aug 2025 20:35:50 +1000 Subject: [PATCH] feat: rearchitecture of database schemas, migration reset, and #180 --- components/GameEditor/Version.vue | 66 +- components/PlatformSelector.vue | 9 +- components/StoreView.vue | 3 +- composables/icons.ts | 8 +- composables/types.ts | 8 +- i18n/locales/en_us.json | 4 +- package.json | 2 +- pages/admin/library/[id]/import.vue | 354 ++++++---- pages/store/[id]/index.vue | 3 +- .../migration.sql | 25 - .../migration.sql | 9 - .../migration.sql | 76 -- .../migration.sql | 24 - .../migration.sql | 16 - .../migration.sql | 12 - .../migration.sql | 2 - .../20241007065541_add_client/migration.sql | 15 - .../migration.sql | 19 - .../migration.sql | 12 - .../migration.sql | 25 - .../migration.sql | 25 - .../migration.sql | 12 - .../migration.sql | 18 - .../migration.sql | 8 - .../migration.sql | 14 - .../migration.sql | 10 - .../migration.sql | 8 - .../migration.sql | 9 - .../migration.sql | 8 - .../migration.sql | 9 - .../migration.sql | 7 - .../migration.sql | 14 - .../migration.sql | 14 - .../migration.sql | 23 - .../migration.sql | 9 - .../migration.sql | 8 - .../migration.sql | 18 - .../migration.sql | 2 - .../migration.sql | 5 - .../migration.sql | 8 - .../migration.sql | 2 - .../migration.sql | 5 - .../migration.sql | 11 - .../migration.sql | 16 - .../migration.sql | 2 - .../migration.sql | 2 - .../migration.sql | 6 - .../migration.sql | 29 - .../migration.sql | 28 - .../migration.sql | 5 - .../20250128102738_add_news/migration.sql | 16 - .../20250204010021_add_tokens/migration.sql | 15 - .../migration.sql | 5 - .../migration.sql | 8 - .../migration.sql | 14 - .../migration.sql | 20 - .../migration.sql | 52 -- .../migration.sql | 8 - .../migration.sql | 8 - .../migration.sql | 2 - .../migration.sql | 2 - .../migration.sql | 10 - .../migration.sql | 5 - .../migration.sql | 17 - .../migration.sql | 2 - .../migration.sql | 24 - .../migration.sql | 3 - .../migration.sql | 14 - .../migration.sql | 2 - .../migration.sql | 2 - .../migration.sql | 10 - .../migration.sql | 13 - .../migration.sql | 8 - .../migration.sql | 2 - .../migration.sql | 5 - .../migration.sql | 7 - .../migration.sql | 2 - .../migration.sql | 8 - .../migration.sql | 20 - .../migration.sql | 16 - .../migration.sql | 35 - .../migration.sql | 76 -- .../migration.sql | 16 - .../migration.sql | 11 - .../migration.sql | 41 -- .../migration.sql | 2 - .../migration.sql | 53 -- .../migration.sql | 17 - .../migration.sql | 8 - .../migration.sql | 14 - .../migration.sql | 8 - .../migration.sql | 41 -- .../migration.sql | 2 - .../migration.sql | 2 - .../migration.sql | 5 - .../migration.sql | 14 - .../20250721053514_add_featured/migration.sql | 2 - .../migration.sql | 11 - .../20250721062509_add_pg_trgm/migration.sql | 5 - .../migration.sql | 2 - .../migration.sql | 87 --- .../migration.sql | 11 - .../migration.sql | 15 - .../migration.sql | 35 - .../migration.sql | 14 - .../20250820044328_init/migration.sql | 666 ++++++++++++++++++ .../20250820044424_add_indexes/migration.sql | 5 + .../migration.sql | 8 + .../migration.sql | 35 + .../migration.sql | 42 ++ .../migration.sql | 35 + prisma/models/app.prisma | 11 +- prisma/models/content.prisma | 86 ++- prisma/models/metadata.prisma | 55 +- server/api/v1/admin/game/[id]/index.get.ts | 18 +- .../api/v1/admin/game/version/index.delete.ts | 11 +- .../api/v1/admin/game/version/index.patch.ts | 20 +- .../api/v1/admin/import/version/index.post.ts | 66 +- server/api/v1/client/game/manifest.get.ts | 7 +- server/api/v1/client/game/version.get.ts | 5 +- server/api/v1/client/game/versions.get.ts | 21 +- server/internal/downloads/coordinator.ts | 17 +- server/internal/downloads/manifest.ts | 48 +- server/internal/library/index.ts | 71 +- yarn.lock | 120 ++-- 125 files changed, 1384 insertions(+), 1837 deletions(-) delete mode 100644 prisma/migrations/20240928081254_create_user_and_auth_mechanisms/migration.sql delete mode 100644 prisma/migrations/20240928085121_move_to_json_for_credentials/migration.sql delete mode 100644 prisma/migrations/20240929000950_add_game_data/migration.sql delete mode 100644 prisma/migrations/20240929010842_updates_to_metadata_schema/migration.sql delete mode 100644 prisma/migrations/20241004020835_unique_constraints/migration.sql delete mode 100644 prisma/migrations/20241004025235_add_dev_pub_websites/migration.sql delete mode 100644 prisma/migrations/20241007043002_add_user_admin/migration.sql delete mode 100644 prisma/migrations/20241007065541_add_client/migration.sql delete mode 100644 prisma/migrations/20241008062519_remove_shared_token_and_add_last_connected/migration.sql delete mode 100644 prisma/migrations/20241009032354_add_account_details/migration.sql delete mode 100644 prisma/migrations/20241010062956_add_constraints/migration.sql delete mode 100644 prisma/migrations/20241010095344_various_fixes/migration.sql delete mode 100644 prisma/migrations/20241010104439_added_original_query_field/migration.sql delete mode 100644 prisma/migrations/20241010104722_fix_unique_constraints/migration.sql delete mode 100644 prisma/migrations/20241011035227_add_droplet_manifest_to_game_versions/migration.sql delete mode 100644 prisma/migrations/20241011093950_update_game_images_system/migration.sql delete mode 100644 prisma/migrations/20241011101243_revert_banner_system/migration.sql delete mode 100644 prisma/migrations/20241011103116_add_cover_image/migration.sql delete mode 100644 prisma/migrations/20241014052934_add_delta_and_order/migration.sql delete mode 100644 prisma/migrations/20241014053941_remove_version_order/migration.sql delete mode 100644 prisma/migrations/20241025091103_add_invitations/migration.sql delete mode 100644 prisma/migrations/20241102000813_create_application_configuration/migration.sql delete mode 100644 prisma/migrations/20241105221904_different_client_capabilities/migration.sql delete mode 100644 prisma/migrations/20241105222110_trackable_names_for_capabilities/migration.sql delete mode 100644 prisma/migrations/20241105225732_peer_api_configuration/migration.sql delete mode 100644 prisma/migrations/20241105230021_move_to_endpoint_configuration/migration.sql delete mode 100644 prisma/migrations/20241107080421_add_expiry_for_invitations/migration.sql delete mode 100644 prisma/migrations/20241116053120_add_notifications/migration.sql delete mode 100644 prisma/migrations/20241116054212_add_created_time_stamp_to_notifications/migration.sql delete mode 100644 prisma/migrations/20241122215933_add_created_timestamps_for_games/migration.sql delete mode 100644 prisma/migrations/20241124042825_add_released_date_for_the_game/migration.sql delete mode 100644 prisma/migrations/20241223022005_add_umu_id_to_game_version/migration.sql delete mode 100644 prisma/migrations/20241223100329_add_referential_deletion_for_game_versions/migration.sql delete mode 100644 prisma/migrations/20241223100418_update_to_prisma_6/migration.sql delete mode 100644 prisma/migrations/20241226065709_rename_custom_to_manual/migration.sql delete mode 100644 prisma/migrations/20241226230207_add_image_carousel/migration.sql delete mode 100644 prisma/migrations/20241227033610_move_image_carousel_to_image_ids/migration.sql delete mode 100644 prisma/migrations/20241230053403_add_args_and_only_setup/migration.sql delete mode 100644 prisma/migrations/20250103202348_add_collections/migration.sql delete mode 100644 prisma/migrations/20250109005948_use_collection_entry_to_ensure_unique_games/migration.sql delete mode 100644 prisma/migrations/20250128060446_casacad_e_delete_for_collection_entries/migration.sql delete mode 100644 prisma/migrations/20250128102738_add_news/migration.sql delete mode 100644 prisma/migrations/20250204010021_add_tokens/migration.sql delete mode 100644 prisma/migrations/20250204020918_add_collection_entry_casacade_delete/migration.sql delete mode 100644 prisma/migrations/20250208004345_add_api_token_name/migration.sql delete mode 100644 prisma/migrations/20250208005625_add_id_to_token/migration.sql delete mode 100644 prisma/migrations/20250211230021_ensure_non_null_launch_and_setup_commands/migration.sql delete mode 100644 prisma/migrations/20250309234300_news_articles/migration.sql delete mode 100644 prisma/migrations/20250309234801_make_tags_unique/migration.sql delete mode 100644 prisma/migrations/20250309234846_make_tokens_unique/migration.sql delete mode 100644 prisma/migrations/20250311073601_add_macos_as_a_platform/migration.sql delete mode 100644 prisma/migrations/20250312230736_add_metadata_providers_to_appconfig/migration.sql delete mode 100644 prisma/migrations/20250313042306_add_igdb_pcgamingwiki_metadata/migration.sql delete mode 100644 prisma/migrations/20250313053250_add_enable_fields_to_auth_and_users/migration.sql delete mode 100644 prisma/migrations/20250314153636_store_ca_and_session_in_db/migration.sql delete mode 100644 prisma/migrations/20250324014736_add_auth_mek_version/migration.sql delete mode 100644 prisma/migrations/20250401082200_add_save_slots/migration.sql delete mode 100644 prisma/migrations/20250401082605_add_save_slot_limits_to_application_settings/migration.sql delete mode 100644 prisma/migrations/20250401083942_rename_save_to_cloud_saves/migration.sql delete mode 100644 prisma/migrations/20250401084907_add_history_limit/migration.sql delete mode 100644 prisma/migrations/20250401085406_add_default_to_playtime/migration.sql delete mode 100644 prisma/migrations/20250401091937_add_history_and_hashes/migration.sql delete mode 100644 prisma/migrations/20250403233442_apply_store_changes/migration.sql delete mode 100644 prisma/migrations/20250405062945_make_last_accessed_optional_on_save_slots/migration.sql delete mode 100644 prisma/migrations/20250407090729_add_client_token_mode/migration.sql delete mode 100644 prisma/migrations/20250407091012_add_client_token_field_to_apitoken/migration.sql delete mode 100644 prisma/migrations/20250414002714_add_object_hash/migration.sql delete mode 100644 prisma/migrations/20250507120031_add_openid_authmek/migration.sql delete mode 100644 prisma/migrations/20250507223112_remove_authentication_option_from_applicationsettings/migration.sql delete mode 100644 prisma/migrations/20250508153613_add_screenshots/migration.sql delete mode 100644 prisma/migrations/20250508224553_cleanup_old_objects/migration.sql delete mode 100644 prisma/migrations/20250509003340_init_unified_company_metadata/migration.sql delete mode 100644 prisma/migrations/20250510013650_remove_devlopers_and_publishers/migration.sql delete mode 100644 prisma/migrations/20250511154134_add_tags_to_games/migration.sql delete mode 100644 prisma/migrations/20250514193830_allow_notification_nonce_reuse_per_user/migration.sql delete mode 100644 prisma/migrations/20250515021331_add_game_ratings/migration.sql delete mode 100644 prisma/migrations/20250515043254_add_acls_to_notifications/migration.sql delete mode 100644 prisma/migrations/20250601022736_add_database_library/migration.sql delete mode 100644 prisma/migrations/20250601032211_add_library_relation_to_game/migration.sql delete mode 100644 prisma/migrations/20250601032938_add_unique_constraint/migration.sql delete mode 100644 prisma/migrations/20250606013242_add_tasks_to_database/migration.sql delete mode 100644 prisma/migrations/20250606023802_add_name_to_task/migration.sql delete mode 100644 prisma/migrations/20250608010030_delete_user_cascade/migration.sql delete mode 100644 prisma/migrations/20250621205541_add_show_title_description_on_game_panel/migration.sql delete mode 100644 prisma/migrations/20250702102624_add_flat_fs_provider/migration.sql delete mode 100644 prisma/migrations/20250720070939_static_genres/migration.sql delete mode 100644 prisma/migrations/20250721053244_update_genre_names/migration.sql delete mode 100644 prisma/migrations/20250721053514_add_featured/migration.sql delete mode 100644 prisma/migrations/20250721061200_remove_genres/migration.sql delete mode 100644 prisma/migrations/20250721062509_add_pg_trgm/migration.sql delete mode 100644 prisma/migrations/20250721063518_add_index_for_tag_name/migration.sql delete mode 100644 prisma/migrations/20250721070713_split_game_and_news_tags/migration.sql delete mode 100644 prisma/migrations/20250801035031_add_delete_casacde/migration.sql delete mode 100644 prisma/migrations/20250815014713_use_task_id_started_composite_id/migration.sql delete mode 100644 prisma/migrations/20250819230647_add_redist_objects/migration.sql delete mode 100644 prisma/migrations/20250820000344_add_library_key/migration.sql create mode 100644 prisma/migrations/20250820044328_init/migration.sql create mode 100644 prisma/migrations/20250820044424_add_indexes/migration.sql create mode 100644 prisma/migrations/20250820050413_add_hidden_field_to_game_version/migration.sql create mode 100644 prisma/migrations/20250820095728_add_args_back/migration.sql create mode 100644 prisma/migrations/20250820101258_split_ids_into_separate_fields/migration.sql create mode 100644 prisma/migrations/20250820102120_add_delete_casacades/migration.sql diff --git a/components/GameEditor/Version.vue b/components/GameEditor/Version.vue index d2d38ad..ecf3b26 100644 --- a/components/GameEditor/Version.vue +++ b/components/GameEditor/Version.vue @@ -51,7 +51,11 @@ @update="() => updateVersionOrder()" > diff --git a/components/PlatformSelector.vue b/components/PlatformSelector.vue index 1168b04..4b73c18 100644 --- a/components/PlatformSelector.vue +++ b/components/PlatformSelector.vue @@ -32,7 +32,7 @@ class="absolute z-10 mt-1 max-h-56 w-full overflow-auto rounded-md bg-zinc-900 py-1 text-base shadow-lg ring-1 ring-zinc-950 ring-opacity-5 focus:outline-none sm:text-sm" > (); +const model = defineModel(); -const typedModel = computed({ +const typedModel = computed({ get() { return model.value || null; }, @@ -95,5 +96,5 @@ const typedModel = computed({ }, }); -const values = Object.fromEntries(Object.entries(PlatformClient)); +const values = Object.entries(Platform); diff --git a/components/StoreView.vue b/components/StoreView.vue index ea9bdaa..957c6f5 100644 --- a/components/StoreView.vue +++ b/components/StoreView.vue @@ -361,6 +361,7 @@ import { import type { SerializeObject } from "nitropack"; import type { GameModel, GameTagModel } from "~/prisma/client/models"; import MultiItemSelector from "./MultiItemSelector.vue"; +import { Platform } from "~/prisma/client/enums"; const { showGamePanelTextDecoration } = await $dropFetch(`/api/v1/settings`); const mobileFiltersOpen = ref(false); @@ -407,7 +408,7 @@ const options: Array = [ name: "Platform", param: "platform", multiple: true, - options: Object.values(PlatformClient).map((e) => ({ name: e, param: e })), + options: Object.values(Platform).map((e) => ({ name: e, param: e })), }, ...(props.extraOptions ?? []), ]; diff --git a/composables/icons.ts b/composables/icons.ts index 247cf83..d56cfcf 100644 --- a/composables/icons.ts +++ b/composables/icons.ts @@ -1,8 +1,8 @@ import { IconsLinuxLogo, IconsWindowsLogo, IconsMacLogo } from "#components"; -import { PlatformClient } from "./types"; +import { Platform } from "~/prisma/client/enums"; export const PLATFORM_ICONS = { - [PlatformClient.Linux]: IconsLinuxLogo, - [PlatformClient.Windows]: IconsWindowsLogo, - [PlatformClient.macOS]: IconsMacLogo, + [Platform.Linux]: IconsLinuxLogo, + [Platform.Windows]: IconsWindowsLogo, + [Platform.macOS]: IconsMacLogo, }; diff --git a/composables/types.ts b/composables/types.ts index 87b2a25..7725de0 100644 --- a/composables/types.ts +++ b/composables/types.ts @@ -10,10 +10,4 @@ export type QuickActionNav = { icon: Component; notifications?: Ref; action: () => Promise; -}; - -export enum PlatformClient { - Windows = "Windows", - Linux = "Linux", - macOS = "macOS", -} +}; \ No newline at end of file diff --git a/i18n/locales/en_us.json b/i18n/locales/en_us.json index 2356acb..f3f1523 100644 --- a/i18n/locales/en_us.json +++ b/i18n/locales/en_us.json @@ -293,8 +293,8 @@ "advancedOptions": "Advanced options", "import": "Import version", "installDir": "(install_dir)/", - "launchCmd": "Launch executable/command", - "launchDesc": "Executable to launch the game", + "launchCmd": "Launch executables/commands", + "launchDesc": "Executables to launch the game", "launchPlaceholder": "game.exe", "loadingVersion": "Loading version metadata…", "noAdv": "No advanced options for this configuration.", diff --git a/package.json b/package.json index 9eb9722..e25510e 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "nuxt-security": "2.2.0", "pino": "^9.7.0", "pino-pretty": "^13.0.0", - "prisma": "^6.11.1", + "prisma": "^6.14.0", "sanitize-filename": "^1.6.3", "semver": "^7.7.1", "stream-mime-type": "^2.0.0", diff --git a/pages/admin/library/[id]/import.vue b/pages/admin/library/[id]/import.vue index 485a57c..f92d7f6 100644 --- a/pages/admin/library/[id]/import.vue +++ b/pages/admin/library/[id]/import.vue @@ -1,8 +1,9 @@