From df9ae95890d7c597bf8d3b48c2e51445130d1919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pons?= Date: Wed, 15 Oct 2025 17:01:23 +0200 Subject: [PATCH] Note tab in character sheet --- db.sqlite | Bin 761856 -> 761856 bytes db.sqlite-shm | Bin 32768 -> 32768 bytes db.sqlite-wal | Bin 638632 -> 0 bytes server/api/character/[id]/notes.post.ts | 45 ++++++++++++++++++++++++ shared/character.util.ts | 31 +++++++++++++--- 5 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 server/api/character/[id]/notes.post.ts diff --git a/db.sqlite b/db.sqlite index cb7f1aa94be79bd8392073b3f2ce0da98d694b83..7c426253c1533eda40437c617ca9a78fbf947fc5 100644 GIT binary patch delta 1322 zcmcIjZD?Cn7(VCTo8Bf(a?%tH_A^UcyR}Jr^POz;hwY@!+ODOpTiHf(KTdkHrb*g+ z`=u>yq}u)vr(D^^Uk;hfN!gr%1})Np!sxF~Wy3F|Xh8}>*+7JW=!tf0Km6eze>{ix zIp=-u`#$eEcX89ZxaobfrZNHm_>|ynf+~V%-f{d}26)!+}6F5{!mL&KH(=$(Ic9K~aiG zF3+K#Sjth13qR|`Jp0)qC!YJ1#CUqMrvt=~~-?*Glops&C= ztv-G_4k481hHL^8Ssx?&?yub~D># zl7BTR#G04T@3T#Id0z)6bOzAK3(zX^qE`ym#Pi62?t)gRIpa-jtw)F!{+CKM+G@6y zAs=tmzRR|jQ)m~U`)IdVxdZQ@HVb7i(+pr3Qu1ke|N4R%me@#lr?u3gh3F{jIzWPT zoebc*)sfFP(JW~0%Fi0bG#8N z`DdpG@L29lm)tisEUNN_Y_+I<}IXK&uR!%E3-MQXTi5vBe z3`b(&lj?LqxR|pYW#~2-k7w|7T$K3@%zFt@@lwPDC7@v(O@7d@4p{j zyA0tXB1VA?01GnDS-&;2q}|^uimaQeWoTq^61r#BQ3qv*wq;ibML-iUMOTO6XFF?t z04%SYACRm&<|FyTRttE-*bDP9kgt6dTk_~JVyOZ8TszgQf8wTw9Jz_q6tCi?af<~! zMWidw!n$^nQSYHziUS_1mO4ZYX2ldQr1A03uc=s3u``Vo=LpUy2jaDafw@e4@0IRh zkNExq>9#b^<|h?3mCYO^ro_<;%YXP7j_Zdx TV+(9t?&pjIreZ%=@lp0K8m)x< delta 1017 zcmcJMZERCj7{~89_x7INOM9QT3u}b2maffkYiD0>+dIvS%!~m;C_x9tm+tn(b&kHQ zYd1FmHx+02fao>3Mnk}a1WgtYn{X8+?1OPZKWu7dqVPd7zBDo7Fhof-@oXU`CVut9 zKY9L7&U4QHcb=)aj;Xnh6C3R@hG8yIy-n3X_3)ei2#Q@8I0LL*T-J!Kr5193D%O@a zY&NlWnAM28rDiX^47J$@l5X}}IHTDT&YCZAN8;%CF|9edKl&V@D>q`+1 zFf4R1Fbm&9M@<^o2_|~~<4AKSy?i4rk05P#(u>w>v&A;#{rS~96F_4ljQQ~uwbJ~Xq)B5Q2gn4Tw zKU5eRt(4VDv8;V_{GtBT-pGNy+k)deC%5eg4fjn%$2voMs$2WhvF=>8x4Y6ao*Ubh z+Ld{7*gKM`$`i53j@^Yl`yz5-uzNh!Tgrs{$9nVmqFP9#;pn7P8~XbWSa+=}NXNSy|SF{;@Uzu})MS&6Y>8xR!f`ffZO;CH)Q@cD5D$D>Bwr z&NtBis54N9t8{ypLA!dzg|Jq?vXSYHU*f zzj{aPGCVKfud)6v$4dJ9Blv{g_98xM+&Rel5jox%=N@}+L?8T|cN>5D%zyAGt@m7} zW_`eX3!mi%Os6TuA_I$1rxag+z6kuLhX0^=&BkA}k){EjJ12&uX2Vk=C9aWacDh_> z##B*L2ebFK%lnNFDr6In@$35L7BVTmO4`ZVv1jy8Dx^t#MZM?ktNyNTZzV1I^DmJ{ m^k1vw$V}g1V)Pw0U;h~O>sx|CD;k+e1O+P5NCek?RQwwsH!o=b diff --git a/db.sqlite-shm b/db.sqlite-shm index cf5acf8655634b49b738f7ca552114c8d8e4bf0f..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 96 zcmZo@U}|V!;+1%$%K!t6lRq*^i(0Ttu$fN2&50qS0F!~K|BnVXe`HFw+r%6K#21+W Do%tZ~ literal 32768 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

Tx#2vt@bu|xU;L1%F~9+J# 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 { + const id = getRouterParam(e, "id"); + if(!id) + { + setResponseStatus(e, 400); + return; + } + + const body = await readValidatedBody(e, CharacterNotesValidation.safeParse); + if(!body.success) + { + console.error(body.error); + setResponseStatus(e, 400); + throw body.error; + } + + const db = useDatabase(); + const old = db.select({ id: characterTable.id, owner: characterTable.owner }).from(characterTable).where(eq(characterTable.id, parseInt(id, 10))).get(); + + if(!old) + { + setResponseStatus(e, 404); + return; + } + + const session = await getUserSession(e); + if(!session.user || old.owner !== session.user.id || session.user.state !== 1) + { + setResponseStatus(e, 401); + return; + } + + db.update(characterTable).set({ + public_notes: body.data.public, + private_notes: body.data.private, + }).where(eq(characterTable.id, parseInt(id, 10))).run(); + + setResponseStatus(e, 200); + return; +}); \ No newline at end of file diff --git a/shared/character.util.ts b/shared/character.util.ts index 42e93e7..1763587 100644 --- a/shared/character.util.ts +++ b/shared/character.util.ts @@ -237,6 +237,10 @@ export const weaponTypeTexts: Record = { "projectile": "Arme à projectile", }; +export const CharacterNotesValidation = z.object({ + public: z.string().optional(), + private: z.string().optional(), +}); export const CharacterVariablesValidation = z.object({ health: z.number(), mana: z.number(), @@ -259,10 +263,7 @@ export const CharacterValidation = z.object({ people: z.string().nullable(), level: z.number().min(1).max(20), aspect: z.number().nullable().optional(), - notes: z.object({ - public: z.string().optional(), - private: z.string().optional(), - }), + notes: CharacterNotesValidation, training: z.record(z.enum(MAIN_STATS), z.record(z.enum(TRAINING_LEVELS.map(String)), z.number().optional())), leveling: z.record(z.enum(LEVELS.map(String)), z.number().optional()), abilities: z.record(z.enum(ABILITIES), z.number().optional()), @@ -371,6 +372,15 @@ export class CharacterCompiler }) } } + saveNotes() + { + useRequestFetch()(`/api/character/${this.character.id}/notes`, { + method: 'POST', + body: this._character.notes, + }).then(() => {}).catch(() => { + Toaster.add({ type: 'error', content: 'Impossible de mettre à jour les données', duration: 5000, timer: true }); + }); + } protected add(feature?: string) { if(!feature) @@ -1261,6 +1271,14 @@ export class CharacterSheet const character = this.character.compiled; + const publicNotes = new MarkdownEditor(); + const privateNotes = new MarkdownEditor(); + + publicNotes.onChange = (v) => this.character!.character.notes!.public = v; + privateNotes.onChange = (v) => this.character!.character.notes!.private = v; + publicNotes.content = this.character!.character.notes!.public!; + privateNotes.content = this.character!.character.notes!.private!; + this.tabs = tabgroup([ { id: 'actions', title: [ text('Actions') ], content: () => this.actionsTab(character) }, @@ -1273,7 +1291,10 @@ export class CharacterSheet ] }, { id: 'notes', title: [ text('Notes') ], content: () => [ - + div('flex flex-col gap-2', [ + div('flex flex-col gap-2 border-b border-light-35 dark:border-dark-35 pb-4', [ div('flex flex-row w-full items-center justify-between', [ span('text-lg font-bold', 'Notes publics'), tooltip(button(icon('radix-icons:paper-plane', { width: 16, height: 16 }), () => this.character!.saveNotes(), 'p-1'), 'Enregistrer', 'right') ]), div('border border-light-35 dark:border-dark-35 p-1', [ publicNotes.dom ]) ]), + div('flex flex-col gap-2', [ span('text-lg font-bold', 'Notes privés'), div('border border-light-35 dark:border-dark-35 p-1', [ privateNotes.dom ]) ]), + ]) ] }, ], { focused: 'abilities', class: { container: 'flex-1 gap-4 px-4 w-[960px]' } }); this.container.replaceChildren(div('flex flex-col justify-center gap-1', [