오늘은 어제에 이어 내가 맡은 CRUD에 대해 나열하는 시간을 가져 보겠다.
우리는 화상으로 할 수 있는 면접 시스템이기 때문에 면접을 예약할 수 있는 CRUD가 필요하다.
기업 회원이 면접을 예약할 수 있는 와이어 프레임이다.
이걸 통해 우선 어떤 API를 설계 할 수 있을지 고민을 해보았다.
request
-req.body =
{
"interviewTopic" : "어떤 주제에 대한 면접인지",
"interviewTime" : "면접 시작 시간과 끝나는 시간",
"reservationDate" : "면접 년월일"
}
-response =
success
stauts(201)
{
"interviewTopic" : "어떤 주제에 대한 면접인지",
"interviewTime" : "면접 시작 시간과 끝나는 시간",
"reservationDate" : "면접 년월일"
}
err
stauts(404)
{
(error.message)
}
정도로 생각하고 API를 짜 보았다. 아직 스키마가 짜여진게 아무것도 없기 때문에 API를 만들었지만 뭔가 음... 뭔가 너무 허전하네....
안되겠다. 프론트에서 면접부분을 담당한 담당자분이랑 이야기해서 제대로 짜봐야겠다 !
그리고 프론트 팀원분과 이야기를 했는데 생각보다 긴시간 이야기하며 스키마를 짰고 꽤 깊고 상세하게 작성하게 되었다. 그 스키마 내용을 공유해보겠다.
const 기업별_면접일정 = [
{
기업명: "팀스파르타",
면접: [
{
// 자동 생성
interviewId: "12123saqw123",
createdAt: "2022-11-11 00:00:00 GMP",
updatedAt: "2022-11-11 00:00:00 GMP",
// 면접 예약: req: "__"로 표기
__interviewManager: "김르탄",
__interviewTime: {
start: "2022-11-11 00:00:00 GMP",
end: "2022-11-11 00:00:00 GMP",
},
__interviewTopic:
"2022년 웹개발 프론트엔드 주니어 (1~2년차) 3차 공개채용 면접(1차)",
__interviewOption: {
onMuted: true,
},
// 신규 면접 생성 시, default 값
interviewDone: false, // 진행 예정 면접과 이미 진행된 면접을 구분하기 위함
interviewUrl: {
isDone: false, // isDone이 true가 되면 링크가 활성화(접속 가능)되게 한다.
url: "${url}", // 활성화되지 않았으나 접속할 경우, 에러메세지 송출
},
interviewCancelMessage: "", // "면접 취소에 대한 상세한 사유 작성"
// 면접취소: "면접자의 개인 사정으로 인해 해당 면접이 취소됨",
interviewMembers: {
interviewer: [],
common: [],
}, // 처음에 null 값이나, 면접 진행 간 참석한 사람(id값 비교)을 객체로 넣어준다.
// 참석자: {
// 면접관: [김르탄, 김파탄], // 만일 여러면의 면접관이 들어올 경우, 면접관 배열에 push()
// 면접자: [홍길동1234, 김철수1324, 박혜리2222], // 면접자의 이름+핸드폰 번호 뒷자리 4개로 작성
// }
},
],
},
];
후후 이정도면 충분하겠죠 ?!!!
음 근데....와.... CRUD라서 쉽게 생각했는데... 생각보다 할게 너무너무 많구나 ^_^ 아이 신나
자.... 우리 시작해봅시다...
어... 어라 ? 아 맞다....지금 기업회원가입이랑 미들웨어가 없어서 ... res.locals 를 받아올 수 없네... 데헷 ⭐️
회원가입 파트한 팀원에게 한번 여쭤보았다.
팀원이 좋다는게 뭐겠는가 ! 협업! 협업 아니겠는가 ?!!! 나는 나의 일을 해야하니까 가볍게 3 layered 안하고 일단 다 때려박아서 테스트 해야징....
그렇게 나는 CRUD 장인처럼 순식간에 만들어내고 미들웨어도 팍팍 파송송 계란탁 ! 하여 테스트를 빠르게 진행하게 되었다. (훗날... 가볍게 생각했던 이 문제가 경로 문제로 번질줄은... 그 아무도 알지 못하였다고 한다....)
routes/reservation.routes
const express = require("express");
const router = express.Router();
const authCompanyMiddleware = require("../middleware/company_auth");
const ReservationController = require("../controller/reservation.controller");
const reservationController = new ReservationController();
router.post("/reservation", authCompanyMiddleware, reservationController.postReservation);
module.exports = router;
우선 3 레이어드로 나눠야하니까... 저렇게 Class 로 추상화하여 Instance로 실체화를 하였다.
그리고 어디보자... 이제 차근차근 작성해보면 되겠네...
3레이어드.... 내일 이시간에 우리 다시 나눠보자고 ...!