Initial commit
This commit is contained in:
99
api/modules/todo/routes.ts
Normal file
99
api/modules/todo/routes.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
import express, { type Request, type Response, type Router } from 'express'
|
||||
import { asyncHandler } from '../../utils/asyncHandler.js'
|
||||
import { successResponse } from '../../utils/response.js'
|
||||
import { validateBody, validateQuery } from '../../middlewares/validate.js'
|
||||
import { TodoService } from './service.js'
|
||||
import {
|
||||
getTodoQuerySchema,
|
||||
saveTodoSchema,
|
||||
addTodoSchema,
|
||||
toggleTodoSchema,
|
||||
updateTodoSchema,
|
||||
deleteTodoSchema,
|
||||
} from './schemas.js'
|
||||
|
||||
export interface TodoRoutesDependencies {
|
||||
todoService: TodoService
|
||||
}
|
||||
|
||||
export const createTodoRoutes = (deps: TodoRoutesDependencies): Router => {
|
||||
const router = express.Router()
|
||||
const { todoService } = deps
|
||||
|
||||
router.get(
|
||||
'/',
|
||||
validateQuery(getTodoQuerySchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const year = parseInt(req.query.year as string) || new Date().getFullYear()
|
||||
const month = parseInt(req.query.month as string) || new Date().getMonth() + 1
|
||||
|
||||
const result = await todoService.getTodo(year, month)
|
||||
successResponse(res, result)
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/save',
|
||||
validateBody(saveTodoSchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { year, month, dayTodos } = req.body
|
||||
|
||||
await todoService.saveTodo(year, month, dayTodos)
|
||||
|
||||
successResponse(res, null)
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/add',
|
||||
validateBody(addTodoSchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { year, month, date, content: todoContent } = req.body
|
||||
|
||||
const dayTodos = await todoService.addTodo(year, month, date, todoContent)
|
||||
|
||||
successResponse(res, { dayTodos })
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/toggle',
|
||||
validateBody(toggleTodoSchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { year, month, date, itemIndex, completed } = req.body
|
||||
|
||||
const dayTodos = await todoService.toggleTodo(year, month, date, itemIndex, completed)
|
||||
|
||||
successResponse(res, { dayTodos })
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/update',
|
||||
validateBody(updateTodoSchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { year, month, date, itemIndex, content: newContent } = req.body
|
||||
|
||||
const dayTodos = await todoService.updateTodo(year, month, date, itemIndex, newContent)
|
||||
|
||||
successResponse(res, { dayTodos })
|
||||
}),
|
||||
)
|
||||
|
||||
router.delete(
|
||||
'/delete',
|
||||
validateBody(deleteTodoSchema),
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { year, month, date, itemIndex } = req.body
|
||||
|
||||
const dayTodos = await todoService.deleteTodo(year, month, date, itemIndex)
|
||||
|
||||
successResponse(res, { dayTodos })
|
||||
}),
|
||||
)
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
const todoService = new TodoService()
|
||||
export default createTodoRoutes({ todoService })
|
||||
Reference in New Issue
Block a user