Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/onboarding #77

Merged
merged 11 commits into from
Aug 10, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -57,7 +58,7 @@ public List<Menu> getAllMenus() {


@Transactional(readOnly = true)
public Long findMaxGroupId(Long userId){
public Long findMaxGroupId(Long userId) {
List<Menu> menus = menuRepository.findByUserId(userId);

Long maxGroupId = null;
Expand All @@ -76,7 +77,6 @@ public Long findMaxGroupId(Long userId){
}



@Transactional
// 메뉴 등록 * (이미지 제외)
public PostMenuResponse createMenu(PostMenuRequest postMenuRequest, Long userId) {
Expand Down Expand Up @@ -112,8 +112,6 @@ public PostMenuResponse createMenu(PostMenuRequest postMenuRequest, Long userId)
}




// 식당, 메뉴판 연관관계 설정

for (Long menuFolderId : menuFolderIds) {
Expand Down Expand Up @@ -142,7 +140,6 @@ public PostMenuResponse createMenu(PostMenuRequest postMenuRequest, Long userId)
}



// 메뉴 태그 등록
@Transactional
public List<MenuTag> createMenuTags(PostMenuRequest postMenuRequest, Menu menu) {
Expand Down Expand Up @@ -226,10 +223,6 @@ public void updateMenu(Long groupId, Long userId, PostMenuRequest postMenuReques
}






@Transactional
public String updateMenuImage(PatchMenuImage patchMenuImage, long id, long userId) {

Expand All @@ -239,7 +232,7 @@ public String updateMenuImage(PatchMenuImage patchMenuImage, long id, long userI
List<MultipartFile> imgs = patchMenuImage.getMenuImgs();

List<String> fileUrls = new ArrayList<>();
if(imgs != null) {
if (imgs != null) {
removeImages(menu);

for (MultipartFile img : imgs) {
Expand Down Expand Up @@ -279,15 +272,14 @@ public String updateMenuImage(PatchMenuImage patchMenuImage, long id, long userI
}

@Transactional
public void removeImages(Menu menu){
public void removeImages(Menu menu) {
menu.removeImage();
em.flush();
}



@Transactional
public String removeMenu(Menu menu){
public String removeMenu(Menu menu) {

User user = menu.getUser();
Place place = menu.getPlace();
Expand All @@ -304,12 +296,16 @@ public String removeMenu(Menu menu){
return "OK";
}

@Transactional
/* @Transactional
public List<Menu> findMenuByPlace(Long placeId) {
List<Menu> menuList = menuRepository.findMenuByPlaceId(placeId, Arrays.asList(MenuStatus.CREATED, MenuStatus.UPDATED));
}*/
public List<Menu> findMenuByPlace(Long placeId, Long userId){
List<Menu> menuList = menuRepository.findMenuByPlaceIdAndUserId(placeId, userId, Arrays.asList(MenuStatus.CREATED, MenuStatus.UPDATED))

.orElseThrow(() -> new MenuNotFoundException());

if(menuList.isEmpty()){
if (menuList.isEmpty()) {
throw new MenuNotFoundException();
}

Expand All @@ -321,7 +317,7 @@ public Menu findMenuInfo(Long menuId, Long userId) {
return menuRepository.findById(menuId).orElseThrow(() -> new MenuNotFoundException());
}


@Transactional
public MenuDetailDto getCertainMenu(Long userId, Long groupId) {
List<Menu> certainMenu = menuRepository.findCertainMenuByUserIdAndGroupId(userId, groupId);
Expand All @@ -338,7 +334,7 @@ public MenuDetailDto getCertainMenu(Long userId, Long groupId) {
// }

@Transactional
public Page<MenuDto> getAllMenusByCriteria2(String title, String[] tags, Integer menuFolderId, Long userId, int minPrice, int maxPrice, Pageable pageable){
public Page<MenuDto> getAllMenusByCriteria2(String title, String[] tags, Integer menuFolderId, Long userId, int minPrice, int maxPrice, Pageable pageable) {
// 메뉴를 페이징 처리하여 조회

Integer tagCount = (tags != null && tags.length > 0) ? tags.length : null; // 태그가 없으면 null로 설정
Expand All @@ -350,8 +346,8 @@ public Page<MenuDto> getAllMenusByCriteria2(String title, String[] tags, Integer
maxPrice = 999999; // 기본값: 무한대 (최대)
}

log.info("가격은 " +minPrice);
log.info("가격은 " +maxPrice);
log.info("가격은 " + minPrice);
log.info("가격은 " + maxPrice);
Page<Menu> menuPage = menuRepository.findingMenusByCriteria2(title, tags, tagCount, menuFolderId, userId, minPrice, maxPrice, pageable);


Expand Down Expand Up @@ -379,8 +375,20 @@ public void removeAllMenus(Long groupId, Long userId) {
}
}


@Transactional
public List<Menu> getAllMenusByTagName(String tag, Long userId){
String[] integers = {tag};
Pageable pageable = PageRequest.of(1, 5);
Page<Menu> menuPage = menuRepository.findingMenusByCriteria2(null, integers, 1, null, userId, 0, 100000000, pageable);
// List<Menu> menus = menuRepository.findingMenusByCriteria2(null, integers, 1, null, userId);
//List<Menu> menus = menuRepository.findingMenusByCriteria(title, tag, menuFolderId, userId);
List<Menu> menuList = menuPage.getContent();
return menuList; // List<MenuDto> 반환
}
@Transactional(readOnly = true)
public List<Menu> getAllMenusByGroupIdAndUserId(Long groupId, Long userId){
return menuRepository.findByUserIdAndGroupId(userId, groupId);

}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.ourMenu.backend.domain.onboarding.api;

import com.ourMenu.backend.domain.menu.domain.Menu;
import com.ourMenu.backend.domain.menu.dto.response.MenuDto;
import com.ourMenu.backend.domain.onboarding.api.response.GetOnboardingResponse;
import com.ourMenu.backend.domain.onboarding.api.response.GetQuestionRecommands;
import com.ourMenu.backend.domain.onboarding.api.response.GetTagRecommends;
import com.ourMenu.backend.domain.onboarding.application.OnBoardingService;
import com.ourMenu.backend.domain.onboarding.domain.AnswerType;
import com.ourMenu.backend.domain.onboarding.domain.DefaultTag;
import com.ourMenu.backend.domain.onboarding.domain.Question;
import com.ourMenu.backend.global.argument_resolver.UserId;
import com.ourMenu.backend.global.common.ApiResponse;
Expand All @@ -31,12 +34,20 @@ public ApiResponse<List<GetOnboardingResponse>> getOnboarding() {
return ApiUtils.success(list);
}

@GetMapping("/recommand")
public ApiResponse<GetQuestionRecommands> getQuestionRecommand(@RequestParam("questionId") int questionId,
@RequestParam("answer") AnswerType answerType,
@UserId Long userId) {
@GetMapping("/recommend")
public ApiResponse<GetQuestionRecommands> getQuestionRecommend(@RequestParam("questionId") int questionId,
@RequestParam("answer") AnswerType answerType,
@UserId Long userId) {
List<Menu> menus = onBoardService.findStoreByQuestionAnswer(userId, questionId, answerType);
return ApiUtils.success(GetQuestionRecommands.toDto(menus,questionId,answerType));
return ApiUtils.success(GetQuestionRecommands.toDto(menus, questionId, answerType));

}

@GetMapping("/recommend/tag")
public ApiResponse<GetTagRecommends> getQuestionRecommend(@UserId Long userId) {
DefaultTag randomTag = DefaultTag.getRandomTag();
List<Menu> menuDtoList = onBoardService.findStoreByRandomTag(userId, randomTag);
return ApiUtils.success(GetTagRecommends.toDto(menuDtoList, randomTag));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@
import lombok.Getter;

import java.util.List;
import java.util.stream.Collectors;

@Getter
@AllArgsConstructor
@Builder
public class GetQuestionRecommands {

private String recommandImgUrl;
private List<GetRecommand> menus;
private List<GetRecommend> menus;

public static GetQuestionRecommands toDto(List<Menu> menus, int questionId, AnswerType answerType) {
List<GetRecommand> recommandList = menus.stream().map(GetRecommand::toDto).toList();
List<GetRecommend> recommandList = menus.stream().map(GetRecommend::toDto).toList();
String recommandImgUrl = Question.getImgUrlByIdAndAnswerType(questionId, answerType);
return GetQuestionRecommands.builder()
.recommandImgUrl(recommandImgUrl)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
package com.ourMenu.backend.domain.onboarding.api.response;

import com.ourMenu.backend.domain.menu.domain.Menu;
import com.ourMenu.backend.domain.menu.dto.response.MenuDto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

@Getter
@AllArgsConstructor
@Builder
public class GetRecommand {
public class GetRecommend {

private String menuImgUrl;
private String menuTitle;
private String placeName;

public static GetRecommand toDto(Menu menu){
return GetRecommand.builder()
private Long groupId;
public static GetRecommend toDto(Menu menu){
return GetRecommend.builder()
.menuImgUrl(menu.getImages() != null && !menu.getImages().isEmpty() ? menu.getImages().get(0).getUrl() : null)
.menuImgUrl(menu.getTitle())
.placeName(menu.getPlace().getAddress())
.groupId(menu.getGroupId())
.build();
}

public static GetRecommend toDto(MenuDto menuDto){
return GetRecommend.builder()
.menuImgUrl(menuDto.getMenuImgUrl())
.menuTitle(menuDto.getMenuTitle())
.placeName(menuDto.getPlaceAddress())
.groupId(menuDto.getGroupId())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.ourMenu.backend.domain.onboarding.api.response;

import com.ourMenu.backend.domain.menu.domain.Menu;
import com.ourMenu.backend.domain.menu.dto.response.MenuDto;
import com.ourMenu.backend.domain.onboarding.domain.DefaultTag;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

import java.util.List;

@AllArgsConstructor
@Builder
@Getter
public class GetTagRecommends {

private String tagName;

private List<GetRecommend> menus;


public static GetTagRecommends toDto(List<Menu> menus, DefaultTag tag) {
List<GetRecommend> recommandList = menus.stream().map(GetRecommend::toDto).toList();
return GetTagRecommends.builder()
.tagName(tag.getTagMemo())
.menus(recommandList)
.build();

}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.ourMenu.backend.domain.onboarding.application;

import com.ourMenu.backend.domain.menu.application.MenuService;
import com.ourMenu.backend.domain.menu.dao.MenuRepository;
import com.ourMenu.backend.domain.menu.domain.Menu;
import com.ourMenu.backend.domain.menu.dto.response.MenuDto;
import com.ourMenu.backend.domain.onboarding.domain.AnswerType;
import com.ourMenu.backend.domain.onboarding.domain.DefaultTag;
import com.ourMenu.backend.domain.onboarding.domain.Question;
import com.ourMenu.backend.domain.onboarding.util.S3Util;
import com.ourMenu.backend.domain.store.domain.Store;
Expand All @@ -17,6 +20,7 @@
public class OnBoardingService {

private final MenuRepository menuRepository;
private final MenuService menuService;

public List<Question> getAllQuestion() {
return Question.getAllQuestions();
Expand All @@ -37,4 +41,7 @@ public List<Menu> findStoreByQuestionAnswer(Long userId, int questionId, AnswerT
}


public List<Menu> findStoreByRandomTag(Long userId, DefaultTag randomTag) {
return menuService.getAllMenusByTagName(randomTag.getTagName(), userId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.ourMenu.backend.domain.onboarding.domain;

import lombok.Getter;

import java.util.Random;

@Getter
public enum DefaultTag {

KOREA("한식","집밥이 그리울 땐,"),
CHINA("중식","짜장 먹을까? 짬뽕 먹을까?"),
JAPAN("일식","일본 여행이 가고 싶을 땐,"),
WESTERN("양식","기분 내고 싶은 오늘은,"),
ASIA("아시안","독특한 향을 느끼고 싶을 땐,"),
RICE("밥","밥이 먹고 싶을 땐,"),
BREAD("빵","빵이 먹고 싶을 땐,"),
NOODLE("면","면이 먹고 싶을 땐,"),
MEAT("고기","고기 구우러 가고 싶을 땐,"),
FISH("생선","부드러운 속살의 고소한 생선이 떠오를 땐,"),
DESSERT("디저트","달달한 디저트가 땡길 땐,"),
CAFE("카페","커피가 생각날 땐,"),
FAST_FOOD("패스트푸드","빠르고 맛있게!"),
SPICY("매콤함","스트레스 풀리는 매콤함,"),
SWEET("달달함","기분 좋아지는 달달함,"),
COOL("시원함","더위가 사라지는 시원함,"),
HOT("뜨끈함","땀나는 뜨끈함,"),
HOT_SPICY("얼큰함","얼큰함이 살아있는, "),
SOLO("혼밥","혼자 밥먹기 좋은 곳,"),
WARM("뜨끈함","땀나는 뜨끈함,"),
BUSINESS("비즈니스미팅","비즈니스미팅이 있을 땐,"),
PROMISE("친구약속","친구와 약속이 있다면?"),
DATE("데이트","데이트 하는 날엔,"),
BUY_FOOD("밥약","밥약하기 좋은 곳,"),
ORGANIZATION("단체","단체로 방문한다면,")
;

private String TagName;
private String TagMemo;

DefaultTag(String tagName, String tagMemo) {
TagName = tagName;
TagMemo = tagMemo;
}

public static DefaultTag getRandomTag(){
DefaultTag[] tags = DefaultTag.values();
Random random = new Random();
int randomValue = random.nextInt(25);
return tags[randomValue];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ private S3Util() {
;
public static String S3Path = "https://ourmenu.s3.ap-northeast-2.amazonaws.com/온보딩/";

public static int DEFAULT_TAG_SIZE = 26;

public static String makeRegexp(List<String> stringList) {
StringBuilder stringBuilder = new StringBuilder();
for (String str : stringList) {
Expand Down
Loading