Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package devkor.com.teamcback.domain.operatingtime.controller;

import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeConditionReq;
import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeReq;
import devkor.com.teamcback.domain.operatingtime.dto.response.GetPlaceOperatingTimeRes;
import devkor.com.teamcback.domain.operatingtime.dto.response.SavePlaceOperatingTimeConditionRes;
import devkor.com.teamcback.domain.operatingtime.dto.response.SavePlaceOperatingTimeRes;
import devkor.com.teamcback.domain.operatingtime.service.AdminOperatingTimeService;
import devkor.com.teamcback.global.response.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/operating-time")
public class AdminOperatingTimeController {
private final AdminOperatingTimeService adminOperatingTimeService;

@GetMapping("/places/{placeId}")
@Operation(summary = "장소의 운영시간 검색",
description = "장소 id로 운영시간 검색")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
})
public CommonResponse<GetPlaceOperatingTimeRes> getPlaceOperatingTime(
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId) {
return CommonResponse.success(adminOperatingTimeService.getPlaceOperatingTime(placeId));
}

@PutMapping("/places/{placeId}")
@Operation(summary = "장소의 운영시간 저장",
description = "장소가 각 요일별로 고정된 운영시간을 가지는 경우(00:00-00:00 형식 포함)")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
})
public CommonResponse<SavePlaceOperatingTimeRes> savePlaceOperatingTime(
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId,
@Parameter(description = "요일별 운영 시간") @RequestBody SavePlaceOperatingTimeReq req) {
return CommonResponse.success(adminOperatingTimeService.savePlaceOperatingTime(placeId, req));
}

