Skip to content
Merged
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
11 changes: 11 additions & 0 deletions src/main/java/kr/ontherec/api/modules/item/entity/DOW.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kr.ontherec.api.modules.item.entity;

public enum DOW {
MON,
TUE,
WED,
THU,
FRI,
SAT,
SUN
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public interface StageMapper {
@Mapping(source = "stage.stageWidth", target = "area.stageWidth")
@Mapping(source = "stage.stageHeight", target = "area.stageHeight")
@Mapping(source = "stage.holidays", target = "business.holidays")
@Mapping(source = "stage.timeBlocks", target = "business.timeBlocks")
@Mapping(source = "stage.bookingFrom", target = "business.bookingFrom")
@Mapping(source = "stage.bookingUntil", target = "business.bookingUntil")
@Mapping(source = "stage.refundPolicies", target = "business.refundPolicies")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
import java.time.Duration;

public record RefundPolicyRegisterRequestDto(
@NotNull
@NotNull(message = "환불 마감 기한을 입력해주세요.")
Duration dayBefore,
@NotNull
@NotNull(message = "환불 비율을 입력해주세요.")
@DecimalMin(value = "0", message = "환불 수수료 비율은 최소 0까지 설정 가능합니다.")
@DecimalMax(value = "100", message = "환불 수수료 비율은 최대 100까지 설정 가능합니다.")
@Digits(integer = 3, fraction = 1, message = "환불 수수료 비율은 최대 소수점 첫 번째 자리까지 설정 가능합니다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@

public record RefundPolicyUpdateRequestDto(
Long id,
@NotNull
@NotNull(message = "환불 마감 기한을 입력해주세요.")
Duration dayBefore,
@NotNull
@NotNull(message = "환불 비율을 입력해주세요.")
@DecimalMin(value = "0", message = "환불 수수료 비율은 최소 0까지 설정 가능합니다.")
@DecimalMax(value = "100", message = "환불 수수료 비율은 최대 100까지 설정 가능합니다.")
@Digits(integer = 3, fraction = 1, message = "환불 수수료 비율은 최대 소수점 첫 번째 자리까지 설정 가능합니다.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,16 @@ public record Area (

public record Business (
Set<HolidayType> holidays,
@NotNull(message = "영업 시간을 입력해주세요.")
Set<@Valid TimeBlockCreateRequestDto> timeBlocks,
@NotNull(message = "예약 시작 기간을 입력해주세요")
@DurationMax(days = 90L, message = "예약 기간은 최대 90일 전까지 설정 가능합니다")
Duration bookingFrom,
@DurationMax(days = 90L, message = "예약 기간은 최대 90일 전까지 설정 가능합니다")
@NotNull(message = "예약 마감 기간을 입력해주세요")
Duration bookingUntil,
@Valid
@NotNull(message = "환불 정책을 입력해주세요.")
Set<RefundPolicyRegisterRequestDto> refundPolicies
Set<@Valid RefundPolicyRegisterRequestDto> refundPolicies
) {}

public record Engineering (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import kr.ontherec.api.modules.item.entity.HolidayType;
import kr.ontherec.api.modules.item.entity.RefundPolicy;
import kr.ontherec.api.modules.stage.entity.StageType;
import kr.ontherec.api.modules.stage.entity.TimeBlock;
import lombok.Getter;
import lombok.Setter;

Expand Down Expand Up @@ -52,9 +53,10 @@ public record Area (
) {}

public record Business (
Set<HolidayType> holidays,
Set<TimeBlock> timeBlocks,
Duration bookingFrom,
Duration bookingUntil,
Set<HolidayType> holidays,
Set<RefundPolicy> refundPolicies
) {}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ public record Area(

public record Business(
Set<HolidayType> holidays,
@NotNull(message = "영업 시간을 입력해주세요.")
Set<@Valid TimeBlockUpdateRequestDto> timeBlocks,
@NotNull(message = "예약 시작 기간을 입력해주세요")
@DurationMax(days = 90L, message = "예약 기간은 최대 90일 전까지 설정 가능합니다")
Duration bookingFrom,
@NotNull(message = "예약 마감 기간을 입력해주세요")
Duration bookingUntil,
@Valid
@NotNull(message = "환불 정책을 입력해주세요.")
Set<RefundPolicyUpdateRequestDto> refundPolicies
Set<@Valid RefundPolicyUpdateRequestDto> refundPolicies
) {}

public record Engineering(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package kr.ontherec.api.modules.stage.dto;

import jakarta.validation.constraints.NotNull;
import kr.ontherec.api.modules.item.entity.DOW;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalTime;

public record TimeBlockCreateRequestDto(
@NotNull(message = "요일을 입력해주세요")
DOW dow,
@NotNull(message = "시작 시간을 입력해주세요")
LocalTime startTime,
@NotNull(message = "종료 시간을 입력해주세요")
LocalTime endTime,
@NotNull(message = "기본 이용 시간을 입력해주세요")
Duration standardTime,
@NotNull(message = "기본 요금을 입력해주세요")
BigDecimal standardPrice,
@NotNull(message = "단위 시간당 추가 비용을 입력해주세요")
BigDecimal extraPerUnit
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package kr.ontherec.api.modules.stage.dto;

import jakarta.validation.constraints.NotNull;
import kr.ontherec.api.modules.item.entity.DOW;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalTime;

public record TimeBlockUpdateRequestDto(
Long id,
@NotNull(message = "요일을 입력해주세요")
DOW dow,
@NotNull(message = "시작 시간을 입력해주세요")
LocalTime startTime,
@NotNull(message = "종료 시간을 입력해주세요")
LocalTime endTime,
@NotNull(message = "기본 이용 시간을 입력해주세요")
Duration standardTime,
@NotNull(message = "기본 요금을 입력해주세요")
BigDecimal standardPrice,
@NotNull(message = "단위 시간당 추가 비용을 입력해주세요")
BigDecimal extraPerUnit
) {}
9 changes: 6 additions & 3 deletions src/main/java/kr/ontherec/api/modules/stage/entity/Stage.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,22 +98,25 @@ public class Stage extends BaseEntity {
private BigDecimal stageHeight;

// business
// TODO: timeblocks

@ElementCollection(fetch = EAGER)
@Column
@Enumerated(STRING)
@Builder.Default
private Set<HolidayType> holidays = new HashSet<>();

// TODO: booking slots
@OneToMany(fetch = EAGER, cascade = ALL, orphanRemoval = true)
@JoinColumn
@Builder.Default
private Set<TimeBlock> timeBlocks = new HashSet<>();

@Column(nullable = false)
private Duration bookingFrom;

@Column(nullable = false)
private Duration bookingUntil;

// TODO: booking slots

@OneToMany(fetch = EAGER, cascade = ALL, orphanRemoval = true)
@JoinColumn
@Builder.Default
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/kr/ontherec/api/modules/stage/entity/TimeBlock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package kr.ontherec.api.modules.stage.entity;

import jakarta.persistence.*;
import kr.ontherec.api.modules.item.entity.DOW;
import lombok.*;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalTime;

import static jakarta.persistence.EnumType.STRING;
import static jakarta.persistence.GenerationType.IDENTITY;
import static lombok.AccessLevel.PRIVATE;
import static lombok.AccessLevel.PROTECTED;

@Entity @RequiredArgsConstructor(access = PROTECTED)
@Builder @AllArgsConstructor(access = PRIVATE)
@Getter @Setter @EqualsAndHashCode(of = { "dow", "startTime", "endTime" })
public class TimeBlock {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;

@Column(nullable = false)
@Enumerated(STRING)
DOW dow;

@Column(nullable = false)
LocalTime startTime;

@Column(nullable = false)
LocalTime endTime;

@Column(nullable = false)
Duration standardTime;

@Column(nullable = false)
BigDecimal standardPrice;

@Column(nullable = false)
BigDecimal extraPerUnit;
}
5 changes: 4 additions & 1 deletion src/main/resources/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@ VALUES (1, 'https://www.ontherec.kr');
INSERT INTO stage_holidays (stage_id, holidays)
VALUES (1, '설날');

INSERT INTO time_block (id, dow, start_time, end_time, standard_time, standard_price, extra_per_unit)
VALUES (1, 'MON', '09:00:00', '18:00:00', 10800000000000, 300000, 20000);

INSERT INTO refund_policy (id, refund_policies_id, day_before, percent)
VALUES (1, 1, 7, 100);
VALUES (1, 1, 604800000000000, 100);

INSERT INTO stage_liked_usernames (stage_id, liked_usernames)
VALUES (1, 'test');
Expand Down
21 changes: 16 additions & 5 deletions src/test/java/kr/ontherec/api/infra/fixture/StageFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import kr.ontherec.api.modules.item.entity.RefundPolicy;
import kr.ontherec.api.modules.stage.application.StageCommandService;
import kr.ontherec.api.modules.stage.entity.Stage;
import kr.ontherec.api.modules.stage.entity.TimeBlock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

Expand All @@ -16,6 +17,9 @@
import java.util.List;
import java.util.Set;

import static java.time.LocalTime.MAX;
import static java.time.LocalTime.NOON;
import static kr.ontherec.api.modules.item.entity.DOW.MON;
import static kr.ontherec.api.modules.item.entity.HolidayType.설날;
import static kr.ontherec.api.modules.stage.entity.StageType.RECTANGLE;

Expand Down Expand Up @@ -50,13 +54,20 @@ public Stage create(Host host, String title, String brn) {
.stageHeight(BigDecimal.valueOf(5))
// business
.holidays(new HashSet<>(Set.of(설날)))
.timeBlocks(new HashSet<>(Set.of(TimeBlock.builder()
.dow(MON)
.startTime(NOON)
.endTime(MAX)
.standardTime(Duration.ofHours(3))
.standardPrice(BigDecimal.valueOf(300000))
.extraPerUnit(BigDecimal.valueOf(20000))
.build())))
.bookingFrom(Duration.ofDays(30))
.bookingUntil(Duration.ofDays(1))
.refundPolicies(
new HashSet<>(Set.of(RefundPolicy.builder()
.dayBefore(Duration.ofDays(30))
.percent(BigDecimal.valueOf(33.3))
.build())))
.refundPolicies(new HashSet<>(Set.of(RefundPolicy.builder()
.dayBefore(Duration.ofDays(30))
.percent(BigDecimal.valueOf(33.3))
.build())))
// engineering
.stageManagingAvailable(false)
.stageManagingFee(null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package kr.ontherec.api.modules.chat.application;

import kr.ontherec.api.modules.chat.entity.Chat;
import kr.ontherec.api.modules.chat.dto.ChatCreateRequestDto;
import kr.ontherec.api.infra.UnitTest;
import kr.ontherec.api.infra.fixture.ChatFactory;
import kr.ontherec.api.modules.chat.dto.ChatCreateRequestDto;
import kr.ontherec.api.modules.chat.entity.Chat;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down
Loading