Starting transactions for games.

This commit is contained in:
Bradley Shellnut 2024-02-09 17:49:39 -08:00
parent eac53a993b
commit b7d7f298bc

View file

@ -365,80 +365,115 @@ export async function createOrUpdateGame(locals: App.Locals, game: Game) {
console.log('categoryIds', categoryIds); console.log('categoryIds', categoryIds);
console.log('mechanicIds', mechanicIds); console.log('mechanicIds', mechanicIds);
await db.transaction(async (transaction) => { await db.transaction(async (transaction) => {
const const dbGame = await transaction.insert(games).values({
name: game.name,
slug: kebabCase(game.name),
description: game.description,
external_id: game.external_id,
url: externalUrl,
thumb_url: game.thumb_url,
image_url: game.image_url,
min_age: game.min_age || 0,
min_players: game.min_players || 0,
max_players: game.max_players || 0,
min_playtime: game.min_playtime || 0,
max_playtime: game.max_playtime || 0,
year_published: game.year_published || 0,
last_sync_at: new Date(),
}).onConflictDoUpdate({
target: games.id, set: {
name: game.name,
slug: kebabCase(game.name),
description: game.description,
external_id: game.external_id,
url: externalUrl,
thumb_url: game.thumb_url,
image_url: game.image_url,
min_age: game.min_age || 0,
min_players: game.min_players || 0,
max_players: game.max_players || 0,
min_playtime: game.min_playtime || 0,
max_playtime: game.max_playtime || 0,
year_published: game.year_published || 0,
last_sync_at: new Date(),
}
}).returning();
// TODO: Connect to everything else
// await transaction.insert()
}); });
await db.insert(games).values({ // await db.insert(games).values({
include: { // include: {
mechanics: true, // mechanics: true,
publishers: true, // publishers: true,
designers: true, // designers: true,
artists: true, // artists: true,
expansions: true // expansions: true
}, // },
where: { // where: {
external_id: game.external_id // external_id: game.external_id
}, // },
create: { // create: {
name: game.name, // name: game.name,
slug: kebabCase(game.name), // slug: kebabCase(game.name),
description: game.description, // description: game.description,
external_id: game.external_id, // external_id: game.external_id,
url: externalUrl, // url: externalUrl,
thumb_url: game.thumb_url, // thumb_url: game.thumb_url,
image_url: game.image_url, // image_url: game.image_url,
min_age: game.min_age || 0, // min_age: game.min_age || 0,
min_players: game.min_players || 0, // min_players: game.min_players || 0,
max_players: game.max_players || 0, // max_players: game.max_players || 0,
min_playtime: game.min_playtime || 0, // min_playtime: game.min_playtime || 0,
max_playtime: game.max_playtime || 0, // max_playtime: game.max_playtime || 0,
year_published: game.year_published || 0, // year_published: game.year_published || 0,
last_sync_at: new Date(), // last_sync_at: new Date(),
categories: { // categories: {
connect: categoryIds // connect: categoryIds
}, // },
mechanics: { // mechanics: {
connect: mechanicIds // connect: mechanicIds
}, // },
publishers: { // publishers: {
connect: publisherIds // connect: publisherIds
}, // },
designers: { // designers: {
connect: designerIds // connect: designerIds
}, // },
artists: { // artists: {
connect: artistIds // connect: artistIds
} // }
}, // },
update: { // update: {
name: game.name, // name: game.name,
slug: kebabCase(game.name), // slug: kebabCase(game.name),
description: game.description, // description: game.description,
external_id: game.external_id, // external_id: game.external_id,
url: externalUrl, // url: externalUrl,
thumb_url: game.thumb_url, // thumb_url: game.thumb_url,
image_url: game.image_url, // image_url: game.image_url,
min_age: game.min_age || 0, // min_age: game.min_age || 0,
min_players: game.min_players || 0, // min_players: game.min_players || 0,
max_players: game.max_players || 0, // max_players: game.max_players || 0,
min_playtime: game.min_playtime || 0, // min_playtime: game.min_playtime || 0,
max_playtime: game.max_playtime || 0, // max_playtime: game.max_playtime || 0,
year_published: game.year_published || 0, // year_published: game.year_published || 0,
last_sync_at: new Date(), // last_sync_at: new Date(),
categories: { // categories: {
connect: categoryIds // connect: categoryIds
}, // },
mechanics: { // mechanics: {
connect: mechanicIds // connect: mechanicIds
}, // },
publishers: { // publishers: {
connect: publisherIds // connect: publisherIds
}, // },
designers: { // designers: {
connect: designerIds // connect: designerIds
}, // },
artists: { // artists: {
connect: artistIds // connect: artistIds
} // }
} // }
}); });
} }