task追加 WIP

This commit is contained in:
ろむねこ 2024-06-25 16:01:54 +09:00
parent e4ba893547
commit b3c7d33361
Signed by: Fujimatsu
GPG Key ID: FA1F39A1BA37D168
3 changed files with 47 additions and 38 deletions

View File

@ -15,9 +15,9 @@ interface TaskListResponse {
list: TaskBaseItem[]
}
interface TaskRequest extends TaskBaseItem {
interface TaskAddRequest extends TaskBaseItem {
// 追加プロパティ
attachedChlidren?: String[] // タスク追加時にattachするかは任意
}
export { TaskResponse, TaskRequest, TaskListResponse }
export { TaskResponse, TaskAddRequest, TaskListResponse }

View File

@ -1,7 +1,7 @@
import { Router } from 'express';
import { Task } from '@prisma/client';
import { getTask, createTask, getTasks, updateTask, deleteTask, registCompleteTask } from '@src/services/taskService';
import { TaskListResponse } from '@src/models/Task';
import { TaskListResponse, TaskAddRequest } from '@src/models/Task';
const router = Router();
@ -26,43 +26,46 @@ router.get('/', (req, res) => {
});
router.post('/', (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;
if (req.user === undefined) {
res.status(500).json({
message: 'エラーが発生しました(JWT解析結果が不正/未設定です)'
// BodyをTaskAddRequestにマッピングできるかチェック
let requestBody: TaskAddRequest;
try {
requestBody = req.body;
if (!requestBody) {
res.status(400).json({
message: 'リクエストボディが空です'
});
return;
}
// TODO: 共通化
task.display_name = body.displayName;
task.reward = body.reward;
task.home_group_id = req.user.claims.home_group_id;
createTask(task)
.then((task: Task) => {
res.status(201).json(task);
})
.catch((err) => {
res.status(500).json({
message: 'エラーが発生しました',
error: err
});
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(task)
.then((task: Task) => {
res.status(201).json(task);
})
.catch((err) => {
res.status(500).json({
message: 'エラーが発生しました',
error: err
});
});
});
router.get('/:taskId', (req, res) => {

View File

@ -1,5 +1,5 @@
import { PrismaPromise, Task, TaskCompletion } from "@prisma/client";
import { TaskResponse, TaskListResponse } from "@src/models/Task";
import { TaskResponse, TaskListResponse, TaskAddRequest } from "@src/models/Task";
import prisma from "@src/prisma";
async function getTasks(homeGroupId: string): Promise<TaskListResponse> {
@ -61,8 +61,14 @@ function getTask(taskId: string): PrismaPromise<Task | null> {
});
}
function createTask(task: Task): PrismaPromise<Task> {
return prisma.task.create({ // TODO: Validate task
function createTask(taskAddRequset: TaskAddRequest, homeGroupId: string): PrismaPromise<Task> {
const task = { // TODO: 明示
display_name: taskAddRequset.name,
reward: taskAddRequset.reward,
home_group_id: homeGroupId
};
return prisma.task.create({
data: task
});
}