Skip to content

Commit 60a650a

Browse files
committed
add defineHandler function
Signed-off-by: Kirill Mokevnin <mokevnin@gmail.com>
1 parent 4a681df commit 60a650a

File tree

5 files changed

+28
-20
lines changed

5 files changed

+28
-20
lines changed

lib/utils.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { FastifyReply } from 'fastify';
22
import openapiConst from '../tsp-output/@typespec/openapi3/openapi.v2.json' with {
33
type: 'json',
44
};
5+
import type { RouteHandlers } from '../types/handlers/fastify.gen.ts';
56

67
export function getPagingOptions(page: number, perPage = 10) {
78
return {
@@ -23,3 +24,7 @@ export function ensure<T>(
2324
const m = msg || 'Not Found';
2425
if (value == null) reply.server.httpErrors.createError(status, m);
2526
}
27+
28+
export function defineHandlers<T extends Partial<RouteHandlers>>(t: T) {
29+
return t;
30+
}

routes/api/courses.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { asc, eq } from 'drizzle-orm';
22

33
import * as schemas from '../../db/schema.ts';
4-
import { ensure, getPagingOptions } from '../../lib/utils.ts';
5-
import type { RouteHandlers } from '../../types/handlers/fastify.gen.ts';
4+
import { defineHandlers, ensure, getPagingOptions } from '../../lib/utils.ts';
65
import type {
7-
CourseCreateDto,
8-
CourseEditDto,
6+
CourseCreateDto,
7+
CourseEditDto,
98
} from '../../types/handlers/index.ts';
109
import CourseValidator from '../../validators/CourseValidator.ts';
1110

12-
export default {
11+
12+
const handlers = defineHandlers({
1313
async coursesIndex(request, reply) {
1414
const page = request.query?.page ?? 1;
1515
const courses = await request.db.query.courses.findMany({
@@ -33,7 +33,6 @@ export default {
3333
request.db,
3434
request.body,
3535
);
36-
// attach creator id from auth if available
3736
const creatorId = request.user?.id;
3837
const values = {
3938
...validated,
@@ -71,4 +70,6 @@ export default {
7170
ensure(reply, course, 404);
7271
return reply.code(204).send();
7372
},
74-
} satisfies Partial<RouteHandlers>;
73+
});
74+
75+
export default handlers;

routes/api/courses/lessons.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
import { and, asc, eq } from 'drizzle-orm';
22

33
import * as schemas from '../../../db/schema.ts';
4-
import { ensure, getPagingOptions } from '../../../lib/utils.ts';
5-
import type { RouteHandlers } from '../../../types/handlers/fastify.gen.ts';
4+
import { defineHandlers, ensure, getPagingOptions } from '../../../lib/utils.ts';
65
import type { CourseLessonCreateDto } from '../../../types/handlers/index.ts';
76
import LessonValidator from '../../../validators/Course/LessonValidator.ts';
87

9-
export default {
8+
const handlers = defineHandlers({
109
async coursesLessonsIndex(request, reply) {
1110
const page = request.query?.page ?? 1;
1211
const lessons = await request.db.query.courseLessons.findMany({
@@ -44,4 +43,6 @@ export default {
4443
.returning();
4544
return reply.code(201).send(lesson);
4645
},
47-
} satisfies Partial<RouteHandlers>;
46+
});
47+
48+
export default handlers;

routes/api/tokens.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { eq } from 'drizzle-orm';
22

33
import * as schemas from '../../db/schema.ts';
4-
import { ensure } from '../../lib/utils.ts';
5-
import type { RouteHandlers } from '../../types/handlers/fastify.gen.ts';
4+
import { defineHandlers, ensure } from '../../lib/utils.ts';
65

7-
export default {
6+
const handlers = defineHandlers({
87
async tokensCreate(request, reply) {
98
const client = await request.db.query.users.findFirst({
109
where: eq(schemas.users.email, request.body.email),
@@ -13,4 +12,6 @@ export default {
1312
const token = request.server.jwt.sign({ id: client.id });
1413
return reply.code(201).send({ token });
1514
},
16-
} satisfies Partial<RouteHandlers>;
15+
});
16+
17+
export default handlers;

routes/api/users.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import { asc, eq } from 'drizzle-orm';
2-
32
import * as schemas from '../../db/schema.ts';
4-
import { ensure, getPagingOptions } from '../../lib/utils.ts';
5-
import type { RouteHandlers } from '../../types/handlers/fastify.gen.ts';
3+
import { defineHandlers, ensure, getPagingOptions } from '../../lib/utils.ts';
64
import type { UserCreateDto, UserEditDto } from '../../types/handlers/index.ts';
75
import UserValidator from '../../validators/UserValidator.ts';
86

9-
export default {
7+
const handlers = defineHandlers({
108
async usersIndex(request, reply) {
119
const page = request.query?.page ?? 1;
1210
const users = await request.db.query.users.findMany({
@@ -59,4 +57,6 @@ export default {
5957
ensure(reply, user, 404);
6058
return reply.code(204).send();
6159
},
62-
} satisfies Partial<RouteHandlers>;
60+
});
61+
62+
export default handlers;

0 commit comments

Comments
 (0)