diff --git a/README.md b/README.md index 9eb844d3..0b415f30 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ -# OurMenu-BE-V2 -OurMenu-BE-V2 +## 기술 스택 + +

drawing

+ +## 아키텍처 + +

drawing

diff --git a/infra/docker/docker-compose.yml b/infra/docker/docker-compose.yml index 319012a9..ff6b791b 100644 --- a/infra/docker/docker-compose.yml +++ b/infra/docker/docker-compose.yml @@ -10,6 +10,7 @@ services: ports: - "8080:8080" environment: + TZ: Asia/Seoul KAKAO_API_KEY: ${KAKAO_API_KEY} MONGO_URL: ${MONGO_URL} MYSQL_HOST: ${MYSQL_HOST} @@ -22,4 +23,5 @@ services: SPRING_SWAGGER_SERVER_URL: ${URL} DEFAULT_BUCKET_URL: ${DEFAULT_BUCKET_URL} volumes: - - /var/log/springboot/:/var/log/springboot/ \ No newline at end of file + - /var/log/springboot/:/var/log/springboot/ + - /etc/localtime:/etc/localtime:ro diff --git a/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java b/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java index efae0f3d..e9f19f97 100644 --- a/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java +++ b/src/main/java/com/ourmenu/backend/domain/cache/application/CacheService.java @@ -8,7 +8,6 @@ import com.ourmenu.backend.domain.cache.dto.SimpleMenuFolderIconResponse; import com.ourmenu.backend.domain.cache.dto.SimpleMenuPinResponse; import com.ourmenu.backend.domain.cache.dto.SimpleTagImgResponse; -import com.ourmenu.backend.domain.cache.util.UrlConverter; import com.ourmenu.backend.domain.tag.domain.Tag; import java.util.Arrays; import java.util.List; @@ -19,7 +18,7 @@ @RequiredArgsConstructor public class CacheService { - private final UrlConverter urlConvertor; + private final UrlConverterService urlConvertor; public GetCacheInfoResponse getCacheInfo() { List menuFolderIconInfo = getMenuFolderIconInfo(); diff --git a/src/main/java/com/ourmenu/backend/domain/cache/util/UrlConverter.java b/src/main/java/com/ourmenu/backend/domain/cache/application/UrlConverterService.java similarity index 92% rename from src/main/java/com/ourmenu/backend/domain/cache/util/UrlConverter.java rename to src/main/java/com/ourmenu/backend/domain/cache/application/UrlConverterService.java index d4420ff5..9d51a058 100644 --- a/src/main/java/com/ourmenu/backend/domain/cache/util/UrlConverter.java +++ b/src/main/java/com/ourmenu/backend/domain/cache/application/UrlConverterService.java @@ -1,4 +1,4 @@ -package com.ourmenu.backend.domain.cache.util; +package com.ourmenu.backend.domain.cache.application; import com.ourmenu.backend.domain.cache.domain.HomeImg; import com.ourmenu.backend.domain.cache.domain.MenuFolderIcon; @@ -6,10 +6,10 @@ import com.ourmenu.backend.domain.home.domain.Answer; import com.ourmenu.backend.domain.tag.domain.Tag; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; -@Component -public class UrlConverter { +@Service +public class UrlConverterService { @Value("${spring.cloud.aws.credentials.default.bucket.url}") private String url; diff --git a/src/main/java/com/ourmenu/backend/domain/home/application/HomeService.java b/src/main/java/com/ourmenu/backend/domain/home/application/HomeService.java index 46cb01ff..3df27f76 100644 --- a/src/main/java/com/ourmenu/backend/domain/home/application/HomeService.java +++ b/src/main/java/com/ourmenu/backend/domain/home/application/HomeService.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.home.application; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.home.dao.HomeQuestionAnswerRepository; import com.ourmenu.backend.domain.home.domain.Answer; import com.ourmenu.backend.domain.home.domain.HomeQuestionAnswer; @@ -30,7 +30,7 @@ public class HomeService { private final RecommendMenuCacheService recommendMenuCacheService; private final MenuService menuService; private final MealTimeService mealTimeService; - private final UrlConverter urlConverter; + private final UrlConverterService urlConverterService; /** * 홈 질문 응답 값을 저장 및 추천 메뉴를 캐싱한다. 질문에 관련 없는 응답이면 에러를 반환한다. @@ -70,12 +70,12 @@ public SaveAndGetQuestionRequest updateQuestion(Long userId) { .userId(userId) .build(); HomeQuestionAnswer saveHomeQuestionAnswer = homeQuestionAnswerRepository.save(homeQuestionAnswer); - return SaveAndGetQuestionRequest.from(saveHomeQuestionAnswer, urlConverter); + return SaveAndGetQuestionRequest.from(saveHomeQuestionAnswer, urlConverterService); } HomeQuestionAnswer homeQuestionAnswer = optionalHomeQuestionAnswer.get(); homeQuestionAnswer.update(randomQuestion); - return SaveAndGetQuestionRequest.from(homeQuestionAnswer, urlConverter); + return SaveAndGetQuestionRequest.from(homeQuestionAnswer, urlConverterService); } /** @@ -93,7 +93,7 @@ public GetHomeRecommendResponse getRecommendMenus(Long userId) { List randomRecommendMenus = getRandomRecommendMenu(); return GetHomeRecommendResponse.of(answer, questionRecommendMenus, tagRandomRecommendDto.getTag(), - tagRandomRecommendDto.getGetRecommendMenuResponses(), randomRecommendMenus, urlConverter); + tagRandomRecommendDto.getGetRecommendMenuResponses(), randomRecommendMenus, urlConverterService); } /** diff --git a/src/main/java/com/ourmenu/backend/domain/home/dto/GetHomeRecommendResponse.java b/src/main/java/com/ourmenu/backend/domain/home/dto/GetHomeRecommendResponse.java index 12eb5612..d29a6d37 100644 --- a/src/main/java/com/ourmenu/backend/domain/home/dto/GetHomeRecommendResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/home/dto/GetHomeRecommendResponse.java @@ -1,7 +1,7 @@ package com.ourmenu.backend.domain.home.dto; import com.ourmenu.backend.domain.cache.domain.HomeImg; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.home.domain.Answer; import com.ourmenu.backend.domain.tag.domain.Tag; import java.util.List; @@ -27,10 +27,10 @@ public static GetHomeRecommendResponse of(Answer answer, Tag tag, List tagRecommendMenus, List otherRecommendMenus, - UrlConverter urlConverter) { + UrlConverterService urlConverterService) { HomeImg homeImg = answer.getRandomHomeImg(); - String HomeImgUrl = urlConverter.getHomeImgUrl(homeImg); - String tagRecommendImgUrl = urlConverter.getHomeRecommendTagImgUrl(tag); + String HomeImgUrl = urlConverterService.getHomeImgUrl(homeImg); + String tagRecommendImgUrl = urlConverterService.getHomeRecommendTagImgUrl(tag); String otherRecommendImgUrl = tagRecommendImgUrl; return GetHomeRecommendResponse.builder() diff --git a/src/main/java/com/ourmenu/backend/domain/home/dto/SaveAndGetQuestionRequest.java b/src/main/java/com/ourmenu/backend/domain/home/dto/SaveAndGetQuestionRequest.java index f7731381..e5a5c5a0 100644 --- a/src/main/java/com/ourmenu/backend/domain/home/dto/SaveAndGetQuestionRequest.java +++ b/src/main/java/com/ourmenu/backend/domain/home/dto/SaveAndGetQuestionRequest.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.home.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.home.domain.Answer; import com.ourmenu.backend.domain.home.domain.HomeQuestionAnswer; import com.ourmenu.backend.domain.home.domain.Question; @@ -18,19 +18,20 @@ public class SaveAndGetQuestionRequest { private String question; private List answers; - public static SaveAndGetQuestionRequest from(HomeQuestionAnswer homeQuestionAnswer, UrlConverter urlConverter) { + public static SaveAndGetQuestionRequest from(HomeQuestionAnswer homeQuestionAnswer, + UrlConverterService urlConverterService) { Question question = homeQuestionAnswer.getQuestion(); Answer answer1 = question.getAnswer1(); AnswerDto answerDto1 = AnswerDto.builder() .answer(answer1) - .answerImgUrl(urlConverter.getAnswerImgUrl(answer1)) + .answerImgUrl(urlConverterService.getAnswerImgUrl(answer1)) .build(); Answer answer2 = question.getAnswer2(); AnswerDto answerDto2 = AnswerDto.builder() .answer(answer2) - .answerImgUrl(urlConverter.getAnswerImgUrl(answer2)) + .answerImgUrl(urlConverterService.getAnswerImgUrl(answer2)) .build(); return SaveAndGetQuestionRequest.builder() diff --git a/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java b/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java index fd5555da..f69866f7 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/MapService.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.application; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.dao.MenuFolderRepository; import com.ourmenu.backend.domain.menu.dao.MenuImgRepository; import com.ourmenu.backend.domain.menu.dao.MenuRepository; @@ -51,7 +51,7 @@ public class MapService { private final MenuImgRepository menuImgRepository; private final MenuFolderRepository menuFolderRepository; private final OwnedMenuSearchRepository ownedMenuSearchRepository; - private final UrlConverter urlConverter; + private final UrlConverterService urlConverterService; /** * 유저가 보유한 메뉴들을 가져와 위치가 같은 메뉴들은 그룹핑하여 조회 @@ -70,7 +70,7 @@ public List findMenusOnMap(Long userId) { return menuMaps.entrySet().stream() .map(entry -> MenuOnMapDto.from( - entry.getKey(), entry.getValue(), urlConverter)) + entry.getKey(), entry.getValue(), urlConverterService)) .collect(Collectors.toList()); } @@ -174,10 +174,10 @@ private MenuInfoOnMapDto getMenuInfo(Menu menu) { if (!menuFolders.isEmpty()) { MenuFolder latestMenuFolder = menuFolders.stream() .max(Comparator.comparing(MenuFolder::getCreatedAt)).get(); - menuFolderInfo = MenuFolderInfoOnMapDto.of(latestMenuFolder, menuFolders.size(), urlConverter); + menuFolderInfo = MenuFolderInfoOnMapDto.of(latestMenuFolder, menuFolders.size(), urlConverterService); } - return MenuInfoOnMapDto.of(menu, menuTags, menuImgs, menuFolderInfo, urlConverter); + return MenuInfoOnMapDto.of(menu, menuTags, menuImgs, menuFolderInfo, urlConverterService); } /** diff --git a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuFolderService.java b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuFolderService.java index ddc698ed..17b6ba3d 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuFolderService.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuFolderService.java @@ -1,6 +1,7 @@ package com.ourmenu.backend.domain.menu.application; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; +import com.ourmenu.backend.domain.menu.application.converter.DefaultImgConverterService; import com.ourmenu.backend.domain.menu.dao.MenuFolderRepository; import com.ourmenu.backend.domain.menu.dao.MenuRepository; import com.ourmenu.backend.domain.menu.domain.MenuFolder; @@ -13,7 +14,6 @@ import com.ourmenu.backend.domain.menu.exception.ForbiddenMenuFolderException; import com.ourmenu.backend.domain.menu.exception.NotFoundMenuFolderException; import com.ourmenu.backend.domain.menu.exception.OutOfBoundCustomIndexException; -import com.ourmenu.backend.domain.menu.util.DefaultImgConverter; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -27,9 +27,9 @@ public class MenuFolderService { private final AwsS3Service awsS3Service; private final MenuFolderRepository menuFolderRepository; private final MenuMenuFolderService menuMenuFolderService; - private final DefaultImgConverter defaultImgConvertor; + private final DefaultImgConverterService defaultImgConvertor; private final MenuRepository menuRepository; - private final UrlConverter urlConverter; + private final UrlConverterService urlConverterService; /** * 메뉴 폴더 저장 @@ -45,7 +45,7 @@ public SaveMenuFolderResponse saveMenuFolder(MenuFolderDto menuFolderDto) { MenuFolder menuFolder = saveMenuFolder(menuFolderDto, menuFolderImgUrl); return SaveMenuFolderResponse.of(menuFolder, menuFolderDto.getMenuIds(), - defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter); + defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService); } /** @@ -95,7 +95,7 @@ public UpdateMenuFolderResponse updateMenuFolder(Long userId, Long menuFolderId, menuFolder.update(menuFolderDto); List menuMenuFolders = menuMenuFolderService.findAllByMenuFolderId(menuFolderId); return UpdateMenuFolderResponse.of(menuFolder, menuMenuFolders, - defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter); + defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService); } /** @@ -126,7 +126,7 @@ public UpdateMenuFolderResponse updateMenuFolderIndex(Long userId, Long menuFold findMenuFolder.updateIndex(index); List menuMenuFolders = menuMenuFolderService.findAllByMenuFolderId(menuFolderId); return UpdateMenuFolderResponse.of(findMenuFolder, menuMenuFolders, - defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter); + defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService); } @@ -144,7 +144,7 @@ public GetMenuFolderResponse findAllMenuFolder(Long userId) { List menuMenuFolders = menuMenuFolderService.findAllByMenuFolderId( menuFolder.getId()); return MenuFolderResponse.of(menuFolder, menuMenuFolders, - defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter); + defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService); }).toList(); int menuCount = menuRepository.countByUserId(userId); return GetMenuFolderResponse.of(menuCount, menuFolderResponses); diff --git a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuImgService.java b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuImgService.java index f5f52107..e965a1ef 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuImgService.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuImgService.java @@ -1,8 +1,8 @@ package com.ourmenu.backend.domain.menu.application; +import com.ourmenu.backend.domain.menu.application.converter.DefaultImgConverterService; import com.ourmenu.backend.domain.menu.dao.MenuImgRepository; import com.ourmenu.backend.domain.menu.domain.MenuImg; -import com.ourmenu.backend.domain.menu.util.DefaultImgConverter; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -15,7 +15,7 @@ public class MenuImgService { private final MenuImgRepository menuImgRepository; private final AwsS3Service awsS3Service; - private final DefaultImgConverter defaultImgConverter; + private final DefaultImgConverterService defaultImgConverterService; @Transactional public List saveMenuImgs(Long menuId, List multipartFiles) { @@ -52,7 +52,7 @@ public String findUniqueImg(Long menuId) { return menuImgRepository.findAllByMenuId(menuId).stream() .map(MenuImg::getImgUrl) .findFirst() - .orElse(defaultImgConverter.getDefaultMenuImgUrl()); + .orElse(defaultImgConverterService.getDefaultMenuImgUrl()); } /** @@ -88,7 +88,7 @@ private MenuImg saveMenuImg(Long menuId, String imgUrl) { private MenuImg createDefaultMenuImg() { return MenuImg.builder() .menuId(null) - .imgUrl(defaultImgConverter.getDefaultMenuImgUrl()) + .imgUrl(defaultImgConverterService.getDefaultMenuImgUrl()) .build(); } } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuService.java b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuService.java index c0701ef9..b00dff1f 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/application/MenuService.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/MenuService.java @@ -1,7 +1,8 @@ package com.ourmenu.backend.domain.menu.application; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.home.dto.GetRecommendMenuResponse; +import com.ourmenu.backend.domain.menu.application.converter.DefaultImgConverterService; import com.ourmenu.backend.domain.menu.dao.MenuRepository; import com.ourmenu.backend.domain.menu.domain.Menu; import com.ourmenu.backend.domain.menu.domain.MenuFolder; @@ -18,7 +19,6 @@ import com.ourmenu.backend.domain.menu.dto.SaveMenuResponse; import com.ourmenu.backend.domain.menu.exception.ForbiddenMenuException; import com.ourmenu.backend.domain.menu.exception.NotFoundMenuException; -import com.ourmenu.backend.domain.menu.util.DefaultImgConverter; import com.ourmenu.backend.domain.store.application.StoreService; import com.ourmenu.backend.domain.store.domain.Store; import com.ourmenu.backend.domain.tag.application.MenuTagService; @@ -40,8 +40,8 @@ public class MenuService { private final StoreService storeService; private final MenuImgService menuImgService; private final MenuFolderService menuFolderService; - private final DefaultImgConverter defaultImgConverter; - private final UrlConverter urlConverter; + private final DefaultImgConverterService defaultImgConverterService; + private final UrlConverterService urlConverterService; /** * 메뉴 저장(메뉴 사진, 메뉴판, 태그 의존 엔티티 생성 @@ -55,7 +55,7 @@ public SaveMenuResponse saveMenu(MenuDto menuDto) { Store store = storeService.saveStoreAndMap(menuDto.getStoreTitle(), menuDto.getStoreAddress(), menuDto.getMapX(), menuDto.getMapY()); - + Menu menu = Menu.builder() .title(menuDto.getMenuTitle()) .price(menuDto.getMenuPrice()) @@ -79,7 +79,7 @@ public SaveMenuResponse saveMenu(MenuDto menuDto) { //s3 업로드및 이미지 연관관계 생성 List menuImgs = menuImgService.saveMenuImgs(saveMenu.getId(), menuDto.getMenuImgs()); return SaveMenuResponse.of(saveMenu, store, store.getMap(), menuImgs, saveMenuMenuFolders, saveTag, - urlConverter); + urlConverterService); } /** @@ -127,8 +127,8 @@ public GetMenuFolderMenuResponse findMenusByMenuFolder(Long userId, Long menuFol .toList(); MenuFolder menuFolder = menuFolderService.findOne(userId, menuFolderId); - return GetMenuFolderMenuResponse.of(menuFolder, defaultImgConverter.getDefaultMenuFolderImgUrl(), - menuResponses, urlConverter); + return GetMenuFolderMenuResponse.of(menuFolder, defaultImgConverterService.getDefaultMenuFolderImgUrl(), + menuResponses, urlConverterService); } /** @@ -218,7 +218,7 @@ public GetMenuResponse findMenu(Long userId, Long menuId) { List imgUrls = menuImgService.findImgUrls(menuId); List tags = menuTagService.findTagNames(menuId); List menuFolders = menuFolderService.findAllByMenuId(menuId); - return GetMenuResponse.of(menu, imgUrls, tags, menuFolders, urlConverter); + return GetMenuResponse.of(menu, imgUrls, tags, menuFolders, urlConverterService); } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/util/DefaultImgConverter.java b/src/main/java/com/ourmenu/backend/domain/menu/application/converter/DefaultImgConverterService.java similarity index 68% rename from src/main/java/com/ourmenu/backend/domain/menu/util/DefaultImgConverter.java rename to src/main/java/com/ourmenu/backend/domain/menu/application/converter/DefaultImgConverterService.java index d7a43f11..c73667b7 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/util/DefaultImgConverter.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/application/converter/DefaultImgConverterService.java @@ -1,10 +1,10 @@ -package com.ourmenu.backend.domain.menu.util; +package com.ourmenu.backend.domain.menu.application.converter; import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; -@Component -public class DefaultImgConverter { +@Service +public class DefaultImgConverterService { @Value("${spring.cloud.aws.credentials.default.bucket.url}") private String url; diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuFolderMenuResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuFolderMenuResponse.java index b13fa41a..f21b2d44 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuFolderMenuResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuFolderMenuResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import java.util.List; import lombok.AccessLevel; @@ -20,13 +20,14 @@ public class GetMenuFolderMenuResponse { private List menus; public static GetMenuFolderMenuResponse of(MenuFolder menuFolder, String defaultMenuFolderImgUrl, - List menus, UrlConverter urlConverter) { + List menus, + UrlConverterService urlConverterService) { String menuFolderImgUrl = menuFolder.getImgUrl(); if (menuFolderImgUrl == null) { menuFolderImgUrl = defaultMenuFolderImgUrl; } - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); return GetMenuFolderMenuResponse.builder() .menuFolderId(menuFolder.getId()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuResponse.java index 055669eb..55277182 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetMenuResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.Menu; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import com.ourmenu.backend.domain.tag.domain.Tag; @@ -19,6 +19,8 @@ public class GetMenuResponse { private String menuTitle; private int menuPrice; private String menuPinImgUrl; + private String menuMemoTitle; + private String menuMemoContent; private String storeTitle; private String storeAddress; private List tagImgUrls; @@ -36,12 +38,12 @@ private static class SimpleMenuFolder { } public static GetMenuResponse of(Menu menu, List imgUrls, List tags, - List menuFolders, UrlConverter urlConverter) { - String menuPinImgUrl = urlConverter.getMenuPinMapUrl(menu.getPin()); + List menuFolders, UrlConverterService urlConverterService) { + String menuPinImgUrl = urlConverterService.getMenuPinMapUrl(menu.getPin()); List simpleMenuFolders = menuFolders.stream() .map(menuFolder -> { - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); return SimpleMenuFolder.builder() .menuFolderId(menuFolder.getId()) .menuFolderTitle(menuFolder.getTitle()) @@ -50,7 +52,7 @@ public static GetMenuResponse of(Menu menu, List imgUrls, List tags }) .toList(); List tagImgUrls = tags.stream() - .map(urlConverter::getOrangeTagImgUrl) + .map(urlConverterService::getOrangeTagImgUrl) .toList(); return GetMenuResponse.builder(). @@ -58,6 +60,8 @@ public static GetMenuResponse of(Menu menu, List imgUrls, List tags .menuTitle(menu.getTitle()) .menuPrice(menu.getPrice()) .menuPinImgUrl(menuPinImgUrl) + .menuMemoTitle(menu.getMemoTitle()) + .menuMemoContent(menu.getMemoContent()) .storeAddress(menu.getStore().getAddress()) .storeTitle(menu.getStore().getTitle()) .tagImgUrls(tagImgUrls) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetSimpleMenuResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetSimpleMenuResponse.java index 3d470864..d77bcc72 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/GetSimpleMenuResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/GetSimpleMenuResponse.java @@ -1,6 +1,7 @@ package com.ourmenu.backend.domain.menu.dto; import com.ourmenu.backend.domain.menu.domain.Menu; +import com.ourmenu.backend.domain.store.util.AddressParser; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -21,11 +22,13 @@ public class GetSimpleMenuResponse { private LocalDateTime createdAt; public static GetSimpleMenuResponse of(Menu menu, String menuImgUrl) { + String storeAddress = AddressParser.parseAddressToCityDistrict(menu.getStore().getAddress()); + return GetSimpleMenuResponse.builder() .menuId(menu.getId()) .menuTitle(menu.getTitle()) .storeTitle(menu.getStore().getTitle()) - .storeAddress(menu.getStore().getAddress()) + .storeAddress(storeAddress) .menuPrice(menu.getPrice()) .menuImgUrl(menuImgUrl) .createdAt(menu.getCreatedAt()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderInfoOnMapDto.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderInfoOnMapDto.java index 1ddd40c9..cce4c767 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderInfoOnMapDto.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderInfoOnMapDto.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import lombok.Builder; import lombok.Getter; @@ -13,8 +13,8 @@ public class MenuFolderInfoOnMapDto { private String menuFolderIconImgUrl; private int menuFolderCount; - public static MenuFolderInfoOnMapDto of(MenuFolder menuFolder, int count, UrlConverter urlConverter) { - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + public static MenuFolderInfoOnMapDto of(MenuFolder menuFolder, int count, UrlConverterService urlConverterService) { + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); return MenuFolderInfoOnMapDto.builder() .menuFolderTitle(menuFolder.getTitle()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderMenuResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderMenuResponse.java index 4683d340..af8600f0 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderMenuResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderMenuResponse.java @@ -1,5 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; +import com.ourmenu.backend.domain.store.util.AddressParser; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -20,11 +21,13 @@ public class MenuFolderMenuResponse { private LocalDateTime createdAt; public static MenuFolderMenuResponse of(MenuSimpleDto menuSimpleDto, String menuImgUrl) { + String storeAddress = AddressParser.parseAddressToCityDistrict(menuSimpleDto.getStoreAddress()); + return MenuFolderMenuResponse.builder() .menuId(menuSimpleDto.getMenuId()) .menuTitle(menuSimpleDto.getMenuTitle()) .storeTitle(menuSimpleDto.getStoreTitle()) - .storeAddress(menuSimpleDto.getStoreAddress()) + .storeAddress(storeAddress) .menuPrice(menuSimpleDto.getMenuPrice()) .menuImgUrl(menuImgUrl) .createdAt(menuSimpleDto.getCreatedAt()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderResponse.java index 67b177cc..eca835ff 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuFolderResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import com.ourmenu.backend.domain.menu.domain.MenuMenuFolder; import java.util.List; @@ -22,13 +22,13 @@ public class MenuFolderResponse { private int index; public static MenuFolderResponse of(MenuFolder menuFolder, List menuFolders, - String defaultMenuFolderImgUrl, UrlConverter urlConverter) { + String defaultMenuFolderImgUrl, UrlConverterService urlConverterService) { String menuFolderImgUrl = menuFolder.getImgUrl(); if (menuFolderImgUrl == null) { menuFolderImgUrl = defaultMenuFolderImgUrl; } - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); List menuIds = menuFolders.stream() .map(menuMenuFolder -> menuMenuFolder.getMenu().getId()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuInfoOnMapDto.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuInfoOnMapDto.java index 9d4bbc26..41907315 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuInfoOnMapDto.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuInfoOnMapDto.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.Menu; import com.ourmenu.backend.domain.menu.domain.MenuImg; import com.ourmenu.backend.domain.tag.domain.MenuTag; @@ -25,11 +25,11 @@ public class MenuInfoOnMapDto { private Double mapY; public static MenuInfoOnMapDto of(Menu menu, List menuTags, List menuImgs, - MenuFolderInfoOnMapDto menuFolderInfo, UrlConverter urlConverter) { - String menuPinImgUrl = urlConverter.getMenuPinMapUrl(menu.getPin()); + MenuFolderInfoOnMapDto menuFolderInfo, UrlConverterService urlConverterService) { + String menuPinImgUrl = urlConverterService.getMenuPinMapUrl(menu.getPin()); List menuTagImgUrls = menuTags.stream() .map(MenuTag::getTag) - .map(urlConverter::getOrangeTagImgUrl) + .map(urlConverterService::getOrangeTagImgUrl) .toList(); return MenuInfoOnMapDto.builder() diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuOnMapDto.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuOnMapDto.java index 61c21080..db6653ea 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuOnMapDto.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/MenuOnMapDto.java @@ -2,7 +2,7 @@ import com.ourmenu.backend.domain.cache.domain.MenuPin; import com.ourmenu.backend.domain.cache.util.MenuPinConverter; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.Menu; import com.ourmenu.backend.domain.store.domain.Map; import java.util.List; @@ -19,14 +19,14 @@ public class MenuOnMapDto { private Double mapX; private Double mapY; - public static MenuOnMapDto from(Map map, List menus, UrlConverter urlConverter) { + public static MenuOnMapDto from(Map map, List menus, UrlConverterService urlConverterService) { List menuPins = menus.stream() .map(Menu::getPin) .toList(); MenuPin menuPin = MenuPinConverter.of(menuPins); - String menuPinImgUrl = urlConverter.getMenuPinMapUrl(menuPin); - String menuPinDisableImgUrl = urlConverter.getMenuPinMapAddDisable(menuPin); + String menuPinImgUrl = urlConverterService.getMenuPinMapUrl(menuPin); + String menuPinDisableImgUrl = urlConverterService.getMenuPinMapAddDisable(menuPin); return MenuOnMapDto.builder() .mapId(map.getId()) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuFolderResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuFolderResponse.java index a9a59b37..0b8fb5b6 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuFolderResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuFolderResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import java.util.List; import lombok.AccessLevel; @@ -21,9 +21,9 @@ public class SaveMenuFolderResponse { private int index; public static SaveMenuFolderResponse of(MenuFolder menuFolder, List menuIds, - String defaultMenuFolderImgUrl, UrlConverter urlConverter) { + String defaultMenuFolderImgUrl, UrlConverterService urlConverterService) { String menuFolderImgUrl = menuFolder.getImgUrl(); - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); if (menuFolderImgUrl == null) { menuFolderImgUrl = defaultMenuFolderImgUrl; } diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuResponse.java index 85b88613..a794e8b3 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/SaveMenuResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.Menu; import com.ourmenu.backend.domain.menu.domain.MenuImg; import com.ourmenu.backend.domain.menu.domain.MenuMenuFolder; @@ -34,13 +34,14 @@ public class SaveMenuResponse { private List menuImgUrls; public static SaveMenuResponse of(Menu menu, Store store, Map map, List menuImgs, - List menuMenuFolders, List tags, UrlConverter urlConverter) { - String menuPinImgUrl = urlConverter.getMenuPinAddUrl(menu.getPin()); + List menuMenuFolders, List tags, + UrlConverterService urlConverterService) { + String menuPinImgUrl = urlConverterService.getMenuPinAddUrl(menu.getPin()); List menuFolderIds = menuMenuFolders.stream() .map(MenuMenuFolder::getFolderId) .toList(); List tagImgUrls = tags.stream() - .map(urlConverter::getOrangeTagImgUrl) + .map(urlConverterService::getOrangeTagImgUrl) .toList(); List menuImgUrls = menuImgs.stream() .map(MenuImg::getImgUrl) diff --git a/src/main/java/com/ourmenu/backend/domain/menu/dto/UpdateMenuFolderResponse.java b/src/main/java/com/ourmenu/backend/domain/menu/dto/UpdateMenuFolderResponse.java index afbffaf0..c98063ed 100644 --- a/src/main/java/com/ourmenu/backend/domain/menu/dto/UpdateMenuFolderResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/menu/dto/UpdateMenuFolderResponse.java @@ -1,6 +1,6 @@ package com.ourmenu.backend.domain.menu.dto; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.domain.MenuFolder; import com.ourmenu.backend.domain.menu.domain.MenuMenuFolder; import java.util.List; @@ -22,13 +22,13 @@ public class UpdateMenuFolderResponse { private int index; public static UpdateMenuFolderResponse of(MenuFolder menuFolder, List menuMenuFolders, - String defaultMenuFolderImgUrl, UrlConverter urlConverter) { + String defaultMenuFolderImgUrl, UrlConverterService urlConverterService) { String menuFolderImgUrl = menuFolder.getImgUrl(); if (menuFolderImgUrl == null) { menuFolderImgUrl = defaultMenuFolderImgUrl; } - String menuFolderIconImgUrl = urlConverter.getMenuFolderImgUrl(menuFolder.getIcon()); + String menuFolderIconImgUrl = urlConverterService.getMenuFolderImgUrl(menuFolder.getIcon()); List menuId = menuMenuFolders.stream() .map(menuMenuFolder -> menuMenuFolder.getMenu().getId()) diff --git a/src/main/java/com/ourmenu/backend/domain/store/util/AddressParser.java b/src/main/java/com/ourmenu/backend/domain/store/util/AddressParser.java new file mode 100644 index 00000000..4fd77883 --- /dev/null +++ b/src/main/java/com/ourmenu/backend/domain/store/util/AddressParser.java @@ -0,0 +1,25 @@ +package com.ourmenu.backend.domain.store.util; + +import java.util.Arrays; +import java.util.List; + +public class AddressParser { + + private AddressParser() { + } + + private static List parseAddress(String address) { + return Arrays.stream(address.split(" ")).toList(); + } + + public static String parseAddressToCityDistrict(String address) { + List addresses = parseAddress(address); + if (addresses.size() >= 2) { + return addresses.get(0) + " " + addresses.get(1); + } + if (addresses.size() == 1) { + return addresses.get(0); + } + return ""; + } +} diff --git a/src/main/java/com/ourmenu/backend/domain/user/application/CustomUserDetailsService.java b/src/main/java/com/ourmenu/backend/domain/user/application/CustomUserDetailsService.java index 2186b432..d391bb57 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/application/CustomUserDetailsService.java +++ b/src/main/java/com/ourmenu/backend/domain/user/application/CustomUserDetailsService.java @@ -1,27 +1,25 @@ package com.ourmenu.backend.domain.user.application; import com.ourmenu.backend.domain.user.dao.UserRepository; +import com.ourmenu.backend.domain.user.domain.SignInType; import com.ourmenu.backend.domain.user.domain.User; import com.ourmenu.backend.domain.user.domain.CustomUserDetails; import com.ourmenu.backend.domain.user.exception.NotFoundUserException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor @Slf4j -public class CustomUserDetailsService implements UserDetailsService { +public class CustomUserDetailsService { private final UserRepository userRepository; - @Override - public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { - - User user= userRepository.findByEmail(email). + public UserDetails loadUserByEmailAndSignInType(String email, SignInType signInType) throws UsernameNotFoundException { + User user= userRepository.findByEmailAndSignInType(email, signInType). orElseThrow(NotFoundUserException::new); return new CustomUserDetails( diff --git a/src/main/java/com/ourmenu/backend/domain/user/application/EmailService.java b/src/main/java/com/ourmenu/backend/domain/user/application/EmailService.java index c07a95bb..ec20acab 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/application/EmailService.java +++ b/src/main/java/com/ourmenu/backend/domain/user/application/EmailService.java @@ -3,6 +3,7 @@ import com.ourmenu.backend.domain.user.dao.ConfirmCodeRepository; import com.ourmenu.backend.domain.user.dao.UserRepository; import com.ourmenu.backend.domain.user.domain.ConfirmCode; +import com.ourmenu.backend.domain.user.domain.SignInType; import com.ourmenu.backend.domain.user.domain.User; import com.ourmenu.backend.domain.user.dto.request.PostEmailRequest; import com.ourmenu.backend.domain.user.dto.response.EmailResponse; @@ -84,7 +85,7 @@ public void verifyConfirmCode(VerifyEmailRequest request){ public TemporaryPasswordResponse sendTemporaryPassword(PostEmailRequest request) { String email = request.getEmail(); String temporaryPassword = generateRandomCode(8); - User user = userRepository.findByEmail(email) + User user = userRepository.findByEmailAndSignInType(email, SignInType.EMAIL) .orElseThrow(NotFoundUserException::new); user.changePassword(passwordEncoder.encode(temporaryPassword)); diff --git a/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java b/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java index e22a7069..7638d15a 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java +++ b/src/main/java/com/ourmenu/backend/domain/user/application/UserService.java @@ -55,8 +55,15 @@ public class UserService { */ @Transactional public TokenDto signUp(SignUpRequest request) { + SignInType signInType = SignInType.convert(request.getSignInType()); + String email = request.getEmail(); + User savedUser; - User savedUser = saveUser(request); + if (signInType.equals(SignInType.KAKAO)) { + savedUser = signUpByKakao(email); + } else { + savedUser = signUpByEmail(email, request.getPassword()); + } List mealTimes = mealTimeService.saveMealTimes(request.getMealTime(), savedUser.getId()); @@ -65,8 +72,12 @@ public TokenDto signUp(SignUpRequest request) { throw new InvalidMealTimeCountException(); } - TokenDto tokenDto = jwtTokenProvider.createAllToken(request.getEmail()); - RefreshToken refreshToken = new RefreshToken(tokenDto.getRefreshToken(), request.getEmail()); + TokenDto tokenDto = jwtTokenProvider.createAllToken(email, signInType); + RefreshToken refreshToken = new RefreshToken( + tokenDto.getRefreshToken(), + email, + signInType + ); refreshTokenRepository.save(refreshToken); return tokenDto; } @@ -79,24 +90,34 @@ public TokenDto signUp(SignUpRequest request) { */ @Transactional public TokenDto signIn(SignInRequest request) { - Optional optionalUser = userRepository.findByEmail(request.getEmail()); - if (optionalUser.isEmpty() || !optionalUser.get().getSignInType().name().equals(request.getSignInType())) { + String email = request.getEmail(); + SignInType signInType = SignInType.convert(request.getSignInType()); + + Optional optionalUser = userRepository + .findByEmailAndSignInType(email, signInType); + + if (optionalUser.isEmpty() || !optionalUser.get().getSignInType().equals(signInType)) { throw new NotFoundUserException(); } User user = optionalUser.get(); - if (request.getSignInType().equals("EMAIL") && !passwordEncoder.matches(request.getPassword(), user.getPassword())) { + if (signInType.equals(SignInType.EMAIL) && !passwordEncoder.matches(request.getPassword(), user.getPassword())) { throw new NotMatchPasswordException(); } - TokenDto tokenDto = jwtTokenProvider.createAllToken(request.getEmail()); - Optional refreshToken = refreshTokenRepository.findRefreshTokenByEmail(request.getEmail()); + TokenDto tokenDto = jwtTokenProvider.createAllToken(email, signInType); + Optional refreshToken = refreshTokenRepository + .findRefreshTokenByEmailAndSignInType(email, signInType); if (refreshToken.isPresent()) { refreshTokenRepository.save(refreshToken.get().updateToken(tokenDto.getRefreshToken())); } else { - RefreshToken newToken = new RefreshToken(tokenDto.getRefreshToken(), request.getEmail()); + RefreshToken newToken = new RefreshToken( + tokenDto.getRefreshToken(), + email, + signInType + ); refreshTokenRepository.save(newToken); } @@ -158,6 +179,7 @@ public UserDto getUserInfo(CustomUserDetails userDetails) { public TokenDto reissueToken(ReissueRequest reissueRequest) { String refreshToken = reissueRequest.getRefreshToken(); String email = jwtTokenProvider.getEmailFromToken(refreshToken); + SignInType signInType = jwtTokenProvider.getSignInTypeFromToken(refreshToken); if (email.isEmpty()) { throw new InvalidTokenException(); @@ -167,14 +189,14 @@ public TokenDto reissueToken(ReissueRequest reissueRequest) { throw new TokenExpiredExcpetion(); } - RefreshToken storedToken = refreshTokenRepository.findRefreshTokenByEmail(email) + RefreshToken storedToken = refreshTokenRepository.findRefreshTokenByEmailAndSignInType(email, signInType) .orElseThrow(NotMatchTokenException::new); - String newAccessToken = jwtTokenProvider.createToken(email, "Access"); + String newAccessToken = jwtTokenProvider.createToken(email, signInType, "Access"); String newRefreshToken = reissueRequest.getRefreshToken(); if (jwtTokenProvider.validateToken(refreshToken)) { - newRefreshToken = jwtTokenProvider.createToken(email, "Refresh"); + newRefreshToken = jwtTokenProvider.createToken(email, signInType, "Refresh"); storedToken.updateToken(newRefreshToken); refreshTokenRepository.save(storedToken); } @@ -198,8 +220,9 @@ public void signOut(HttpServletRequest request) { } String email = jwtTokenProvider.getEmailFromToken(token); + SignInType signInType = jwtTokenProvider.getSignInTypeFromToken(token); - refreshTokenRepository.findRefreshTokenByEmail(email) + refreshTokenRepository.findRefreshTokenByEmailAndSignInType(email, signInType) .ifPresent(refreshTokenRepository::delete); } @@ -212,10 +235,11 @@ public void signOut(HttpServletRequest request) { public KakaoExistenceResponse validateKakaoUserExists(PostEmailRequest request) { String email = request.getEmail(); - Optional optionalUser = userRepository.findByEmail(email); + Optional optionalUser = userRepository.findByEmailAndSignInType(email, SignInType.KAKAO); - if (optionalUser.isPresent() && optionalUser.get().getSignInType() == SignInType.KAKAO) { - return KakaoExistenceResponse.from(true); + if (optionalUser.isPresent() && optionalUser.get().getSignInType().equals(SignInType.KAKAO)) { + TokenDto token = jwtTokenProvider.createAllToken(email, SignInType.KAKAO); + return KakaoExistenceResponse.from(true, token); } return KakaoExistenceResponse.from(false); @@ -231,45 +255,26 @@ public void removeUser(Long userId) { User user = userRepository.findById(userId) .orElseThrow(NotFoundUserException::new); - refreshTokenRepository.findRefreshTokenByEmail(user.getEmail()) + refreshTokenRepository.findRefreshTokenByEmailAndSignInType(user.getEmail(), user.getSignInType()) .ifPresent(refreshTokenRepository::delete); userRepository.delete(user); } - /** - * 유저 정보를 저장한다. - * - * @param request - * @return - * @throws UnsupportedSignInTypeException 지원하지 않는 SignInType을 요청한 경우 - */ - private User saveUser(SignUpRequest request) { - if (request.getSignInType().equals("EMAIL")) { - return signUpByEmail(request); - } - - if (request.getSignInType().equals("KAKAO")) { - return signUpByKakao(request); - } - - throw new UnsupportedSignInTypeException(); - } - /** * Kakao 유저를 저장한다. * - * @param request + * @param email * @return */ - private User signUpByKakao(SignUpRequest request) { - Optional optionalUser = userRepository.findByEmail(request.getEmail()); + private User signUpByKakao(String email) { + Optional optionalUser = userRepository.findByEmailAndSignInType(email, SignInType.KAKAO); if (optionalUser.isPresent() && optionalUser.get().getSignInType() == SignInType.KAKAO) { throw new DuplicateEmailException(); } User user = User.builder() - .email(request.getEmail()) + .email(email) .signInType(SignInType.KAKAO) .build(); @@ -279,19 +284,20 @@ private User signUpByKakao(SignUpRequest request) { /** * Email 유저를 저장한다. * - * @param request + * @param email + * @param password * @return */ - private User signUpByEmail(SignUpRequest request) { - Optional optionalUser = userRepository.findByEmail(request.getEmail()); + private User signUpByEmail(String email, String password) { + Optional optionalUser = userRepository.findByEmailAndSignInType(email, SignInType.EMAIL); if (optionalUser.isPresent() && optionalUser.get().getSignInType() == SignInType.EMAIL) { throw new DuplicateEmailException(); } - String encodedPassword = passwordEncoder.encode(request.getPassword()); + String encodedPassword = passwordEncoder.encode(password); User user = User.builder() - .email(request.getEmail()) + .email(email) .password(encodedPassword) .signInType(SignInType.EMAIL) .build(); diff --git a/src/main/java/com/ourmenu/backend/domain/user/dao/RefreshTokenRepository.java b/src/main/java/com/ourmenu/backend/domain/user/dao/RefreshTokenRepository.java index 9ffbee9d..a2b9d054 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/dao/RefreshTokenRepository.java +++ b/src/main/java/com/ourmenu/backend/domain/user/dao/RefreshTokenRepository.java @@ -1,6 +1,7 @@ package com.ourmenu.backend.domain.user.dao; import com.ourmenu.backend.domain.user.domain.RefreshToken; +import com.ourmenu.backend.domain.user.domain.SignInType; import org.springframework.data.repository.CrudRepository; import java.util.Optional; @@ -8,6 +9,6 @@ public interface RefreshTokenRepository extends CrudRepository { - Optional findRefreshTokenByEmail(String email); + Optional findRefreshTokenByEmailAndSignInType(String email, SignInType signInType); } diff --git a/src/main/java/com/ourmenu/backend/domain/user/dao/UserRepository.java b/src/main/java/com/ourmenu/backend/domain/user/dao/UserRepository.java index 935c7f2b..019dade1 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/dao/UserRepository.java +++ b/src/main/java/com/ourmenu/backend/domain/user/dao/UserRepository.java @@ -1,10 +1,11 @@ package com.ourmenu.backend.domain.user.dao; +import com.ourmenu.backend.domain.user.domain.SignInType; import com.ourmenu.backend.domain.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository { - Optional findByEmail(String email); + Optional findByEmailAndSignInType(String email, SignInType signInType); } diff --git a/src/main/java/com/ourmenu/backend/domain/user/domain/RefreshToken.java b/src/main/java/com/ourmenu/backend/domain/user/domain/RefreshToken.java index e1b587a6..15719f10 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/domain/RefreshToken.java +++ b/src/main/java/com/ourmenu/backend/domain/user/domain/RefreshToken.java @@ -19,9 +19,13 @@ public class RefreshToken { @Indexed private String email; - public RefreshToken(String token, String email) { + @Indexed + private SignInType signInType; + + public RefreshToken(String token, String email, SignInType signInType) { this.refreshToken = token; this.email = email; + this.signInType = signInType; } public RefreshToken updateToken(String token) { diff --git a/src/main/java/com/ourmenu/backend/domain/user/domain/SignInType.java b/src/main/java/com/ourmenu/backend/domain/user/domain/SignInType.java index 78339e41..dbd86754 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/domain/SignInType.java +++ b/src/main/java/com/ourmenu/backend/domain/user/domain/SignInType.java @@ -1,5 +1,15 @@ package com.ourmenu.backend.domain.user.domain; +import com.ourmenu.backend.domain.user.exception.UnsupportedSignInTypeException; + public enum SignInType { - EMAIL, KAKAO + EMAIL, KAKAO; + + public static SignInType convert(String signInType) { + try { + return SignInType.valueOf(signInType); + } catch (IllegalArgumentException e) { + throw new UnsupportedSignInTypeException(); + } + } } diff --git a/src/main/java/com/ourmenu/backend/domain/user/dto/response/KakaoExistenceResponse.java b/src/main/java/com/ourmenu/backend/domain/user/dto/response/KakaoExistenceResponse.java index af611bba..580ba42b 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/dto/response/KakaoExistenceResponse.java +++ b/src/main/java/com/ourmenu/backend/domain/user/dto/response/KakaoExistenceResponse.java @@ -3,15 +3,31 @@ import lombok.Builder; import lombok.Getter; +import java.time.Instant; + @Getter @Builder public class KakaoExistenceResponse { private boolean isExistUser; + private String grantType; + private String accessToken; + private String refreshToken; + private Instant refreshTokenExpiredAt; public static KakaoExistenceResponse from(boolean isExistUser){ return KakaoExistenceResponse.builder() .isExistUser(isExistUser) .build(); } + + public static KakaoExistenceResponse from(boolean isExistUser, TokenDto tokenDto){ + return KakaoExistenceResponse.builder() + .isExistUser(isExistUser) + .grantType(tokenDto.getGrantType()) + .accessToken(tokenDto.getAccessToken()) + .refreshToken(tokenDto.getRefreshToken()) + .refreshTokenExpiredAt(tokenDto.getRefreshTokenExpiredAt()) + .build(); + } } diff --git a/src/main/java/com/ourmenu/backend/domain/user/dto/response/ReissueRequest.java b/src/main/java/com/ourmenu/backend/domain/user/dto/response/ReissueRequest.java index 3c6b16b4..c13bf2f7 100644 --- a/src/main/java/com/ourmenu/backend/domain/user/dto/response/ReissueRequest.java +++ b/src/main/java/com/ourmenu/backend/domain/user/dto/response/ReissueRequest.java @@ -3,8 +3,10 @@ import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@NoArgsConstructor @AllArgsConstructor public class ReissueRequest { diff --git a/src/main/java/com/ourmenu/backend/global/filter/JwtAuthenticationFilter.java b/src/main/java/com/ourmenu/backend/global/filter/JwtAuthenticationFilter.java index 7ff997d6..44e90d37 100644 --- a/src/main/java/com/ourmenu/backend/global/filter/JwtAuthenticationFilter.java +++ b/src/main/java/com/ourmenu/backend/global/filter/JwtAuthenticationFilter.java @@ -1,6 +1,7 @@ package com.ourmenu.backend.global.filter; +import com.ourmenu.backend.domain.user.domain.SignInType; import com.ourmenu.backend.global.util.JwtTokenProvider; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -27,16 +28,20 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse String refreshToken = jwtTokenProvider.getHeaderToken(request, "Refresh_token"); if(accessToken != null && jwtTokenProvider.validateToken(accessToken)) { - setAuthentication(jwtTokenProvider.getEmailFromToken(accessToken)); + setAuthentication( + jwtTokenProvider.getEmailFromToken(accessToken), + jwtTokenProvider.getSignInTypeFromToken(accessToken) + ); filterChain.doFilter(request,response); return; } if (refreshToken != null && jwtTokenProvider.refreshTokenValidation(refreshToken)) { String email = jwtTokenProvider.getEmailFromToken(refreshToken); - String newAccessToken = jwtTokenProvider.createToken(email, "Access"); + SignInType signInType = jwtTokenProvider.getSignInTypeFromToken(refreshToken); + String newAccessToken = jwtTokenProvider.createToken(email, signInType, "Access"); jwtTokenProvider.setHeaderAccessToken(response, newAccessToken); - setAuthentication(jwtTokenProvider.getEmailFromToken(newAccessToken)); + setAuthentication(jwtTokenProvider.getEmailFromToken(newAccessToken), signInType); filterChain.doFilter(request,response); return; } @@ -44,8 +49,8 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse filterChain.doFilter(request,response); } - public void setAuthentication(String email) { - Authentication authentication = jwtTokenProvider.createAuthentication(email); + public void setAuthentication(String email, SignInType signInType) { + Authentication authentication = jwtTokenProvider.createAuthentication(email, signInType); SecurityContextHolder.getContext().setAuthentication(authentication); } diff --git a/src/main/java/com/ourmenu/backend/global/util/JwtTokenProvider.java b/src/main/java/com/ourmenu/backend/global/util/JwtTokenProvider.java index d918aa25..911e203b 100644 --- a/src/main/java/com/ourmenu/backend/global/util/JwtTokenProvider.java +++ b/src/main/java/com/ourmenu/backend/global/util/JwtTokenProvider.java @@ -3,6 +3,7 @@ import com.ourmenu.backend.domain.user.application.CustomUserDetailsService; import com.ourmenu.backend.domain.user.dao.RefreshTokenRepository; import com.ourmenu.backend.domain.user.domain.RefreshToken; +import com.ourmenu.backend.domain.user.domain.SignInType; import com.ourmenu.backend.domain.user.dto.response.TokenDto; import com.ourmenu.backend.domain.user.exception.InvalidTokenException; import com.ourmenu.backend.domain.user.exception.TokenExpiredExcpetion; @@ -44,7 +45,7 @@ public class JwtTokenProvider { private Key key; private final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256; - private static final long ACCESS_TIME = 60 * 60 * 1000L; // 1시간 + private static final long ACCESS_TIME = 30 * 24 * 60 * 60 * 1000L; // 1시간 -> 30일로 임시 변경 private static final long REFRESH_TIME = 30 * 24 * 60 * 60 * 1000L; // 30일 public static final String ACCESS_TOKEN = "Authorization"; public static final String REFRESH_TOKEN = "Refresh-Token"; @@ -89,12 +90,12 @@ public String getHeaderToken(HttpServletRequest request, String type) { * @param email User의 Email * @return JWT 정보를 DTO로 반환 */ - public TokenDto createAllToken(String email) { + public TokenDto createAllToken(String email, SignInType signInType) { Date now = new Date(); - String accessToken = createToken(email, "Access"); + String accessToken = createToken(email, signInType, "Access"); - String refreshToken = createToken(email, "Refresh"); + String refreshToken = createToken(email, signInType,"Refresh"); Instant refreshTokenExpiredAt = Instant.now().plus(30, ChronoUnit.DAYS); @@ -108,11 +109,12 @@ public TokenDto createAllToken(String email) { * @param type Token의 종류 * @return 생성한 Token값 */ - public String createToken(String email, String type) { + public String createToken(String email, SignInType signInType, String type) { Date date = new Date(); Claims claims = Jwts.claims(); + claims.put("signInType", signInType.name()); claims.put("email", email); long time = ACCESS_TIME; @@ -157,7 +159,7 @@ public Boolean refreshTokenValidation(String token) { return false; } - Optional refreshToken = refreshTokenRepository.findRefreshTokenByEmail(getEmailFromToken(token)); + Optional refreshToken = refreshTokenRepository.findRefreshTokenByEmailAndSignInType(getEmailFromToken(token), getSignInTypeFromToken(token)); return refreshToken.isPresent() && token.equals(refreshToken.get().getRefreshToken()); } @@ -167,8 +169,8 @@ public Boolean refreshTokenValidation(String token) { * @param email User의 Email * @return 인증 객체(Authentication) */ - public Authentication createAuthentication(String email) { - UserDetails userDetails = customUserDetailsService.loadUserByUsername(email); + public Authentication createAuthentication(String email, SignInType signInType) { + UserDetails userDetails = customUserDetailsService.loadUserByEmailAndSignInType(email, signInType); return new UsernamePasswordAuthenticationToken(userDetails, "", userDetails.getAuthorities()); } @@ -184,6 +186,14 @@ public String getEmailFromToken(String token) { .get("email", String.class); } + public SignInType getSignInTypeFromToken(String token) { + String signInType = Jwts.parserBuilder().setSigningKey(key).build() + .parseClaimsJws(token).getBody() + .get("signInType", String.class); + + return SignInType.convert(signInType); + } + /** * Response의 Header에 AccessToken값을 설정 * diff --git a/src/test/java/com/ourmenu/backend/domain/cache/api/CacheApiTest.java b/src/test/java/com/ourmenu/backend/domain/cache/api/CacheApiTest.java index 4e3ee722..352de938 100644 --- a/src/test/java/com/ourmenu/backend/domain/cache/api/CacheApiTest.java +++ b/src/test/java/com/ourmenu/backend/domain/cache/api/CacheApiTest.java @@ -6,7 +6,7 @@ import com.ourmenu.backend.domain.cache.dto.SimpleMenuFolderIconResponse; import com.ourmenu.backend.domain.cache.dto.SimpleMenuPinResponse; import com.ourmenu.backend.domain.cache.dto.SimpleTagImgResponse; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.global.TestConfig; import com.ourmenu.backend.global.config.GlobalDataConfig; import com.ourmenu.backend.global.data.GlobalUserTestData; @@ -34,7 +34,7 @@ public class CacheApiTest { GlobalUserTestData userTestData; @Autowired - UrlConverter urlConvertor; + UrlConverterService urlConvertor; RestTemplate restTemplate = new RestTemplate(); diff --git a/src/test/java/com/ourmenu/backend/domain/home/api/HomeApiTest.java b/src/test/java/com/ourmenu/backend/domain/home/api/HomeApiTest.java index 69ffbaa1..f1696cf2 100644 --- a/src/test/java/com/ourmenu/backend/domain/home/api/HomeApiTest.java +++ b/src/test/java/com/ourmenu/backend/domain/home/api/HomeApiTest.java @@ -1,7 +1,7 @@ package com.ourmenu.backend.domain.home.api; import com.ourmenu.backend.domain.cache.domain.HomeImg; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.home.config.HomeTestConfig; import com.ourmenu.backend.domain.home.data.HomeTestData; import com.ourmenu.backend.domain.home.domain.Answer; @@ -31,7 +31,7 @@ public class HomeApiTest { HomeController homeController; @Autowired - UrlConverter urlConverter; + UrlConverterService urlConverterService; @Autowired HomeTestData homeTestData; @@ -104,8 +104,9 @@ void setUp() { Assertions.assertThat(response.getResponse().getAnswerImgUrl()).satisfiesAnyOf( answerImgUrl -> Assertions.assertThat(answerImgUrl) - .isEqualTo(urlConverter.getHomeImgUrl(HomeImg.LIKE1)), - answerImgUrl -> Assertions.assertThat(answerImgUrl).isEqualTo(urlConverter.getHomeImgUrl(HomeImg.LIKE2)) + .isEqualTo(urlConverterService.getHomeImgUrl(HomeImg.LIKE1)), + answerImgUrl -> Assertions.assertThat(answerImgUrl) + .isEqualTo(urlConverterService.getHomeImgUrl(HomeImg.LIKE2)) ); } diff --git a/src/test/java/com/ourmenu/backend/domain/home/application/HomeImgUrlTest.java b/src/test/java/com/ourmenu/backend/domain/home/application/HomeImgUrlTest.java index 15366402..b7b6f5de 100644 --- a/src/test/java/com/ourmenu/backend/domain/home/application/HomeImgUrlTest.java +++ b/src/test/java/com/ourmenu/backend/domain/home/application/HomeImgUrlTest.java @@ -1,7 +1,7 @@ package com.ourmenu.backend.domain.home.application; import com.ourmenu.backend.domain.cache.domain.HomeImg; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.tag.domain.Tag; import java.util.Arrays; import java.util.List; @@ -18,7 +18,7 @@ public class HomeImgUrlTest { @Autowired - UrlConverter urlConverter; + UrlConverterService urlConverterService; RestTemplate restTemplate = new RestTemplate(); @@ -31,7 +31,7 @@ public class HomeImgUrlTest { //then homeImgs.stream().forEach(homeImg -> { - String homeImgUrl = urlConverter.getHomeImgUrl(homeImg); + String homeImgUrl = urlConverterService.getHomeImgUrl(homeImg); ResponseEntity responseEntity = restTemplate.getForEntity(homeImgUrl, String.class); Assertions.assertThat(responseEntity.getStatusCode().is2xxSuccessful()).isTrue(); Assertions.assertThat(responseEntity.getBody()).isNotEmpty(); @@ -47,7 +47,7 @@ public class HomeImgUrlTest { //then tags.stream().forEach(tag -> { - String homeRecommendTagImgUrl = urlConverter.getHomeRecommendTagImgUrl(tag); + String homeRecommendTagImgUrl = urlConverterService.getHomeRecommendTagImgUrl(tag); ResponseEntity responseEntity = restTemplate.getForEntity(homeRecommendTagImgUrl, String.class); Assertions.assertThat(responseEntity.getStatusCode().is2xxSuccessful()).isTrue(); Assertions.assertThat(responseEntity.getBody()).isNotEmpty(); diff --git a/src/test/java/com/ourmenu/backend/domain/menu/api/MenuApiTest.java b/src/test/java/com/ourmenu/backend/domain/menu/api/MenuApiTest.java index e893d6aa..338b25b4 100644 --- a/src/test/java/com/ourmenu/backend/domain/menu/api/MenuApiTest.java +++ b/src/test/java/com/ourmenu/backend/domain/menu/api/MenuApiTest.java @@ -1,7 +1,7 @@ package com.ourmenu.backend.domain.menu.api; import com.ourmenu.backend.domain.cache.domain.MenuPin; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.config.MenuTestConfig; import com.ourmenu.backend.domain.menu.data.MenuTestData; import com.ourmenu.backend.domain.menu.domain.Menu; @@ -36,7 +36,7 @@ public class MenuApiTest { MenuController menuController; @Autowired - UrlConverter urlConverter; + UrlConverterService urlConverterService; @Autowired GlobalUserTestData userTestData; @@ -70,7 +70,7 @@ void setUp() { Assertions.assertThat(response.getResponse().getMenus().size()).isEqualTo(3); Assertions.assertThat(response.getResponse().getMenuFolderIconImgUrl()) - .isEqualTo(urlConverter.getMenuFolderImgUrl(testMenuFolder.getIcon())); + .isEqualTo(urlConverterService.getMenuFolderImgUrl(testMenuFolder.getIcon())); } @Test @@ -89,7 +89,7 @@ void setUp() { Assertions.assertThat(response.getResponse().getMenuMemoTitle()).isEqualTo(menuMemoTitle); Assertions.assertThat(response.getResponse().getMenuPinImgUrl()) - .isEqualTo(urlConverter.getMenuPinAddUrl(MenuPin.BBQ)); + .isEqualTo(urlConverterService.getMenuPinAddUrl(MenuPin.BBQ)); } @Test diff --git a/src/test/java/com/ourmenu/backend/domain/menu/api/MenuFolderApiTest.java b/src/test/java/com/ourmenu/backend/domain/menu/api/MenuFolderApiTest.java index db16f95c..1e729b43 100644 --- a/src/test/java/com/ourmenu/backend/domain/menu/api/MenuFolderApiTest.java +++ b/src/test/java/com/ourmenu/backend/domain/menu/api/MenuFolderApiTest.java @@ -1,7 +1,7 @@ package com.ourmenu.backend.domain.menu.api; import com.ourmenu.backend.domain.cache.domain.MenuFolderIcon; -import com.ourmenu.backend.domain.cache.util.UrlConverter; +import com.ourmenu.backend.domain.cache.application.UrlConverterService; import com.ourmenu.backend.domain.menu.config.MenuTestConfig; import com.ourmenu.backend.domain.menu.data.MenuTestData; import com.ourmenu.backend.domain.menu.domain.MenuFolder; @@ -34,7 +34,7 @@ public class MenuFolderApiTest { MenuFolderController menuFolderController; @Autowired - UrlConverter urlConverter; + UrlConverterService urlConverterService; @Autowired GlobalUserTestData userTestData; @@ -157,7 +157,7 @@ void setUp() { .isEqualTo(modifiedMenuFolderName); Assertions.assertThat(updateMenuFolderResponseApiResponse.getResponse().getMenuFolderIconImgUrl()) - .isEqualTo(urlConverter.getMenuFolderImgUrl(testMenuFolder.getIcon())); + .isEqualTo(urlConverterService.getMenuFolderImgUrl(testMenuFolder.getIcon())); } @Test diff --git a/src/test/java/com/ourmenu/backend/domain/store/unit/AddressTest.java b/src/test/java/com/ourmenu/backend/domain/store/unit/AddressTest.java new file mode 100644 index 00000000..512cc329 --- /dev/null +++ b/src/test/java/com/ourmenu/backend/domain/store/unit/AddressTest.java @@ -0,0 +1,37 @@ +package com.ourmenu.backend.domain.store.unit; + +import com.ourmenu.backend.domain.store.util.AddressParser; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +@DisplayName("주소 파싱 단위 테스트") +public class AddressTest { + + + @Test + void 상세주소를_시_구_조합으로_변환_할_수_있다() { + //given + String cityDistrict = "서울 광진구"; + String address = "서울 광진구 능동로16길 57 (우)05021"; + + //when + String simpleAddress = AddressParser.parseAddressToCityDistrict(address); + + //then + Assertions.assertThat(simpleAddress).isEqualTo(cityDistrict); + } + + @Test + void 옳지못한_주소에_대해서_예외를_발생시키지_않는다() { + //given + String address = "서울"; + + //when + String simpleAddress = AddressParser.parseAddressToCityDistrict(address); + + //then + Assertions.assertThat(simpleAddress).isEqualTo(address); + } + +} diff --git a/src/test/java/com/ourmenu/backend/domain/user/api/UserApiTest.java b/src/test/java/com/ourmenu/backend/domain/user/api/UserApiTest.java index fe3eaed4..14b01093 100644 --- a/src/test/java/com/ourmenu/backend/domain/user/api/UserApiTest.java +++ b/src/test/java/com/ourmenu/backend/domain/user/api/UserApiTest.java @@ -100,6 +100,7 @@ void setUp() { //then Assertions.assertThat(response.isSuccess()).isEqualTo(true); + Assertions.assertThat(response.getResponse().isExistUser()).isEqualTo(true); } @Test @@ -209,4 +210,25 @@ void setUp() { //then Assertions.assertThat(response.isSuccess()).isEqualTo(true); } + + @Test + public void 하나의_이메일을_다른_방식으로_회원가입할_수_있다() throws Exception{ + //given + userTestData.createTestEmailUser(); + + List mealTime = new ArrayList<>(); + mealTime.add(LocalTime.of(12, 0)); + mealTime.add(LocalTime.of(16, 0)); + SignUpRequest signUpRequest = new SignUpRequest("test123@gmail.com", + "password123", + mealTime, + "KAKAO" + ); + + //when + ApiResponse response = userController.signUp(signUpRequest); + + //then + Assertions.assertThat(response.isSuccess()).isEqualTo(true); + } }