@@ -5,7 +5,11 @@ import type {
55 RawRequestDefaultExpression ,
66 RawServerDefault ,
77} from "fastify" ;
8- import type { AuthLibraryContext , UserLibraryContext } from "./context.js" ;
8+ import type {
9+ AuthLibraryContext ,
10+ UserLibraryContext ,
11+ CurriculumLibraryContext ,
12+ } from "./context.js" ;
913import { type ZodTypeProvider } from "fastify-type-provider-zod" ;
1014import { LoginRoute } from "#src/routes/login.route.js" ;
1115import { RefreshRoute } from "#src/routes/refresh.route.js" ;
@@ -20,6 +24,13 @@ import { UserEntity } from "./entities/user.entity.js";
2024import { type ModuleInterface , type Route } from "@libs/backend-shared" ;
2125import { handleJsonApiErrors } from "@libs/backend-shared" ;
2226import { createJwtAuthMiddleware } from "./index.ts" ;
27+ import { CurriculumEntity } from "./entities/curriculum.entity.ts" ;
28+
29+ import { GetCurriculumRoute } from "./routes/curriculums/get.route.ts" ;
30+ import { ListCurriculumRoute } from "./routes/curriculums/list.route.ts" ;
31+ import { CreateCurriculumRoute } from "./routes/curriculums/create.route.ts" ;
32+ import { UpdateCurriculumRoute } from "./routes/curriculums/update.route.ts" ;
33+ import { DeleteCurriculumRoute } from "./routes/curriculums/delete.route.ts" ;
2334
2435export type FastifyInstanceTypeForModule = FastifyInstance <
2536 RawServerDefault ,
@@ -107,3 +118,43 @@ export class UserModule implements ModuleInterface<FastifyInstanceTypeForModule>
107118 ) ;
108119 }
109120}
121+
122+ export class CurriculumModule implements ModuleInterface < FastifyInstanceTypeForModule > {
123+ private constructor ( private context : CurriculumLibraryContext ) { }
124+
125+ public static init ( context : CurriculumLibraryContext ) : CurriculumModule {
126+ return new CurriculumModule ( context ) ;
127+ }
128+
129+ public async setupRoutes ( fastify : FastifyInstanceTypeForModule ) : Promise < void > {
130+ const repository = this . context . em . getRepository ( CurriculumEntity ) ;
131+
132+ await fastify . register (
133+ async ( f ) => {
134+ const curriculumRoutes : Route < FastifyInstanceTypeForModule > [ ] = [
135+ new GetCurriculumRoute ( repository ) ,
136+ new ListCurriculumRoute ( repository ) ,
137+ new CreateCurriculumRoute ( repository ) ,
138+ new UpdateCurriculumRoute ( repository ) ,
139+ new DeleteCurriculumRoute ( repository ) ,
140+ ] ;
141+
142+ f . setErrorHandler ( ( error , request , reply ) => {
143+ handleJsonApiErrors ( error , request , reply ) ;
144+ } ) ;
145+
146+ const jwtAuthMiddleware = createJwtAuthMiddleware (
147+ this . context . em ,
148+ this . context . configuration . jwtSecret ,
149+ ) ;
150+
151+ f . addHook ( "preValidation" , jwtAuthMiddleware ) ;
152+
153+ for ( const route of curriculumRoutes ) {
154+ route . routeDefinition ( f ) ;
155+ }
156+ } ,
157+ { prefix : "/curriculums" } ,
158+ ) ;
159+ }
160+ }
0 commit comments