Skip to content

Commit

Permalink
Merge pull request #201 from Kim-s-Crew/dev
Browse files Browse the repository at this point in the history
feature: 팀내 모든 일정 조회 기능구현
  • Loading branch information
EUNCHAEv1006 authored Jun 4, 2024
2 parents 0e42fcc + 4fe84df commit 170c2d1
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
package wercsmik.spaghetticodingclub.domain.schedule.controller;

import java.util.List;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerCreationRequestDTO;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerCreationResponseDTO;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerResponseDTO;
import wercsmik.spaghetticodingclub.domain.schedule.service.SchedulerService;
import wercsmik.spaghetticodingclub.global.common.CommonResponse;
import wercsmik.spaghetticodingclub.global.security.UserDetailsImpl;
Expand All @@ -31,4 +35,13 @@ public ResponseEntity<CommonResponse<SchedulerCreationResponseDTO>> createSchedu
return ResponseEntity.status(HttpStatus.CREATED)
.body(CommonResponse.of("일정 생성 성공", schedulerResponseDTO));
}

@GetMapping("/teams/{teamId}")
public ResponseEntity<CommonResponse<List<SchedulerResponseDTO>>> getTeamSchedules(
@PathVariable Long teamId) {

List<SchedulerResponseDTO> schedules = schedulerService.getTeamSchedules(teamId);

return ResponseEntity.ok(CommonResponse.of("팀내 모든 일정 조회 성공", schedules));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package wercsmik.spaghetticodingclub.domain.schedule.dto;

import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import wercsmik.spaghetticodingclub.domain.schedule.entity.Scheduler;

@Getter
@Setter
@AllArgsConstructor
public class SchedulerResponseDTO {

private Long schedulerId;

private Long userId;

private String title;

private LocalDateTime startTime;

private LocalDateTime endTime;

public static SchedulerResponseDTO of(Scheduler scheduler) {
return new SchedulerResponseDTO(
scheduler.getSchedulerId(),
scheduler.getUserId().getUserId(),
scheduler.getTitle(),
scheduler.getStartTime(),
scheduler.getEndTime()
);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package wercsmik.spaghetticodingclub.domain.schedule.repository;

import java.time.LocalDateTime;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import wercsmik.spaghetticodingclub.domain.schedule.entity.Scheduler;
import wercsmik.spaghetticodingclub.domain.user.entity.User;

public interface SchedulerRepository extends JpaRepository<Scheduler, Long> {

boolean existsByUserIdAndStartTimeLessThanAndEndTimeGreaterThan(User user, LocalDateTime endTime, LocalDateTime startTime);
}
boolean existsByUserIdAndStartTimeLessThanAndEndTimeGreaterThan(User user,
LocalDateTime endTime, LocalDateTime startTime);

List<Scheduler> findByUserIdIn(List<User> users);
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package wercsmik.spaghetticodingclub.domain.schedule.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerCreationRequestDTO;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerCreationResponseDTO;
import wercsmik.spaghetticodingclub.domain.schedule.dto.SchedulerResponseDTO;
import wercsmik.spaghetticodingclub.domain.schedule.entity.Scheduler;
import wercsmik.spaghetticodingclub.domain.schedule.repository.SchedulerRepository;
import wercsmik.spaghetticodingclub.domain.team.entity.Team;
import wercsmik.spaghetticodingclub.domain.team.entity.TeamMember;
import wercsmik.spaghetticodingclub.domain.team.repository.TeamMemberRepository;
import wercsmik.spaghetticodingclub.domain.team.repository.TeamRepository;
import wercsmik.spaghetticodingclub.domain.user.entity.User;
import wercsmik.spaghetticodingclub.global.exception.CustomException;
import wercsmik.spaghetticodingclub.global.exception.ErrorCode;
Expand All @@ -18,6 +25,8 @@
public class SchedulerService {

private final SchedulerRepository schedulerRepository;
private final TeamRepository teamRepository;
private final TeamMemberRepository teamMemberRepository;

@Transactional
public SchedulerCreationResponseDTO createSchedule(UserDetailsImpl userDetails, SchedulerCreationRequestDTO requestDTO) {
Expand Down Expand Up @@ -53,4 +62,28 @@ public SchedulerCreationResponseDTO createSchedule(UserDetailsImpl userDetails,

return SchedulerCreationResponseDTO.of(savedSchedule);
}

@Transactional(readOnly = true)
public List<SchedulerResponseDTO> getTeamSchedules(Long teamId) {

Team team = teamRepository.findById(teamId) // 팀 조회
.orElseThrow(() -> new CustomException(ErrorCode.TEAM_NOT_FOUND));

List<TeamMember> teamMembers = teamMemberRepository.findByTeam_TeamId(teamId); // 팀 멤버 조회

if (teamMembers.isEmpty()) {
throw new CustomException(ErrorCode.TEAM_MEMBERS_NOT_FOUND);
}

// 팀 멤버들의 유저 리스트를 생성
List<User> users = teamMembers.stream()
.map(TeamMember::getUser)
.collect(Collectors.toList());

List<Scheduler> schedules = schedulerRepository.findByUserIdIn(users);

return schedules.stream()
.map(SchedulerResponseDTO::of)
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,13 @@ public enum ErrorCode {
// Scheduler
SCHEDULE_OVERLAP(400, "일정이 겹칩니다."),

SCHEDULE_NOT_FOUND(404, "일정이 존재하지 않습니다."),


// Team
TEAM_NOT_FOUND(400, "팀을 찾을 수 없습니다."),

TEAM_MEMBERS_NOT_FOUND(400, "팀원 들을 찾을 수 없습니다."),


// Track
Expand Down

0 comments on commit 170c2d1

Please sign in to comment.