Skip to content

Commit

Permalink
Merge pull request #79 from Leets-Official/refactor-#74
Browse files Browse the repository at this point in the history
#74  Refactor: 어드민 페이지 리팩토링
  • Loading branch information
hyxklee authored Jul 31, 2024
2 parents 2c7c420 + e32f7a8 commit ec4f0de
Show file tree
Hide file tree
Showing 1,923 changed files with 180,488 additions and 60,418 deletions.
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import leets.weeth.domain.user.service.UserService;
import leets.weeth.global.auth.annotation.CurrentUser;
import leets.weeth.global.common.error.exception.custom.BusinessLogicException;
import leets.weeth.global.common.error.exception.custom.InvalidInputDateException;
import leets.weeth.global.common.response.CommonResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -112,7 +113,7 @@ public CommonResponse<String> deleteNotice(@PathVariable Long noticeId, @Paramet
@Operation(summary = "출석 일정 생성", description = "관리자가 출석일정을 등록합니다.")
@PostMapping("/attendance-event")
public CommonResponse<String> createAttendanceEvent(@RequestBody @Valid RequestAttendanceEvent requestAttendanceEvent,
@Parameter(hidden = true) @CurrentUser Long userId) {
@Parameter(hidden = true) @CurrentUser Long userId) throws InvalidInputDateException {
attendanceEventService.createAttendanceEvent(requestAttendanceEvent, userId);
return CommonResponse.createSuccess(ATTENDANCE_EVENT_CREATED_SUCCESS.getMessage());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,42 @@
package leets.weeth.domain.admin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/adminpage")
public class ThymeLeafController {

@GetMapping("/home")
public String home() {
return "home";
}

@GetMapping("/login")
public String login() {
return "login-html";
public String loginPage(Model model) {
model.addAttribute("pageTitle", "Login");
return "login";
}

@GetMapping("/members")
public String members() {
return "members";
@GetMapping("/member")
public String member(Model model) {
model.addAttribute("pageTitle", "멤버 관리");
return "member";
}

@GetMapping("/attendance")
public String attendance() {
public String attendance(Model model) {
model.addAttribute("pageTitle", "출석 관리");
return "attendance";
}


@GetMapping("/penalty")
public String penalty() {
public String penalty(Model model) {
model.addAttribute("pageTitle", "패널티 관리");
return "penalty";
}

@GetMapping("/account")
public String account() {
public String account(Model model) {
model.addAttribute("pageTitle", "회비");
return "account";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
import leets.weeth.domain.event.repository.EventRepository;
import leets.weeth.domain.user.entity.User;
import leets.weeth.domain.user.repository.UserRepository;
import leets.weeth.global.common.error.exception.custom.InvalidInputDateException;
import leets.weeth.global.common.error.exception.custom.UserNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

Expand All @@ -38,22 +40,32 @@ public class AttendanceEventService {

// 출석 일정 생성
@Transactional
public void createAttendanceEvent(RequestAttendanceEvent requestDto, Long userId) {
public void createAttendanceEvent(RequestAttendanceEvent requestDto, Long userId) throws InvalidInputDateException {
// 기간 입력 검증
validateDateRange(requestDto.startDateTime(), requestDto.endDateTime());

User user = userRepository.findById(userId)
.orElseThrow(UserNotFoundException::new);

eventRepository.save(mapper.fromAttendanceEventDto(requestDto, user));
}

// 출석 일정 + Code 한 번에 조회
@Transactional(readOnly = true)
public List<ResponseAttendanceEvent> getAttendanceEvents() {
// 이벤트를 타입별로 정렬된 목록으로 조회
List<Event> events = eventRepository.findAllByType(Type.ATTENDANCE, Sort.by(Sort.Direction.ASC, "startDateTime"));
// 모든 주간 데이터를 조회
List<Week> weeks = weekRepository.findAll();

// 중복된 날짜를 가진 주간 데이터가 있을 경우, 하나의 주간 데이터만 유지
Map<LocalDate, Week> weekMap = weeks.stream()
.collect(Collectors.toMap(Week::getDate, week -> week));
.collect(Collectors.toMap(
Week::getDate,
week -> week,
(existing, replacement) -> existing // 중복 키가 발생할 경우 기존 값을 유지
));

// 이벤트 목록을 순회하며 주간 데이터와 매핑하여 DTO로 변환
return events.stream()
.map(event -> {
Week matchingWeek = weekMap.get(event.getStartDateTime().toLocalDate());
Expand All @@ -62,4 +74,11 @@ public List<ResponseAttendanceEvent> getAttendanceEvents() {
.filter(Objects::nonNull)
.toList();
}

// 시작 날짜가 종료 날짜 보다 느린지 검증
private void validateDateRange(LocalDateTime start, LocalDateTime end) throws InvalidInputDateException {
if (start.isAfter(end)) {
throw new InvalidInputDateException();
}
}
}
4 changes: 3 additions & 1 deletion src/main/java/leets/weeth/global/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
authorize
.requestMatchers("/users/apply", "/users/duplication/**").permitAll()
.requestMatchers("/health-check").permitAll()
.requestMatchers("/adminpage/login","/adminpage/home","/adminpage/account", "/adminpage/attendance", "/adminpage/members","/adminpage/penalty", "/css/**", "/js/**").permitAll()
.requestMatchers("/adminpage/**").permitAll()
.requestMatchers("/adminpage/login","/adminpage/home","/adminpage/account", "/adminpage/attendance", "/adminpage/members","/adminpage/penalty",
"/css/**", "/js/**", "/img/**", "/scss/**", "/vendor/**").permitAll()
// 스웨거 경로
.requestMatchers("/v3/api-docs", "/v3/api-docs/**", "/swagger-ui.html", "/swagger-ui/**", "/swagger/**").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
Expand Down
Loading

0 comments on commit ec4f0de

Please sign in to comment.