프로젝트 기간: 2025.5.15 ~ 2025.06.30
핵심 기능:
풀스택
[백엔드]
NestJs life cycle에 대한 이해와 적용해보기
middleware, guard, interceptor, pipe, exeption filter 등
auth API, OAuth 소셜 로그인 구현 ( Google, Kakao )
고객이 견적 요청을 생성하는 API
기사가 받은 요청을 조회하는 API
고객이 받았던 견적(history)를 조회하는 API
피그마 UI 상 고객이 요청한 견적 요청과 그에 대해 기사들이 보낸 견적 목록들의 정보가 함께 전달되어야해서 응답 Dto를 만들고 EstimateRequest(견적 요청) 응답 내에 견적 제안 목록을 estimateOffers[] 배열로 추가했습니다.
//응답 형태
{
"items": [
{
"requestId": "6c833fd5-86ad-4219-bb27-27c483284bdb",
"requestStatus": "COMPLETED",
"createdAt": "2025-06-17T21:44:22.153Z",
"moveType": "HOME",
"moveDate": "2025-06-17T00:00:00.000Z",
"isTargeted": false,
"customerName": "정고객",
"offerCount": 2,
"estimateOffers": [
{
"offerId": "029f6c72-5668-41cc-823e-2224efe0d9ef",
"price": 200000,
"status": "PENDING",
"isTargeted": false,
"isConfirmed": false,
"confirmedAt": null,
"moveDate": "2025-06-17T00:00:00.000Z",
"moveType": "HOME",
"createdAt": "2025-06-17T22:21:55.613Z",
"fromAddress": {
"sido": "부산광역시",
"sidoEnglish": "Busan",
"sigungu": "해운대구",
"roadAddress": "센텀동로 45",
"fullAddress": "부산광역시 해운대구 센텀동로 45"
},
"toAddress": {
"sido": "제주",
"sidoEnglish": "Jeju",
"sigungu": "제주시",
"roadAddress": "노형로 789",
"fullAddress": "제주 제주시 노형로 789"
},
"mover": {
"moverId": "9d6f9692-4338-4a42-b9c2-88fb0208f5fd",
"nickname": "무빙천사",
"imageUrl": "<https://cdn.jsdelivr.net/gh/faker-js/assets-person-portrait/male/512/1.jpg>",
"experience": 6,
"intro": "신속한 이사를 도와드립니다.",
"rating": 0,
"reviewCount": "0",
"likeCount": "1",
"isLiked": false,
"confirmedCount": "0"
}
},
. . .
],
"hasNext": false,
"nextCursor": null,
"totalCount": 2
}
고객이 지정 견적 기사를 추가하는 API
견적 요청 취소 API (추가 API)
이사 완료 처리 API (추가 API)
Sentry 도입 및 디스코드 웹훅 연결 세팅
Jest/Supertest 를 이용한 실제 API 흐름을 자동화하는 e2e 테스트 시나리오를 구현해 시드 데이터 생성을 자동화
커서 기반 페이지네이션 구현 (쿼리빌더 사용)
Cron 스케줄러 : 매일 자정에 Cron이 이사일이 지난 건들에 대해 완료 확인 알림을 전송하거나, 이사일이 일주일이 지나도록 고객이 이사완료처리를 않을 경우, 크론이 자동으로 완료처리를 하고 확정되지 않은 건들은 expired 되도록 처리
[프론트]