Skip to content

Commit

Permalink
refactor: 운영 시간 표현 방식 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
This2sho committed Jun 13, 2024
1 parent 4b85021 commit 879a941
Show file tree
Hide file tree
Showing 17 changed files with 195 additions and 132 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.parkingcomestrue.external.api.parkingapi.korea;

import static com.parkingcomestrue.common.domain.parking.TimeInfo.MAX_END_TIME;

import com.parkingcomestrue.common.domain.parking.BaseInformation;
import com.parkingcomestrue.common.domain.parking.Fee;
import com.parkingcomestrue.common.domain.parking.FeePolicy;
Expand Down Expand Up @@ -114,7 +116,7 @@ private TimeInfo toTimeInfo(String beginTime, String endTime) {

private LocalTime parsingOperationTime(String time) {
if (time.equals(HOURS_24)) {
return LocalTime.MAX;
return MAX_END_TIME;
}
try {
return LocalTime.parse(time, TIME_FORMATTER);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.parkingcomestrue.external.api.parkingapi.pusan;

import static com.parkingcomestrue.common.domain.parking.TimeInfo.MAX_END_TIME;

import com.parkingcomestrue.common.domain.parking.BaseInformation;
import com.parkingcomestrue.common.domain.parking.Fee;
import com.parkingcomestrue.common.domain.parking.FeePolicy;
Expand Down Expand Up @@ -105,7 +107,7 @@ private TimeInfo toTimeInfo(String beginTime, String endTime) {

private LocalTime parsingOperationTime(String time) {
if (time.equals(HOURS_24)) {
return LocalTime.MAX;
return MAX_END_TIME;
}
try {
return LocalTime.parse(time, TIME_FORMATTER);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.parkingcomestrue.external.api.parkingapi.seoul;

import static com.parkingcomestrue.common.domain.parking.TimeInfo.MAX_END_TIME;

import com.parkingcomestrue.common.domain.parking.BaseInformation;
import com.parkingcomestrue.common.domain.parking.Fee;
import com.parkingcomestrue.common.domain.parking.FeePolicy;
Expand Down Expand Up @@ -126,7 +128,7 @@ private OperatingTime getOperatingTime(final SeoulPublicParkingResponse.ParkingI

private LocalTime parsingOperationTime(String time) {
if (time.equals(HOURS_24)) {
return LocalTime.MAX;
return MAX_END_TIME;
}
try {
return LocalTime.parse(time, TIME_FORMATTER);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,31 +24,25 @@ public class ParkingBulkRepository {
ps.setInt(6, parking.getSpace().getCapacity());
ps.setInt(7, parking.getSpace().getCurrentParking());

ps.setObject(8, parking.getOperatingTime().getHolidayBeginTime());
ps.setObject(9, parking.getOperatingTime().getHolidayEndTime());
ps.setObject(10, parking.getFreeOperatingTime().getHolidayBeginTime());
ps.setObject(11, parking.getFreeOperatingTime().getHolidayEndTime());
ps.setString(8, parking.getOperatingTime().getHolidayOperatingTime().toString());
ps.setString(9, parking.getFreeOperatingTime().getHolidayFreeOperatingTime().toString());

ps.setObject(12, parking.getOperatingTime().getSaturdayBeginTime());
ps.setObject(13, parking.getOperatingTime().getSaturdayEndTime());
ps.setObject(14, parking.getFreeOperatingTime().getSaturdayBeginTime());
ps.setObject(15, parking.getFreeOperatingTime().getSaturdayEndTime());
ps.setString(10, parking.getOperatingTime().getSaturdayOperatingTime().toString());
ps.setString(11, parking.getFreeOperatingTime().getSaturdayFreeOperatingTime().toString());

ps.setObject(16, parking.getOperatingTime().getWeekdayBeginTime());
ps.setObject(17, parking.getOperatingTime().getWeekdayEndTime());
ps.setObject(18, parking.getFreeOperatingTime().getWeekdayBeginTime());
ps.setObject(19, parking.getFreeOperatingTime().getWeekdayEndTime());
ps.setString(12, parking.getOperatingTime().getWeekdayOperatingTime().toString());
ps.setString(13, parking.getFreeOperatingTime().getWeekdayFreeOperatingTime().toString());

ps.setObject(20, parking.getCreatedAt());
ps.setObject(21, parking.getUpdatedAt());
ps.setObject(14, parking.getCreatedAt());
ps.setObject(15, parking.getUpdatedAt());

ps.setString(22, parking.getBaseInformation().getAddress());
ps.setString(23, parking.getBaseInformation().getName());
ps.setString(24, parking.getBaseInformation().getTel());
ps.setString(25, parking.getBaseInformation().getOperationType().name());
ps.setString(26, parking.getBaseInformation().getParkingType().name());
ps.setString(27, parking.getBaseInformation().getPayTypesName());
ps.setString(28, toWKT(parking.getLocation()));
ps.setString(16, parking.getBaseInformation().getAddress());
ps.setString(17, parking.getBaseInformation().getName());
ps.setString(18, parking.getBaseInformation().getTel());
ps.setString(19, parking.getBaseInformation().getOperationType().name());
ps.setString(20, parking.getBaseInformation().getParkingType().name());
ps.setString(21, parking.getBaseInformation().getPayTypesName());
ps.setString(22, toWKT(parking.getLocation()));
};

private String toWKT(Location location) {
Expand All @@ -62,13 +56,13 @@ public void saveAllWithBulk(List<Parking> parkingLots) {
String sql = "INSERT INTO parking "
+ "(base_fee, base_time_unit, extra_fee, extra_time_unit, day_maximum_fee, "
+ "capacity, current_parking, "
+ "holiday_begin_time, holiday_end_time, holiday_free_begin_time, holiday_free_end_time, "
+ "saturday_begin_time, saturday_end_time, saturday_free_begin_time, saturday_free_end_time, "
+ "weekday_begin_time, weekday_end_time, weekday_free_begin_time, weekday_free_end_time, "
+ "holiday_operating_time, holiday_free_operating_time, "
+ "saturday_operating_time, saturday_free_operating_time, "
+ "weekday_operating_time, weekday_free_operating_time, "
+ "created_at, updated_at, "
+ "address, name, tel, operation_type, parking_type, pay_types, location) "
+ "VALUES "
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ST_GeomFromText(?, 4326))";
+ "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ST_GeomFromText(?, 4326))";

jdbcTemplate.batchUpdate(
sql,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import com.parkingcomestrue.common.domain.parking.PayType;
import com.parkingcomestrue.common.domain.parking.TimeInfo;
import com.parkingcomestrue.common.domain.parking.TimeUnit;
import com.parkingcomestrue.external.api.parkingapi.korea.KoreaParkingAdapter;
import com.parkingcomestrue.external.api.parkingapi.korea.KoreaParkingResponse;
import java.io.File;
import java.io.IOException;
import org.assertj.core.api.SoftAssertions;
Expand Down Expand Up @@ -77,9 +75,9 @@ class KoreaParkingAdapterTest {
soft.assertThat(parking.getFeePolicy().getExtraTimeUnit()).isEqualTo(TimeUnit.NO_INFO);
soft.assertThat(parking.getFeePolicy().getDayMaximumFee()).isEqualTo(Fee.NO_INFO);

soft.assertThat(parking.getOperatingTime().getWeekday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getSaturday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getHoliday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getWeekdayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getSaturdayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getHolidayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);

soft.assertThat(parking.getBaseInformation().getPayTypesDescription()).isEqualTo(PayType.CARD.getDescription());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import com.parkingcomestrue.common.domain.parking.PayType;
import com.parkingcomestrue.common.domain.parking.TimeInfo;
import com.parkingcomestrue.common.domain.parking.TimeUnit;
import com.parkingcomestrue.external.api.parkingapi.pusan.PusanPublicParkingAdapter;
import com.parkingcomestrue.external.api.parkingapi.pusan.PusanPublicParkingResponse;
import java.io.File;
import java.io.IOException;
import org.assertj.core.api.SoftAssertions;
Expand Down Expand Up @@ -78,9 +76,9 @@ class PusanPublicParkingAdapterTest {
soft.assertThat(parking.getFeePolicy().getExtraTimeUnit()).isEqualTo(TimeUnit.from(10));
soft.assertThat(parking.getFeePolicy().getDayMaximumFee()).isEqualTo(Fee.ZERO);

soft.assertThat(parking.getOperatingTime().getWeekday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getSaturday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getHoliday()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getWeekdayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getSaturdayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);
soft.assertThat(parking.getOperatingTime().getHolidayOperatingTime()).isEqualTo(TimeInfo.ALL_DAY);

soft.assertThat(parking.getBaseInformation().getPayTypesDescription()).isEqualTo(PayType.NO_INFO.getDescription());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
import com.parkingcomestrue.common.domain.parking.PayType;
import com.parkingcomestrue.common.domain.parking.TimeInfo;
import com.parkingcomestrue.common.domain.parking.TimeUnit;
import com.parkingcomestrue.external.api.parkingapi.seoul.SeoulPublicParkingAdapter;
import com.parkingcomestrue.external.api.parkingapi.seoul.SeoulPublicParkingResponse;
import java.io.File;
import java.io.IOException;
import java.time.LocalTime;
Expand Down Expand Up @@ -78,9 +76,9 @@ class SeoulPublicParkingAdapterTest {
soft.assertThat(parking.getFeePolicy().getExtraTimeUnit()).isEqualTo(TimeUnit.from(5));
soft.assertThat(parking.getFeePolicy().getDayMaximumFee()).isEqualTo(Fee.ZERO);

soft.assertThat(parking.getOperatingTime().getWeekday()).isEqualTo(new TimeInfo(LocalTime.of(9, 0), LocalTime.of(19, 0)));
soft.assertThat(parking.getOperatingTime().getSaturday()).isEqualTo(new TimeInfo(LocalTime.of(9, 0), LocalTime.of(15, 0)));
soft.assertThat(parking.getOperatingTime().getHoliday()).isEqualTo(new TimeInfo(LocalTime.of(0, 0), LocalTime.of(0, 0)));
soft.assertThat(parking.getOperatingTime().getWeekdayOperatingTime()).isEqualTo(new TimeInfo(LocalTime.of(9, 0), LocalTime.of(19, 0)));
soft.assertThat(parking.getOperatingTime().getSaturdayOperatingTime()).isEqualTo(new TimeInfo(LocalTime.of(9, 0), LocalTime.of(15, 0)));
soft.assertThat(parking.getOperatingTime().getHolidayOperatingTime()).isEqualTo(new TimeInfo(LocalTime.of(0, 0), LocalTime.of(0, 0)));

soft.assertThat(parking.getBaseInformation().getPayTypesDescription()).isEqualTo(PayType.NO_INFO.getDescription());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,41 +1,38 @@
package com.parkingcomestrue.common.domain.parking;

import jakarta.persistence.AttributeOverride;
import jakarta.persistence.Column;
import static com.parkingcomestrue.common.domain.parking.TimeInfo.MAX_END_TIME;

import com.parkingcomestrue.common.infra.converter.TimeInfoConverter;
import jakarta.persistence.Convert;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import java.time.LocalTime;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Embeddable
@Getter
public class FreeOperatingTime {

public static final FreeOperatingTime ALWAYS_PAY = new FreeOperatingTime(TimeInfo.CLOSED, TimeInfo.CLOSED,
TimeInfo.CLOSED);
public static final FreeOperatingTime ALWAYS_FREE = new FreeOperatingTime(TimeInfo.ALL_DAY, TimeInfo.ALL_DAY,
TimeInfo.ALL_DAY);

@AttributeOverride(name = "beginTime", column = @Column(name = "weekday_free_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "weekday_free_end_time"))
@Embedded
private TimeInfo weekday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo weekdayFreeOperatingTime;

@AttributeOverride(name = "beginTime", column = @Column(name = "saturday_free_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "saturday_free_end_time"))
@Embedded
private TimeInfo saturday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo saturdayFreeOperatingTime;

@AttributeOverride(name = "beginTime", column = @Column(name = "holiday_free_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "holiday_free_end_time"))
@Embedded
private TimeInfo holiday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo holidayFreeOperatingTime;

public FreeOperatingTime(TimeInfo weekday, TimeInfo saturday, TimeInfo holiday) {
this.weekday = weekday;
this.saturday = saturday;
this.holiday = holiday;
public FreeOperatingTime(TimeInfo weekdayFreeOperatingTime, TimeInfo saturdayFreeOperatingTime, TimeInfo holidayFreeOperatingTime) {
this.weekdayFreeOperatingTime = weekdayFreeOperatingTime;
this.saturdayFreeOperatingTime = saturdayFreeOperatingTime;
this.holidayFreeOperatingTime = holidayFreeOperatingTime;
}

public int calculateNonFreeUsageMinutes(DayParking dayParking) {
Expand All @@ -52,46 +49,22 @@ public int calculateNonFreeUsageMinutes(DayParking dayParking) {

private TimeInfo getTodayTimeInfo(DayParking dayParking) {
if (dayParking.isWeekDay()) {
return weekday;
return weekdayFreeOperatingTime;
}
if (dayParking.isSaturday()) {
return saturday;
return saturdayFreeOperatingTime;
}
return holiday;
return holidayFreeOperatingTime;
}

private boolean isFreeDay(TimeInfo today) {
return today.equals(TimeInfo.ALL_DAY);
}

private int calculateMinutes(LocalTime localTime) {
if (localTime.equals(LocalTime.MAX)) {
if (localTime.equals(MAX_END_TIME)) {
return localTime.getHour() * 60 + localTime.getMinute() + 1;
}
return localTime.getHour() * 60 + localTime.getMinute();
}

public LocalTime getWeekdayBeginTime() {
return weekday.getBeginTime();
}

public LocalTime getWeekdayEndTime() {
return weekday.getEndTime();
}

public LocalTime getSaturdayBeginTime() {
return saturday.getBeginTime();
}

public LocalTime getSaturdayEndTime() {
return saturday.getEndTime();
}

public LocalTime getHolidayBeginTime() {
return holiday.getBeginTime();
}

public LocalTime getHolidayEndTime() {
return holiday.getEndTime();
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.parkingcomestrue.common.domain.parking;

import jakarta.persistence.AttributeOverride;
import jakarta.persistence.Column;
import com.parkingcomestrue.common.infra.converter.TimeInfoConverter;
import jakarta.persistence.Convert;
import jakarta.persistence.Embeddable;
import jakarta.persistence.Embedded;
import java.time.LocalTime;
import lombok.AccessLevel;
import lombok.Getter;
Expand All @@ -17,50 +16,44 @@ public class OperatingTime {
public static final OperatingTime ALWAYS_OPEN = new OperatingTime(TimeInfo.ALL_DAY, TimeInfo.ALL_DAY,
TimeInfo.ALL_DAY);

@AttributeOverride(name = "beginTime", column = @Column(name = "weekday_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "weekday_end_time"))
@Embedded
private TimeInfo weekday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo weekdayOperatingTime;

@AttributeOverride(name = "beginTime", column = @Column(name = "saturday_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "saturday_end_time"))
@Embedded
private TimeInfo saturday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo saturdayOperatingTime;

@AttributeOverride(name = "beginTime", column = @Column(name = "holiday_begin_time"))
@AttributeOverride(name = "endTime", column = @Column(name = "holiday_end_time"))
@Embedded
private TimeInfo holiday;
@Convert(converter = TimeInfoConverter.class)
private TimeInfo holidayOperatingTime;

public OperatingTime(TimeInfo weekday,
TimeInfo saturday,
TimeInfo holiday) {
this.weekday = weekday;
this.saturday = saturday;
this.holiday = holiday;
public OperatingTime(TimeInfo weekdayOperatingTime,
TimeInfo saturdayOperatingTime,
TimeInfo holidayOperatingTime) {
this.weekdayOperatingTime = weekdayOperatingTime;
this.saturdayOperatingTime = saturdayOperatingTime;
this.holidayOperatingTime = holidayOperatingTime;
}

public LocalTime getWeekdayBeginTime() {
return weekday.getBeginTime();
return weekdayOperatingTime.getBeginTime();
}

public LocalTime getWeekdayEndTime() {
return weekday.getEndTime();
return weekdayOperatingTime.getEndTime();
}

public LocalTime getSaturdayBeginTime() {
return saturday.getBeginTime();
return saturdayOperatingTime.getBeginTime();
}

public LocalTime getSaturdayEndTime() {
return saturday.getEndTime();
return saturdayOperatingTime.getEndTime();
}

public LocalTime getHolidayBeginTime() {
return holiday.getBeginTime();
return holidayOperatingTime.getBeginTime();
}

public LocalTime getHolidayEndTime() {
return holiday.getEndTime();
return holidayOperatingTime.getEndTime();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.parkingcomestrue.common.domain.parking;

import static com.parkingcomestrue.common.domain.parking.TimeInfo.MAX_END_TIME;

import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
Expand Down Expand Up @@ -36,7 +38,7 @@ private List<DayParking> separateDate(LocalDateTime beginTime, LocalDateTime end
dayParkingDates.add(makeFirstDayParking(beginTime));
beginTime = beginTime.plusDays(1);
while (!isSameDate(beginTime, endTime)) {
dayParkingDates.add(new DayParking(Day.from(beginTime.getDayOfWeek()), LocalTime.MIN, LocalTime.MAX));
dayParkingDates.add(new DayParking(Day.from(beginTime.getDayOfWeek()), LocalTime.MIN, MAX_END_TIME));
beginTime = beginTime.plusDays(1);
}
dayParkingDates.add(makeLastDayParking(endTime));
Expand All @@ -62,7 +64,7 @@ private boolean isSameDayOfMonth(LocalDateTime beginTime, LocalDateTime endTime)
}

private DayParking makeFirstDayParking(LocalDateTime beginTime) {
return new DayParking(Day.from(beginTime.getDayOfWeek()), beginTime.toLocalTime(), LocalTime.MAX);
return new DayParking(Day.from(beginTime.getDayOfWeek()), beginTime.toLocalTime(), MAX_END_TIME);
}

private DayParking makeLastDayParking(LocalDateTime endTime) {
Expand Down
Loading

0 comments on commit 879a941

Please sign in to comment.