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
|
// login
|
||||||
router.post('/login', (req: Request, res: Response) => {
|
router.post('/login', (req: Request, res: Response) => {
|
||||||
const code: number = req.body.code;
|
const loginCode: string = req.body.loginCode;
|
||||||
if (!code) {
|
if (!loginCode) {
|
||||||
return res.status(400).json({ message: 'ログインコードが指定されていません' });
|
return res.status(400).json({ message: 'ログインコードが指定されていません' });
|
||||||
}
|
}
|
||||||
login(code).then((token) => {
|
login(loginCode).then(resp => {
|
||||||
res.status(200).json({ accessToken: token });
|
res.status(200).json(resp);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
res.status(500).json({ message: 'ログインに失敗しました', detail: err });
|
res.status(500).json({ message: 'ログインに失敗しました', detail: err });
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
import { Router } from 'express';
|
import { Router } from 'express';
|
||||||
|
|
||||||
import taskRouter from './taskRouter';
|
|
||||||
import authRouter from './authRouter';
|
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();
|
const router = Router();
|
||||||
|
|
||||||
router.use('/task', taskRouter);
|
|
||||||
router.use('/auth', authRouter);
|
router.use('/auth', authRouter);
|
||||||
|
router.use('/' , verifyToken, rootCommonRouter);
|
||||||
|
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import { Router, Request, Response } from 'express';
|
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 { ChildListResponse } from '@src/models/Child'
|
||||||
import Logger from '@src/logger';
|
import Logger from '@src/logger';
|
||||||
|
import { internalServerErrorResponse } from '@src/models/commons/responses';
|
||||||
|
|
||||||
const router = Router();
|
|
||||||
const logger = new Logger();
|
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) {
|
if (!req.user) {
|
||||||
return res.status(500).json({
|
return res.status(500).json({
|
||||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
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) {
|
if (!req.user) {
|
||||||
return res.status(500).json({
|
return res.status(500).json({
|
||||||
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
|
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
|
const childId = req.params.childId; // TODO: Validate childId
|
||||||
generateLoginCode(childId).then((code) => {
|
generateLoginCode(childId).then((code) => {
|
||||||
res.status(200).json({
|
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;
|
const childId = req.params.childId;
|
||||||
getChild(childId).then((child) => {
|
getChild(childId).then((child) => {
|
||||||
res.status(200).json(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
|
const childId = req.params.childId; // TODO: Validate childId
|
||||||
deleteChild(childId).then(() => {
|
deleteChild(childId).then(() => {
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
|
@ -110,11 +114,16 @@ router.delete('/:childId', (req: Request, res: Response) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.put('/:childId', (req: Request, res: Response) => {
|
parentRouter.put('/:childId', (req: Request, res: Response) => {
|
||||||
// 子供情報を更新
|
const childId = req.params.childId; // TODO: Validate childId
|
||||||
res.status(501).json({
|
// TODO: ボディのバリデーション
|
||||||
message: 'WIP'
|
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 verifyParent from '../middlewares/verifyParent';
|
||||||
|
|
||||||
import authRouter from './authRouter';
|
import authRouter from './authRouter';
|
||||||
import taskRouter from './taskRouter';
|
|
||||||
import accountRouter from './accountRouter';
|
import accountRouter from './accountRouter';
|
||||||
import childRouter from './childRouter';
|
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
const logger = new Logger();
|
const logger = new Logger();
|
||||||
logger.setTag('parent/index.ts');
|
logger.setTag('parent/index.ts');
|
||||||
|
|
||||||
router.use('/auth', authRouter);
|
router.use('/auth', authRouter);
|
||||||
router.use('/task', verifyToken, verifyParent, taskRouter);
|
|
||||||
router.use('/account', verifyToken, verifyParent, accountRouter);
|
router.use('/account', verifyToken, verifyParent, accountRouter);
|
||||||
router.use('/child', verifyToken, verifyParent, childRouter);
|
|
||||||
|
|
||||||
export default router;
|
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();
|
const router = Router();
|
||||||
|
|
||||||
router.use('/', verifyToken, rootCommonRouter);
|
|
||||||
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
|
||||||
router.use('/history', verifyToken, historyCommonRouter);
|
router.use('/history', verifyToken, historyCommonRouter);
|
||||||
router.use('/history', verifyToken, verifyParent, historyParentRouter);
|
router.use('/history', verifyToken, verifyParent, historyParentRouter);
|
||||||
|
router.use('/', verifyToken, rootCommonRouter);
|
||||||
|
router.use('/' , verifyToken, verifyParent, rootParentRouter);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import prisma from '@src/prisma';
|
import prisma from '@src/prisma';
|
||||||
import { issueTokenByChildId } from '@src/utils/tokenUtils';
|
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({
|
const childId: string | null = await prisma.activeLoginCode.findUnique({
|
||||||
where: {
|
where: {
|
||||||
code: loginCode
|
code: parseInt(loginCode)
|
||||||
}
|
}
|
||||||
}).then((activeLoginCode) => {
|
}).then((activeLoginCode) => {
|
||||||
if (!activeLoginCode) {
|
if (!activeLoginCode) {
|
||||||
|
@ -17,10 +17,13 @@ async function login(loginCode: number): Promise<string | null> {
|
||||||
}
|
}
|
||||||
await prisma.activeLoginCode.delete({
|
await prisma.activeLoginCode.delete({
|
||||||
where: {
|
where: {
|
||||||
code: loginCode
|
code: parseInt(loginCode)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return await issueTokenByChildId(childId);
|
return {
|
||||||
|
accessToken: await issueTokenByChildId(childId),
|
||||||
|
childId: childId
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export { login };
|
export { login };
|
||||||
|
|
|
@ -62,6 +62,17 @@ async function deleteChild(childId: string): Promise<Child> {
|
||||||
}).then((child) => { return 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> {
|
async function generateLoginCode(childId: string): Promise<number> {
|
||||||
const loginCode: number = Math.floor(10000000 + Math.random() * 90000000);
|
const loginCode: number = Math.floor(10000000 + Math.random() * 90000000);
|
||||||
logger.debug(`Generated login code: ${loginCode}`);
|
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