Skip to content

Commit 4b09775

Browse files
committed
Merge remote-tracking branch 'origin/main' into deployment
2 parents 0e2990d + 5361ed7 commit 4b09775

File tree

9 files changed

+56
-18
lines changed

9 files changed

+56
-18
lines changed

src/main/java/com/grepp/spring/app/controller/api/event/payload/request/CreateEventRequest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ public class CreateEventRequest {
2222

2323
@Schema(description = "이벤트 제목", example = "스터디 모임")
2424
@NotBlank(message = "이벤트 제목은 필수입니다.")
25-
@Size(max = 10, message = "이벤트 제목은 10자를 초과할 수 없습니다.")
25+
@Size(max = 20, message = "이벤트 제목은 10자를 초과할 수 없습니다.")
2626
private String title;
2727

2828
@Schema(description = "이벤트 설명", example = "매주 화요일 스터디 모임입니다.")
29-
@Size(max = 500, message = "이벤트 설명은 500자를 초과할 수 없습니다.")
29+
@Size(max = 50, message = "이벤트 설명은 50자를 초과할 수 없습니다.")
3030
private String description;
3131

3232
@Schema(description = "미팅 타입", example = "ONLINE", allowableValues = {"ONLINE", "OFFLINE"})

src/main/java/com/grepp/spring/app/controller/api/schedule/payload/request/CreateSchedulesRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class CreateSchedulesRequest {
1919
private LocalDateTime startTime;
2020
private LocalDateTime endTime;
2121

22-
@Size(max = 10, message = "일정 제목은 10자를 초과할 수 없습니다.")
22+
@Size(max = 20, message = "일정 제목은 20자를 초과할 수 없습니다.")
2323
private String scheduleName;
2424

2525
@Size(max = 50, message = "일정 설명은 50자를 초과할 수 없습니다.")

src/main/java/com/grepp/spring/app/model/event/entity/Event.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ private static void validateTitle(String title) {
8282
if (title == null || title.trim().isEmpty()) {
8383
throw new IllegalArgumentException("이벤트 제목은 필수입니다.");
8484
}
85-
if (title.length() > 10) {
86-
throw new IllegalArgumentException("이벤트 제목은 10자를 초과할 수 없습니다.");
85+
if (title.length() > 20) {
86+
throw new IllegalArgumentException("이벤트 제목은 20자를 초과할 수 없습니다.");
8787
}
8888
}
8989

src/main/java/com/grepp/spring/app/model/schedule/dto/ScheduleMembersDto.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@ public class ScheduleMembersDto {
2222
private String departLocationName;
2323
private Double latitude;
2424
private Double longitude;
25+
26+
// 어떤 장소에 투표했는지
27+
private Long VoteLocationId;
2528
}

src/main/java/com/grepp/spring/app/model/schedule/dto/ShowScheduleDto.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static ShowScheduleResponse fromDto(ShowScheduleDto dto) {
6868
.build();
6969
}
7070

71-
public static ShowScheduleDto fromEntity(MeetingType meetingType, Long event, Schedule schedule, List<ScheduleMember> scheduleMembers, List<Workspace> workspace) {
71+
public static ShowScheduleDto fromEntity(MeetingType meetingType, Long event, Schedule schedule, List<ScheduleMember> scheduleMembers, List<Workspace> workspace, List<Long> voteLocationId) {
7272

7373
ScheduleStatus scheduleStatus;
7474

@@ -80,6 +80,8 @@ public static ShowScheduleDto fromEntity(MeetingType meetingType, Long event, Sc
8080
scheduleStatus = ScheduleStatus.FIXED;
8181
}
8282

83+
84+
8385
List<ScheduleMembersDto> members = IntStream.range(0, scheduleMembers.size())
8486
.mapToObj(i-> new ScheduleMembersDto(
8587
scheduleMembers.get(i).getMember().getId(),
@@ -88,7 +90,8 @@ public static ShowScheduleDto fromEntity(MeetingType meetingType, Long event, Sc
8890
scheduleMembers.get(i).getRole(),
8991
scheduleMembers.get(i).getDepartLocationName(),
9092
scheduleMembers.get(i).getLatitude(),
91-
scheduleMembers.get(i).getLongitude()
93+
scheduleMembers.get(i).getLongitude(),
94+
voteLocationId.size() > i ? voteLocationId.get(i) : null
9295
))
9396
.collect(Collectors.toList());
9497

src/main/java/com/grepp/spring/app/model/schedule/dto/VoteMiddleLocationDto.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.grepp.spring.app.model.schedule.entity.Schedule;
55
import com.grepp.spring.app.model.schedule.entity.ScheduleMember;
66
import com.grepp.spring.app.model.schedule.entity.Vote;
7+
import com.grepp.spring.app.model.schedule.repository.ScheduleMemberRepository;
78
import lombok.Builder;
89
import lombok.Getter;
910
import lombok.Setter;
@@ -12,21 +13,27 @@
1213
@Setter
1314
@Builder
1415
public class VoteMiddleLocationDto {
15-
private ScheduleMember scheduleMember;
16+
// private ScheduleMember scheduleMember;
17+
private Long scheduleMemberId;
1618
private Location location;
1719
private Schedule schedule;
1820

19-
public static VoteMiddleLocationDto toDto(ScheduleMember scheduleMember, Location location, Schedule schedule) {
21+
public static VoteMiddleLocationDto toDto(Long scheduleMemberId, Location location, Schedule schedule) {
2022
return VoteMiddleLocationDto.builder()
21-
.scheduleMember(scheduleMember)
23+
.scheduleMemberId(scheduleMemberId)
2224
.location(location)
2325
.schedule(schedule)
2426
.build();
2527
}
2628

27-
public static Vote fromDto(VoteMiddleLocationDto dto) {
29+
public static Vote fromDto(VoteMiddleLocationDto dto,
30+
ScheduleMemberRepository scheduleMemberRepository) {
31+
32+
ScheduleMember scheduleMember = scheduleMemberRepository.findById(dto.getScheduleMemberId())
33+
.orElseThrow(() -> new IllegalArgumentException("ScheduleMember not found with ID: " + dto.getScheduleMemberId()));
2834
return Vote.builder()
29-
.scheduleMember(dto.getScheduleMember())
35+
// .scheduleMember(dto.getScheduleMember())
36+
.scheduleMember(scheduleMember)
3037
.location(dto.getLocation())
3138
.schedule(dto.getSchedule())
3239
.build();

src/main/java/com/grepp/spring/app/model/schedule/repository/VoteQueryRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,7 @@ public interface VoteQueryRepository extends JpaRepository<Vote, Long> {
1313

1414
@Query("select v from Vote v where v.scheduleMember.id = :scheduleMemberId")
1515
Vote findByScheduleMemberId(@Param("scheduleMemberId") Long scheduleMemberId);
16+
17+
@Query("select v.location.id from Vote v where v.schedule.id = :id")
18+
List<Long> findByScheduleIdAndMemberId(@Param("id") Long id);
1619
}

src/main/java/com/grepp/spring/app/model/schedule/service/ScheduleCommandService.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,9 @@ private void modifyScheduleEntity(Long scheduleId, ModifyScheduleDto dto) {
257257
if (dto.getMeetingPlatform() != null) {
258258
schedule.get().setMeetingPlatform(dto.getMeetingPlatform());
259259
}
260-
261-
schedule.get().setPlatformUrl(dto.getPlatformURL());
260+
if (dto.getPlatformURL() != null) {
261+
schedule.get().setPlatformUrl(dto.getPlatformURL());
262+
}
262263
}
263264

264265
private void modifyWorkspaceEntity(Long scheduleId, ModifyScheduleDto dto, Long workspaceId) {
@@ -448,6 +449,8 @@ private List<JsonNode> findNearestStations(double latitude, double longitude)
448449
@Transactional
449450
public void voteMiddleLocation(Schedule schedule, ScheduleMember scheduleMember, Location lid) {
450451

452+
// 엔티티 객체 대신 ID를 사용하도록 변경
453+
Long scheduleMemberId = scheduleMember.getId();
451454
// Location location = getLocation(lid);
452455
// Location 엔티티에 비관적 락을 걸고 조회하기
453456
// 파라미터를 id로 받으면 더 좋을 것 같음
@@ -465,13 +468,16 @@ public void voteMiddleLocation(Schedule schedule, ScheduleMember scheduleMember,
465468
int scheduleMemberNumber = scheduleMemberQueryRepository.findByScheduleId(schedule.getId()).size();
466469

467470
// vote 저장 시점을 뒤로 미뤄서, Location 락과의 교착을 방지
468-
VoteMiddleLocationDto dto = VoteMiddleLocationDto.toDto(scheduleMember, lid, schedule);
469-
Vote vote = VoteMiddleLocationDto.fromDto(dto);
471+
VoteMiddleLocationDto dto = VoteMiddleLocationDto.toDto(scheduleMemberId, lid, schedule);
472+
Vote vote = VoteMiddleLocationDto.fromDto(dto, scheduleMemberRepository);
470473
voteCommandRepository.save(vote);
471474

475+
472476
int voteCount = voteQueryRepository.findByScheduleId(schedule.getId()).size();
473477
log.info("voteCount = {}", voteCount);
474478

479+
// Optional<Schedule> schedule1 = scheduleQueryRepository.findById(schedule.getId());
480+
475481

476482
if (scheduleMemberNumber - voteCount == 0) {
477483
Long winnerLocationId = 0L;
@@ -487,6 +493,14 @@ public void voteMiddleLocation(Schedule schedule, ScheduleMember scheduleMember,
487493
Optional<Location> winnerLocation = locationQueryRepository.findById(winnerLocationId);
488494
log.info("winnerLocation: {}", winnerLocation);
489495
winnerLocation.get().setStatus(VoteStatus.WINNER);
496+
497+
final String name = winnerLocation.get().getName();
498+
499+
log.info("name={}", name);
500+
schedule.setLocation(name);
501+
scheduleCommandRepository.save(schedule);
502+
503+
// em.flush();
490504
}
491505
}
492506

src/main/java/com/grepp/spring/app/model/schedule/service/ScheduleQueryService.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public class ScheduleQueryService {
5151
private final VoteQueryRepository voteQueryRepository;
5252
private final MetroTransferQueryRepository metroTransferQueryRepository;
5353

54-
@Transactional
54+
@Transactional(readOnly = true)
5555
public ShowScheduleResponse showSchedule(Schedule schedule, String userId) {
5656

5757
Long eventId = schedule.getEvent().getId();
@@ -69,16 +69,18 @@ public ShowScheduleResponse showSchedule(Schedule schedule, String userId) {
6969
List<Workspace> workspaces = workspaceQueryRepository.findAllByScheduleId(schedule.getId());
7070

7171
MeetingType meetingType = eventRepository.findById(eventId).get().getMeetingType();
72+
List<Long> voteLocationId = voteQueryRepository.findByScheduleIdAndMemberId(schedule.getId());
7273

7374
ShowScheduleDto dto = ShowScheduleDto.fromEntity(meetingType, eventId, schedule,
74-
scheduleMembers, workspaces);
75+
scheduleMembers, workspaces, voteLocationId);
7576

7677
return ShowScheduleDto.fromDto(dto);
7778
}
7879

7980
throw new NotScheduleMemberException(ScheduleErrorCode.NOT_SCHEDULE_MEMBER);
8081
}
8182

83+
@Transactional(readOnly = true)
8284
public ShowSuggestedLocationsResponse showSuggestedLocation(Long scheduleId) {
8385
List<MetroInfoDto> infoDto = getMetroInfoDtos(scheduleId);
8486
int scheduleMemberNumber = scheduleMemberQueryRepository.findByScheduleId(scheduleId).size();
@@ -113,6 +115,7 @@ private int getDepartLocationCount(Long scheduleId) {
113115
return departLocationCount;
114116
}
115117

118+
@Transactional(readOnly = true)
116119
public ShowVoteMembersResponse findVoteMembers(Long scheduleId) {
117120

118121
List<VoteMemberDto> voteMemberList = getVoteMemberDtos(scheduleId);
@@ -137,29 +140,34 @@ private List<VoteMemberDto> getVoteMemberDtos(Long scheduleId) {
137140
return voteMemberList;
138141
}
139142

143+
@Transactional(readOnly = true)
140144
public Schedule findScheduleById(Long scheduleId) {
141145
return scheduleQueryRepository.findById(scheduleId)
142146
.orElseThrow(() -> new ScheduleNotFoundException(
143147
GroupErrorCode.SCHEDULE_NOT_FOUND));
144148
}
145149

150+
@Transactional(readOnly = true)
146151
public Event findEventById(Long eventId) {
147152
return eventRepository.findById(eventId).orElseThrow(() -> new EventNotFoundException(
148153
EventErrorCode.EVENT_NOT_FOUND));
149154
}
150155

156+
@Transactional(readOnly = true)
151157
public Location findLocationById(Long locationId) {
152158
return locationQueryRepository.findById(locationId)
153159
.orElseThrow(() -> new LocationNotFoundException(
154160
ScheduleErrorCode.LOCATION_NOT_FOUND));
155161
}
156162

163+
@Transactional(readOnly = true)
157164
public ScheduleMember findScheduleMemberById(Long scheduleMemberId) {
158165
return scheduleMemberQueryRepository.findById(scheduleMemberId)
159166
.orElseThrow(() -> new ScheduleMemberNotFoundException(
160167
ScheduleErrorCode.LOCATION_NOT_FOUND));
161168
}
162169

170+
@Transactional(readOnly = true)
163171
public Workspace findWorkspaceById(Long workspaceId) {
164172
return workspaceQueryRepository.findById(workspaceId).orElseThrow(
165173
() -> new WorkSpaceNotFoundException(ScheduleErrorCode.WORKSPACE_NOT_FOUND));

0 commit comments

Comments
 (0)