Skip to content

Commit 767e9f1

Browse files
authored
Merge pull request #222 from DevKor-github/feat/school-calendar
방학, 고연전 등 학교 행사 진행 여부 api
2 parents 2d61f43 + 6d2f0c2 commit 767e9f1

14 files changed

Lines changed: 263 additions & 34 deletions

File tree

src/main/java/devkor/com/teamcback/domain/koyeon/controller/KoyeonController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class KoyeonController {
2323

2424
/***
2525
* 고연전 여부 반환
26+
* TODO: 프론트 api 변경 후 삭제 필요
2627
*/
2728
@GetMapping("")
2829
@Operation(summary = "고연전 시즌 여부를 t/f로 반환", description = "고연전 시즌 여부를 t/f로 반환")

src/main/java/devkor/com/teamcback/domain/koyeon/entity/Koyeon.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@
33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.persistence.*;
55
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
67

78
@Entity
89
@Getter
910
@Table(name = "tb_koyeon")
11+
@NoArgsConstructor
1012
public class Koyeon {
1113
@Id
1214
@Schema(description = "id", example = "1")
1315
private Long id;
16+
@Schema(description = "name", example = "고연전")
17+
private String name;
1418
@Schema(description = "isKoyeon", example = "true")
1519
private Boolean isKoyeon;
20+
21+
public Koyeon(Long id, String name, Boolean isKoyeon) {
22+
this.id = id;
23+
this.name = name;
24+
this.isKoyeon = isKoyeon;
25+
}
1626
}

src/main/java/devkor/com/teamcback/domain/koyeon/service/KoyeonService.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package devkor.com.teamcback.domain.koyeon.service;
22

3+
import devkor.com.teamcback.domain.schoolcalendar.entity.SchoolCalendar;
4+
import devkor.com.teamcback.domain.schoolcalendar.repository.SchoolCalendarRepository;
35
import devkor.com.teamcback.domain.koyeon.dto.response.*;
46
import devkor.com.teamcback.domain.koyeon.entity.*;
57
import devkor.com.teamcback.domain.koyeon.repository.*;
@@ -24,13 +26,15 @@ public class KoyeonService {
2426
private final MenuRepository menuRepository;
2527
private final TagMenuRepository tagMenuRepository;
2628
private final FreePubNicknameRepository freePubNicknameRepository;
29+
private final SchoolCalendarRepository schoolCalendarRepository;
2730

2831
/**
2932
* 고연전 여부 확인
3033
*/
3134
@Transactional(readOnly = true)
3235
public Koyeon isKoyeon() {
33-
return koyeonRepository.findById(1L).orElseThrow(() -> new GlobalException(NOT_FOUND_KOYEON));
36+
SchoolCalendar schoolCalendar = findSchoolCalendar();
37+
return new Koyeon(schoolCalendar.getId(), schoolCalendar.getName(), schoolCalendar.isActive());
3438
}
3539

3640
/**
@@ -126,4 +130,8 @@ private static List<GlobalPubSearchRes> orderSequence(Map<GlobalPubSearchRes, In
126130
private FreePub findFreePub(Long pubId) {
127131
return freePubRepository.findById(pubId).orElseThrow(() -> new GlobalException(NOT_FOUND_PUB));
128132
}
133+
134+
private SchoolCalendar findSchoolCalendar() {
135+
return schoolCalendarRepository.findById(2L).orElseThrow(() -> new GlobalException(NOT_FOUND_SCHOOL_CALENDAR));
136+
}
129137
}

src/main/java/devkor/com/teamcback/domain/operatingtime/scheduler/OperatingScheduler.java

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package devkor.com.teamcback.domain.operatingtime.scheduler;
22

3+
import devkor.com.teamcback.domain.schoolcalendar.service.SchoolCalendarService;
34
import devkor.com.teamcback.domain.operatingtime.entity.DayOfWeek;
45
import devkor.com.teamcback.domain.operatingtime.service.HolidayService;
56
import devkor.com.teamcback.domain.operatingtime.service.OperatingService;
@@ -21,16 +22,7 @@ public class OperatingScheduler {
2122
private final OperatingService operatingService;
2223
private final HolidayService holidayService;
2324
private final RedisLockUtil redisLockUtil;
24-
25-
private static final int SUMMER_VACATION_START_MONTH = 6;
26-
private static final int SUMMER_VACATION_START_DAY = 22;
27-
private static final int SUMMER_VACATION_END_MONTH = 9;
28-
private static final int SUMMER_VACATION_END_DAY = 1;
29-
30-
private static final int WINTER_VACATION_START_MONTH = 12;
31-
private static final int WINTER_VACATION_START_DAY = 21;
32-
private static final int WINTER_VACATION_END_MONTH = 3;
33-
private static final int WINTER_VACATION_END_DAY = 3;
25+
private final SchoolCalendarService schoolCalendarService;
3426

3527
private static DayOfWeek dayOfWeek = null;
3628
private static Boolean isHoliday = null;
@@ -86,7 +78,7 @@ private void setState() {
8678
log.info("dayOfWeek: {}", dayOfWeek.toString());
8779
isHoliday = isHoliday(now); // 공휴일 여부
8880
log.info("isHoliday: {}", isHoliday);
89-
isVacation = isVacation(now); // 방학 여부
81+
isVacation = isVacation(); // 방학 여부
9082
log.info("isVacation: {}", isVacation);
9183
isEvenWeek = false; // 토요일 짝수 주 여부
9284
if(dayOfWeek == DayOfWeek.SATURDAY) { // 토요일이면 몇째주 토요일인지 계산
@@ -113,25 +105,8 @@ private boolean isHoliday(LocalDate date) {
113105
return holidayService.isHoliday(date);
114106
}
115107

116-
private boolean isVacation(LocalDate date) {
117-
int month = date.getMonthValue();
118-
int day = date.getDayOfMonth();
119-
120-
// 여름방학 기간
121-
if((month == SUMMER_VACATION_START_MONTH && day >= SUMMER_VACATION_START_DAY) ||
122-
(month == SUMMER_VACATION_END_MONTH && day <= SUMMER_VACATION_END_DAY) ||
123-
(month > SUMMER_VACATION_START_MONTH && month < SUMMER_VACATION_END_MONTH)) {
124-
return true;
125-
}
126-
127-
// 겨울방학 기간
128-
if((month == WINTER_VACATION_START_MONTH && day >= WINTER_VACATION_START_DAY) ||
129-
(month == WINTER_VACATION_END_MONTH && day <= WINTER_VACATION_END_DAY) ||
130-
(month < WINTER_VACATION_END_MONTH)) {
131-
return true;
132-
}
133-
134-
return false;
108+
private boolean isVacation() {
109+
return schoolCalendarService.isVacationTf();
135110
}
136111

137112
private boolean isEvenWeek(LocalDate now) {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.controller;
2+
3+
import devkor.com.teamcback.domain.schoolcalendar.dto.response.UpdateSchoolCalendarRes;
4+
import devkor.com.teamcback.domain.schoolcalendar.service.SchoolCalendarService;
5+
import devkor.com.teamcback.global.response.CommonResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.media.Content;
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.web.bind.annotation.RestController;
15+
16+
@RestController
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/admin/school-calendar")
19+
public class AdminSchoolCalendarController {
20+
private final SchoolCalendarService schoolCalendarService;
21+
22+
/***
23+
* 방학 여부 수정
24+
*/
25+
@PutMapping("/vacation")
26+
@Operation(summary = "방학 여부 수정(토글)", description = "방학 여부 수정")
27+
@ApiResponses(value = {
28+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
29+
@ApiResponse(responseCode = "404", description = "Not Found",
30+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
31+
})
32+
public CommonResponse<UpdateSchoolCalendarRes> updateVacationActive() {
33+
return CommonResponse.success(schoolCalendarService.updateVacationActive());
34+
}
35+
36+
/***
37+
* 고연전 여부 수정
38+
*/
39+
@PutMapping("/koyeon")
40+
@Operation(summary = "고연전 여부 수정(토글)", description = "고연전 여부 수정")
41+
@ApiResponses(value = {
42+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
43+
@ApiResponse(responseCode = "404", description = "Not Found",
44+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
45+
})
46+
public CommonResponse<UpdateSchoolCalendarRes> updateKoyeonActive() {
47+
return CommonResponse.success(schoolCalendarService.updateKoyeonActive());
48+
}
49+
50+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.controller;
2+
3+
import devkor.com.teamcback.domain.schoolcalendar.dto.response.GetSchoolCalendarRes;
4+
import devkor.com.teamcback.domain.schoolcalendar.service.SchoolCalendarService;
5+
import devkor.com.teamcback.global.response.CommonResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.media.Content;
8+
import io.swagger.v3.oas.annotations.media.Schema;
9+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
10+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.web.bind.annotation.GetMapping;
13+
import org.springframework.web.bind.annotation.RequestMapping;
14+
import org.springframework.web.bind.annotation.RestController;
15+
16+
@RestController
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/school-calendar")
19+
public class SchoolCalendarController {
20+
private final SchoolCalendarService schoolCalendarService;
21+
22+
/***
23+
* 방학 여부 반환
24+
*/
25+
@GetMapping("/vacation")
26+
@Operation(summary = "방학 여부를 t/f로 반환", description = "방학 여부를 t/f로 반환")
27+
@ApiResponses(value = {
28+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
29+
@ApiResponse(responseCode = "404", description = "Not Found",
30+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
31+
})
32+
public CommonResponse<GetSchoolCalendarRes> isVacation() {
33+
return CommonResponse.success(schoolCalendarService.isVacation());
34+
}
35+
36+
/***
37+
* 고연전 여부 반환
38+
*/
39+
@GetMapping("/koyeon")
40+
@Operation(summary = "고연전 여부를 t/f로 반환", description = "고연전 여부를 t/f로 반환")
41+
@ApiResponses(value = {
42+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
43+
@ApiResponse(responseCode = "404", description = "Not Found",
44+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
45+
})
46+
public CommonResponse<GetSchoolCalendarRes> isKoyeon() {
47+
return CommonResponse.success(schoolCalendarService.isKoyeon());
48+
}
49+
50+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.dto.response;
2+
3+
import devkor.com.teamcback.domain.schoolcalendar.entity.SchoolCalendar;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Getter;
6+
7+
@Schema(description = "방학 여부 응답 dto")
8+
@Getter
9+
public class GetSchoolCalendarRes {
10+
11+
@Schema(description = "학교 일정 ID", example = "1")
12+
private Long id;
13+
@Schema(description = "학교 일정 이름", example = "방학")
14+
private String name;
15+
@Schema(description = "일정 여부", example = "true")
16+
private boolean isActive;
17+
18+
public GetSchoolCalendarRes(SchoolCalendar schoolCalendar) {
19+
this.id = schoolCalendar.getId();
20+
this.name = schoolCalendar.getName();
21+
this.isActive = schoolCalendar.isActive();
22+
}
23+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.dto.response;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
6+
@Schema(description = "편의시설 수정 응답 dto")
7+
@JsonIgnoreProperties
8+
public class UpdateSchoolCalendarRes {
9+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.entity;
2+
3+
import devkor.com.teamcback.domain.common.entity.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Getter
11+
@Table(name = "tb_school_calendar")
12+
@NoArgsConstructor
13+
public class SchoolCalendar extends BaseEntity {
14+
@Id
15+
@GeneratedValue(strategy = GenerationType.IDENTITY)
16+
private Long id;
17+
18+
@Column(nullable = false)
19+
private String name;
20+
21+
@Setter
22+
@Column(nullable = false)
23+
private boolean isActive;
24+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package devkor.com.teamcback.domain.schoolcalendar.repository;
2+
3+
import devkor.com.teamcback.domain.schoolcalendar.entity.SchoolCalendar;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface SchoolCalendarRepository extends JpaRepository<SchoolCalendar, Long> {
7+
}

0 commit comments

Comments
 (0)