mirror of
https://github.com/r-ca/kidshift-be.git
synced 2024-10-25 16:14:02 +00:00
Merge branch 'main' of https://github.com/r-ca/kidshift-be
This commit is contained in:
commit
2d1fb9a6ab
|
@ -5,12 +5,12 @@ const router = Router();
|
|||
|
||||
// login
|
||||
router.post('/login', (req: Request, res: Response) => {
|
||||
const code: number = req.body.code;
|
||||
if (!code) {
|
||||
const loginCode: string = req.body.loginCode;
|
||||
if (!loginCode) {
|
||||
return res.status(400).json({ message: 'ログインコードが指定されていません' });
|
||||
}
|
||||
login(code).then((token) => {
|
||||
res.status(200).json({ accessToken: token });
|
||||
login(loginCode).then(resp => {
|
||||
res.status(200).json(resp);
|
||||
}).catch((err) => {
|
||||
res.status(500).json({ message: 'ログインに失敗しました', detail: err });
|
||||
});
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
import { Router } from 'express';
|
||||
|
||||
import taskRouter from './taskRouter';
|
||||
import authRouter from './authRouter';
|
||||
import { commonRouter as rootCommonRouter, parentRouter as rootParentRouter } from './rootRouter';
|
||||
import verifyToken from '../middlewares/verifyToken';
|
||||
import verifyParent from '../middlewares/verifyParent';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.use('/task', taskRouter);
|
||||
router.use('/auth', authRouter);
|
||||
router.use('/' , verifyToken, rootCommonRouter);
|
||||
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
import { Router, Request, Response } from 'express';
|
||||
import { generateLoginCode, getChilds, createChild, deleteChild, getChild } from '@src/services/parent/childService';
|
||||
import { generateLoginCode, getChilds, createChild, deleteChild, getChild, modifyChild } from '@src/services/parent/childService';
|
||||
import { ChildListResponse } from '@src/models/Child'
|
||||
import Logger from '@src/logger';
|
||||
import { internalServerErrorResponse } from '@src/models/commons/responses';
|
||||
|
||||
const router = Router();
|
||||
const logger = new Logger();
|
||||
logger.setTag('parent/childRouter');
|
||||
const commonRouter = Router();
|
||||
const parentRouter = Router();
|
||||
|
||||
router.get('/', (req: Request, res: Response) => {
|
||||
|
||||
commonRouter.get('/', (req: Request, res: Response) => {
|
||||
if (!req.user) {
|
||||
return res.status(500).json({
|
||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
||||
|
@ -26,7 +28,8 @@ router.get('/', (req: Request, res: Response) => {
|
|||
});
|
||||
});
|
||||
|
||||
router.post('/', (req: Request, res: Response) => {
|
||||
|
||||
parentRouter.post('/', (req: Request, res: Response) => {
|
||||
if (!req.user) {
|
||||
return res.status(500).json({
|
||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
||||
|
@ -64,7 +67,8 @@ router.post('/', (req: Request, res: Response) => {
|
|||
});
|
||||
});
|
||||
|
||||
router.get('/:childId/login', (req: Request, res: Response) => {
|
||||
|
||||
parentRouter.get('/:childId/login', (req: Request, res: Response) => {
|
||||
const childId = req.params.childId; // TODO: Validate childId
|
||||
generateLoginCode(childId).then((code) => {
|
||||
res.status(200).json({
|
||||
|
@ -80,7 +84,7 @@ router.get('/:childId/login', (req: Request, res: Response) => {
|
|||
});
|
||||
});
|
||||
|
||||
router.get('/:childId', (req: Request, res: Response) => {
|
||||
commonRouter.get('/:childId', (req: Request, res: Response) => {
|
||||
const childId = req.params.childId;
|
||||
getChild(childId).then((child) => {
|
||||
res.status(200).json(child);
|
||||
|
@ -94,7 +98,7 @@ router.get('/:childId', (req: Request, res: Response) => {
|
|||
});
|
||||
});
|
||||
|
||||
router.delete('/:childId', (req: Request, res: Response) => {
|
||||
parentRouter.delete('/:childId', (req: Request, res: Response) => {
|
||||
const childId = req.params.childId; // TODO: Validate childId
|
||||
deleteChild(childId).then(() => {
|
||||
res.status(200).json({
|
||||
|
@ -110,11 +114,16 @@ router.delete('/:childId', (req: Request, res: Response) => {
|
|||
});
|
||||
});
|
||||
|
||||
router.put('/:childId', (req: Request, res: Response) => {
|
||||
// 子供情報を更新
|
||||
res.status(501).json({
|
||||
message: 'WIP'
|
||||
parentRouter.put('/:childId', (req: Request, res: Response) => {
|
||||
const childId = req.params.childId; // TODO: Validate childId
|
||||
// TODO: ボディのバリデーション
|
||||
modifyChild(childId, req.body).then((child) => {
|
||||
res.status(200).json(child);
|
||||
}).catch((err) => {
|
||||
logger.error('Failed to modify child')
|
||||
logger.debug(err);
|
||||
res.status(internalServerErrorResponse().statusCode).json(internalServerErrorResponse().body);
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
||||
export { commonRouter, parentRouter };
|
|
@ -1,37 +0,0 @@
|
|||
import { Router, Request, Response } from 'express';
|
||||
import { registCompleteTask } from '@src/services/taskService';
|
||||
import Logger from '@src/logger';
|
||||
|
||||
const router = Router();
|
||||
const logger = new Logger();
|
||||
logger.setTag('child/taskRouter.ts');
|
||||
|
||||
router.get('/', (req: Request, res: Response) => {
|
||||
res.status(501).send('WIP');
|
||||
});
|
||||
|
||||
router.get('/:taskId', (req: Request, res: Response) => {
|
||||
res.status(501).send('WIP');
|
||||
});
|
||||
|
||||
router.post('/:taskId/complete', (req: Request, res: Response) => {
|
||||
if (!req.user) {
|
||||
return res.status(500).json({
|
||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
||||
});
|
||||
}
|
||||
logger.info(`Task complete request from ${req.user.claims.sub} for task ${req.params.taskId}`);
|
||||
try {
|
||||
registCompleteTask(req.params.taskId, req.user.claims.sub);
|
||||
} catch (error) {
|
||||
logger.error(`Failed to complete task: ${error}`);
|
||||
return res.status(500).json({
|
||||
message: 'エラーが発生しました(タスクの完了に失敗しました)'
|
||||
});
|
||||
}
|
||||
logger.info(`Task ${req.params.taskId} completed by ${req.user.claims.sub}`);
|
||||
res.status(200).json({
|
||||
message: 'タスクを完了しました'
|
||||
});
|
||||
});
|
||||
export default router;
|
|
@ -4,17 +4,13 @@ import verifyToken from '../middlewares/verifyToken';
|
|||
import verifyParent from '../middlewares/verifyParent';
|
||||
|
||||
import authRouter from './authRouter';
|
||||
import taskRouter from './taskRouter';
|
||||
import accountRouter from './accountRouter';
|
||||
import childRouter from './childRouter';
|
||||
|
||||
const router = Router();
|
||||
const logger = new Logger();
|
||||
logger.setTag('parent/index.ts');
|
||||
|
||||
router.use('/auth', authRouter);
|
||||
router.use('/task', verifyToken, verifyParent, taskRouter);
|
||||
router.use('/account', verifyToken, verifyParent, accountRouter);
|
||||
router.use('/child', verifyToken, verifyParent, childRouter);
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
import { Router } from 'express';
|
||||
import { Task } from '@prisma/client';
|
||||
import { getTask, createTask, getTasks, updateTask, deleteTask, registCompleteTask } from '@src/services/taskService';
|
||||
import { TaskListResponse, TaskAddRequest } from '@src/models/Task';
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/', (req, res) => {
|
||||
if (req.user === undefined) {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
||||
});
|
||||
return;
|
||||
}
|
||||
getTasks(req.user.claims.home_group_id)
|
||||
.then((taskListResponse: TaskListResponse) => {
|
||||
res.status(200).json(taskListResponse);
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
return;
|
||||
});
|
||||
|
||||
router.post('/', (req, res) => {
|
||||
// BodyをTaskAddRequestにマッピングできるかチェック
|
||||
let requestBody: TaskAddRequest;
|
||||
try {
|
||||
requestBody = req.body;
|
||||
if (!requestBody) {
|
||||
res.status(400).json({
|
||||
message: 'リクエストボディが空です'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!requestBody.name || !requestBody.reward) {
|
||||
res.status(400).json({
|
||||
message: 'name, rewardは必須です'
|
||||
});
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
res.status(400).json({
|
||||
message: 'リクエストボディが不正です'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (req.user === undefined) {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
createTask(requestBody, req.user.claims.home_group_id)
|
||||
.then((task: Task) => {
|
||||
res.status(201).json(task); // TODO
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:taskId', (req, res) => {
|
||||
getTask(req.params.taskId)
|
||||
.then((task: Task | null) => {
|
||||
if (task) {
|
||||
res.status(200).json(task);
|
||||
} else {
|
||||
res.status(404).json({
|
||||
message: 'タスクが見つかりませんでした'
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
router.put('/:taskId', (req, res) => {
|
||||
const body = req.body;
|
||||
if (!body) {
|
||||
res.status(400).json({
|
||||
message: '不正なリクエスト: リクエストボディが空です'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!body.displayName || !body.reward) {
|
||||
res.status(400).json({
|
||||
message: '不正なリクエスト: displayName, rewardは必須です'
|
||||
});
|
||||
return;
|
||||
} else {
|
||||
const task: Task = {} as Task;
|
||||
// TODO: 共通化
|
||||
task.id = req.params.taskId;
|
||||
task.display_name = body.displayName;
|
||||
task.reward = body.reward;
|
||||
updateTask(task)
|
||||
.then((task: Task) => {
|
||||
res.status(200).json(task);
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/:taskId', (req, res) => {
|
||||
deleteTask(req.params.taskId)
|
||||
.then(() => {
|
||||
res.status(200).json({
|
||||
message: 'OK',
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/:taskId/complete', (req, res) => {
|
||||
if (req.query.childId === undefined) {
|
||||
res.status(400).json({
|
||||
message: '不正なリクエスト: childIdは必須です'
|
||||
});
|
||||
return;
|
||||
}
|
||||
registCompleteTask(req.params.taskId, req.query.childId as string)
|
||||
.then(() => {
|
||||
res.status(200).json({
|
||||
message: 'OK',
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
res.status(500).json({
|
||||
message: 'エラーが発生しました',
|
||||
error: err
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
export default router;
|
|
@ -6,10 +6,10 @@ import verifyParent from '../middlewares/verifyParent';
|
|||
|
||||
const router = Router();
|
||||
|
||||
router.use('/', verifyToken, rootCommonRouter);
|
||||
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
||||
router.use('/history', verifyToken, historyCommonRouter);
|
||||
router.use('/history', verifyToken, verifyParent, historyParentRouter);
|
||||
router.use('/', verifyToken, rootCommonRouter);
|
||||
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
||||
|
||||
export default router;
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import prisma from '@src/prisma';
|
||||
import { issueTokenByChildId } from '@src/utils/tokenUtils';
|
||||
|
||||
async function login(loginCode: number): Promise<string | null> {
|
||||
async function login(loginCode: string): Promise<any> { // Workaround
|
||||
const childId: string | null = await prisma.activeLoginCode.findUnique({
|
||||
where: {
|
||||
code: loginCode
|
||||
code: parseInt(loginCode)
|
||||
}
|
||||
}).then((activeLoginCode) => {
|
||||
if (!activeLoginCode) {
|
||||
|
@ -17,10 +17,13 @@ async function login(loginCode: number): Promise<string | null> {
|
|||
}
|
||||
await prisma.activeLoginCode.delete({
|
||||
where: {
|
||||
code: loginCode
|
||||
code: parseInt(loginCode)
|
||||
}
|
||||
});
|
||||
return await issueTokenByChildId(childId);
|
||||
return {
|
||||
accessToken: await issueTokenByChildId(childId),
|
||||
childId: childId
|
||||
};
|
||||
}
|
||||
|
||||
export { login };
|
||||
|
|
|
@ -62,6 +62,17 @@ async function deleteChild(childId: string): Promise<Child> {
|
|||
}).then((child) => { return child; });
|
||||
}
|
||||
|
||||
async function modifyChild(childId: string, requestBody: ChildAddRequest): Promise<Child> {
|
||||
return prisma.child.update({
|
||||
where: {
|
||||
id: childId
|
||||
},
|
||||
data: {
|
||||
name: requestBody.name
|
||||
}
|
||||
}).then((child) => { return child; });
|
||||
}
|
||||
|
||||
async function generateLoginCode(childId: string): Promise<number> {
|
||||
const loginCode: number = Math.floor(10000000 + Math.random() * 90000000);
|
||||
logger.debug(`Generated login code: ${loginCode}`);
|
||||
|
@ -83,4 +94,4 @@ async function generateLoginCode(childId: string): Promise<number> {
|
|||
});
|
||||
}
|
||||
|
||||
export { getChilds, createChild, deleteChild, generateLoginCode, getChild }
|
||||
export { getChilds, createChild, deleteChild, generateLoginCode, getChild, modifyChild }
|
||||
|
|
Loading…
Reference in New Issue
Block a user