Skip to content

Commit 4de2027

Browse files
committed
fix(today_schedule): 요약 API에서 WorkLogService.getTodaySchedules()를 재사용해서 집계 => 같은 데이터 소스 쓰게 수정
1 parent 6eb1d42 commit 4de2027

1 file changed

Lines changed: 13 additions & 43 deletions

File tree

Lines changed: 13 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,28 @@
1-
import WorkRepository from '../repository/work_repository';
1+
import WorkLogService from './work_log_service';
2+
import { uuidToBin } from '../util/uuid';
23
import { TodayWorkSummaryResponse } from '../DTO/alba_schedule_dto';
34

45
/**
5-
* // 오늘의 근무 요약 정보 조회
6-
* // 오늘 예정된 근무 개수, 총 근무 시간, 예상 수입 계산
7-
* @param userId // 사용자 UUID 문자열
8-
* @returns // 오늘의 근무 요약 응답 DTO
6+
* 오늘의 근무 요약 정보 조회
7+
* user_work_log 기반으로 집계하여 오늘의 근무 리스트 API와 동일한 데이터 소스 사용
8+
* @param userId - 사용자 UUID 문자열
9+
* @returns 오늘의 근무 요약 응답 DTO
910
*/
11+
export const GET_TODAY_WORK_SUMMARY = async (userId: string): Promise<TodayWorkSummaryResponse> => {
12+
const userIdBuffer = uuidToBin(userId);
13+
const { schedules } = await WorkLogService.getTodaySchedules(userIdBuffer);
1014

11-
export const GET_TODAY_WORK_SUMMARY = async ( userId: string,): Promise<TodayWorkSummaryResponse> => {
12-
// == 오늘 요일 구하기 = > (MON, TUE, WED, THU, FRI, SAT, SUN) ==
13-
const todayDayOfWeek = GET_TODAY_DAY_OF_WEEK();
14-
15-
// == Repository에서 오늘의 근무 스케줄 조회 ==
16-
const works = await WorkRepository.findTodayWorks(userId, todayDayOfWeek);
17-
18-
// == 총 근무 시간 및 예상 수입 계산 ==
1915
let totalWorkMinutes = 0;
2016
let expectedIncome = 0;
2117

22-
for (const work of works) {
23-
// 근무 시간 계산 (분 단위)
24-
const minutes = CALCULATE_WORK_MINUTES(work.start_time, work.end_time);
25-
26-
totalWorkMinutes += minutes;
27-
// 예상 수입 = (근무 시간 / 60) * 시급, 소수점 버림
28-
expectedIncome += Math.floor((minutes / 60) * work.hourly_wage);
18+
for (const s of schedules) {
19+
totalWorkMinutes += Math.round(s.workHours * 60);
20+
expectedIncome += s.totalWage;
2921
}
3022

31-
// == 응답 DTO 반환 ==
3223
return {
33-
workCount: works.length,
24+
workCount: schedules.length,
3425
totalWorkMinutes,
3526
expectedIncome,
3627
};
3728
};
38-
39-
// ===== Helper Functions =====
40-
41-
/**
42-
* 오늘 요일을 DB enum 형식으로 반환
43-
* @returns 요일 문자열 (MON, TUE, WED, THU, FRI, SAT, SUN)
44-
*/
45-
const GET_TODAY_DAY_OF_WEEK = (): string => {
46-
const dayMap = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];
47-
const today = new Date();
48-
return dayMap[today.getDay()];
49-
};
50-
51-
/**
52-
* 두 시간 사이의 근무 시간을 분 단위로 계산
53-
* @param start - 근무 시작 시간
54-
* @param end - 근무 종료 시간
55-
* @returns 근무 시간 (분)
56-
*/
57-
const CALCULATE_WORK_MINUTES = (start: Date, end: Date): number =>
58-
Math.max(0, (end.getTime() - start.getTime()) / 60000);

0 commit comments

Comments
 (0)