88 lines
2.2 KiB
TypeScript
88 lines
2.2 KiB
TypeScript
import { Elysia, t } from 'elysia'
|
|
import { bearerAuthMiddleware } from '~/middlewares'
|
|
import { validationErrorSchema } from '~/plugins/defaultHandler'
|
|
import CommandService from './commands/service'
|
|
import QueryService from './queries/service'
|
|
import { createUserBody, createUserResponse, listUserResponse } from './schema'
|
|
|
|
export const router = new Elysia({
|
|
name: 'modules.user',
|
|
detail: { tags: ['Users'] },
|
|
prefix: '/user/v1/users',
|
|
})
|
|
.get('/', async ({ headers, set }) => {
|
|
await bearerAuthMiddleware(headers, set)
|
|
|
|
const users = await QueryService.getUsers()
|
|
return {
|
|
message: 'Get users.' as const,
|
|
data: users,
|
|
}
|
|
}, {
|
|
response: {
|
|
200: t.Object({
|
|
message: t.Literal('Get users.'),
|
|
data: listUserResponse,
|
|
}),
|
|
401: t.Object({
|
|
message: t.Literal('Unauthenticated.'),
|
|
}),
|
|
},
|
|
})
|
|
.post('/', async ({ body, headers, set }) => {
|
|
await bearerAuthMiddleware(headers, set)
|
|
|
|
const user = await CommandService.createUser(body)
|
|
return {
|
|
message: 'User created.',
|
|
data: user,
|
|
}
|
|
}, {
|
|
body: createUserBody,
|
|
response: {
|
|
200: t.Object({
|
|
message: t.Literal('User created.'),
|
|
data: createUserResponse,
|
|
}),
|
|
401: t.Object({
|
|
message: t.Literal('Unauthenticated.'),
|
|
}),
|
|
422: validationErrorSchema,
|
|
},
|
|
})
|
|
.put('/:id', async ({ params: { id }, body, headers, set }) => {
|
|
await bearerAuthMiddleware(headers, set)
|
|
|
|
const user = await CommandService.updateUser(id, body)
|
|
return {
|
|
message: 'User updated.' as const,
|
|
data: user,
|
|
}
|
|
}, {
|
|
body: createUserBody,
|
|
response: {
|
|
200: t.Object({
|
|
message: t.Literal('User updated.'),
|
|
data: createUserResponse,
|
|
}),
|
|
},
|
|
})
|
|
.delete('/:id', async ({ params: { id }, headers, set }) => {
|
|
await bearerAuthMiddleware(headers, set)
|
|
|
|
await CommandService.deleteUser(id)
|
|
return {
|
|
message: 'User deleted.' as const,
|
|
data: { id },
|
|
}
|
|
}, {
|
|
response: {
|
|
200: t.Object({
|
|
message: t.Literal('User deleted.'),
|
|
data: t.Object({ id: t.String() }),
|
|
}),
|
|
},
|
|
})
|
|
|
|
export default router
|