1
1
package com .tnt .application .pt ;
2
2
3
+ import static com .tnt .common .error .model .ErrorMessage .PT_LESSON_DUPLICATE_TIME ;
3
4
import static com .tnt .common .error .model .ErrorMessage .PT_TRAINEE_ALREADY_EXIST ;
4
5
import static com .tnt .common .error .model .ErrorMessage .PT_TRAINER_TRAINEE_ALREADY_EXIST ;
5
6
import static com .tnt .common .error .model .ErrorMessage .PT_TRAINER_TRAINEE_NOT_FOUND ;
6
7
7
8
import java .time .LocalDate ;
9
+ import java .time .LocalDateTime ;
8
10
import java .util .LinkedHashMap ;
9
11
import java .util .List ;
10
12
import java .util .stream .Collectors ;
25
27
import com .tnt .domain .trainer .Trainer ;
26
28
import com .tnt .dto .trainer .ConnectWithTrainerDto ;
27
29
import com .tnt .dto .trainer .request .ConnectWithTrainerRequest ;
30
+ import com .tnt .dto .trainer .request .CreatePtLessonRequest ;
28
31
import com .tnt .dto .trainer .response .ConnectWithTraineeResponse ;
32
+ import com .tnt .dto .trainer .response .GetActiveTraineesResponse ;
33
+ import com .tnt .dto .trainer .response .GetActiveTraineesResponse .TraineeDto ;
29
34
import com .tnt .dto .trainer .response .GetCalendarPtLessonCountResponse ;
30
35
import com .tnt .dto .trainer .response .GetCalendarPtLessonCountResponse .CalendarPtLessonCount ;
31
36
import com .tnt .dto .trainer .response .GetPtLessonsOnDateResponse ;
32
37
import com .tnt .dto .trainer .response .GetPtLessonsOnDateResponse .Lesson ;
33
38
import com .tnt .infrastructure .mysql .repository .pt .PtLessonRepository ;
34
39
import com .tnt .infrastructure .mysql .repository .pt .PtLessonSearchRepository ;
35
40
import com .tnt .infrastructure .mysql .repository .pt .PtTrainerTraineeRepository ;
41
+ import com .tnt .infrastructure .mysql .repository .pt .PtTrainerTraineeSearchRepository ;
36
42
37
43
import lombok .RequiredArgsConstructor ;
38
44
@@ -46,6 +52,7 @@ public class PtService {
46
52
private final PtTrainerTraineeRepository ptTrainerTraineeRepository ;
47
53
private final PtLessonRepository ptLessonRepository ;
48
54
private final PtLessonSearchRepository ptLessonSearchRepository ;
55
+ private final PtTrainerTraineeSearchRepository ptTrainerTraineeSearchRepository ;
49
56
50
57
@ Transactional
51
58
public ConnectWithTrainerDto connectWithTrainer (Long memberId , ConnectWithTrainerRequest request ) {
@@ -128,6 +135,37 @@ public GetCalendarPtLessonCountResponse getCalendarPtLessonCount(Long memberId,
128
135
return new GetCalendarPtLessonCountResponse (counts );
129
136
}
130
137
138
+ @ Transactional (readOnly = true )
139
+ public GetActiveTraineesResponse getActiveTrainees (Long memberId ) {
140
+ Trainer trainer = trainerService .getTrainerWithMemberId (memberId );
141
+
142
+ List <Trainee > trainees = ptTrainerTraineeSearchRepository .findAllTrainees (trainer .getId ());
143
+ List <TraineeDto > traineeDto = trainees .stream ()
144
+ .map (trainee -> new TraineeDto (trainee .getId (), trainee .getMember ().getName ()))
145
+ .toList ();
146
+
147
+ return new GetActiveTraineesResponse (traineeDto );
148
+ }
149
+
150
+ @ Transactional
151
+ public void addPtLesson (Long memberId , CreatePtLessonRequest request ) {
152
+ trainerService .validateTrainerRegistration (memberId );
153
+
154
+ PtTrainerTrainee ptTrainerTrainee = getPtTrainerTraineeWithTraineeId (request .traineeId ());
155
+
156
+ // 트레이너의 기존 pt 수업중에 중복되는 시간대가 있는지 확인
157
+ validateLessonTime (ptTrainerTrainee , request .start (), request .end ());
158
+
159
+ PtLesson ptLesson = PtLesson .builder ()
160
+ .ptTrainerTrainee (ptTrainerTrainee )
161
+ .lessonStart (request .start ())
162
+ .lessonEnd (request .end ())
163
+ .memo (request .memo ())
164
+ .build ();
165
+
166
+ ptLessonRepository .save (ptLesson );
167
+ }
168
+
131
169
public boolean isPtTrainerTraineeExistWithTrainerId (Long trainerId ) {
132
170
return ptTrainerTraineeRepository .existsByTrainerIdAndDeletedAtIsNull (trainerId );
133
171
}
@@ -165,4 +203,10 @@ private void validateIfNotConnected(Long trainerId, Long traineeId) {
165
203
throw new NotFoundException (PT_TRAINER_TRAINEE_NOT_FOUND );
166
204
}
167
205
}
206
+
207
+ private void validateLessonTime (PtTrainerTrainee ptTrainerTrainee , LocalDateTime start , LocalDateTime end ) {
208
+ if (ptLessonSearchRepository .existsByStartAndEnd (ptTrainerTrainee , start , end )) {
209
+ throw new ConflictException (PT_LESSON_DUPLICATE_TIME );
210
+ }
211
+ }
168
212
}
0 commit comments