Skip to content

Commit e55d047

Browse files
authored
[RELEASE] v2.2.7 고정 메뉴/제휴 식당 다국어(영/일/베) 지원
[RELEASE] v2.2.7 고정 메뉴/제휴 식당 다국어(영/일/베) 지원
2 parents 921931b + f839296 commit e55d047

9 files changed

Lines changed: 61 additions & 12 deletions

File tree

src/main/java/ssu/eatssu/domain/menu/entity/Menu.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@
1919
import ssu.eatssu.domain.restaurant.entity.Restaurant;
2020
import ssu.eatssu.domain.review.entity.Review;
2121
import ssu.eatssu.domain.review.entity.Reviews;
22+
import ssu.eatssu.domain.user.entity.Language;
23+
import ssu.eatssu.global.i18n.Localizable;
2224

2325
import java.util.ArrayList;
2426
import java.util.List;
2527

2628
@Entity
2729
@Getter
2830
@NoArgsConstructor(access = AccessLevel.PROTECTED)
29-
public class Menu {
31+
public class Menu implements Localizable {
3032

3133
// TODO : 삭제되어야 함
3234
@Embedded
@@ -40,6 +42,12 @@ public class Menu {
4042
@Column(name = "menu_id")
4143
private Long id;
4244
private String name;
45+
@Column(name = "name_en")
46+
private String nameEn;
47+
@Column(name = "name_ja")
48+
private String nameJa;
49+
@Column(name = "name_vi")
50+
private String nameVi;
4351
private Integer price;
4452
@Enumerated(EnumType.STRING)
4553
private Restaurant restaurant;
@@ -67,6 +75,10 @@ public static Menu createFixed(String name, Restaurant restaurant, Integer price
6775
return new Menu(name, restaurant, price, category);
6876
}
6977

78+
public String getNameByLanguage(Language language) {
79+
return getLocalizedValue(language, name, nameEn, nameJa, nameVi);
80+
}
81+
7082
public void addReview(Review review) {
7183
reviews.add(review);
7284
}

src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.Getter;
66
import lombok.NoArgsConstructor;
77
import ssu.eatssu.domain.menu.entity.Menu;
8+
import ssu.eatssu.domain.user.entity.Language;
89

910
@Getter
1011
@NoArgsConstructor
@@ -24,7 +25,7 @@ public class MenuResponse {
2425
@Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4")
2526
private Double rating;
2627

27-
public static MenuResponse from(Menu menu, Double rating) {
28-
return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating);
28+
public static MenuResponse from(Menu menu, Double rating, Language language) {
29+
return new MenuResponse(menu.getId(), menu.getNameByLanguage(language), menu.getPrice(), rating);
2930
}
3031
}

src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse;
1515
import ssu.eatssu.domain.menu.service.MenuService;
1616
import ssu.eatssu.domain.restaurant.entity.Restaurant;
17+
import ssu.eatssu.domain.user.entity.Language;
1718
import ssu.eatssu.global.handler.response.BaseResponse;
1819

1920
@RestController
@@ -38,8 +39,9 @@ public class MenuController {
3839
})
3940
@GetMapping
4041
public BaseResponse<MenuRestaurantResponse> getMenus(
41-
@RequestParam("restaurant") Restaurant restaurant) {
42+
@RequestParam("restaurant") Restaurant restaurant,
43+
@RequestParam(required = false) Language language) {
4244

43-
return BaseResponse.success(menuService.getMenusByRestaurant(restaurant));
45+
return BaseResponse.success(menuService.getMenusByRestaurant(restaurant, language));
4446
}
4547
}

src/main/java/ssu/eatssu/domain/menu/service/MenuService.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse;
1515
import ssu.eatssu.domain.restaurant.entity.Restaurant;
1616
import ssu.eatssu.domain.restaurant.entity.RestaurantType;
17+
import ssu.eatssu.domain.user.entity.Language;
1718
import ssu.eatssu.global.handler.response.BaseException;
1819
import ssu.eatssu.global.handler.response.BaseResponseStatus;
1920

@@ -38,6 +39,10 @@ private static void validateMenuRestaurant(Restaurant restaurant) {
3839
}
3940

4041
public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) {
42+
return getMenusByRestaurant(restaurant, null);
43+
}
44+
45+
public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant, Language language) {
4146
validateMenuRestaurant(restaurant);
4247

4348
List<MenuCategory> categories = findCategoriesByRestaurant(restaurant);
@@ -46,7 +51,8 @@ public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) {
4651

4752
for (MenuCategory category : categories) {
4853
List<MenuResponse> menus = getMenuResponsesByRestaurantAndCategory(restaurant,
49-
category);
54+
category,
55+
language);
5056
response.add(CategoryWithMenusResponse.of(category.getName(), menus));
5157
}
5258

