|
1 | | -import WorkRepository from '../repository/work_repository'; |
| 1 | +import WorkLogService from './work_log_service'; |
| 2 | +import { uuidToBin } from '../util/uuid'; |
2 | 3 | import { TodayWorkSummaryResponse } from '../DTO/alba_schedule_dto'; |
3 | 4 |
|
4 | 5 | /** |
5 | | - * // 오늘의 근무 요약 정보 조회 |
6 | | - * // 오늘 예정된 근무 개수, 총 근무 시간, 예상 수입 계산 |
7 | | - * @param userId // 사용자 UUID 문자열 |
8 | | - * @returns // 오늘의 근무 요약 응답 DTO |
| 6 | + * 오늘의 근무 요약 정보 조회 |
| 7 | + * user_work_log 기반으로 집계하여 오늘의 근무 리스트 API와 동일한 데이터 소스 사용 |
| 8 | + * @param userId - 사용자 UUID 문자열 |
| 9 | + * @returns 오늘의 근무 요약 응답 DTO |
9 | 10 | */ |
| 11 | +export const GET_TODAY_WORK_SUMMARY = async (userId: string): Promise<TodayWorkSummaryResponse> => { |
| 12 | + const userIdBuffer = uuidToBin(userId); |
| 13 | + const { schedules } = await WorkLogService.getTodaySchedules(userIdBuffer); |
10 | 14 |
|
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 | | - // == 총 근무 시간 및 예상 수입 계산 == |
19 | 15 | let totalWorkMinutes = 0; |
20 | 16 | let expectedIncome = 0; |
21 | 17 |
|
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; |
29 | 21 | } |
30 | 22 |
|
31 | | - // == 응답 DTO 반환 == |
32 | 23 | return { |
33 | | - workCount: works.length, |
| 24 | + workCount: schedules.length, |
34 | 25 | totalWorkMinutes, |
35 | 26 | expectedIncome, |
36 | 27 | }; |
37 | 28 | }; |
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