From 15d6294104cf5005d0a4562e7f3683898e3f9f10 Mon Sep 17 00:00:00 2001 From: Marin Date: Mon, 25 Nov 2024 11:32:37 +0100 Subject: [PATCH] fix(router): premier batch de la migration des routes --- .../getChangelog/getChangelog.route.ts | 10 +- .../getChangelog/getChangelog.usecase.ts | 4 +- .../activateUser/activateUser.route.ts | 11 +- .../checkActivationToken.route.ts | 10 +- .../createCampagne/createCampagne.route.ts | 10 +- .../createCampagne/createCampagne.usecase.ts | 2 +- .../usecases/createUser/createUser.route.ts | 10 +- .../usecases/createUser/createUser.usecase.ts | 2 +- .../createUser/utils/canCreateUserInScope.ts | 3 +- .../editCampagne/editCampagne.route.ts | 10 +- .../editCampagne/editCampagne.usecase.ts | 2 +- .../core/usecases/editUser/editUser.route.ts | 10 +- .../usecases/editUser/editUser.usecase.ts | 2 +- .../editUser/utils/canEditUserInScope.ts | 3 +- .../generateMetabaseDashboardUrl.route.ts | 10 +- .../getCampagnes/getCampagnes.route.ts | 10 +- .../usecases/getDneUrl/getDneUrl.route.ts | 10 +- .../core/usecases/getUsers/getUsers.route.ts | 10 +- .../modules/core/usecases/home/home.route.ts | 18 +-- .../isMaintenance/isMaintenance.route.ts | 10 +- .../core/usecases/login/login.route.ts | 10 +- .../core/usecases/logout/logout.route.ts | 9 +- .../usecases/redirectDne/redirectDne.route.ts | 10 +- .../resetPassword/resetPassword.route.ts | 10 +- .../usecases/searchUser/searchUser.route.ts | 10 +- .../sendResetPassword.route.ts | 10 +- .../core/usecases/whoAmI/whoAmI.route.ts | 3 +- .../getCorrections/getCorrections.route.ts | 10 +- .../getCorrections/getCorrections.usecase.ts | 2 +- .../submitCorrection.route.ts | 10 +- .../submitCorrection.usecase.ts | 2 +- shared/routes/auth/routes.ts | 20 --- shared/routes/changelog/routes.ts | 12 -- shared/routes/index.ts | 18 +-- shared/routes/routes.ts | 136 ++++++++++++++++++ ...get.auth.check-activation-token.schema.ts} | 0 .../routes/schemas/get.auth.whoAmI.schema.ts | 5 +- .../routes/schemas/get.campagnes.schema.ts | 0 .../get.changelog.schema.ts} | 0 .../routes/schemas/get.corrections.schema.ts | 5 +- .../routes/schemas/get.dne_connect.schema.ts | 0 .../routes/schemas/get.dne_url.schema.ts | 0 shared/routes/schemas/get.home.schema.ts | 11 ++ .../routes/schemas/get.maintenance.schema.ts | 9 ++ .../schemas/get.user.search.search.schema.ts | 5 +- .../routes/schemas/get.users.schema.ts | 5 +- .../post.auth.activate.schema.ts} | 2 +- .../routes/schemas/post.auth.login.schema.ts | 0 .../routes/schemas/post.auth.logout.schema.ts | 0 .../post.auth.reset-password.schema.ts | 3 +- .../post.auth.send-reset-password.schema.ts | 0 .../post.campagnes.campagneId.schema.ts | 0 .../schemas/post.correction.submit.schema.ts | 0 ....generate-metabase-dashboard-url.schema.ts | 0 .../schemas/post.users.userId.schema.ts | 5 +- .../put.campagnes.campagneId.schema.ts | 0 .../routes/schemas/put.users.userId.schema.ts | 5 +- shared/routes/types.ts | 16 +-- ui/api.client.ts | 7 +- 59 files changed, 321 insertions(+), 186 deletions(-) delete mode 100644 shared/routes/auth/routes.ts delete mode 100644 shared/routes/changelog/routes.ts create mode 100644 shared/routes/routes.ts rename shared/routes/{auth/schemas/get.auth.checkActivationToken.ts => schemas/get.auth.check-activation-token.schema.ts} (100%) rename server/src/modules/core/usecases/whoAmI/whoAmI.schema.ts => shared/routes/schemas/get.auth.whoAmI.schema.ts (77%) rename server/src/modules/core/usecases/getCampagnes/getCampagnes.schema.ts => shared/routes/schemas/get.campagnes.schema.ts (100%) rename shared/routes/{changelog/schemas/get.changelog.ts => schemas/get.changelog.schema.ts} (100%) rename server/src/modules/corrections/usecases/getCorrections/getCorrections.schema.ts => shared/routes/schemas/get.corrections.schema.ts (96%) rename server/src/modules/core/usecases/redirectDne/redirectDne.schema.ts => shared/routes/schemas/get.dne_connect.schema.ts (100%) rename server/src/modules/core/usecases/getDneUrl/getDneUrl.schema.ts => shared/routes/schemas/get.dne_url.schema.ts (100%) create mode 100644 shared/routes/schemas/get.home.schema.ts create mode 100644 shared/routes/schemas/get.maintenance.schema.ts rename server/src/modules/core/usecases/searchUser/searchUser.schema.ts => shared/routes/schemas/get.user.search.search.schema.ts (82%) rename server/src/modules/core/usecases/getUsers/getUsers.schema.ts => shared/routes/schemas/get.users.schema.ts (87%) rename shared/routes/{auth/schemas/post.auth.activate.ts => schemas/post.auth.activate.schema.ts} (79%) rename server/src/modules/core/usecases/login/login.schema.ts => shared/routes/schemas/post.auth.login.schema.ts (100%) rename server/src/modules/core/usecases/logout/logout.schema.ts => shared/routes/schemas/post.auth.logout.schema.ts (100%) rename server/src/modules/core/usecases/resetPassword/resetPassword.schema.ts => shared/routes/schemas/post.auth.reset-password.schema.ts (80%) rename server/src/modules/core/usecases/sendResetPassword/sendResetPassword.schema.ts => shared/routes/schemas/post.auth.send-reset-password.schema.ts (100%) rename server/src/modules/core/usecases/createCampagne/createCampagne.schema.ts => shared/routes/schemas/post.campagnes.campagneId.schema.ts (100%) rename server/src/modules/corrections/usecases/submitCorrection/submitCorrection.schema.ts => shared/routes/schemas/post.correction.submit.schema.ts (100%) rename server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.schema.ts => shared/routes/schemas/post.generate-metabase-dashboard-url.schema.ts (100%) rename server/src/modules/core/usecases/createUser/createUser.schema.ts => shared/routes/schemas/post.users.userId.schema.ts (78%) rename server/src/modules/core/usecases/editCampagne/editCampagne.schema.ts => shared/routes/schemas/put.campagnes.campagneId.schema.ts (100%) rename server/src/modules/core/usecases/editUser/editUser.schema.ts => shared/routes/schemas/put.users.userId.schema.ts (80%) diff --git a/server/src/modules/changelog/getChangelog/getChangelog.route.ts b/server/src/modules/changelog/getChangelog/getChangelog.route.ts index 1882fca44..a80e2aa01 100644 --- a/server/src/modules/changelog/getChangelog/getChangelog.route.ts +++ b/server/src/modules/changelog/getChangelog/getChangelog.route.ts @@ -1,16 +1,16 @@ import { createRoute } from "@http-wizard/core"; -import { API_ROUTES } from "shared/routes/index"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; import { getChangelog } from "./getChangelog.usecase"; -const route = API_ROUTES.GET["/changelog"]; +export const ROUTE = ROUTES["[GET]/changelog"]; export const getChangelogRoute = (server: Server) => { - return createRoute(route.path, { - method: route.method, - schema: route.schema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/changelog/getChangelog/getChangelog.usecase.ts b/server/src/modules/changelog/getChangelog/getChangelog.usecase.ts index a95aeaeaa..e8f6761f4 100644 --- a/server/src/modules/changelog/getChangelog/getChangelog.usecase.ts +++ b/server/src/modules/changelog/getChangelog/getChangelog.usecase.ts @@ -1,8 +1,8 @@ +import type { Changelog, ChangelogEntry } from "shared/routes/schemas/get.changelog.schema"; + import config from "@/config"; import { getDatabaseRows } from "@/modules/core/services/notion/notion"; -import type { Changelog, ChangelogEntry } from "./getChangelog.schema"; - /** * AUTO GENERATED TYPES */ diff --git a/server/src/modules/core/usecases/activateUser/activateUser.route.ts b/server/src/modules/core/usecases/activateUser/activateUser.route.ts index cf5d0b09c..a702070c1 100644 --- a/server/src/modules/core/usecases/activateUser/activateUser.route.ts +++ b/server/src/modules/core/usecases/activateUser/activateUser.route.ts @@ -1,17 +1,16 @@ import { createRoute } from "@http-wizard/core"; -import { API_ROUTES } from "shared/routes"; -import { activateUserSchema } from "shared/routes/auth/schemas/post.auth.activate"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; import { activateUser } from "./activateUser.usecase"; -const route = API_ROUTES["POST"]["/auth/activate"]; +const ROUTE = ROUTES["[POST]/auth/activate"]; export const activateUserRoute = (server: Server) => { - return createRoute(route.path, { - method: route.method, - schema: activateUserSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/checkActivationToken/checkActivationToken.route.ts b/server/src/modules/core/usecases/checkActivationToken/checkActivationToken.route.ts index 62e59656a..dc3e5d950 100644 --- a/server/src/modules/core/usecases/checkActivationToken/checkActivationToken.route.ts +++ b/server/src/modules/core/usecases/checkActivationToken/checkActivationToken.route.ts @@ -1,16 +1,16 @@ import { createRoute } from "@http-wizard/core"; -import { API_ROUTES } from "shared/routes"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; import { checkActivationToken } from "./checkActivationToken.usecase"; -const route = API_ROUTES.GET["/auth/check-activation-token"]; +const ROUTE = ROUTES["[GET]/auth/check-activation-token"]; export const checkActivationTokenRoute = (server: Server) => { - return createRoute(route.path, { - method: route.method, - schema: route.schema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/createCampagne/createCampagne.route.ts b/server/src/modules/core/usecases/createCampagne/createCampagne.route.ts index 648debcd9..4f36480cb 100644 --- a/server/src/modules/core/usecases/createCampagne/createCampagne.route.ts +++ b/server/src/modules/core/usecases/createCampagne/createCampagne.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { createCampagneSchema } from "./createCampagne.schema"; import { createCampagne } from "./createCampagne.usecase"; +const ROUTE = ROUTES["[POST]/campagnes/:campagneId"]; + export const createCampagneRoute = (server: Server) => { - return createRoute("/campagnes/:campagneId", { - method: "POST", - schema: createCampagneSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/createCampagne/createCampagne.usecase.ts b/server/src/modules/core/usecases/createCampagne/createCampagne.usecase.ts index d87545577..6516dfd94 100644 --- a/server/src/modules/core/usecases/createCampagne/createCampagne.usecase.ts +++ b/server/src/modules/core/usecases/createCampagne/createCampagne.usecase.ts @@ -2,12 +2,12 @@ import Boom from "@hapi/boom"; // eslint-disable-next-line import/no-extraneous-dependencies, n/no-extraneous-import import { inject } from "injecti"; import { CampagneStatutEnum } from "shared/enum/campagneStatutEnum"; +import type { BodySchema } from "shared/routes/schemas/post.campagnes.campagneId.schema"; import { getCampagneEnCours } from "@/modules/core/queries/getCampagneEnCours"; import { getSimilarCampagne } from "@/modules/core/queries/getSimilarCampagne"; import { insertCampagne } from "./createCampagne.query"; -import type { BodySchema } from "./createCampagne.schema"; export const [createCampagne, createCampagneFactory] = inject( { diff --git a/server/src/modules/core/usecases/createUser/createUser.route.ts b/server/src/modules/core/usecases/createUser/createUser.route.ts index 548458f89..0982ac175 100644 --- a/server/src/modules/core/usecases/createUser/createUser.route.ts +++ b/server/src/modules/core/usecases/createUser/createUser.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { createUserSchema } from "./createUser.schema"; import { createUser } from "./createUser.usecase"; +const ROUTE = ROUTES["[POST]/users/:userId"]; + export const createUserRoute = (server: Server) => { - return createRoute("/users/:userId", { - method: "POST", - schema: createUserSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/createUser/createUser.usecase.ts b/server/src/modules/core/usecases/createUser/createUser.usecase.ts index 2538cf999..cfe0a4371 100644 --- a/server/src/modules/core/usecases/createUser/createUser.usecase.ts +++ b/server/src/modules/core/usecases/createUser/createUser.usecase.ts @@ -3,12 +3,12 @@ import Boom from "@hapi/boom"; import { inject } from "injecti"; import jwt from "jsonwebtoken"; import { emailRegex } from "shared"; +import type { BodySchema } from "shared/routes/schemas/post.users.userId.schema"; import config from "@/config"; import type { RequestUser } from "@/modules/core/model/User"; import { shootTemplate } from "@/modules/core/services/mailer/mailer"; -import type { BodySchema } from "./createUser.schema"; import { findUserQuery } from "./findUserQuery.dep"; import { insertUserQuery } from "./insertUserQuery.dep"; import { canCreateRole } from "./utils/canCreateRole"; diff --git a/server/src/modules/core/usecases/createUser/utils/canCreateUserInScope.ts b/server/src/modules/core/usecases/createUser/utils/canCreateUserInScope.ts index e24f54ea4..80737a0ed 100644 --- a/server/src/modules/core/usecases/createUser/utils/canCreateUserInScope.ts +++ b/server/src/modules/core/usecases/createUser/utils/canCreateUserInScope.ts @@ -1,5 +1,6 @@ +import type { BodySchema } from "shared/routes/schemas/post.users.userId.schema"; + import type { RequestUser } from "@/modules/core/model/User"; -import type { BodySchema } from "@/modules/core/usecases/createUser/createUser.schema"; import { getScopeFilterForUser } from "@/modules/core/utils/getScopeFilterForUser"; export function canCreateUserInScope({ body, requestUser }: { body: BodySchema; requestUser: RequestUser }) { diff --git a/server/src/modules/core/usecases/editCampagne/editCampagne.route.ts b/server/src/modules/core/usecases/editCampagne/editCampagne.route.ts index 65f2bddd8..865c89f7f 100644 --- a/server/src/modules/core/usecases/editCampagne/editCampagne.route.ts +++ b/server/src/modules/core/usecases/editCampagne/editCampagne.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { editCampagneSchema } from "./editCampagne.schema"; import { editCampagneUsecase } from "./editCampagne.usecase"; +const ROUTE = ROUTES["[PUT]/campagnes/:campagneId"]; + export const editCampagneRoute = (server: Server) => { - return createRoute("/campagnes/:campagneId", { - method: "PUT", - schema: editCampagneSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/editCampagne/editCampagne.usecase.ts b/server/src/modules/core/usecases/editCampagne/editCampagne.usecase.ts index 308733c9c..25f53dc41 100644 --- a/server/src/modules/core/usecases/editCampagne/editCampagne.usecase.ts +++ b/server/src/modules/core/usecases/editCampagne/editCampagne.usecase.ts @@ -2,11 +2,11 @@ import Boom from "@hapi/boom"; // eslint-disable-next-line import/no-extraneous-dependencies, n/no-extraneous-import import { inject } from "injecti"; import { CampagneStatutEnum } from "shared/enum/campagneStatutEnum"; +import type { BodySchema } from "shared/routes/schemas/put.campagnes.campagneId.schema"; import { getCampagneEnCours } from "@/modules/core/queries/getCampagneEnCours"; import { updateCampagneQuery } from "./editCampagne.query"; -import type { BodySchema } from "./editCampagne.schema"; export const [editCampagneUsecase] = inject( { updateCampagneQuery, getCampagneEnCours }, diff --git a/server/src/modules/core/usecases/editUser/editUser.route.ts b/server/src/modules/core/usecases/editUser/editUser.route.ts index d41b31afa..618b0ee18 100644 --- a/server/src/modules/core/usecases/editUser/editUser.route.ts +++ b/server/src/modules/core/usecases/editUser/editUser.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { editUserSchema } from "./editUser.schema"; import { editUser } from "./editUser.usecase"; +const ROUTE = ROUTES["[PUT]/users/:userId"]; + export const editUserRoute = (server: Server) => { - return createRoute("/users/:userId", { - method: "PUT", - schema: editUserSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/editUser/editUser.usecase.ts b/server/src/modules/core/usecases/editUser/editUser.usecase.ts index cd1ebc383..2501faa82 100644 --- a/server/src/modules/core/usecases/editUser/editUser.usecase.ts +++ b/server/src/modules/core/usecases/editUser/editUser.usecase.ts @@ -1,10 +1,10 @@ import Boom from "@hapi/boom"; // eslint-disable-next-line import/no-extraneous-dependencies, n/no-extraneous-import import { inject } from "injecti"; +import type { BodySchema } from "shared/routes/schemas/put.users.userId.schema"; import type { RequestUser } from "@/modules/core/model/User"; -import type { BodySchema } from "./editUser.schema"; import { updateUser } from "./updateUser.dep"; import { canEditRole } from "./utils/canEditRole"; import { canEditUserInScope } from "./utils/canEditUserInScope"; diff --git a/server/src/modules/core/usecases/editUser/utils/canEditUserInScope.ts b/server/src/modules/core/usecases/editUser/utils/canEditUserInScope.ts index 70fd0582d..3fdd532c8 100644 --- a/server/src/modules/core/usecases/editUser/utils/canEditUserInScope.ts +++ b/server/src/modules/core/usecases/editUser/utils/canEditUserInScope.ts @@ -1,5 +1,6 @@ +import type { BodySchema } from "shared/routes/schemas/put.users.userId.schema"; + import type { RequestUser } from "@/modules/core/model/User"; -import type { BodySchema } from "@/modules/core/usecases/editUser/editUser.schema"; import { getScopeFilterForUser } from "@/modules/core/utils/getScopeFilterForUser"; export function canEditUserInScope({ body, requestUser }: { body: BodySchema; requestUser: RequestUser }) { diff --git a/server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.route.ts b/server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.route.ts index 5dc3955f3..0f5aebb12 100644 --- a/server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.route.ts +++ b/server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { getMetabaseDashboardUrlSchema } from "./generateMetabaseDashboardUrl.schema"; import { getMetabaseDashboardUrl } from "./generateMetabaseDashboardUrl.usecase"; +const ROUTE = ROUTES["[POST]/generate-metabase-dashboard-url"]; + export const generateMetabaseDashboardUrlRoute = (server: Server) => { - return createRoute("/generate-metabase-dashboard-url", { - method: "POST", - schema: getMetabaseDashboardUrlSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/getCampagnes/getCampagnes.route.ts b/server/src/modules/core/usecases/getCampagnes/getCampagnes.route.ts index bf4c4b3dc..5007c19ff 100644 --- a/server/src/modules/core/usecases/getCampagnes/getCampagnes.route.ts +++ b/server/src/modules/core/usecases/getCampagnes/getCampagnes.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; import { getCampagnes } from "./getCampagnes.query"; -import { getCampagnesSchema } from "./getCampagnes.schema"; + +const ROUTE = ROUTES["[GET]/campagnes"]; export const getCampagnesRoute = (server: Server) => { - return createRoute("/campagnes", { - method: "GET", - schema: getCampagnesSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/getDneUrl/getDneUrl.route.ts b/server/src/modules/core/usecases/getDneUrl/getDneUrl.route.ts index 3e80c8878..c9722dff5 100644 --- a/server/src/modules/core/usecases/getDneUrl/getDneUrl.route.ts +++ b/server/src/modules/core/usecases/getDneUrl/getDneUrl.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { getDneUrlSchema } from "./getDneUrl.schema"; import { getDneUrl } from "./getDneUrl.usecase"; +const ROUTE = ROUTES["[GET]/dne_url"]; + export const getDneAuthorizationUrlRoute = (server: Server) => { - return createRoute("/dne_url", { - method: "GET", - schema: getDneUrlSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/getUsers/getUsers.route.ts b/server/src/modules/core/usecases/getUsers/getUsers.route.ts index 7b932163d..425f7351d 100644 --- a/server/src/modules/core/usecases/getUsers/getUsers.route.ts +++ b/server/src/modules/core/usecases/getUsers/getUsers.route.ts @@ -1,16 +1,18 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { getScopeFilterForUser } from "@/modules/core/utils/getScopeFilterForUser"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { getUsersSchema } from "./getUsers.schema"; import { getUsers } from "./getUsers.usecase"; +const ROUTE = ROUTES["[GET]/users"]; + export const getUsersRoute = (server: Server) => { - return createRoute("/users", { - method: "GET", - schema: getUsersSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/home/home.route.ts b/server/src/modules/core/usecases/home/home.route.ts index bcd322d6e..6ef96320b 100644 --- a/server/src/modules/core/usecases/home/home.route.ts +++ b/server/src/modules/core/usecases/home/home.route.ts @@ -1,21 +1,15 @@ import { createRoute } from "@http-wizard/core"; -import { z } from "zod"; +import { ROUTES } from "shared/routes/routes"; import config from "@/config"; import type { Server } from "@/server/server"; +const ROUTE = ROUTES["[GET]/healthcheck"]; + export const homeRoute = (server: Server) => { - return createRoute("/healthcheck", { - method: "GET", - schema: { - response: { - 200: z.object({ - name: z.string(), - version: z.string(), - env: z.enum(["local", "recette", "recette1new", "recette2", "production", "preproduction", "test"]), - }), - }, - }, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/isMaintenance/isMaintenance.route.ts b/server/src/modules/core/usecases/isMaintenance/isMaintenance.route.ts index b2bc3ef8c..ab5c4b3e9 100644 --- a/server/src/modules/core/usecases/isMaintenance/isMaintenance.route.ts +++ b/server/src/modules/core/usecases/isMaintenance/isMaintenance.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { isMaintenanceSchema } from "./isMaintenance.schema"; import { isMaintenanceUsecase } from "./isMaintenance.usecase"; +const ROUTE = ROUTES["[GET]/maintenance"]; + export const isMaintenanceRoute = (server: Server) => { - return createRoute("/maintenance", { - method: "GET", - schema: isMaintenanceSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/login/login.route.ts b/server/src/modules/core/usecases/login/login.route.ts index 70a3d85af..0945fa6c8 100644 --- a/server/src/modules/core/usecases/login/login.route.ts +++ b/server/src/modules/core/usecases/login/login.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { loginSchema } from "./login.schema"; import { login } from "./login.usecase"; +const ROUTE = ROUTES["[POST]/auth/login"]; + export const loginRoute = (server: Server) => { - return createRoute("/auth/login", { - method: "POST", - schema: loginSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/logout/logout.route.ts b/server/src/modules/core/usecases/logout/logout.route.ts index 8c5d80ce3..1fa41eaf7 100644 --- a/server/src/modules/core/usecases/logout/logout.route.ts +++ b/server/src/modules/core/usecases/logout/logout.route.ts @@ -1,13 +1,14 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { logoutSchema } from "./logout.schema"; +const ROUTE = ROUTES["[POST]/auth/logout"]; export const logoutRoute = (server: Server) => { - return createRoute("/auth/logout", { - method: "POST", - schema: logoutSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/redirectDne/redirectDne.route.ts b/server/src/modules/core/usecases/redirectDne/redirectDne.route.ts index fd4282973..125b7ea37 100644 --- a/server/src/modules/core/usecases/redirectDne/redirectDne.route.ts +++ b/server/src/modules/core/usecases/redirectDne/redirectDne.route.ts @@ -1,22 +1,24 @@ import { createRoute } from "@http-wizard/core"; import type { FastifyRequest } from "fastify"; +import { ROUTES } from "shared/routes/routes"; import { getDneUrl } from "@/modules/core/usecases/getDneUrl/getDneUrl.usecase"; import type { Server } from "@/server/server"; import logger from "@/services/logger"; import { ERROR_TYPE } from "./const"; -import { redirectDneSchema } from "./redirectDne.schema"; import { redirectDne } from "./redirectDne.usecase"; +const ROUTE = ROUTES["[GET]/dne_connect"]; + interface RedirectDNEQueryString { code?: string; } export const redirectDneRoute = (server: Server) => { - return createRoute("/dne_connect", { - method: "GET", - schema: redirectDneSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/resetPassword/resetPassword.route.ts b/server/src/modules/core/usecases/resetPassword/resetPassword.route.ts index 1eb0eeeed..c327aa7fb 100644 --- a/server/src/modules/core/usecases/resetPassword/resetPassword.route.ts +++ b/server/src/modules/core/usecases/resetPassword/resetPassword.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { resetPasswordSchema } from "./resetPassword.schema"; import { resetPassword } from "./resetPassword.usecase"; +const ROUTE = ROUTES["[POST]/auth/reset-password"]; + export const resetPasswordRoute = (server: Server) => { - return createRoute("/auth/reset-password", { - method: "POST", - schema: resetPasswordSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/searchUser/searchUser.route.ts b/server/src/modules/core/usecases/searchUser/searchUser.route.ts index 203a60946..12c1bb33c 100644 --- a/server/src/modules/core/usecases/searchUser/searchUser.route.ts +++ b/server/src/modules/core/usecases/searchUser/searchUser.route.ts @@ -1,17 +1,19 @@ import Boom from "@hapi/boom"; import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { getScopeFilterForUser } from "@/modules/core/utils/getScopeFilterForUser"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { searchUserSchema } from "./searchUser.schema"; import { searchUser } from "./searchUser.usecase"; +const ROUTE = ROUTES["[GET]/user/search/:search"]; + export const searchUserRoute = (server: Server) => { - return createRoute("/user/search/:search", { - method: "GET", - schema: searchUserSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/sendResetPassword/sendResetPassword.route.ts b/server/src/modules/core/usecases/sendResetPassword/sendResetPassword.route.ts index d214806f3..8ae2f5203 100644 --- a/server/src/modules/core/usecases/sendResetPassword/sendResetPassword.route.ts +++ b/server/src/modules/core/usecases/sendResetPassword/sendResetPassword.route.ts @@ -1,14 +1,16 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import type { Server } from "@/server/server"; -import { sendResetPasswordSchema } from "./sendResetPassword.schema"; import { sendResetPassword } from "./sendResetPassword.usecase"; +const ROUTE = ROUTES["[POST]/auth/send-reset-password"]; + export const sendResetPasswordRoute = (server: Server) => { - return createRoute("/auth/send-reset-password", { - method: "POST", - schema: sendResetPasswordSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/core/usecases/whoAmI/whoAmI.route.ts b/server/src/modules/core/usecases/whoAmI/whoAmI.route.ts index b324902b1..2a00d3ffb 100644 --- a/server/src/modules/core/usecases/whoAmI/whoAmI.route.ts +++ b/server/src/modules/core/usecases/whoAmI/whoAmI.route.ts @@ -1,9 +1,8 @@ import { createRoute } from "@http-wizard/core"; +import { whoAmISchema } from "shared/routes/schemas/get.auth.whoAmI.schema"; import type { Server } from "@/server/server"; -import { whoAmISchema } from "./whoAmI.schema"; - export const whoAmIRoute = (server: Server) => { return createRoute("/auth/whoAmI", { method: "GET", diff --git a/server/src/modules/corrections/usecases/getCorrections/getCorrections.route.ts b/server/src/modules/corrections/usecases/getCorrections/getCorrections.route.ts index 39fa3045c..d4e587cd1 100644 --- a/server/src/modules/corrections/usecases/getCorrections/getCorrections.route.ts +++ b/server/src/modules/corrections/usecases/getCorrections/getCorrections.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { getCorrectionsSchema } from "./getCorrections.schema"; import { getCorrectionsUsecase } from "./getCorrections.usecase"; +const ROUTE = ROUTES["[GET]/corrections"]; + export const getCorrectionsRoute = (server: Server) => { - return createRoute("/corrections", { - method: "GET", - schema: getCorrectionsSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/corrections/usecases/getCorrections/getCorrections.usecase.ts b/server/src/modules/corrections/usecases/getCorrections/getCorrections.usecase.ts index 5d7abb948..ae4971747 100644 --- a/server/src/modules/corrections/usecases/getCorrections/getCorrections.usecase.ts +++ b/server/src/modules/corrections/usecases/getCorrections/getCorrections.usecase.ts @@ -1,5 +1,6 @@ import type { MILLESIMES_IJ } from "shared"; import { PositionQuadrantEnum } from "shared/enum/positionQuadrantEnum"; +import type { FiltersSchema } from "shared/routes/schemas/get.corrections.schema"; import type { z } from "zod"; import type { RequestUser } from "@/modules/core/model/User"; @@ -9,7 +10,6 @@ import { getPositionQuadrant } from "@/modules/data/services/getPositionQuadrant import { cleanNull } from "@/utils/noNull"; import { getCampagneQuery, getCorrectionsQuery, getFiltersQuery, getStatsCorrectionsQuery } from "./deps"; -import type { FiltersSchema } from "./getCorrections.schema"; export interface Filters extends z.infer { user: RequestUser; diff --git a/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.route.ts b/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.route.ts index d635e4285..50ed1b9f1 100644 --- a/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.route.ts +++ b/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.route.ts @@ -1,15 +1,17 @@ import { createRoute } from "@http-wizard/core"; +import { ROUTES } from "shared/routes/routes"; import { hasPermissionHandler } from "@/modules/core/utils/hasPermission"; import type { Server } from "@/server/server"; -import { submitCorrectionSchema } from "./submitCorrection.schema"; import { submitCorrectionUsecase } from "./submitCorrection.usecase"; +const ROUTE = ROUTES["[POST]/correction/submit"]; + export const submitCorrectionRoute = (server: Server) => { - return createRoute("/correction/submit", { - method: "POST", - schema: submitCorrectionSchema, + return createRoute(ROUTE.url, { + method: ROUTE.method, + schema: ROUTE.schema, }).handle((props) => { server.route({ ...props, diff --git a/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.usecase.ts b/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.usecase.ts index 6c14c704d..59ad62a10 100644 --- a/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.usecase.ts +++ b/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.usecase.ts @@ -2,6 +2,7 @@ import Boom from "@hapi/boom"; // eslint-disable-next-line import/no-extraneous-dependencies, n/no-extraneous-import import { inject } from "injecti"; import { getPermissionScope, guardScope } from "shared"; +import type { submitCorrectionSchema } from "shared/routes/schemas/post.correction.submit.schema"; import { correctionValidators } from "shared/validators/correctionValidators"; import type { z } from "zod"; @@ -14,7 +15,6 @@ import { cleanNull } from "@/utils/noNull"; import { createCorrectionQuery } from "./deps/createCorrection.query"; import { getCorrectionByIntentionNumeroQuery } from "./deps/getCorrectionByIntentionNumero.query"; -import type { submitCorrectionSchema } from "./submitCorrection.schema"; type Correction = z.infer["correction"]; type Demande = z.infer["demande"]; diff --git a/shared/routes/auth/routes.ts b/shared/routes/auth/routes.ts deleted file mode 100644 index f2afc1cc2..000000000 --- a/shared/routes/auth/routes.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { IModuleRoutesDefinition } from "../types"; -import { checkActivationTokenSchema } from "./schemas/get.auth.checkActivationToken"; -import { activateUserSchema } from "./schemas/post.auth.activate"; - -export const authRoutes = { - GET: { - "/auth/check-activation-token": { - path: "/auth/check-activation-token", - method: "GET", - schema: checkActivationTokenSchema, - }, - }, - POST: { - "/auth/activate": { - path: "/auth/activate", - method: "POST", - schema: activateUserSchema, - }, - }, -} satisfies IModuleRoutesDefinition; diff --git a/shared/routes/changelog/routes.ts b/shared/routes/changelog/routes.ts deleted file mode 100644 index d8905a3e0..000000000 --- a/shared/routes/changelog/routes.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { IModuleRoutesDefinition } from "../types"; -import { getChangelogSchema } from "./schemas/get.changelog"; - -export const changelogRoutes = { - GET: { - "/changelog": { - path: "/changelog", - method: "GET", - schema: getChangelogSchema, - }, - }, -} satisfies IModuleRoutesDefinition; diff --git a/shared/routes/index.ts b/shared/routes/index.ts index 86765af8d..b2b96ede6 100644 --- a/shared/routes/index.ts +++ b/shared/routes/index.ts @@ -1,17 +1,3 @@ -import { authRoutes } from "./auth/routes"; -import { changelogRoutes } from "./changelog/routes"; -import type { IModuleRoutesDefinition } from "./types"; +import type { ROUTES } from "./routes"; -const GET_ROUTES = { - ...changelogRoutes.GET, - ...authRoutes.GET, -} satisfies IModuleRoutesDefinition["GET"]; - -const POST_ROUTES = { - ...authRoutes.POST, -} satisfies IModuleRoutesDefinition["POST"]; - -export const API_ROUTES = { - GET: GET_ROUTES, - POST: POST_ROUTES, -}; +export type Router = typeof ROUTES; diff --git a/shared/routes/routes.ts b/shared/routes/routes.ts new file mode 100644 index 000000000..f028d0c22 --- /dev/null +++ b/shared/routes/routes.ts @@ -0,0 +1,136 @@ +import { checkActivationTokenSchema } from "./schemas/get.auth.check-activation-token.schema"; +import { whoAmISchema } from "./schemas/get.auth.whoAmI.schema"; +import { getCampagnesSchema } from "./schemas/get.campagnes.schema"; +import { getChangelogSchema } from "./schemas/get.changelog.schema"; +import { getCorrectionsSchema } from "./schemas/get.corrections.schema"; +import { redirectDneSchema } from "./schemas/get.dne_connect.schema"; +import { getDneUrlSchema } from "./schemas/get.dne_url.schema"; +import { getHomeSchema } from "./schemas/get.home.schema"; +import { getMaintenanceSchema } from "./schemas/get.maintenance.schema"; +import { searchUserSchema } from "./schemas/get.user.search.search.schema"; +import { getUsersSchema } from "./schemas/get.users.schema"; +import { activateUserSchema } from "./schemas/post.auth.activate.schema"; +import { loginSchema } from "./schemas/post.auth.login.schema"; +import { logoutSchema } from "./schemas/post.auth.logout.schema"; +import { resetPasswordSchema } from "./schemas/post.auth.reset-password.schema"; +import { sendResetPasswordSchema } from "./schemas/post.auth.send-reset-password.schema"; +import { createCampagneSchema } from "./schemas/post.campagnes.campagneId.schema"; +import { submitCorrectionSchema } from "./schemas/post.correction.submit.schema"; +import { getMetabaseDashboardUrlSchema } from "./schemas/post.generate-metabase-dashboard-url.schema"; +import { createUserSchema } from "./schemas/post.users.userId.schema"; +import { editCampagneSchema } from "./schemas/put.campagnes.campagneId.schema"; +import { editUserSchema } from "./schemas/put.users.userId.schema"; +import type { IRoutesDefinition } from "./types"; + +export const ROUTES = { + "[GET]/maintenance": { + url: "/maintenance", + method: "GET", + schema: getMaintenanceSchema, + }, + "[GET]/auth/check-activation-token": { + url: "/auth/check-activation-token", + method: "GET", + schema: checkActivationTokenSchema, + }, + "[POST]/auth/activate": { + url: "/auth/activate", + method: "POST", + schema: activateUserSchema, + }, + "[POST]/auth/login": { + url: "/auth/login", + method: "POST", + schema: loginSchema, + }, + "[POST]/auth/logout": { + url: "/auth/logout", + method: "POST", + schema: logoutSchema, + }, + "[POST]/auth/send-reset-password": { + url: "/auth/send-reset-password", + method: "POST", + schema: sendResetPasswordSchema, + }, + "[POST]/auth/reset-password": { + url: "/auth/reset-password", + method: "POST", + schema: resetPasswordSchema, + }, + "[GET]/auth/whoAmI": { + url: "/auth/whoAmI", + method: "GET", + schema: whoAmISchema, + }, + "[GET]/changelog": { + url: "/changelog", + method: "GET", + schema: getChangelogSchema, + }, + "[GET]/healthcheck": { + url: "/healthcheck", + method: "GET", + schema: getHomeSchema, + }, + "[GET]/users": { + url: "/users", + method: "GET", + schema: getUsersSchema, + }, + "[POST]/users/:userId": { + url: "/users/:userId", + method: "POST", + schema: createUserSchema, + }, + "[PUT]/users/:userId": { + url: "/users/:userId", + method: "PUT", + schema: editUserSchema, + }, + "[GET]/user/search/:search": { + url: "/user/search/:search", + method: "GET", + schema: searchUserSchema, + }, + "[GET]/campagnes": { + url: "/campagnes", + method: "GET", + schema: getCampagnesSchema, + }, + "[POST]/campagnes/:campagneId": { + url: "/campagnes/:campagneId", + method: "POST", + schema: createCampagneSchema, + }, + "[PUT]/campagnes/:campagneId": { + url: "/campagnes/:campagneId", + method: "PUT", + schema: editCampagneSchema, + }, + "[POST]/generate-metabase-dashboard-url": { + url: "/generate-metabase-dashboard-url", + method: "PUT", + schema: getMetabaseDashboardUrlSchema, + }, + "[GET]/dne_url": { + url: "/dne_url", + method: "GET", + schema: getDneUrlSchema, + }, + "[GET]/dne_connect": { + url: "dne_connect", + method: "GET", + schema: redirectDneSchema, + }, + "[GET]/corrections": { + url: "/corrections", + method: "GET", + schema: getCorrectionsSchema, + }, + "[POST]/correction/submit": { + url: "/correction/submit", + method: "POST", + schema: submitCorrectionSchema, + }, +} satisfies IRoutesDefinition; diff --git a/shared/routes/auth/schemas/get.auth.checkActivationToken.ts b/shared/routes/schemas/get.auth.check-activation-token.schema.ts similarity index 100% rename from shared/routes/auth/schemas/get.auth.checkActivationToken.ts rename to shared/routes/schemas/get.auth.check-activation-token.schema.ts diff --git a/server/src/modules/core/usecases/whoAmI/whoAmI.schema.ts b/shared/routes/schemas/get.auth.whoAmI.schema.ts similarity index 77% rename from server/src/modules/core/usecases/whoAmI/whoAmI.schema.ts rename to shared/routes/schemas/get.auth.whoAmI.schema.ts index e84dd33ca..49ed9d04b 100644 --- a/server/src/modules/core/usecases/whoAmI/whoAmI.schema.ts +++ b/shared/routes/schemas/get.auth.whoAmI.schema.ts @@ -1,7 +1,8 @@ -import type { Role } from "shared"; -import { PERMISSIONS } from "shared"; import { z } from "zod"; +import type { Role } from "../../security/permissions"; +import { PERMISSIONS } from "../../security/permissions"; + export const whoAmISchema = { response: { 200: z diff --git a/server/src/modules/core/usecases/getCampagnes/getCampagnes.schema.ts b/shared/routes/schemas/get.campagnes.schema.ts similarity index 100% rename from server/src/modules/core/usecases/getCampagnes/getCampagnes.schema.ts rename to shared/routes/schemas/get.campagnes.schema.ts diff --git a/shared/routes/changelog/schemas/get.changelog.ts b/shared/routes/schemas/get.changelog.schema.ts similarity index 100% rename from shared/routes/changelog/schemas/get.changelog.ts rename to shared/routes/schemas/get.changelog.schema.ts diff --git a/server/src/modules/corrections/usecases/getCorrections/getCorrections.schema.ts b/shared/routes/schemas/get.corrections.schema.ts similarity index 96% rename from server/src/modules/corrections/usecases/getCorrections/getCorrections.schema.ts rename to shared/routes/schemas/get.corrections.schema.ts index 7049f400e..f9d6372d0 100644 --- a/server/src/modules/corrections/usecases/getCorrections/getCorrections.schema.ts +++ b/shared/routes/schemas/get.corrections.schema.ts @@ -1,7 +1,8 @@ -import { DemandeStatutZodType } from "shared/enum/demandeStatutEnum"; -import { OptionSchema } from "shared/schema/optionSchema"; import { z } from "zod"; +import { DemandeStatutZodType } from "../../enum/demandeStatutEnum"; +import { OptionSchema } from "../../schema/optionSchema"; + const CorrectionItem = z.object({ intentionNumero: z.string().optional(), // Établissement diff --git a/server/src/modules/core/usecases/redirectDne/redirectDne.schema.ts b/shared/routes/schemas/get.dne_connect.schema.ts similarity index 100% rename from server/src/modules/core/usecases/redirectDne/redirectDne.schema.ts rename to shared/routes/schemas/get.dne_connect.schema.ts diff --git a/server/src/modules/core/usecases/getDneUrl/getDneUrl.schema.ts b/shared/routes/schemas/get.dne_url.schema.ts similarity index 100% rename from server/src/modules/core/usecases/getDneUrl/getDneUrl.schema.ts rename to shared/routes/schemas/get.dne_url.schema.ts diff --git a/shared/routes/schemas/get.home.schema.ts b/shared/routes/schemas/get.home.schema.ts new file mode 100644 index 000000000..d53c675e2 --- /dev/null +++ b/shared/routes/schemas/get.home.schema.ts @@ -0,0 +1,11 @@ +import { z } from "zod"; + +export const getHomeSchema = { + response: { + 200: z.object({ + name: z.string(), + version: z.string(), + env: z.enum(["local", "recette", "recette1new", "recette2", "production", "preproduction", "test"]), + }), + }, +}; diff --git a/shared/routes/schemas/get.maintenance.schema.ts b/shared/routes/schemas/get.maintenance.schema.ts new file mode 100644 index 000000000..4633d6952 --- /dev/null +++ b/shared/routes/schemas/get.maintenance.schema.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const getMaintenanceSchema = { + response: { + 200: z.object({ + isMaintenance: z.boolean(), + }), + }, +}; diff --git a/server/src/modules/core/usecases/searchUser/searchUser.schema.ts b/shared/routes/schemas/get.user.search.search.schema.ts similarity index 82% rename from server/src/modules/core/usecases/searchUser/searchUser.schema.ts rename to shared/routes/schemas/get.user.search.search.schema.ts index 2352501c6..12ae2caec 100644 --- a/server/src/modules/core/usecases/searchUser/searchUser.schema.ts +++ b/shared/routes/schemas/get.user.search.search.schema.ts @@ -1,7 +1,8 @@ -import type { Role } from "shared"; -import { PERMISSIONS } from "shared"; import { z } from "zod"; +import type { Role } from "../../security/permissions"; +import { PERMISSIONS } from "../../security/permissions"; + const UserSchema = z.object({ id: z.string(), firstname: z.string().optional(), diff --git a/server/src/modules/core/usecases/getUsers/getUsers.schema.ts b/shared/routes/schemas/get.users.schema.ts similarity index 87% rename from server/src/modules/core/usecases/getUsers/getUsers.schema.ts rename to shared/routes/schemas/get.users.schema.ts index bc418a1fc..d512130c1 100644 --- a/server/src/modules/core/usecases/getUsers/getUsers.schema.ts +++ b/shared/routes/schemas/get.users.schema.ts @@ -1,7 +1,8 @@ -import type { Role } from "shared"; -import { PERMISSIONS } from "shared"; import { z } from "zod"; +import type { Role } from "../../security/permissions"; +import { PERMISSIONS } from "../../security/permissions"; + const UserSchema = z.object({ id: z.string(), firstname: z.string().optional(), diff --git a/shared/routes/auth/schemas/post.auth.activate.ts b/shared/routes/schemas/post.auth.activate.schema.ts similarity index 79% rename from shared/routes/auth/schemas/post.auth.activate.ts rename to shared/routes/schemas/post.auth.activate.schema.ts index 9e55ad059..17277c5a9 100644 --- a/shared/routes/auth/schemas/post.auth.activate.ts +++ b/shared/routes/schemas/post.auth.activate.schema.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { passwordRegex } from "../../../utils/passwordRegex"; +import { passwordRegex } from "../../utils/passwordRegex"; export const activateUserSchema = { body: z.object({ password: z.string().regex(new RegExp(passwordRegex)), diff --git a/server/src/modules/core/usecases/login/login.schema.ts b/shared/routes/schemas/post.auth.login.schema.ts similarity index 100% rename from server/src/modules/core/usecases/login/login.schema.ts rename to shared/routes/schemas/post.auth.login.schema.ts diff --git a/server/src/modules/core/usecases/logout/logout.schema.ts b/shared/routes/schemas/post.auth.logout.schema.ts similarity index 100% rename from server/src/modules/core/usecases/logout/logout.schema.ts rename to shared/routes/schemas/post.auth.logout.schema.ts diff --git a/server/src/modules/core/usecases/resetPassword/resetPassword.schema.ts b/shared/routes/schemas/post.auth.reset-password.schema.ts similarity index 80% rename from server/src/modules/core/usecases/resetPassword/resetPassword.schema.ts rename to shared/routes/schemas/post.auth.reset-password.schema.ts index 226bf4888..2cb021c43 100644 --- a/server/src/modules/core/usecases/resetPassword/resetPassword.schema.ts +++ b/shared/routes/schemas/post.auth.reset-password.schema.ts @@ -1,6 +1,7 @@ -import { passwordRegex } from "shared"; import { z } from "zod"; +import { passwordRegex } from "../../utils/passwordRegex"; + export const resetPasswordSchema = { body: z.object({ password: z.string().regex(new RegExp(passwordRegex)), diff --git a/server/src/modules/core/usecases/sendResetPassword/sendResetPassword.schema.ts b/shared/routes/schemas/post.auth.send-reset-password.schema.ts similarity index 100% rename from server/src/modules/core/usecases/sendResetPassword/sendResetPassword.schema.ts rename to shared/routes/schemas/post.auth.send-reset-password.schema.ts diff --git a/server/src/modules/core/usecases/createCampagne/createCampagne.schema.ts b/shared/routes/schemas/post.campagnes.campagneId.schema.ts similarity index 100% rename from server/src/modules/core/usecases/createCampagne/createCampagne.schema.ts rename to shared/routes/schemas/post.campagnes.campagneId.schema.ts diff --git a/server/src/modules/corrections/usecases/submitCorrection/submitCorrection.schema.ts b/shared/routes/schemas/post.correction.submit.schema.ts similarity index 100% rename from server/src/modules/corrections/usecases/submitCorrection/submitCorrection.schema.ts rename to shared/routes/schemas/post.correction.submit.schema.ts diff --git a/server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.schema.ts b/shared/routes/schemas/post.generate-metabase-dashboard-url.schema.ts similarity index 100% rename from server/src/modules/core/usecases/generateMetabaseDashboardUrl/generateMetabaseDashboardUrl.schema.ts rename to shared/routes/schemas/post.generate-metabase-dashboard-url.schema.ts diff --git a/server/src/modules/core/usecases/createUser/createUser.schema.ts b/shared/routes/schemas/post.users.userId.schema.ts similarity index 78% rename from server/src/modules/core/usecases/createUser/createUser.schema.ts rename to shared/routes/schemas/post.users.userId.schema.ts index 38da282b5..58063bb54 100644 --- a/server/src/modules/core/usecases/createUser/createUser.schema.ts +++ b/shared/routes/schemas/post.users.userId.schema.ts @@ -1,7 +1,8 @@ -import type { Role } from "shared"; -import { PERMISSIONS } from "shared"; import { z } from "zod"; +import type { Role } from "../../security/permissions"; +import { PERMISSIONS } from "../../security/permissions"; + const BodySchema = z.object({ firstname: z.string().min(1), lastname: z.string().min(1), diff --git a/server/src/modules/core/usecases/editCampagne/editCampagne.schema.ts b/shared/routes/schemas/put.campagnes.campagneId.schema.ts similarity index 100% rename from server/src/modules/core/usecases/editCampagne/editCampagne.schema.ts rename to shared/routes/schemas/put.campagnes.campagneId.schema.ts diff --git a/server/src/modules/core/usecases/editUser/editUser.schema.ts b/shared/routes/schemas/put.users.userId.schema.ts similarity index 80% rename from server/src/modules/core/usecases/editUser/editUser.schema.ts rename to shared/routes/schemas/put.users.userId.schema.ts index a3d646c4f..d73100ea6 100644 --- a/server/src/modules/core/usecases/editUser/editUser.schema.ts +++ b/shared/routes/schemas/put.users.userId.schema.ts @@ -1,7 +1,8 @@ -import type { Role } from "shared"; -import { PERMISSIONS } from "shared"; import { z } from "zod"; +import type { Role } from "../../security/permissions"; +import { PERMISSIONS } from "../../security/permissions"; + const BodySchema = z.object({ firstname: z.string().min(1), lastname: z.string().min(1), diff --git a/shared/routes/types.ts b/shared/routes/types.ts index 4819e2361..fd521b1b5 100644 --- a/shared/routes/types.ts +++ b/shared/routes/types.ts @@ -17,20 +17,12 @@ export type SchemaZod = { response: Record; }; -export interface IRoute { - path: string; +export interface IRoute { + url: string; method: TMethod; schema: SchemaTypeBox | SchemaZod; } -export interface IModuleRoutesDefinition { - GET?: Record>; - HEAD?: Record>; - OPTIONS?: Record>; - TRACE?: Record>; - PUT?: Record>; - DELETE?: Record>; - POST?: Record>; - PATCH?: Record>; - CONNECT?: Record>; +export interface IRoutesDefinition { + [url: string]: IRoute; } diff --git a/ui/api.client.ts b/ui/api.client.ts index bfbb225ef..7d5c1f63c 100644 --- a/ui/api.client.ts +++ b/ui/api.client.ts @@ -1,13 +1,12 @@ import type { ZodTypeProvider } from "@http-wizard/core"; import { createQueryClient } from "@http-wizard/react-query"; import axios from "axios"; +import type { Router } from "shared/routes/index"; -// import type { Router } from "server/src/server/routes/routes"; import { publicConfig } from "./config.public"; -// TODO tmp any // eslint-disable-next-line @typescript-eslint/no-explicit-any -export const client = createQueryClient({ +export const client = createQueryClient({ instance: axios.create({ baseURL: publicConfig.apiEndpoint, withCredentials: true, @@ -15,7 +14,7 @@ export const client = createQueryClient({ }); // eslint-disable-next-line @typescript-eslint/no-explicit-any -export const serverClient = createQueryClient({ +export const serverClient = createQueryClient({ instance: axios.create({ // mandatory because localhost maps to ::1 (IPv6) with nodejs but api server insn't // mapped to ::1 but only IPv4 127.0.0.1