@@ -59,12 +65,14 @@ private List<MenuCategory> findCategoriesByRestaurant(Restaurant restaurant) {
5965

6066
@NotNull
6167
private List<MenuResponse> getMenuResponsesByRestaurantAndCategory(Restaurant restaurant,
62-
MenuCategory category) {
68+
MenuCategory category,
69+
Language language) {
6370
return menuRepository.findAllByRestaurantAndCategory(restaurant, category)
6471
.stream()
6572
.filter(Menu::isContinued)
6673
.map(menu -> MenuResponse.from(menu,
67-
menuRatingService.getMainRatingAverage(menu.getId())))
74+
menuRatingService.getMainRatingAverage(menu.getId()),
75+
language))
6876
.toList();
6977
}
7078

src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import ssu.eatssu.domain.partnership.entity.Partnership;
66
import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant;
77
import ssu.eatssu.domain.partnership.entity.PeriodType;
8+
import ssu.eatssu.domain.user.entity.Language;
89

910
import java.time.LocalDate;
1011

@@ -23,10 +24,11 @@ public class PartnershipInfo {
2324

2425
public static PartnershipInfo fromEntity(Partnership partnership,
2526
PartnershipRestaurant restaurant,
26-
boolean isLiked) {
27+
boolean isLiked,
28+
Language language) {
2729
return PartnershipInfo.builder()
2830
.id(partnership.getId())
29-
.description(partnership.getDescription())
31+
.description(partnership.getDescriptionByLanguage(language))
3032
.startDate(partnership.getStartDate())
3133
.endDate(partnership.getEndDate())
3234
.periodType(partnership.getPeriodType())

src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, L
2727
List<PartnershipInfo> infos = restaurant.getPartnerships().stream()
2828
.map(partnership -> PartnershipInfo.fromEntity(partnership,
2929
restaurant,
30-
isLiked))
30+
isLiked,
31+
language))
3132
.collect(Collectors.toList());
3233

3334
return PartnershipResponse.builder()

src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.hibernate.annotations.Where;
1919
import ssu.eatssu.domain.user.department.entity.College;
2020
import ssu.eatssu.domain.user.department.entity.Department;
21+
import ssu.eatssu.domain.user.entity.Language;
22+
import ssu.eatssu.global.i18n.Localizable;
2123

2224
import java.time.LocalDate;
2325

@@ -27,7 +29,7 @@
2729
@Builder
2830
@AllArgsConstructor
2931
@Where(clause = "end_date >= CURRENT_DATE")
30-
public class Partnership {
32+
public class Partnership implements Localizable {
3133
@Id
3234
@GeneratedValue(strategy = GenerationType.IDENTITY)
3335
@Column(name = "partnership_id")
@@ -36,6 +38,15 @@ public class Partnership {
3638
@Column(name = "description", nullable = false)
3739
private String description;
3840

41+
@Column(name = "description_en", columnDefinition = "TEXT")
42+
private String descriptionEn;
43+
44+
@Column(name = "description_ja", columnDefinition = "TEXT")
45+
private String descriptionJa;
46+
47+
@Column(name = "description_vi", columnDefinition = "TEXT")
48+
private String descriptionVi;
49+
3950
@Column(name = "start_date", nullable = false)
4051
private LocalDate startDate;
4152

@@ -59,6 +70,10 @@ public class Partnership {
5970
@JoinColumn(name = "partnership_restaurant_id")
6071
private PartnershipRestaurant partnershipRestaurant;
6172

73+
public String getDescriptionByLanguage(Language language) {
74+
return getLocalizedValue(language, description, descriptionEn, descriptionJa, descriptionVi);
75+
}
76+
6277
public void setPartnershipCollege(College partnershipCollege) {
6378
this.partnershipCollege = partnershipCollege;
6479
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE partnership
2+
ADD COLUMN description_en TEXT NULL,
3+
ADD COLUMN description_ja TEXT NULL,
4+
ADD COLUMN description_vi TEXT NULL;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE menu
2+
ADD COLUMN name_en VARCHAR(255) NULL,
3+
ADD COLUMN name_ja VARCHAR(255) NULL,
4+
ADD COLUMN name_vi VARCHAR(255) NULL;

0 commit comments

Comments
 (0)