Skip to content

Commit

Permalink
Merge pull request #183 from IT-Cotato/develop
Browse files Browse the repository at this point in the history
[Release] V2.2024.10.20.02
  • Loading branch information
Youthhing authored Oct 19, 2024
2 parents 692e225 + 85aee74 commit 1b69ce1
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.cotato.csquiz.api.attendance.dto;

import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.Builder;
import org.cotato.csquiz.domain.attendance.enums.AttendanceOpenStatus;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.cotato.csquiz.api.session.dto.CsEducationOnSessionNumberResponse;
import org.cotato.csquiz.api.session.dto.DeleteSessionImageRequest;
import org.cotato.csquiz.api.session.dto.SessionListResponse;
import org.cotato.csquiz.api.session.dto.SessionWithAttendanceResponse;
import org.cotato.csquiz.api.session.dto.UpdateSessionImageOrderRequest;
import org.cotato.csquiz.api.session.dto.UpdateSessionRequest;
import org.cotato.csquiz.domain.generation.service.SessionImageService;
Expand All @@ -24,29 +25,36 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@Tag(name = "세션 정보", description = "세션 관련 API 입니다.")
@RequestMapping("/v1/api/session")
@RequiredArgsConstructor
@Slf4j
public class SessionController {

private final SessionService sessionService;
private final SessionImageService sessionImageService;

@Operation(summary = "세션 단건 조회 API")
@GetMapping("/{id}")
public ResponseEntity<SessionWithAttendanceResponse> findSession(@PathVariable("id") Long sessionId) {
return ResponseEntity.ok().body(sessionService.findSession(sessionId));
}

@Operation(summary = "세션 목록 반환 API")
@GetMapping
public ResponseEntity<List<SessionListResponse>> findSessionsByGenerationId(@RequestParam Long generationId) {
return ResponseEntity.status(HttpStatus.OK).body(sessionService.findSessionsByGenerationId(generationId));
}

@Operation(summary = "CS ON인 세션 목록 반환 API")
@Operation(summary = "CS ON인 세션 목록 반환 API", description = "세션과 교육 연계 제거 시 삭제 예정")
@GetMapping("/cs-on")
public ResponseEntity<List<CsEducationOnSessionNumberResponse>> findAllCsOnSessionsByGenerationId(
@RequestParam Long generationId) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.cotato.csquiz.api.session.dto;

import java.util.List;
import org.cotato.csquiz.domain.generation.entity.SessionImage;

public record SessionListImageInfoResponse(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.cotato.csquiz.api.session.dto;

import java.time.LocalDateTime;
import java.util.List;
import org.cotato.csquiz.api.attendance.dto.AttendanceTimeResponse;
import org.cotato.csquiz.domain.attendance.entity.Attendance;
import org.cotato.csquiz.domain.generation.embedded.SessionContents;
import org.cotato.csquiz.domain.generation.entity.Session;
import org.cotato.csquiz.domain.generation.entity.SessionImage;

public record SessionWithAttendanceResponse(
Long sessionId,
Integer sessionNumber,
String title,
List<SessionListImageInfoResponse> sessionImages,
String description,
Long generationId,
String placeName,
LocalDateTime sessionDateTime,
SessionContents sessionContents,
AttendanceTimeResponse attendance
) {
public static SessionWithAttendanceResponse of(Session session, List<SessionImage> sessionImages, Attendance attendance) {
return new SessionWithAttendanceResponse(
session.getId(),
session.getNumber(),
session.getTitle(),
sessionImages.stream().map(SessionListImageInfoResponse::from).toList(),
session.getDescription(),
session.getGeneration().getId(),
session.getPlaceName(),
session.getSessionDateTime(),
session.getSessionContents(),
AttendanceTimeResponse.from(attendance)
);
}

public static SessionWithAttendanceResponse of(Session session, List<SessionImage> sessionImages) {
return new SessionWithAttendanceResponse(
session.getId(),
session.getNumber(),
session.getTitle(),
sessionImages.stream().map(SessionListImageInfoResponse::from).toList(),
session.getDescription(),
session.getGeneration().getId(),
session.getPlaceName(),
session.getSessionDateTime(),
session.getSessionContents(),
null
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.requestMatchers("/v1/api/record/reply").hasAnyRole("MEMBER", "EDUCATION", "OPERATION", "ADMIN")
.requestMatchers("/v1/api/record/**").hasAnyRole("EDUCATION", "ADMIN")
.requestMatchers("/v1/api/session/cs-on").hasAnyRole("EDUCATION", "ADMIN")
.requestMatchers(new AntPathRequestMatcher("/v1/api/session/**", HttpMethod.GET.name())).permitAll()
.requestMatchers(new AntPathRequestMatcher("/v1/api/session", "GET")).authenticated()
.requestMatchers("/v1/api/session/**").hasAnyRole("ADMIN")
.requestMatchers("/v2/api/attendances/records").hasAnyRole("OPERATION", "ADMIN")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ public class JwtAuthorizationFilter extends OncePerRequestFilter {
private static final String SESSION_PATH = "/v1/api/session";
private static final String POLICIES_PATH = "/v2/api/policies";
private static final String PROJECTS_LIST = "/v2/api/projects";
private static final String PROJECT_DETAIL = "/v2/api/projects/{projectId:\\d+}";
private static final String PROJECT_DETAIL = "/v2/api/projects";
private static final String CURRENT_GENERATION = "/v1/api/generation/current";
private static final String INTEGER_REGEX = "/{id:\\d+}";

private final JwtTokenProvider jwtTokenProvider;
private static final AntPathMatcher pathMatcher = new AntPathMatcher();

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
Expand Down Expand Up @@ -66,15 +66,16 @@ private void setAuthentication(String accessToken) {
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
String path = request.getRequestURI();
log.info("요청 경로: {}", path);
log.info("요청 메서드: {}", request.getMethod());
log.info("요청 경로 및 메서드: {}, {}", path, request.getMethod());
return path.startsWith(AUTH_PATH) || path.equals(LOGIN_PATH)
|| path.startsWith(SWAGGER_PATH) || path.equals(SWAGGER_FAVICON)
|| path.startsWith(SWAGGER_PATH_3) || path.startsWith(WS)
|| path.equals(GENERATION_PATH) || path.equals(SESSION_PATH)
|| path.equals(POLICIES_PATH)
|| path.equals(CURRENT_GENERATION)
|| path.equals(PROJECTS_LIST) && HttpMethod.GET.name().equals(request.getMethod())
|| pathMatcher.match(PROJECT_DETAIL, path);
|| new AntPathMatcher().match(PROJECT_DETAIL + INTEGER_REGEX, path)
|| (new AntPathMatcher().match(SESSION_PATH + INTEGER_REGEX, path) && request.getMethod().equals(HttpMethod.GET.name()))
;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import java.time.LocalTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.cotato.csquiz.api.session.dto.AddSessionRequest;
import org.cotato.csquiz.api.session.dto.AddSessionResponse;
import org.cotato.csquiz.api.session.dto.CsEducationOnSessionNumberResponse;
import org.cotato.csquiz.api.session.dto.SessionListResponse;
import org.cotato.csquiz.api.session.dto.SessionWithAttendanceResponse;
import org.cotato.csquiz.api.session.dto.UpdateSessionRequest;
import org.cotato.csquiz.common.error.exception.ImageException;
import org.cotato.csquiz.common.schedule.SchedulerService;
Expand Down Expand Up @@ -171,4 +173,12 @@ public List<CsEducationOnSessionNumberResponse> findAllNotLinkedCsOnSessionsByGe
.map(CsEducationOnSessionNumberResponse::from)
.toList();
}

public SessionWithAttendanceResponse findSession(Long sessionId) {
Session session = findSessionById(sessionId);
List<SessionImage> sessionImages = sessionImageRepository.findAllBySession(session);
Optional<Attendance> maybeAttendance = attendanceRepository.findBySessionId(sessionId);
return maybeAttendance.map(attendance -> SessionWithAttendanceResponse.of(session, sessionImages, attendance))
.orElseGet(() -> SessionWithAttendanceResponse.of(session, sessionImages));
}
}

0 comments on commit 1b69ce1

Please sign in to comment.