Skip to content

Commit 37eb51f

Browse files
authored
Merge pull request #262 from DevKor-github/feat/operating-time
운영시간 관련 기능 수정
2 parents 3e36a55 + 7a71c1a commit 37eb51f

19 files changed

Lines changed: 503 additions & 16 deletions
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package devkor.com.teamcback.domain.operatingtime.controller;
2+
3+
import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeConditionReq;
4+
import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeReq;
5+
import devkor.com.teamcback.domain.operatingtime.dto.response.GetPlaceOperatingTimeRes;
6+
import devkor.com.teamcback.domain.operatingtime.dto.response.SavePlaceOperatingTimeConditionRes;
7+
import devkor.com.teamcback.domain.operatingtime.dto.response.SavePlaceOperatingTimeRes;
8+
import devkor.com.teamcback.domain.operatingtime.service.AdminOperatingTimeService;
9+
import devkor.com.teamcback.global.response.CommonResponse;
10+
import io.swagger.v3.oas.annotations.Operation;
11+
import io.swagger.v3.oas.annotations.Parameter;
12+
import io.swagger.v3.oas.annotations.media.Content;
13+
import io.swagger.v3.oas.annotations.media.Schema;
14+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
15+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
16+
import jakarta.validation.Valid;
17+
import lombok.RequiredArgsConstructor;
18+
import org.springframework.web.bind.annotation.*;
19+
20+
@RestController
21+
@RequiredArgsConstructor
22+
@RequestMapping("/api/admin/operating-time")
23+
public class AdminOperatingTimeController {
24+
private final AdminOperatingTimeService adminOperatingTimeService;
25+
26+
@GetMapping("/places/{placeId}")
27+
@Operation(summary = "장소의 운영시간 검색",
28+
description = "장소 id로 운영시간 검색")
29+
@ApiResponses(value = {
30+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
31+
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
32+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
33+
})
34+
public CommonResponse<GetPlaceOperatingTimeRes> getPlaceOperatingTime(
35+
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId) {
36+
return CommonResponse.success(adminOperatingTimeService.getPlaceOperatingTime(placeId));
37+
}
38+
39+
@PutMapping("/places/{placeId}")
40+
@Operation(summary = "장소의 운영시간 저장",
41+
description = "장소가 각 요일별로 고정된 운영시간을 가지는 경우(00:00-00:00 형식 포함)")
42+
@ApiResponses(value = {
43+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
44+
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
45+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
46+
})
47+
public CommonResponse<SavePlaceOperatingTimeRes> savePlaceOperatingTime(
48+
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId,
49+
@Parameter(description = "요일별 운영 시간") @RequestBody SavePlaceOperatingTimeReq req) {
50+
return CommonResponse.success(adminOperatingTimeService.savePlaceOperatingTime(placeId, req));
51+
}
52+
53+
@PostMapping("/places/{placeId}")
54+
@Operation(summary = "장소의 조건 및 운영시간 저장(별도로 요일별 대표 운영 시간도 저장해야 함)",
55+
description = "장소가 조건에 따라 유동적인 운영시간을 가지는 경우")
56+
@ApiResponses(value = {
57+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
58+
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
59+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
60+
})
61+
public CommonResponse<SavePlaceOperatingTimeConditionRes> savePlaceOperatingTimeCondition(
62+
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId,
63+
@Parameter(description = "조건 및 운영 시간") @RequestBody @Valid SavePlaceOperatingTimeConditionReq req) {
64+
return CommonResponse.success(adminOperatingTimeService.savePlaceOperatingTimeCondition(placeId, req));
65+
}
66+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.request;
2+
3+
import devkor.com.teamcback.domain.operatingtime.entity.DayOfWeek;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import jakarta.validation.constraints.NotEmpty;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
import java.util.List;
10+
11+
@Schema(description = "저장할 운영시간 정보(상관없는 조건은 null로 표시)")
12+
@Getter
13+
@Setter
14+
public class SavePlaceOperatingTimeConditionReq {
15+
@Schema(description = "요일", example = "WEEKDAY")
16+
private DayOfWeek dayOfWeek;
17+
@Schema(description = "짝수주 여부", example = "null")
18+
private Boolean isEvenWeek;
19+
@Schema(description = "공휴일 여부", example = "false")
20+
private Boolean isHoliday;
21+
@Schema(description = "방학 여부", example = "null")
22+
private Boolean isVacation;
23+
@Schema(description = "조건에 해당하는 운영시간 목록")
24+
@NotEmpty(message = "최소 1개의 운영시간이 있어야 합니다.")
25+
private List<SavePlaceOperatingTimeConditionTimeReq> timeList;
26+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.request;
2+
3+
import jakarta.validation.constraints.Max;
4+
import jakarta.validation.constraints.Min;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
8+
@Getter
9+
@Setter
10+
public class SavePlaceOperatingTimeConditionTimeReq {
11+
@Min(value = 0)
12+
@Max(value = 23)
13+
private int StartHour;
14+
@Min(value = 0)
15+
@Max(value = 59)
16+
private int StartMinute;
17+
@Min(value = 0)
18+
@Max(value = 23)
19+
private int endHour;
20+
@Min(value = 0)
21+
@Max(value = 59)
22+
private int endMinute;
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.request;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Schema(description = "저장할 운영시간 정보")
8+
@Getter
9+
@Setter
10+
public class SavePlaceOperatingTimeReq {
11+
@Schema(description = "평일 운영시간", example = "09:00-21:00")
12+
private String weekDayOperatingTime;
13+
@Schema(description = "월요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
14+
private String mondayOperatingTime;
15+
@Schema(description = "화요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
16+
private String tuesdayOperatingTime;
17+
@Schema(description = "수요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
18+
private String wednesdayOperatingTime;
19+
@Schema(description = "목요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
20+
private String thursdayOperatingTime;
21+
@Schema(description = "금요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
22+
private String fridayOperatingTime;
23+
@Schema(description = "토요일 운영시간", example = "09:00-20:00")
24+
private String saturdayOperatingTime;
25+
@Schema(description = "일요일 운영시간", example = "휴무")
26+
private String sundayOperatingTime;
27+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.response;
2+
3+
import devkor.com.teamcback.domain.place.entity.Place;
4+
import lombok.Getter;
5+
6+
@Getter
7+
public class GetPlaceOperatingTimeRes {
8+
private Long placeId;
9+
private String placeName;
10+
private String todayOperatingTime;
11+
private String weekDayOperatingTime;
12+
private String mondayOperatingTime;
13+
private String tuesdayOperatingTime;
14+
private String wednesdayOperatingTime;
15+
private String thursdayOperatingTime;
16+
private String fridayOperatingTime;
17+
private String saturdayOperatingTime;
18+
private String sundayOperatingTime;
19+
20+
21+
public GetPlaceOperatingTimeRes(Place place) {
22+
this.placeId = place.getId();
23+
this.placeName = place.getName();
24+
this.todayOperatingTime = place.getOperatingTime();
25+
this.weekDayOperatingTime = place.getWeekdayOperatingTime();
26+
this.mondayOperatingTime = place.getMondayOperatingTime();
27+
this.tuesdayOperatingTime = place.getTuesdayOperatingTime();
28+
this.wednesdayOperatingTime = place.getWednesdayOperatingTime();
29+
this.thursdayOperatingTime = place.getThursdayOperatingTime();
30+
this.fridayOperatingTime = place.getFridayOperatingTime();
31+
this.saturdayOperatingTime = place.getSaturdayOperatingTime();
32+
this.sundayOperatingTime = place.getSundayOperatingTime();
33+
}
34+
}

src/main/java/devkor/com/teamcback/domain/operatingtime/dto/HolidayResDto.java renamed to src/main/java/devkor/com/teamcback/domain/operatingtime/dto/response/HolidayResDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package devkor.com.teamcback.domain.operatingtime.dto;
1+
package devkor.com.teamcback.domain.operatingtime.dto.response;
22

33
import java.time.LocalDate;
44
import java.time.format.DateTimeFormatter;
@@ -16,7 +16,7 @@ public class HolidayResDto {
1616
public HolidayResDto(JSONObject itemJson) {
1717
this.name = itemJson.getString("dateName");
1818
String holidayOrNot = itemJson.getString("isHoliday");
19-
this.isHoliday = holidayOrNot.equals("Y") ? true : false;
19+
this.isHoliday = holidayOrNot.equals("Y");
2020
String dateString = itemJson.getBigInteger("locdate").toString();
2121
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
2222
this.date = LocalDate.parse(dateString, formatter);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.response;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
6+
@Schema(description = "장소 운영시간 저장 완료")
7+
@JsonIgnoreProperties
8+
public class SavePlaceOperatingTimeConditionRes {
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package devkor.com.teamcback.domain.operatingtime.dto.response;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
6+
@Schema(description = "장소 운영시간 저장 완료")
7+
@JsonIgnoreProperties
8+
public class SavePlaceOperatingTimeRes {
9+
}

src/main/java/devkor/com/teamcback/domain/operatingtime/entity/DayOfWeek.java

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,89 @@ public String getOperatingTime(Place place) {
2424
return place.getWeekdayOperatingTime();
2525
}
2626
},
27+
28+
29+
MONDAY {
30+
@Override
31+
public DayOfWeek findNext() {
32+
return TUESDAY;
33+
}
34+
35+
@Override
36+
public String getOperatingTime(Building building) {
37+
return building.getWeekdayOperatingTime();
38+
}
39+
40+
@Override
41+
public String getOperatingTime(Place place) {
42+
return place.getMondayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getMondayOperatingTime();
43+
}
44+
},
45+
TUESDAY {
46+
@Override
47+
public DayOfWeek findNext() {
48+
return WEDNESDAY;
49+
}
50+
51+
@Override
52+
public String getOperatingTime(Building building) {
53+
return building.getWeekdayOperatingTime();
54+
}
55+
56+
@Override
57+
public String getOperatingTime(Place place) {
58+
return place.getTuesdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getTuesdayOperatingTime();
59+
}
60+
},
61+
WEDNESDAY {
62+
@Override
63+
public DayOfWeek findNext() {
64+
return THURSDAY;
65+
}
66+
67+
@Override
68+
public String getOperatingTime(Building building) {
69+
return building.getWeekdayOperatingTime();
70+
}
71+
72+
@Override
73+
public String getOperatingTime(Place place) {
74+
return place.getWednesdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getWednesdayOperatingTime();
75+
}
76+
},
77+
THURSDAY {
78+
@Override
79+
public DayOfWeek findNext() {
80+
return FRIDAY;
81+
}
82+
83+
@Override
84+
public String getOperatingTime(Building building) {
85+
return building.getWeekdayOperatingTime();
86+
}
87+
88+
@Override
89+
public String getOperatingTime(Place place) {
90+
return place.getThursdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getThursdayOperatingTime();
91+
}
92+
},
93+
FRIDAY {
94+
@Override
95+
public DayOfWeek findNext() {
96+
return SATURDAY;
97+
}
98+
99+
@Override
100+
public String getOperatingTime(Building building) {
101+
return building.getWeekdayOperatingTime();
102+
}
103+
104+
@Override
105+
public String getOperatingTime(Place place) {
106+
return place.getFridayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getFridayOperatingTime();
107+
}
108+
},
109+
27110
SATURDAY {
28111
@Override
29112
public DayOfWeek findNext() {
@@ -43,7 +126,7 @@ public String getOperatingTime(Place place) {
43126
SUNDAY {
44127
@Override
45128
public DayOfWeek findNext() {
46-
return WEEKDAY;
129+
return MONDAY;
47130
}
48131

49132
@Override

src/main/java/devkor/com/teamcback/domain/operatingtime/entity/Holiday.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package devkor.com.teamcback.domain.operatingtime.entity;
22

3-
import devkor.com.teamcback.domain.operatingtime.dto.HolidayResDto;
3+
import devkor.com.teamcback.domain.operatingtime.dto.response.HolidayResDto;
44
import jakarta.persistence.Entity;
55
import jakarta.persistence.GeneratedValue;
66
import jakarta.persistence.Id;

0 commit comments

Comments
 (0)