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
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.fasterxml.jackson.annotation.JsonFormat;
Expand Down Expand Up @@ -53,7 +52,10 @@ public record DiningResponse(
LocalDateTime updatedAt,

@Schema(description = "품절 여부", example = "true")
Boolean soldOut
Boolean soldOut,

@Schema(description = "메뉴 변경 여부", example = "true")
Boolean isChanged
) {
public static DiningResponse from(Dining dining) {
return new DiningResponse(
Expand All @@ -68,14 +70,15 @@ public static DiningResponse from(Dining dining) {
dining.getImageUrl(),
dining.getCreatedAt(),
dining.getUpdatedAt(),
dining.getSoldOut()
dining.getSoldOut(),
dining.getIsChanged()
);
}

public static List<String> toListMenus(String menu) {
menu = menu.substring(1, menu.length() - 1);
return Stream.of(menu.split(","))
.map(str -> str.trim().replaceAll("\"", ""))
.collect(Collectors.toList());
.map(str -> str.trim().replace("\"", ""))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,13 @@ public class Dining extends BaseEntity {
@Column(name = "sold_out", nullable = false)
private Boolean soldOut = false;

@NotNull
@Column(name = "is_changed", nullable = false)
private Boolean isChanged = false;

@Builder
private Dining(Long id, String date, String type, String place, Integer priceCard, Integer priceCash,
Integer kcal, String menu, String imageUrl, Boolean soldOut) {
Integer kcal, String menu, String imageUrl, Boolean soldOut, Boolean isChanged) {
this.id = id;
this.date = date;
this.type = type;
Expand All @@ -69,6 +73,7 @@ private Dining(Long id, String date, String type, String place, Integer priceCar
this.menu = menu;
this.imageUrl = imageUrl;
this.soldOut = soldOut;
this.isChanged = isChanged;
}

public void setImageUrl(String imageUrl) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TABLE `dining_menus` ADD COLUMN is_changed BOOLEAN NOT NULL DEFAULT FALSE
15 changes: 15 additions & 0 deletions src/test/java/in/koreatech/koin/acceptance/DiningApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ void findDinings() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining request2 = Dining.builder()
Expand All @@ -68,6 +69,7 @@ void findDinings() {
.menu("""
["혼합잡곡밥", "가쓰오장국", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining request3 = Dining.builder()
Expand All @@ -81,6 +83,7 @@ void findDinings() {
.menu("""
["참치김치볶음밥", "유부된장국", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(true)
.build();

Dining dining1 = diningRepository.save(request1);
Expand Down Expand Up @@ -116,6 +119,8 @@ void findDinings() {
.isEqualTo(dining1.getUpdatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
softly.assertThat(response.body().jsonPath().getList("[0].menu", String.class))
.containsExactlyInAnyOrderElementsOf(menus1);
softly.assertThat(response.body().jsonPath().getBoolean("[0].is_changed"))
.isEqualTo(dining1.getIsChanged());

softly.assertThat(response.body().jsonPath().getLong("[1].id")).isEqualTo(dining3.getId());
softly.assertThat(response.body().jsonPath().getString("[1].date")).isEqualTo(dining3.getDate());
Expand All @@ -132,6 +137,8 @@ void findDinings() {
.isEqualTo(dining3.getUpdatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
softly.assertThat(response.body().jsonPath().getList("[1].menu", String.class))
.containsExactlyInAnyOrderElementsOf(menus2);
softly.assertThat(response.body().jsonPath().getBoolean("[1].is_changed"))
.isEqualTo(dining3.getIsChanged());

}
);
Expand All @@ -151,6 +158,7 @@ void invalidFormatDate() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining dining = diningRepository.save(request);
Expand Down Expand Up @@ -181,6 +189,7 @@ void nullDate() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "고구마순들깨볶음", "총각김치"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining request2 = Dining.builder()
Expand All @@ -194,6 +203,7 @@ void nullDate() {
.menu("""
["혼합잡곡밥", "가쓰오장국", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining dining1 = diningRepository.save(request1);
Expand Down Expand Up @@ -259,6 +269,7 @@ void requestSoldOut() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining dining2 = Dining.builder()
Expand All @@ -271,6 +282,7 @@ void requestSoldOut() {
.menu("""
["병아리", "소고기", "땡초", "탕"]""")
.soldOut(false)
.isChanged(false)
.build();

diningRepository.save(dining1);
Expand Down Expand Up @@ -321,6 +333,7 @@ void requestSoldOutNoAuth() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

diningRepository.save(dining1);
Expand Down Expand Up @@ -367,6 +380,7 @@ void ImageUpload() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining dining = diningRepository.save(request);
Expand Down Expand Up @@ -420,6 +434,7 @@ void ImageUploadWithNoAuth() {
.menu("""
["병아리콩밥", "(탕)소고기육개장", "땡초부추전", "누룽지탕"]""")
.soldOut(false)
.isChanged(false)
.build();

Dining dining = diningRepository.save(request);
Expand Down