1- import type { PageServerLoad } from './$types' ;
1+ import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library' ;
2+ import { fail , redirect } from '@sveltejs/kit' ;
3+
4+ import type { Actions , PageServerLoad } from './$types' ;
5+
6+ export const load = ( async ( { locals } ) => {
7+ const { session } = locals ;
8+
9+ if ( ! session ) {
10+ redirect ( 303 , '/login' ) ;
11+ }
212
3- export const load = ( async ( ) => {
413 return {
5- user : {
6- username : 'Carlos' ,
7- disallowedIngredients : 'chocolat' ,
8- } ,
14+ user : session . user ,
915 seo : {
1016 title : 'Mon profil' ,
1117 meta : {
@@ -14,3 +20,68 @@ export const load = (async () => {
1420 } ,
1521 } ;
1622} ) satisfies PageServerLoad ;
23+
24+ export const actions = {
25+ default : async ( { locals, request } ) => {
26+ const { db, session } = locals ;
27+ const data = await request . formData ( ) ;
28+
29+ if ( ! session ) {
30+ redirect ( 303 , '/login' ) ;
31+ }
32+
33+ const username = data . get ( 'username' ) as string ;
34+ const disallowedIngredients = data . get ( 'disallowedIngredients' ) as string ;
35+
36+ if ( ! username ) {
37+ return fail ( 422 , { error : "Le nom d'utilisateur ne peut pas être vide." } ) ;
38+ }
39+
40+ if ( ! / ^ [ A - Z a - z ] + $ / g. test ( username ) ) {
41+ return fail ( 422 , {
42+ error : "Le nom d'utilisateur ne doit contenir que des lettres." ,
43+ } ) ;
44+ }
45+
46+ if ( username . length < 3 || username . length > 20 ) {
47+ return fail ( 400 , {
48+ error : "Le nom d'utilisateur doit être compris entre 3 et 20 caractères." ,
49+ } ) ;
50+ }
51+
52+ if ( disallowedIngredients ) {
53+ if ( ! / [ a - z A - Z , ] / . test ( disallowedIngredients ) ) {
54+ return fail ( 422 , {
55+ error : 'Les ingrédients ne doivent contenir que des lettres et des virgules.' ,
56+ } ) ;
57+ }
58+ }
59+
60+ if ( disallowedIngredients . length > 255 ) {
61+ return fail ( 400 , {
62+ error : 'La liste des ingrédients à éviter ne peut pas dépasser 255 caractères.' ,
63+ } ) ;
64+ }
65+
66+ try {
67+ await db . user . update ( {
68+ where : { id : session . user . userId } ,
69+ data : {
70+ username,
71+ disallowedIngredients,
72+ } ,
73+ } ) ;
74+ } catch ( e ) {
75+ if ( e instanceof PrismaClientKnownRequestError && e . code === 'P2002' ) {
76+ return fail ( 400 , { error : "le nom d'utilisateur est déjà utilisé." } ) ;
77+ }
78+
79+ // eslint-disable-next-line no-console
80+ console . error ( 'Error while updating user:' , e ) ;
81+
82+ return fail ( 500 , {
83+ error : "Oops... Quelque chose s'est mal passé. Veuillez réessayer plus tard." ,
84+ } ) ;
85+ }
86+ } ,
87+ } satisfies Actions ;
0 commit comments