diff --git a/src/main/java/koreatech/in/controller/BusController.java b/src/main/java/koreatech/in/controller/BusController.java index 5e81e570..23c1a9cf 100644 --- a/src/main/java/koreatech/in/controller/BusController.java +++ b/src/main/java/koreatech/in/controller/BusController.java @@ -6,6 +6,7 @@ import koreatech.in.domain.Bus.BusTimetable; import koreatech.in.domain.Bus.SchoolBusCourse; import koreatech.in.domain.Bus.SingleBusTime; +import koreatech.in.dto.normal.bus.BusTimetableResponse; import koreatech.in.service.BusService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -60,4 +61,13 @@ ResponseEntity> getTimetable(@ApiParam(value = "yyyy-MM-dd", return new ResponseEntity<>(busService.searchTimetable(date, time, depart, arrival), HttpStatus.OK); } + + @RequestMapping(value = "/timetable/v2", method = RequestMethod.GET) + public @ResponseBody + ResponseEntity getTimetableV2(@ApiParam(value = "버스 종류(shuttle, commuting, express)", required = true) @RequestParam(value = "bus_type") String busType, + @ApiParam(value = "등/하교(to, from)", required = true) @RequestParam(value = "direction") String direction, + @ApiParam(value = "버스 노선 지역") @RequestParam(value = "region", required = false) String region) { + + return new ResponseEntity<>(busService.getTimetableWithUpdatedAt(busType, direction, region), HttpStatus.OK); + } } diff --git a/src/main/java/koreatech/in/controller/admin/AdminUserController.java b/src/main/java/koreatech/in/controller/admin/AdminUserController.java index 109d43db..216360c4 100644 --- a/src/main/java/koreatech/in/controller/admin/AdminUserController.java +++ b/src/main/java/koreatech/in/controller/admin/AdminUserController.java @@ -343,7 +343,7 @@ ResponseEntity getOwner(@ApiParam(value = "owner_id", required = @ApiResponse(code = 409, message = "- 조회한 회원의 신원이 사장님이 아닐 때 (code: 101018) \n" + "- 중복된 닉네임일 때 (code: 101002)", response = ExceptionResponse.class), @ApiResponse(code = 422, message = "- 유효한 성별이 아닐 때 (code: 101020) \n" + - "- 유효한 이메일이 아닐 때 (code: 101013) \n" + + "- 유효한 이메일이 아닐 때 (code: 101013) \n" + "- 유효한 사업자 번호가 아닐 때(code: 101021)", response = ExceptionResponse.class) }) @ParamValid diff --git a/src/main/java/koreatech/in/dto/normal/bus/BusTimetableResponse.java b/src/main/java/koreatech/in/dto/normal/bus/BusTimetableResponse.java new file mode 100644 index 00000000..de45f556 --- /dev/null +++ b/src/main/java/koreatech/in/dto/normal/bus/BusTimetableResponse.java @@ -0,0 +1,22 @@ +package koreatech.in.dto.normal.bus; + +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; + +import koreatech.in.domain.Bus.BusTimetable; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +@JsonNaming(SnakeCaseStrategy.class) +public class BusTimetableResponse { + private List busTimetables; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") + private Date updatedAt; +} diff --git a/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerRegisterRequest.java b/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerRegisterRequest.java index 815b46ca..ed413a91 100644 --- a/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerRegisterRequest.java +++ b/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerRegisterRequest.java @@ -46,10 +46,10 @@ public class OwnerRegisterRequest extends UserRegisterRequest { ) private String companyNumber; - @Size(min = 3, max = 5, message = "이미지는 사업자등록증, 영업신고증, 통장사본을 포함하여 최소 3개 최대 5개까지 가능합니다.") + @Size(min = 1, max = 5, message = "이미지는 사업자등록증, 영업신고증, 통장사본을 포함하여 최소 1개 최대 5개까지 가능합니다.") @ApiModelProperty(notes = "첨부 이미지들 \n" + "- required = false \n" - + "- 이미지는 최소 3개 최대 5개까지 허용됨 \n" + + "- 이미지는 최소 1개 최대 5개까지 허용됨 \n" + "- 모든 이미지들이 코인 이미지 형식이어야 함 \n" , dataType = "[Lkoreatech.in.dto.global.AttachmentUrlRequest;" , required = false diff --git a/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerUpdateRequest.java b/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerUpdateRequest.java index f2420d2b..5ba4682b 100644 --- a/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerUpdateRequest.java +++ b/src/main/java/koreatech/in/dto/normal/user/owner/request/OwnerUpdateRequest.java @@ -17,10 +17,10 @@ public class OwnerUpdateRequest // extends UserUpdateRequest // 사장님 Update에 대한 요청이 정확히 확인되지 않아, 필수적인 첨부파일만 넘기도록 함. { - @Size(min = 3, max = 5, message = "이미지는 사업자등록증, 영업신고증, 통장사본을 포함하여 최소 3개 최대 5개까지 가능합니다.") + @Size(min = 1, max = 5, message = "이미지는 사업자등록증, 영업신고증, 통장사본을 포함하여 최소 1개 최대 5개까지 가능합니다.") @ApiModelProperty(notes = "첨부 이미지들 \n" + "- not null \n" - + "- 이미지는 최소 3개 최대 5개까지 허용됨 \n" + + "- 이미지는 최소 1개 최대 5개까지 허용됨 \n" + "- 모든 이미지들이 코인 이미지 형식이어야 함 \n" , dataType = "[Lkoreatech.in.dto.global.AttachmentUrlRequest;" ) diff --git a/src/main/java/koreatech/in/service/BusService.java b/src/main/java/koreatech/in/service/BusService.java index 493ead22..dbcedbba 100644 --- a/src/main/java/koreatech/in/service/BusService.java +++ b/src/main/java/koreatech/in/service/BusService.java @@ -4,6 +4,7 @@ import koreatech.in.domain.Bus.BusRemainTime; import koreatech.in.domain.Bus.SchoolBusCourse; import koreatech.in.domain.Bus.SingleBusTime; +import koreatech.in.dto.normal.bus.BusTimetableResponse; import java.util.List; @@ -16,4 +17,6 @@ public interface BusService { List getTimetable(String busType, String direction, String region); List searchTimetable(String date, String time, String depart, String arrival); + + BusTimetableResponse getTimetableWithUpdatedAt(String busType, String direction, String region); } diff --git a/src/main/java/koreatech/in/service/BusServiceImpl.java b/src/main/java/koreatech/in/service/BusServiceImpl.java index 49e05d3f..e555e3cc 100644 --- a/src/main/java/koreatech/in/service/BusServiceImpl.java +++ b/src/main/java/koreatech/in/service/BusServiceImpl.java @@ -2,9 +2,15 @@ import koreatech.in.domain.Bus.*; import koreatech.in.domain.ErrorMessage; +import koreatech.in.domain.Version.Version; +import koreatech.in.dto.normal.bus.BusTimetableResponse; +import koreatech.in.exception.BaseException; +import koreatech.in.exception.ExceptionInformation; import koreatech.in.exception.PreconditionFailedException; import koreatech.in.mapstruct.normal.bus.SchoolBusCourseConverter; import koreatech.in.repository.BusRepository; +import koreatech.in.repository.VersionMapper; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -16,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; @Service public class BusServiceImpl implements BusService { @@ -23,6 +30,9 @@ public class BusServiceImpl implements BusService { @Autowired private BusRepository busRepository; + @Autowired + private VersionMapper versionMapper; + @Override public BusRemainTime getRemainTime(String busType, String depart, String arrival) { @@ -81,4 +91,21 @@ public List searchTimetable(String date, String time, String depa return result; } + + @Override + public BusTimetableResponse getTimetableWithUpdatedAt(String busType, String direction, String region) { + List busTimetables = getTimetable(busType, direction, region); + + if (busType.equalsIgnoreCase("commuting")) { + busType = "shuttle"; + } + + Version version = Optional.ofNullable(versionMapper.getVersion(busType + "_bus_timetable")) + .orElseThrow(() -> new BaseException(ExceptionInformation.VERSION_NOT_FOUND)); + + return BusTimetableResponse.builder() + .busTimetables(busTimetables) + .updatedAt(version.getUpdated_at()) + .build(); + } }