diff --git a/components/calendar/form/UpdateEvent.vue b/components/calendar/form/UpdateEvent.vue index a814efd..70a5652 100644 --- a/components/calendar/form/UpdateEvent.vue +++ b/components/calendar/form/UpdateEvent.vue @@ -1,9 +1,14 @@ diff --git a/i18n.config.ts b/i18n.config.ts index d59fc6e..7653fcd 100644 --- a/i18n.config.ts +++ b/i18n.config.ts @@ -140,6 +140,11 @@ export default defineI18nConfig(() => ({ title: "Edit event", subtitle: "Update event data", }, + editErrors: { + toastTitle: "Event wasn't updated.", + title_too_big: "Title should be less than 240 characters long.", + description_too_big: "Description should be less than 1200 characters long.", + }, deleteDialog: { title: "Delete this event", subtitle: "Data associated with this event will be lost and you won't be able to retrieve it !", @@ -348,6 +353,11 @@ export default defineI18nConfig(() => ({ title: "Modifier l'évènement", subtitle: "Mettre à jour les données de l'évènement", }, + editErrors: { + toastTitle: "L'évènement n'a pas été modifié", + title_too_big: "Le titre doit être inférieur à 240 caractères.", + description_too_big: "La description doit être inférieure à 1200 caractères.", + }, deleteDialog: { title: "Supprimer l'évènement", subtitle: "Les données associés à cet évènement seront supprimées et vous ne pourrez plus les récupérer !", diff --git a/models/CalendarEvent.ts b/models/CalendarEvent.ts index 042b43d..43cfc9e 100644 --- a/models/CalendarEvent.ts +++ b/models/CalendarEvent.ts @@ -20,8 +20,8 @@ export interface CalendarEvent { */ export const postEventBodySchema = z.object({ event: z.object({ - title: z.string(), - description: z.string().optional().nullable(), + title: z.string().max(240), + description: z.string().max(1200).optional().nullable(), location: z.string().optional().nullable(), startDate: dateSchema.required(), endDate: dateSchema.optional().nullable(), diff --git a/models/Errors.ts b/models/Errors.ts new file mode 100644 index 0000000..16b6e8d --- /dev/null +++ b/models/Errors.ts @@ -0,0 +1,14 @@ +export interface ValidationError { + path: (string | number)[] + message: string + code: string +} + +export interface APIError { + statusCode: number + statusMessage: string + message: string + data: { + errors: ValidationError[] + } +} diff --git a/nuxt.config.ts b/nuxt.config.ts index 0dadd11..f4eea9f 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -1,6 +1,6 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - devtools: { enabled: true }, + devtools: { enabled: false }, modules: [ "@nuxtjs/supabase", diff --git a/server/api/calendars/events/[id].patch.ts b/server/api/calendars/events/[id].patch.ts index f0ab3d9..46ed8c2 100644 --- a/server/api/calendars/events/[id].patch.ts +++ b/server/api/calendars/events/[id].patch.ts @@ -22,12 +22,22 @@ export default defineEventHandler(async (event) => { } if (bodyError) { - throw createError({ + const error = createError({ cause: "Utilisateur", fatal: false, - message: "Le schéma de la requête n'est pas complet ou mal renseigné.", - status: 401, + statusCode: 401, + statusMessage: "Validation Error", + message: "Erreur de validation du schéma, cela est probablement dû à une erreur utilisateur.", + data: { + errors: bodyError.issues.map(issue => ({ + path: issue.path, + message: issue.message, + code: issue.code + })) + } }) + + throw error } try { diff --git a/server/api/calendars/events/create.post.ts b/server/api/calendars/events/create.post.ts index 780aa46..46efe29 100644 --- a/server/api/calendars/events/create.post.ts +++ b/server/api/calendars/events/create.post.ts @@ -11,6 +11,8 @@ export default defineEventHandler(async (event) => { cause: "Utilisateur", fatal: false, message: "Le schéma de la requête n'est pas complet ou mal renseigné.", + data: schemaError.issues, + statusMessage: "test", status: 401, }) } diff --git a/stores/CalendarStore.ts b/stores/CalendarStore.ts index 35acc89..cdbe5f2 100644 --- a/stores/CalendarStore.ts +++ b/stores/CalendarStore.ts @@ -869,8 +869,8 @@ export const useCalendar = defineStore("calendar", () => { const eventIndex = baseEvents.value.findIndex(e => e.id === eventSkeleton.value.id) baseEvents.value[eventIndex] = res - } catch (err) { - console.log(err) + + return res } finally { abortController = null isUpdatingEvent.value = false diff --git a/stores/EventStore.ts b/stores/EventStore.ts index 3eecbac..935c59c 100644 --- a/stores/EventStore.ts +++ b/stores/EventStore.ts @@ -247,17 +247,13 @@ export const useCalendarEvents = defineStore("calendar-events", () => { abortController = new AbortController() isUpdatingEvent.value = true - try { - const res = await $fetch(`/api/calendars/events/${eventSkeleton.value.id}`, { method: "PATCH", body: { event : eventSkeleton.value, calendarId: activeCalendar?.id }, signal: abortController.signal }) + const res = await $fetch(`/api/calendars/events/${eventSkeleton.value.id}`, { method: "PATCH", body: { event : eventSkeleton.value, calendarId: activeCalendar?.id }, signal: abortController.signal }) - const eventIndex = baseEvents.value.findIndex(e => e.id === eventSkeleton.value.id) - baseEvents.value[eventIndex] = res - } catch (err) { - console.log(err) - } finally { - abortController = null - isUpdatingEvent.value = false - } + const eventIndex = baseEvents.value.findIndex(e => e.id === eventSkeleton.value.id) + baseEvents.value[eventIndex] = res + + abortController = null + isUpdatingEvent.value = false } async function deleteEventFromSkeleton() {