Skip to content
This repository has been archived by the owner on Dec 27, 2024. It is now read-only.

Commit

Permalink
refactor controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
taga3s committed Nov 1, 2024
1 parent 66cef13 commit 0e01cda
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 101 deletions.
24 changes: 6 additions & 18 deletions src/controller/quest/quest_controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ export const createQuestController = async (req: Request<{}, {}, CreateQuestRequ

try {
const outputDTO = await createQuestService(inputDTO);
const questBaseResponse = toQuestBaseResponse(outputDTO);
const response: CreateQuestResponse = {
status: "ok",
...questBaseResponse,
...toQuestBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -62,11 +61,9 @@ export const listQuestsController = async (req: Request, res: Response) => {

try {
const outputDTO = await listQuestsService(inputDTO);

const questBaseResponses = outputDTO.quests.map((quest: Quest) => toQuestBaseResponse(quest));
const response: ListQuestsResponse = {
status: "ok",
quests: questBaseResponses,
quests: outputDTO.quests.map((quest: Quest) => toQuestBaseResponse(quest)),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -84,7 +81,6 @@ export const deleteQuestController = async (req: Request<{ id: string }>, res: R

try {
await deleteQuestService(inputDTO);

const response: DeleteQuestResponse = { status: "ok" };
res.status(200).json(response);
} catch (err) {
Expand Down Expand Up @@ -114,11 +110,9 @@ export const updateQuestController = async (req: Request<{ id: string }, {}, Upd

try {
const outputDTO = await updateQuestService(inputDTO);

const questBaseResponse = toQuestBaseResponse(outputDTO);
const response: UpdateQuestResponse = {
status: "ok",
...questBaseResponse,
...toQuestBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -136,11 +130,9 @@ export const startQuestController = async (req: Request<{ id: string }>, res: Re

try {
const outputDTO = await startQuestService(inputDTO);

const questBaseResponse = toQuestBaseResponse(outputDTO);
const response: StartQuestResponse = {
status: "ok",
...questBaseResponse,
...toQuestBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -159,11 +151,9 @@ export const finishQuestController = async (req: Request<{ id: string }>, res: R

try {
const outputDTO = await finishQuestService(inputDTO);

const questBaseResponse = toQuestBaseResponse(outputDTO);
const response: FinishQuestResponse = {
status: "ok",
...questBaseResponse,
...toQuestBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -182,11 +172,9 @@ export const forceFinishQuestController = async (req: Request<{ id: string }>, r

try {
const outputDTO = await forceFinishQuestService(inputDTO);

const questBaseResponse = toQuestBaseResponse(outputDTO);
const response: ForceFinishQuestResponse = {
status: "ok",
...questBaseResponse,
...toQuestBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand Down
24 changes: 24 additions & 0 deletions src/controller/tag/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,27 @@ export type UpdateTagResponse = schemaHelper.ResponseData<"/tags/:id", "patch">;
export type ListTagsResponse = schemaHelper.ResponseData<"/tags", "get">;

export type DeleteTagResponse = schemaHelper.ResponseData<"/tags/:id", "delete">;

type TagBaseResponse = {
id: string;
name: string;
color: string;
created_at: Date;
updated_at: Date;
};

export const toTagBaseResponse = (obj: {
id: string;
name: string;
color: string;
createdAt: Date;
updatedAt: Date;
}): TagBaseResponse => {
return {
id: obj.id,
name: obj.name,
color: obj.color,
created_at: obj.createdAt,
updated_at: obj.updatedAt,
};
};
26 changes: 10 additions & 16 deletions src/controller/tag/tag_controller.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { Request, Response } from "express";
import { CreateTagRequest, UpdateTagRequest } from "./request";
import { CreateTagResponse, UpdateTagResponse, DeleteTagResponse, ListTagsResponse } from "./response";
import {
CreateTagResponse,
UpdateTagResponse,
DeleteTagResponse,
ListTagsResponse,
toTagBaseResponse,
} from "./response";
import { getUserIdFromToken } from "../../pkg/jwt/jwt";
import { HttpError } from "../../utils/httpError";
import { Tag } from "../../model/tag/types";
Expand All @@ -14,15 +20,7 @@ export const listTagsController = async (req: Request, res: Response) => {
const outputDTO = await listTagsService(inputDTO);
const response: ListTagsResponse = {
status: "ok",
tags: outputDTO.tags?.map((tag: Tag) => {
return {
id: tag.id,
name: tag.name,
color: tag.color,
created_at: tag.createdAt,
updated_at: tag.updatedAt,
};
}),
tags: outputDTO.tags?.map((tag: Tag) => toTagBaseResponse(tag)),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -46,9 +44,7 @@ export const createTagController = async (req: Request<{}, {}, CreateTagRequest>
const outputDTO = await createTagService(inputDTO);
const response: CreateTagResponse = {
status: "ok",
id: outputDTO.id,
name: outputDTO.name,
color: outputDTO.color,
...toTagBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand Down Expand Up @@ -88,9 +84,7 @@ export const updateTagController = async (req: Request<{ id: string }, {}, Updat
const outputDTO = await updateTagService(inputDTO);
const response: UpdateTagResponse = {
status: "ok",
id: outputDTO.id,
name: outputDTO.name,
color: outputDTO.color,
...toTagBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand Down
24 changes: 24 additions & 0 deletions src/controller/user/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,27 @@ export type GetLoginUserResponse = schemaHelper.ResponseData<"/users/me", "get">
export type UpdateLoginUserResponse = schemaHelper.ResponseData<"/users/me", "patch">;

export type DeleteUserResponse = schemaHelper.ResponseData<"/users/me", "delete">;

type UserBaseResponse = {
name: string;
email: string;
exp: number;
level: number;
imageUrl: string;
};

export const toUserBaseResponse = (user: {
name: string;
email: string;
exp: number;
level: number;
imageUrl: string;
}): UserBaseResponse => {
return {
name: user.name,
email: user.email,
exp: user.exp,
level: user.level,
imageUrl: user.imageUrl,
};
};
32 changes: 10 additions & 22 deletions src/controller/user/user_controller.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import { Request, Response } from "express";
import { generateToken, getUserIdFromToken, getUserIsAuthenticated } from "../../pkg/jwt/jwt";
import { generateToken, getUserIdFromToken } from "../../pkg/jwt/jwt";
import { HttpError } from "../../utils/httpError";
import { AuthRequest, UpdateLoginUserRequest } from "./request";
import { AuthResponse, GetLoginUserResponse, UpdateLoginUserResponse, DeleteUserResponse } from "./response";
import {
AuthResponse,
GetLoginUserResponse,
UpdateLoginUserResponse,
DeleteUserResponse,
toUserBaseResponse,
} from "./response";
import { authService, deleteUserService, getLoginUserService, updateLoginUserService } from "../../service/user";

// 認証
Expand Down Expand Up @@ -31,16 +37,6 @@ export const authController = async (req: Request<{}, {}, AuthRequest>, res: Res
}
};

// 認可状態確認
export const authCheckController = async (req: Request, res: Response) => {
try {
const isAuthenticated = getUserIsAuthenticated(req.cookies.access_token || "");
res.status(200).json({ status: "ok", isAuthenticated: isAuthenticated });
} catch {
res.status(500).json({ status: "error", message: "Internal server error." });
}
};

// ログアウト
export const logoutController = async (req: Request, res: Response) => {
res.cookie("access_token", "");
Expand All @@ -56,11 +52,7 @@ export const getLoginUserController = async (req: Request, res: Response) => {
const outputDTO = await getLoginUserService(inputDTO);
const response: GetLoginUserResponse = {
status: "ok",
name: outputDTO.name,
email: outputDTO.email,
exp: outputDTO.exp,
level: outputDTO.level,
imageUrl: outputDTO.imageUrl,
...toUserBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand All @@ -85,11 +77,7 @@ export const updateUserController = async (req: Request<{}, {}, UpdateLoginUserR
const outputDTO = await updateLoginUserService(inputDTO);
const response: UpdateLoginUserResponse = {
status: "ok",
name: outputDTO.name,
email: outputDTO.email,
exp: outputDTO.exp,
level: outputDTO.level,
imageUrl: outputDTO.imageUrl,
...toUserBaseResponse(outputDTO),
};
res.status(200).json(response);
} catch (err) {
Expand Down
42 changes: 42 additions & 0 deletions src/controller/weeklyReport/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,45 @@ export type GenerateWeeklyReportFeedBackResponse = schemaHelper.ResponseData<
"/weekly-reports/feedback/:weeklyReportId",
"post"
>;

type WeeklyReportBaseResponse = {
id: string;
completed_quests: number;
failed_quests: number;
completed_percentage: number;
streak_days: number;
completed_quests_each_day: number[];
failed_quests_each_day: number[];
start_date: string;
end_date: string;
user_id: string;
feedback: string;
};

export const toWeeklyReportBaseResponse = (obj: {
id: string;
completedQuests: number;
failedQuests: number;
completedPercentage: number;
streakDays: number;
completedQuestsEachDay: number[];
failedQuestsEachDay: number[];
startDate: string;
endDate: string;
userId: string;
feedBack: string;
}): WeeklyReportBaseResponse => {
return {
id: obj.id,
completed_quests: obj.completedQuests,
failed_quests: obj.failedQuests,
completed_percentage: obj.completedPercentage,
streak_days: obj.streakDays,
completed_quests_each_day: obj.completedQuestsEachDay,
failed_quests_each_day: obj.failedQuestsEachDay,
start_date: obj.startDate,
end_date: obj.endDate,
user_id: obj.userId,
feedback: obj.feedBack,
};
};
45 changes: 4 additions & 41 deletions src/controller/weeklyReport/weekly_report_controller.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import { Request, Response } from "express";
import {
ListWeeklyReportResponse,
GenerateWeeklyReportFeedBackResponse,
GetWeeklyReportFeedBackResponse,
} from "./response";
import { ListWeeklyReportResponse, GenerateWeeklyReportFeedBackResponse, toWeeklyReportBaseResponse } from "./response";
import { getUserIdFromToken } from "../../pkg/jwt/jwt";
import { HttpError } from "../../utils/httpError";
import { WeeklyReport } from "../../model/weeklyReport/types";
import { listWeeklyReportsService } from "../../service/weeklyReport/list_weekly_reports_service";
import { generateWeeklyReportFeedBackService } from "../../service/weeklyReport";
import { getWeeklyReportFeedBackService } from "../../service/weeklyReport/get_weekly_report_feedback_service";

// ユーザの所持するすべての週次レポートを取得
export const listWeeklyReportController = async (req: Request, res: Response) => {
Expand All @@ -19,21 +14,9 @@ export const listWeeklyReportController = async (req: Request, res: Response) =>
const outputDTO = await listWeeklyReportsService({ userId: userId });
const response: ListWeeklyReportResponse = {
status: "ok",
weeklyReports: outputDTO.weeklyReports?.map((weeklyReport: WeeklyReport) => {
return {
id: weeklyReport.id,
completed_quests: weeklyReport.completedQuests,
failed_quests: weeklyReport.failedQuests,
completed_percentage: weeklyReport.completedPercentage,
streak_days: weeklyReport.streakDays,
completed_quests_each_day: weeklyReport.completedQuestsEachDay,
failed_quests_each_day: weeklyReport.failedQuestsEachDay,
start_date: weeklyReport.startDate,
end_date: weeklyReport.endDate,
user_id: weeklyReport.userId,
feedback: weeklyReport.feedBack,
};
}),
weeklyReports: outputDTO.weeklyReports?.map((weeklyReport: WeeklyReport) =>
toWeeklyReportBaseResponse(weeklyReport),
),
};
res.status(200).json(response);
} catch (err) {
Expand Down Expand Up @@ -66,23 +49,3 @@ export const generateWeeklyReportFeedBackController = async (
res.status(500).json({ status: "error", message: "Internal server error." });
}
};

// 週次レポートの要約を取得
export const getWeeklyReportFeedBackController = async (req: Request<{ weeklyReportId: string }>, res: Response) => {
const weeklyReportId = req.params.weeklyReportId;
try {
const summary = await getWeeklyReportFeedBackService({ weeklyReportId: weeklyReportId });

const response: GetWeeklyReportFeedBackResponse = {
status: "ok",
feedBack: summary,
};
res.status(200).json(response);
} catch (err) {
if (err instanceof HttpError) {
res.status(err.statusCode).json({ status: "error", message: err.message });
return;
}
res.status(500).json({ status: "error", message: "Internal server error." });
}
};
2 changes: 0 additions & 2 deletions src/route/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { Router } from "express";
import { body } from "express-validator";
import {
authController,
authCheckController,
getLoginUserController,
logoutController,
updateUserController,
Expand All @@ -18,7 +17,6 @@ userRouter.post(
validate([body("id_token").isString().isLength({ min: 1 }).withMessage("必須項目です。")]),
authController,
);
userRouter.get("/authenticated", authCheckController);
userRouter.post("/logout", auth, logoutController);
userRouter.get("/me", auth, getLoginUserController);
userRouter.patch(
Expand Down
2 changes: 0 additions & 2 deletions src/route/weeklyReport.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { Router } from "express";
import {
listWeeklyReportController,
getWeeklyReportFeedBackController,
generateWeeklyReportFeedBackController,
} from "../controller/weeklyReport/weekly_report_controller";
import { auth } from "./middlewares/auth";

const weeklyReportRouter = Router();

weeklyReportRouter.get("/", auth, listWeeklyReportController);
weeklyReportRouter.get("/feedback/:weeklyReportId", auth, getWeeklyReportFeedBackController);
weeklyReportRouter.post("/feedback/:weeklyReportId", auth, generateWeeklyReportFeedBackController);

export { weeklyReportRouter };

0 comments on commit 0e01cda

Please sign in to comment.