mirror of
https://github.com/BradNut/boredgame
synced 2025-09-08 17:40:22 +00:00
Creating external ids table and join tables.
This commit is contained in:
parent
b7d7f298bc
commit
ec5f1ed93b
10 changed files with 3558 additions and 36 deletions
30
drizzle/0004_fancy_umar.sql
Normal file
30
drizzle/0004_fancy_umar.sql
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
DO $$ BEGIN
|
||||
CREATE TYPE "external_id_type" AS ENUM('game', 'category', 'mechanic', 'publisher', 'designer', 'artist');
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE IF NOT EXISTS "external_ids" (
|
||||
"id" varchar(255) PRIMARY KEY NOT NULL,
|
||||
"type" varchar(255),
|
||||
"external_id" varchar(255)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE IF NOT EXISTS "game_external_ids" (
|
||||
"game_id" varchar(255) NOT NULL,
|
||||
"external_id" varchar(255) NOT NULL
|
||||
);
|
||||
--> statement-breakpoint
|
||||
ALTER TABLE "games" DROP CONSTRAINT "games_external_id_unique";--> statement-breakpoint
|
||||
ALTER TABLE "games" DROP COLUMN IF EXISTS "external_id";--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "game_external_ids" ADD CONSTRAINT "game_external_ids_game_id_games_id_fk" FOREIGN KEY ("game_id") REFERENCES "games"("id") ON DELETE cascade ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "game_external_ids" ADD CONSTRAINT "game_external_ids_external_id_external_ids_id_fk" FOREIGN KEY ("external_id") REFERENCES "external_ids"("id") ON DELETE cascade ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
16
drizzle/0005_uneven_lifeguard.sql
Normal file
16
drizzle/0005_uneven_lifeguard.sql
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
ALTER TABLE "game_external_ids" RENAME TO "games_to_external_ids";--> statement-breakpoint
|
||||
ALTER TABLE "games_to_external_ids" DROP CONSTRAINT "game_external_ids_game_id_games_id_fk";
|
||||
--> statement-breakpoint
|
||||
ALTER TABLE "games_to_external_ids" DROP CONSTRAINT "game_external_ids_external_id_external_ids_id_fk";
|
||||
--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "games_to_external_ids" ADD CONSTRAINT "games_to_external_ids_game_id_games_id_fk" FOREIGN KEY ("game_id") REFERENCES "games"("id") ON DELETE cascade ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "games_to_external_ids" ADD CONSTRAINT "games_to_external_ids_external_id_external_ids_id_fk" FOREIGN KEY ("external_id") REFERENCES "external_ids"("id") ON DELETE cascade ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;
|
||||
2
drizzle/0006_light_corsair.sql
Normal file
2
drizzle/0006_light_corsair.sql
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
ALTER TABLE "external_ids" ALTER COLUMN "type" SET NOT NULL;--> statement-breakpoint
|
||||
ALTER TABLE "external_ids" ALTER COLUMN "external_id" SET NOT NULL;
|
||||
1138
drizzle/meta/0004_snapshot.json
Normal file
1138
drizzle/meta/0004_snapshot.json
Normal file
File diff suppressed because it is too large
Load diff
1138
drizzle/meta/0005_snapshot.json
Normal file
1138
drizzle/meta/0005_snapshot.json
Normal file
File diff suppressed because it is too large
Load diff
1138
drizzle/meta/0006_snapshot.json
Normal file
1138
drizzle/meta/0006_snapshot.json
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -29,6 +29,27 @@
|
|||
"when": 1707526808124,
|
||||
"tag": "0003_thick_tinkerer",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 4,
|
||||
"version": "5",
|
||||
"when": 1707932397672,
|
||||
"tag": "0004_fancy_umar",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 5,
|
||||
"version": "5",
|
||||
"when": 1707932466413,
|
||||
"tag": "0005_uneven_lifeguard",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"version": "5",
|
||||
"when": 1707932522909,
|
||||
"tag": "0006_light_corsair",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
12
package.json
12
package.json
|
|
@ -38,7 +38,7 @@
|
|||
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
||||
"@typescript-eslint/parser": "^6.21.0",
|
||||
"autoprefixer": "^10.4.17",
|
||||
"dotenv": "^16.4.1",
|
||||
"dotenv": "^16.4.4",
|
||||
"drizzle-kit": "^0.20.14",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
|
|
@ -50,7 +50,7 @@
|
|||
"postcss-load-config": "^5.0.3",
|
||||
"postcss-preset-env": "^9.3.0",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-svelte": "^3.1.2",
|
||||
"prettier-plugin-svelte": "^3.2.0",
|
||||
"prisma": "^5.9.1",
|
||||
"sass": "^1.70.0",
|
||||
"satori": "^0.10.13",
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
"tailwindcss": "^3.4.1",
|
||||
"ts-node": "^10.9.2",
|
||||
"tslib": "^2.6.1",
|
||||
"tsx": "^4.7.0",
|
||||
"tsx": "^4.7.1",
|
||||
"typescript": "^5.3.3",
|
||||
"vite": "^5.1.1",
|
||||
"vitest": "^1.2.2",
|
||||
|
|
@ -91,14 +91,14 @@
|
|||
"@sveltejs/adapter-vercel": "^5.1.0",
|
||||
"@types/feather-icons": "^4.29.4",
|
||||
"@vercel/og": "^0.5.20",
|
||||
"bits-ui": "^0.17.0",
|
||||
"bits-ui": "^0.18.1",
|
||||
"boardgamegeekclient": "^1.9.1",
|
||||
"class-variance-authority": "^0.7.0",
|
||||
"clsx": "^2.1.0",
|
||||
"cookie": "^0.6.0",
|
||||
"drizzle-orm": "^0.29.3",
|
||||
"feather-icons": "^4.29.1",
|
||||
"formsnap": "^0.4.3",
|
||||
"formsnap": "^0.4.4",
|
||||
"html-entities": "^2.4.0",
|
||||
"iconify-icon": "^2.0.0",
|
||||
"just-kebab-case": "^4.2.0",
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"mysql2": "^3.9.1",
|
||||
"nanoid": "^5.0.5",
|
||||
"open-props": "^1.6.18",
|
||||
"oslo": "^1.1.0",
|
||||
"oslo": "^1.1.1",
|
||||
"pg": "^8.11.3",
|
||||
"postgres": "^3.4.3",
|
||||
"radix-svelte": "^0.9.0",
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ dependencies:
|
|||
specifier: ^0.5.20
|
||||
version: 0.5.20
|
||||
bits-ui:
|
||||
specifier: ^0.17.0
|
||||
version: 0.17.0(svelte@4.2.10)
|
||||
specifier: ^0.18.1
|
||||
version: 0.18.1(svelte@4.2.10)
|
||||
boardgamegeekclient:
|
||||
specifier: ^1.9.1
|
||||
version: 1.9.1
|
||||
|
|
@ -69,8 +69,8 @@ dependencies:
|
|||
specifier: ^4.29.1
|
||||
version: 4.29.1
|
||||
formsnap:
|
||||
specifier: ^0.4.3
|
||||
version: 0.4.3(svelte@4.2.10)(sveltekit-superforms@1.13.4)(zod@3.22.4)
|
||||
specifier: ^0.4.4
|
||||
version: 0.4.4(svelte@4.2.10)(sveltekit-superforms@1.13.4)(zod@3.22.4)
|
||||
html-entities:
|
||||
specifier: ^2.4.0
|
||||
version: 2.4.0
|
||||
|
|
@ -99,8 +99,8 @@ dependencies:
|
|||
specifier: ^1.6.18
|
||||
version: 1.6.18
|
||||
oslo:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
specifier: ^1.1.1
|
||||
version: 1.1.1
|
||||
pg:
|
||||
specifier: ^8.11.3
|
||||
version: 8.11.3
|
||||
|
|
@ -170,8 +170,8 @@ devDependencies:
|
|||
specifier: ^10.4.17
|
||||
version: 10.4.17(postcss@8.4.35)
|
||||
dotenv:
|
||||
specifier: ^16.4.1
|
||||
version: 16.4.1
|
||||
specifier: ^16.4.4
|
||||
version: 16.4.4
|
||||
drizzle-kit:
|
||||
specifier: ^0.20.14
|
||||
version: 0.20.14
|
||||
|
|
@ -206,8 +206,8 @@ devDependencies:
|
|||
specifier: ^3.2.5
|
||||
version: 3.2.5
|
||||
prettier-plugin-svelte:
|
||||
specifier: ^3.1.2
|
||||
version: 3.1.2(prettier@3.2.5)(svelte@4.2.10)
|
||||
specifier: ^3.2.0
|
||||
version: 3.2.0(prettier@3.2.5)(svelte@4.2.10)
|
||||
prisma:
|
||||
specifier: ^5.9.1
|
||||
version: 5.9.1
|
||||
|
|
@ -251,8 +251,8 @@ devDependencies:
|
|||
specifier: ^2.6.1
|
||||
version: 2.6.2
|
||||
tsx:
|
||||
specifier: ^4.7.0
|
||||
version: 4.7.0
|
||||
specifier: ^4.7.1
|
||||
version: 4.7.1
|
||||
typescript:
|
||||
specifier: ^5.3.3
|
||||
version: 5.3.3
|
||||
|
|
@ -1393,6 +1393,14 @@ packages:
|
|||
dependencies:
|
||||
'@floating-ui/core': 1.6.0
|
||||
'@floating-ui/utils': 0.2.1
|
||||
dev: true
|
||||
|
||||
/@floating-ui/dom@1.6.3:
|
||||
resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==}
|
||||
dependencies:
|
||||
'@floating-ui/core': 1.6.0
|
||||
'@floating-ui/utils': 0.2.1
|
||||
dev: false
|
||||
|
||||
/@floating-ui/utils@0.1.6:
|
||||
resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==}
|
||||
|
|
@ -1746,7 +1754,7 @@ packages:
|
|||
svelte: '>=3 <5'
|
||||
dependencies:
|
||||
'@floating-ui/core': 1.6.0
|
||||
'@floating-ui/dom': 1.6.1
|
||||
'@floating-ui/dom': 1.6.3
|
||||
'@internationalized/date': 3.5.1
|
||||
dequal: 2.0.3
|
||||
focus-trap: 7.5.4
|
||||
|
|
@ -3437,10 +3445,10 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
'@actions/core': 1.10.1
|
||||
dotenv: 16.4.1
|
||||
dotenv: 16.4.4
|
||||
front-matter: 4.0.2
|
||||
nanoid: 4.0.2
|
||||
oslo: 1.1.0
|
||||
oslo: 1.1.1
|
||||
dev: false
|
||||
|
||||
/autoprefixer@10.4.17(postcss@8.4.35):
|
||||
|
|
@ -3486,8 +3494,8 @@ packages:
|
|||
file-uri-to-path: 1.0.0
|
||||
dev: false
|
||||
|
||||
/bits-ui@0.17.0(svelte@4.2.10):
|
||||
resolution: {integrity: sha512-K73jjco1qPmvGXMQtTkZG6K36UmNrPR21u+C1jzoRWmF3NnUfDP4hPJnAci0LosUycfvOxtaHB1M4awvLvQXyQ==}
|
||||
/bits-ui@0.18.1(svelte@4.2.10):
|
||||
resolution: {integrity: sha512-6junivBQ3EIHeF9j8wDa5pgzegtOwaI61ny4X8F7h2SIJi4RJWwZknkT7O5qPLeGoIYNeYV7N6EOBrr1w9/Mxg==}
|
||||
peerDependencies:
|
||||
svelte: ^4.0.0
|
||||
dependencies:
|
||||
|
|
@ -3948,8 +3956,8 @@ packages:
|
|||
esutils: 2.0.3
|
||||
dev: true
|
||||
|
||||
/dotenv@16.4.1:
|
||||
resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==}
|
||||
/dotenv@16.4.4:
|
||||
resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
/dreamopt@0.8.0:
|
||||
|
|
@ -4507,8 +4515,8 @@ packages:
|
|||
is-callable: 1.2.7
|
||||
dev: false
|
||||
|
||||
/formsnap@0.4.3(svelte@4.2.10)(sveltekit-superforms@1.13.4)(zod@3.22.4):
|
||||
resolution: {integrity: sha512-PWVq78XVUHhAU1tcVGKeGamk6B4Opkk1uVNRW2YofiQpnA5Bry1c3TQjB9cVDw5u4oAwmDvIoAzVHlrAIgc+tw==}
|
||||
/formsnap@0.4.4(svelte@4.2.10)(sveltekit-superforms@1.13.4)(zod@3.22.4):
|
||||
resolution: {integrity: sha512-O+Cf4GneR4CLP48J0c5AJY6eowc+1N3DYZz9uIJ3Mk57AjdL5l8DQEA+HmRfse4UEPepizEPl+M4vFg8cON2BQ==}
|
||||
peerDependencies:
|
||||
svelte: ^4.0.0
|
||||
sveltekit-superforms: ^1.7.1
|
||||
|
|
@ -5517,8 +5525,8 @@ packages:
|
|||
'@node-rs/bcrypt': 1.9.2
|
||||
dev: false
|
||||
|
||||
/oslo@1.1.0:
|
||||
resolution: {integrity: sha512-uUvVt1boGt1aO0oMjzyzxIiDGAkfOdh6jPOzfJZBXsOsHuHfvTnrW7ealrBb27sgg5pHnTjmen6xPz4so+gQEQ==}
|
||||
/oslo@1.1.1:
|
||||
resolution: {integrity: sha512-BuJp5GfBW3jkUDLb8VftXD9FRTfjnodMyVshSy6p4UP8PhQI8auTxAQlef9NdFe6JC4mEgZb/mhMJpfNVudDTA==}
|
||||
dependencies:
|
||||
'@node-rs/argon2': 1.7.0
|
||||
'@node-rs/bcrypt': 1.9.0
|
||||
|
|
@ -6203,8 +6211,8 @@ packages:
|
|||
engines: {node: '>= 0.8.0'}
|
||||
dev: true
|
||||
|
||||
/prettier-plugin-svelte@3.1.2(prettier@3.2.5)(svelte@4.2.10):
|
||||
resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==}
|
||||
/prettier-plugin-svelte@3.2.0(prettier@3.2.5)(svelte@4.2.10):
|
||||
resolution: {integrity: sha512-3474Zxxw8z4k64aqZmwTfcGdh/ULM2zNQslORdXEkNjKqqsSxBmiASazoxdCrmaqsbKD2Y0rxKhBEn1u0Y+j9g==}
|
||||
peerDependencies:
|
||||
prettier: ^3.0.0
|
||||
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
|
||||
|
|
@ -7079,8 +7087,8 @@ packages:
|
|||
/tslib@2.6.2:
|
||||
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
|
||||
|
||||
/tsx@4.7.0:
|
||||
resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==}
|
||||
/tsx@4.7.1:
|
||||
resolution: {integrity: sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { relations, sql, type InferSelectModel } from 'drizzle-orm';
|
||||
import { pgTable, timestamp, varchar, boolean, integer, text, index } from 'drizzle-orm/pg-core';
|
||||
import { pgTable, timestamp, varchar, boolean, integer, text, index, pgEnum } from 'drizzle-orm/pg-core';
|
||||
import { nanoid } from 'nanoid';
|
||||
import { tsvector } from './tsVector';
|
||||
|
||||
|
|
@ -140,7 +140,6 @@ export const games = pgTable('games', {
|
|||
length: 255
|
||||
}),
|
||||
text_searchable_index: tsvector('text_searchable_index'),
|
||||
external_id: integer('external_id').unique(),
|
||||
last_sync_at: timestamp('last_sync_at', {
|
||||
withTimezone: true,
|
||||
mode: 'date',
|
||||
|
|
@ -169,9 +168,41 @@ export const gameRelations = relations(games, ({ many }) => ({
|
|||
mechanics_to_games: many(mechanics_to_games),
|
||||
designers_to_games: many(designers_to_games),
|
||||
publishers_to_games: many(publishers_to_games),
|
||||
artists_to_games: many(artists_to_games)
|
||||
artists_to_games: many(artists_to_games),
|
||||
gameExternalIds: many(gameExternalIds),
|
||||
}));
|
||||
|
||||
export const externalIdType = pgEnum('external_id_type', [
|
||||
'game', 'category', 'mechanic', 'publisher', 'designer', 'artist'
|
||||
]);
|
||||
|
||||
export const externalIds = pgTable('external_ids', {
|
||||
id: varchar('id', {
|
||||
length: 255
|
||||
})
|
||||
.primaryKey()
|
||||
.$defaultFn(() => nanoid()),
|
||||
type: varchar('type', {
|
||||
length: 255
|
||||
}).notNull(),
|
||||
externalId: varchar('external_id', {
|
||||
length: 255
|
||||
}).notNull()
|
||||
});
|
||||
|
||||
export const gamesToExternalIds = pgTable('games_to_external_ids', {
|
||||
gameId: varchar('game_id', {
|
||||
length: 255
|
||||
})
|
||||
.notNull()
|
||||
.references(() => games.id, { onDelete: 'cascade' }),
|
||||
externalId: varchar('external_id', {
|
||||
length: 255
|
||||
})
|
||||
.notNull()
|
||||
.references(() => externalIds.id, { onDelete: 'cascade' }),
|
||||
});
|
||||
|
||||
export const expansions = pgTable('expansions', {
|
||||
id: varchar('id', {
|
||||
length: 255
|
||||
|
|
|
|||
Loading…
Reference in a new issue