From 3ed9ab3dce78832fcfb43dc4f96dbd4f2ed19584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pons?= Date: Mon, 3 Nov 2025 18:00:47 +0100 Subject: [PATCH] Campaign REST API --- db.sqlite | Bin 761856 -> 761856 bytes db/schema.ts | 3 +- layouts/default.vue | 2 +- pages/campaign/(automatic)/join.client.vue | 0 pages/campaign/[id]/edit.client.vue | 1 + pages/campaign/[id]/index.client.vue | 1 + pages/campaign/index.client.vue | 73 +++++++++++++++++++++ server/api/campaign.get.ts | 22 +++++++ server/api/campaign.post.ts | 47 +++++++++++++ server/api/campaign/[id].delete.ts | 25 +++++++ server/api/campaign/[id].get.ts | 32 +++++++++ server/api/campaign/[id].post.ts | 55 ++++++++++++++++ server/api/campaign/[id]/join.post.ts | 37 +++++++++++ server/api/campaign/[id]/leave.post.ts | 35 ++++++++++ shared/campaign.util.ts | 8 +++ 15 files changed, 339 insertions(+), 2 deletions(-) create mode 100644 pages/campaign/(automatic)/join.client.vue create mode 100644 pages/campaign/[id]/edit.client.vue create mode 100644 pages/campaign/[id]/index.client.vue create mode 100644 pages/campaign/index.client.vue create mode 100644 server/api/campaign.get.ts create mode 100644 server/api/campaign.post.ts create mode 100644 server/api/campaign/[id].delete.ts create mode 100644 server/api/campaign/[id].get.ts create mode 100644 server/api/campaign/[id].post.ts create mode 100644 server/api/campaign/[id]/join.post.ts create mode 100644 server/api/campaign/[id]/leave.post.ts create mode 100644 shared/campaign.util.ts diff --git a/db.sqlite b/db.sqlite index f92eaea6d1f66a5d9e2dfa313eb10b28e289c666..84e0994dec46552b83e0d47839113e1b6391a363 100644 GIT binary patch delta 57 zcmZoTpx1CfZ^PesW{z(AO$mSHL3C3?TLWWT15;ZAb6W#TTLWub16x}Ids_oXTLWiX K1J|+!ZUq3I6BUO5 delta 57 zcmZoTpx1CfZ^PesX6B5Yn-c!YgXpG)wg$$w2Bx+K=C%fwwg%R=2DY{a_O=F&wg%3& K2Ciid+zJ4<{T3?# diff --git a/db/schema.ts b/db/schema.ts index 4fbbfca..73496a6 100644 --- a/db/schema.ts +++ b/db/schema.ts @@ -86,6 +86,7 @@ export const campaignTable = table("campaign", { name: text().notNull(), description: text(), owner: int().notNull().references(() => usersTable.id, { onDelete: 'cascade', onUpdate: 'cascade' }), + joinby: text({ enum: [ 'link', 'invite' ] }).default('invite'), }); export const campaignMembersTable = table("campaign_members", { id: int().references(() => campaignTable.id, { onDelete: 'cascade', onUpdate: 'cascade' }), @@ -141,7 +142,7 @@ export const characterChoicesRelation = relations(characterChoicesTable, ({ one export const campaignRelation = relations(campaignTable, ({ one, many }) => ({ members: many(campaignMembersTable), characters: many(campaignCharactersTable), - owner: one(usersTable), + owner: one(usersTable, { fields: [campaignTable.owner], references: [usersTable.id], }), })); export const campaignMembersRelation = relations(campaignMembersTable, ({ one }) => ({ campaign: one(campaignTable, { fields: [campaignMembersTable.id], references: [campaignTable.id], }), diff --git a/layouts/default.vue b/layouts/default.vue index 4adfb88..7018fdc 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -32,7 +32,7 @@ - Campagnes + Campagnes