@PostMapping("/places/{placeId}")
@Operation(summary = "장소의 조건 및 운영시간 저장(별도로 요일별 대표 운영 시간도 저장해야 함)",
description = "장소가 조건에 따라 유동적인 운영시간을 가지는 경우")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
@ApiResponse(responseCode = "404", description = "장소를 찾을 수 없습니다.",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
})
public CommonResponse<SavePlaceOperatingTimeConditionRes> savePlaceOperatingTimeCondition(
@Parameter(name = "placeId", description = "장소 ID") @PathVariable Long placeId,
@Parameter(description = "조건 및 운영 시간") @RequestBody @Valid SavePlaceOperatingTimeConditionReq req) {
return CommonResponse.success(adminOperatingTimeService.savePlaceOperatingTimeCondition(placeId, req));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package devkor.com.teamcback.domain.operatingtime.dto.request;

import devkor.com.teamcback.domain.operatingtime.entity.DayOfWeek;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Schema(description = "저장할 운영시간 정보(상관없는 조건은 null로 표시)")
@Getter
@Setter
public class SavePlaceOperatingTimeConditionReq {
@Schema(description = "요일", example = "WEEKDAY")
private DayOfWeek dayOfWeek;
@Schema(description = "짝수주 여부", example = "null")
private Boolean isEvenWeek;
@Schema(description = "공휴일 여부", example = "false")
private Boolean isHoliday;
@Schema(description = "방학 여부", example = "null")
private Boolean isVacation;
@Schema(description = "조건에 해당하는 운영시간 목록")
@NotEmpty(message = "최소 1개의 운영시간이 있어야 합니다.")
private List<SavePlaceOperatingTimeConditionTimeReq> timeList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package devkor.com.teamcback.domain.operatingtime.dto.request;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class SavePlaceOperatingTimeConditionTimeReq {
@Min(value = 0)
@Max(value = 23)
private int StartHour;
@Min(value = 0)
@Max(value = 59)
private int StartMinute;
@Min(value = 0)
@Max(value = 23)
private int endHour;
@Min(value = 0)
@Max(value = 59)
private int endMinute;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package devkor.com.teamcback.domain.operatingtime.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

@Schema(description = "저장할 운영시간 정보")
@Getter
@Setter
public class SavePlaceOperatingTimeReq {
@Schema(description = "평일 운영시간", example = "09:00-21:00")
private String weekDayOperatingTime;
@Schema(description = "월요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
private String mondayOperatingTime;
@Schema(description = "화요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
private String tuesdayOperatingTime;
@Schema(description = "수요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
private String wednesdayOperatingTime;
@Schema(description = "목요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
private String thursdayOperatingTime;
@Schema(description = "금요일 운영시간(평일 모두 같다면 없어도 됨)", example = "09:00-21:00")
private String fridayOperatingTime;
@Schema(description = "토요일 운영시간", example = "09:00-20:00")
private String saturdayOperatingTime;
@Schema(description = "일요일 운영시간", example = "휴무")
private String sundayOperatingTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package devkor.com.teamcback.domain.operatingtime.dto.response;

import devkor.com.teamcback.domain.place.entity.Place;
import lombok.Getter;

@Getter
public class GetPlaceOperatingTimeRes {
private Long placeId;
private String placeName;
private String todayOperatingTime;
private String weekDayOperatingTime;
private String mondayOperatingTime;
private String tuesdayOperatingTime;
private String wednesdayOperatingTime;
private String thursdayOperatingTime;
private String fridayOperatingTime;
private String saturdayOperatingTime;
private String sundayOperatingTime;


public GetPlaceOperatingTimeRes(Place place) {
this.placeId = place.getId();
this.placeName = place.getName();
this.todayOperatingTime = place.getOperatingTime();
this.weekDayOperatingTime = place.getWeekdayOperatingTime();
this.mondayOperatingTime = place.getMondayOperatingTime();
this.tuesdayOperatingTime = place.getTuesdayOperatingTime();
this.wednesdayOperatingTime = place.getWednesdayOperatingTime();
this.thursdayOperatingTime = place.getThursdayOperatingTime();
this.fridayOperatingTime = place.getFridayOperatingTime();
this.saturdayOperatingTime = place.getSaturdayOperatingTime();
this.sundayOperatingTime = place.getSundayOperatingTime();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package devkor.com.teamcback.domain.operatingtime.dto;
package devkor.com.teamcback.domain.operatingtime.dto.response;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
Expand All @@ -16,7 +16,7 @@ public class HolidayResDto {
public HolidayResDto(JSONObject itemJson) {
this.name = itemJson.getString("dateName");
String holidayOrNot = itemJson.getString("isHoliday");
this.isHoliday = holidayOrNot.equals("Y") ? true : false;
this.isHoliday = holidayOrNot.equals("Y");
String dateString = itemJson.getBigInteger("locdate").toString();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
this.date = LocalDate.parse(dateString, formatter);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package devkor.com.teamcback.domain.operatingtime.dto.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "장소 운영시간 저장 완료")
@JsonIgnoreProperties
public class SavePlaceOperatingTimeConditionRes {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package devkor.com.teamcback.domain.operatingtime.dto.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;

@Schema(description = "장소 운영시간 저장 완료")
@JsonIgnoreProperties
public class SavePlaceOperatingTimeRes {
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,89 @@ public String getOperatingTime(Place place) {
return place.getWeekdayOperatingTime();
}
},


MONDAY {
@Override
public DayOfWeek findNext() {
return TUESDAY;
}

@Override
public String getOperatingTime(Building building) {
return building.getWeekdayOperatingTime();
}

@Override
public String getOperatingTime(Place place) {
return place.getMondayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getMondayOperatingTime();
}
},
TUESDAY {
@Override
public DayOfWeek findNext() {
return WEDNESDAY;
}

@Override
public String getOperatingTime(Building building) {
return building.getWeekdayOperatingTime();
}

@Override
public String getOperatingTime(Place place) {
return place.getTuesdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getTuesdayOperatingTime();
}
},
WEDNESDAY {
@Override
public DayOfWeek findNext() {
return THURSDAY;
}

@Override
public String getOperatingTime(Building building) {
return building.getWeekdayOperatingTime();
}

@Override
public String getOperatingTime(Place place) {
return place.getWednesdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getWednesdayOperatingTime();
}
},
THURSDAY {
@Override
public DayOfWeek findNext() {
return FRIDAY;
}

@Override
public String getOperatingTime(Building building) {
return building.getWeekdayOperatingTime();
}

@Override
public String getOperatingTime(Place place) {
return place.getThursdayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getThursdayOperatingTime();
}
},
FRIDAY {
@Override
public DayOfWeek findNext() {
return SATURDAY;
}

@Override
public String getOperatingTime(Building building) {
return building.getWeekdayOperatingTime();
}

@Override
public String getOperatingTime(Place place) {
return place.getFridayOperatingTime() == null ? place.getWeekdayOperatingTime() : place.getFridayOperatingTime();
}
},

SATURDAY {
@Override
public DayOfWeek findNext() {
Expand All @@ -43,7 +126,7 @@ public String getOperatingTime(Place place) {
SUNDAY {
@Override
public DayOfWeek findNext() {
return WEEKDAY;
return MONDAY;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package devkor.com.teamcback.domain.operatingtime.entity;

import devkor.com.teamcback.domain.operatingtime.dto.HolidayResDto;
import devkor.com.teamcback.domain.operatingtime.dto.response.HolidayResDto;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package devkor.com.teamcback.domain.operatingtime.entity;

import devkor.com.teamcback.domain.common.entity.BaseEntity;
import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeConditionReq;
import devkor.com.teamcback.domain.place.entity.Place;
import jakarta.persistence.*;
import lombok.Getter;
Expand Down Expand Up @@ -31,4 +32,11 @@ public class OperatingCondition extends BaseEntity {
@ManyToOne
@JoinColumn(name = "place_id")
private Place place;

public OperatingCondition(SavePlaceOperatingTimeConditionReq req) {
this.dayOfWeek = req.getDayOfWeek();
this.isEvenWeek = req.getIsEvenWeek();
this.isHoliday = req.getIsHoliday();
this.isVacation = req.getIsVacation();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package devkor.com.teamcback.domain.operatingtime.entity;

import devkor.com.teamcback.domain.building.entity.Building;
import devkor.com.teamcback.domain.operatingtime.dto.request.SavePlaceOperatingTimeConditionTimeReq;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
Expand Down Expand Up @@ -31,4 +32,10 @@ public class OperatingTime {
@ManyToOne
@JoinColumn(name = "operating_condition_id")
private OperatingCondition operatingCondition;

public OperatingTime(OperatingCondition operatingCondition, LocalTime startTime, LocalTime endTime) {
this.operatingCondition = operatingCondition;
this.startTime = startTime;
this.endTime = endTime;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ public interface OperatingConditionRepository extends JpaRepository<OperatingCon

@Query("SELECT e FROM OperatingCondition e WHERE (e.dayOfWeek = :dayOfWeek OR e.dayOfWeek IS NULL) " +
"AND (e.isHoliday = :isHoliday OR e.isHoliday IS NULL)" + "AND (e.isVacation = :isVacation OR e.isVacation IS NULL)" + "AND (e.place = :place)")
OperatingCondition findByDayOfWeekAndIsHolidayAndIsVacationAndPlace(@Param("dayOfWeek") DayOfWeek dayOfWeek, @Param("isHoliday") boolean isHoliday, @Param("isVacation") boolean isVacation, @Param("place") Place place);
OperatingCondition findByDayOfWeekAndIsHolidayAndIsVacationAndPlace(@Param("dayOfWeek") DayOfWeek dayOfWeek, @Param("isHoliday") Boolean isHoliday, @Param("isVacation") Boolean isVacation, @Param("place") Place place);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@
public interface OperatingTimeRepository extends JpaRepository<OperatingTime, Long> {

List<OperatingTime> findAllByOperatingCondition(OperatingCondition operatingCondition);

void deleteAllByOperatingCondition(OperatingCondition operatingCondition);
}
Loading