Skip to content

Commit

Permalink
Merge pull request #35 from TEAM-ITERVIEW/#34
Browse files Browse the repository at this point in the history
[feat] 면접 리스트 조회 API
  • Loading branch information
cha2y0ung authored Mar 29, 2024
2 parents 6323c28 + 35d97b9 commit 78aa9d1
Show file tree
Hide file tree
Showing 9 changed files with 131 additions and 9 deletions.
4 changes: 2 additions & 2 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ model Interview {
id Int @id @default(autoincrement())
userId Int @unique
subjectId Int @unique
startDateTime String
endDateTime String
startDateTime DateTime @db.Time(6)
endDateTime DateTime @db.Time(6)
questionNum Int?
score Int?
otherFeedback String?
Expand Down
23 changes: 23 additions & 0 deletions src/controller/historyController.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Request, Response, NextFunction } from 'express';
import { message, statusCode } from '../module/constant';
import { success } from '../module/constant/utils';
import { historyService } from '../service';

const getInterviewList = async (req: Request, res: Response, next: NextFunction) => {
const refreshToken = req.body;
const {sortNum} = req.params;

try {
const data = await historyService.getInterviewList(refreshToken, +sortNum);

return res
.status(statusCode.CREATED)
.send(success(statusCode.CREATED, message.GET_INTERVIEWLIST_SUCCESS, data));
} catch (error) {
next(error);
}
};

export default {
getInterviewList,
};
3 changes: 2 additions & 1 deletion src/controller/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export { default as interviewController } from './interviewController';
export { default as userController } from './userController';
export { default as userController } from './userController';
export { default as historyController } from './historyController';
1 change: 1 addition & 0 deletions src/module/constant/responseMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ export default {
UPDATE_USERINFO_SUCCESS: "프로필 수정 성공",
END_INTERVIEW_SUCCESS: "인터뷰 종료 성공",
FIRST_RESULT_INTERVIEW_SUCCESS: "첫번째 인터뷰 결과 조회 성공",
GET_INTERVIEWLIST_SUCCESS: "면접 기록 리스트 조회 성공",
};
18 changes: 18 additions & 0 deletions src/router/historyRouter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Router } from 'express';
import { body, header, param } from 'express-validator';
import { historyController } from '../controller';
import errorValidator from '../middleware/error/errorValidator';

const router: Router = Router();

router.get(
'/:sortNum',
[
param('sortNum'),
body('refreshToken').notEmpty(),
],
errorValidator,
historyController.getInterviewList,
);

export default router;
2 changes: 2 additions & 0 deletions src/router/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { Router } from "express";
import interviewRouter from './interviewRouter';
import userRouter from "./userRouter";
import historyRouter from "./historyRouter";

const router: Router = Router();

router.use('/interview', interviewRouter);
router.use('/accounts', userRouter);
router.use('/history', historyRouter);

export default router;
71 changes: 71 additions & 0 deletions src/service/historyService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { PrismaClient } from '@prisma/client';
import errorGenerator from '../middleware/error/errorGenerator';
import { message, statusCode } from '../module/constant';
const prisma = new PrismaClient();

const getIntervewDetails = async (refreshToken: string) => {
const findUserId = await prisma.user.findFirst({
where: {
refreshToken: refreshToken
},
select: {
id: true,
}
});
const findInterview = await prisma.interview.findMany({
where: {
userId: findUserId!.id
},
select: {
id: true,
subjectId: true,
startDateTime: true,
endDateTime: true,
title: true,
score: true,
questionNum: true,
}
});
const interviewDetails = await Promise.all(findInterview.map(async (interview) => {
const subject = await prisma.subject.findUnique({
where: {
id: interview.subjectId
},
select: {
subjectText: true
}
});

const timeInSeconds = (interview.endDateTime.getTime() - interview.startDateTime.getTime()) / 1000;

return {
...interview,
subjectText: subject?.subjectText,
time: timeInSeconds
};
}));

return interviewDetails;
}

const getInterviewList = async (refreshToken: string, sortNum: number) => {
try {
let interviewList = await getIntervewDetails(refreshToken);
if (sortNum === 1) {
interviewList.sort((a, b) => b.startDateTime.getTime() - a.startDateTime.getTime());
} else if (sortNum === 2) {
interviewList.sort((a, b) => (b.score || 0) - (a.score || 0));
} else if (sortNum === 3) {
interviewList.sort((a, b) => (a.score || 0) - (b.score || 0));
} else {
interviewList
}
return { data: { interviewList } };
} catch(error) {
throw error;
}
};

export default {
getInterviewList,
};
3 changes: 2 additions & 1 deletion src/service/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export { default as interviewService } from './interviewService';
export { default as userService } from './userService';
export { default as userService } from './userService';
export { default as historyService } from './historyService';
15 changes: 10 additions & 5 deletions src/service/userService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const accessUserInfo = async (refreshToken: string) => {
try {
const userInfo = await prisma.user.findFirst({
where: {
refreshToken: refreshToken,
refreshToken: refreshToken
},
select: {
id: true,
Expand All @@ -25,16 +25,21 @@ const accessUserInfo = async (refreshToken: string) => {

const updateUserInfo = async (refreshToken: string, themeColor: string) => {
try {
const userInfo = await prisma.user.update({
const findUserId = await prisma.user.findFirst({
where: {
refreshToken: refreshToken,
},
select: {
id: true,
userName: true,
pictureURL: true,
}

})
const userInfo = await prisma.user.update({
where: {
id: findUserId?.id
},
data: {
themeColor: themeColor,
refreshToken: true,
}
});
return userInfo;
Expand Down

0 comments on commit 78aa9d1

Please sign in to comment.