Balance-Book 개발기 (5) - 루틴 점검 백엔드 API 개발
Balance-Book 개발기 (5) - 루틴 점검 백엔드 API 개발
작업 개요
루틴 점검 기능을 위한 백엔드 API를 개발했습니다.
주요 기능
- 기준 달력 테이블(
TBL_CALENDAR_DATES
)과 루틴 점검 테이블(TBL_ROUTINE_CHECK
) 조인을 통해 날짜별 점검 상태 조회 - 사용자별 루틴 템플릿 대상으로 조회
주요 구현 내용
1. Controller 구현
/api/routine/calendar
엔드포인트 생성startDate
,endDate
,userId
를 쿼리스트링으로 받아서 점검 현황 응답- 서비스 클래스에서 날짜 목록 + 체크 내역을 조합하여 반환
1
2
3
4
5
6
[HttpGet("calendar")]
public async Task<IActionResult> GetRoutineCalendar([FromQuery] DateTime startDate, [FromQuery] DateTime endDate, [FromQuery] string userId)
{
var result = await _routineService.GetRoutineCheckCalendarAsync(startDate, endDate, userId);
return Ok(result);
}
2. Service 로직
- 사용자별 활성 템플릿 ID 목록 조회
- 해당 템플릿의 루틴 점검 내역 필터링
TBL_CALENDAR_DATE
기준 날짜 목록과 JOIN하여 상태 병합
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public async Task<IEnumerable<RoutineCheckCalendarDto>> GetRoutineCheckCalendarAsync(DateTime startDate, DateTime endDate, String userId)
{
var result = calendarDates
.GroupJoin(
routineChecks,
cd => cd.CalDate.Date,
rc => rc.CheckTime.Date,
(cd, rcGroup) => new RoutineCheckCalendarDto(
cd.CalDate,
cd.DayOfWeek,
rcGroup.Select(rc => new RoutineCheckDto(
rc.TemplateId,
rc.Status,
rc.CheckTime.Date
)).ToList()
)
).ToList();
return result;
}
3. DTO 설계
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using BalanceBook.Models;
namespace BalanceBook.Dtos
{
public record RoutineCheckDto(
string TemplateId,
string Status,
DateTime CheckTime
);
public record RoutineCheckCalendarDto(
DateTime Date,
string DayOfWeek,
IReadOnlyList<RoutineCheckDto> RoutineChecks
);
}
API 요청&응답 예시
요청 URL: http://localhost:5000/api/routine/calendar?startDate=20250608&endDate=20250610
[
{
"date": "2025-06-08T00:00:00",
"dayOfWeek": "SUN",
"routineChecks": [
{
"templateId": "T100",
"status": "PROG",
"checkTime": "2025-06-08T00:00:00"
}
]
},
{
"date": "2025-06-09T00:00:00",
"dayOfWeek": "MON",
"routineChecks": []
},
{
"date": "2025-06-10T00:00:00",
"dayOfWeek": "TUE",
"routineChecks": []
}
]
- 2025-06-08 체크결과 있는 경우
향후 계획
- 백엔드 배포 환경에 OCI DB 연동 설정
- 프론트 UI 연결
This post is licensed under CC BY 4.0 by the author.