Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
5bcd000
fix: GET/api/menus/{menuId} 응답 필드 추가
david-parkk Jun 4, 2025
5b93a80
Merge pull request #109 from OurMenu/KAN-53-fix/menu
You-Hyuk Jun 4, 2025
142d013
feat: AddressParser
david-parkk Jun 4, 2025
30312db
fix: 메뉴 단순 조회 응답 필드 변경
david-parkk Jun 4, 2025
91bb829
Merge pull request #111 from OurMenu/KAN-54-fix/store
You-Hyuk Jun 9, 2025
4a953c4
Revert "[FIX] 메뉴 단순 조회 관련 API 수정"
david-parkk Jun 9, 2025
306645e
Merge pull request #112 from OurMenu/revert-111-KAN-54-fix/store
david-parkk Jun 9, 2025
9a40bd7
refactor: 유틸 클래스 서비스화
david-parkk Jun 9, 2025
4accc24
Revert "Revert "[FIX] 메뉴 단순 조회 관련 API 수정""
david-parkk Jun 9, 2025
01347d4
Merge pull request #113 from OurMenu/revert-112-revert-111-KAN-54-fix…
david-parkk Jun 9, 2025
c901d87
docs: 리드미 수정
david-parkk Jun 10, 2025
985ca40
feat: TimeZone 추가
david-parkk Jun 25, 2025
62f1ec9
Merge pull request #114 from OurMenu/KAN-54-fix/store
You-Hyuk Jun 26, 2025
63a7518
Merge pull request #116 from OurMenu/KAN-55-docs/readme
You-Hyuk Jun 26, 2025
b45396e
Merge pull request #118 from OurMenu/KAN-56-infra/timezone
You-Hyuk Jun 26, 2025
31982a4
fix: 토큰 Claim SignInType 추가
You-Hyuk Jun 27, 2025
93342b1
feat: SignInType String 변환 메소드
You-Hyuk Jun 27, 2025
516354e
fix: RefreshToken SignInType 추가
You-Hyuk Jun 27, 2025
d7799b1
fix: SignInType 추가 반영
You-Hyuk Jun 27, 2025
59c468f
fix: 토큰 SignInType String 변경
You-Hyuk Jun 27, 2025
e8708e2
fix: 유저 조회 오류 해결
You-Hyuk Jun 27, 2025
8e2031b
fix: NoArgsConstructor 어노테이션 추가
You-Hyuk Jun 27, 2025
bdea5f3
Merge branch 'develop' of https://github.com/OurMenu/OurMenu-BE-V2 in…
You-Hyuk Jun 27, 2025
bf2dda7
test: 중복 계정 회원가입 테스트
You-Hyuk Jun 28, 2025
9efee1c
refactor: UserService 가독성 개선
You-Hyuk Jun 28, 2025
8a3b54c
fix: UserDetailService 제거
You-Hyuk Jun 28, 2025
049df9f
Merge pull request #119 from OurMenu/KAN-51-fix/email
david-parkk Jun 28, 2025
a4b8f3b
docs: 리드미 수정
david-parkk Jul 7, 2025
5c83fae
Merge pull request #120 from OurMenu/KAN-55-docs/readme
You-Hyuk Jul 9, 2025
9f6d4e6
fix: AccessToken 유효기간 임시 변경
You-Hyuk Jul 16, 2025
e2b46ae
fix: 카카오 계정 존재 시 토큰 반환
You-Hyuk Jul 16, 2025
6b47120
test: 카카오 검증 API 테스트 수정
You-Hyuk Jul 16, 2025
9acec24
Merge pull request #122 from OurMenu/KAN-57-fix/kakao
david-parkk Jul 17, 2025
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
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
# OurMenu-BE-V2
OurMenu-BE-V2
## 기술 스택

<p align=center><img src="https://github.com/user-attachments/assets/5630cbef-40d9-45c0-9b98-26e24975c57f" alt="drawing" width="600"/></p>

## 아키텍처

<p align=center><img src="https://github.com/user-attachments/assets/2f044ecf-93c7-436b-bbca-ceeea3efe221" alt="drawing" width="800"/></p>
4 changes: 3 additions & 1 deletion infra/docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand All @@ -22,4 +23,5 @@ services:
SPRING_SWAGGER_SERVER_URL: ${URL}
DEFAULT_BUCKET_URL: ${DEFAULT_BUCKET_URL}
volumes:
- /var/log/springboot/:/var/log/springboot/
- /var/log/springboot/:/var/log/springboot/
- /etc/localtime:/etc/localtime:ro
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -19,7 +18,7 @@
@RequiredArgsConstructor
public class CacheService {

private final UrlConverter urlConvertor;
private final UrlConverterService urlConvertor;

public GetCacheInfoResponse getCacheInfo() {
List<SimpleMenuFolderIconResponse> menuFolderIconInfo = getMenuFolderIconInfo();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
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;
import com.ourmenu.backend.domain.cache.domain.MenuPin;
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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;

/**
* 홈 질문 응답 값을 저장 및 추천 메뉴를 캐싱한다. 질문에 관련 없는 응답이면 에러를 반환한다.
Expand Down Expand Up @@ -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);
}

/**
Expand All @@ -93,7 +93,7 @@ public GetHomeRecommendResponse getRecommendMenus(Long userId) {
List<GetRecommendMenuResponse> randomRecommendMenus = getRandomRecommendMenu();

return GetHomeRecommendResponse.of(answer, questionRecommendMenus, tagRandomRecommendDto.getTag(),
tagRandomRecommendDto.getGetRecommendMenuResponses(), randomRecommendMenus, urlConverter);
tagRandomRecommendDto.getGetRecommendMenuResponses(), randomRecommendMenus, urlConverterService);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -27,10 +27,10 @@ public static GetHomeRecommendResponse of(Answer answer,
Tag tag,
List<GetRecommendMenuResponse> tagRecommendMenus,
List<GetRecommendMenuResponse> 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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -18,19 +18,20 @@ public class SaveAndGetQuestionRequest {
private String question;
private List<AnswerDto> 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()
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;

/**
* 유저가 보유한 메뉴들을 가져와 위치가 같은 메뉴들은 그룹핑하여 조회
Expand All @@ -70,7 +70,7 @@ public List<MenuOnMapDto> findMenusOnMap(Long userId) {

return menuMaps.entrySet().stream()
.map(entry -> MenuOnMapDto.from(
entry.getKey(), entry.getValue(), urlConverter))
entry.getKey(), entry.getValue(), urlConverterService))
.collect(Collectors.toList());
}

Expand Down Expand Up @@ -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);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;

/**
* 메뉴 폴더 저장
Expand All @@ -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);
}

/**
Expand Down Expand Up @@ -95,7 +95,7 @@ public UpdateMenuFolderResponse updateMenuFolder(Long userId, Long menuFolderId,
menuFolder.update(menuFolderDto);
List<MenuMenuFolder> menuMenuFolders = menuMenuFolderService.findAllByMenuFolderId(menuFolderId);
return UpdateMenuFolderResponse.of(menuFolder, menuMenuFolders,
defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter);
defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService);
}

/**
Expand Down Expand Up @@ -126,7 +126,7 @@ public UpdateMenuFolderResponse updateMenuFolderIndex(Long userId, Long menuFold
findMenuFolder.updateIndex(index);
List<MenuMenuFolder> menuMenuFolders = menuMenuFolderService.findAllByMenuFolderId(menuFolderId);
return UpdateMenuFolderResponse.of(findMenuFolder, menuMenuFolders,
defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverter);
defaultImgConvertor.getDefaultMenuFolderImgUrl(), urlConverterService);
}


Expand All @@ -144,7 +144,7 @@ public GetMenuFolderResponse findAllMenuFolder(Long userId) {
List<MenuMenuFolder> 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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<MenuImg> saveMenuImgs(Long menuId, List<MultipartFile> multipartFiles) {
Expand Down Expand Up @@ -52,7 +52,7 @@ public String findUniqueImg(Long menuId) {
return menuImgRepository.findAllByMenuId(menuId).stream()
.map(MenuImg::getImgUrl)
.findFirst()
.orElse(defaultImgConverter.getDefaultMenuImgUrl());
.orElse(defaultImgConverterService.getDefaultMenuImgUrl());
}

/**
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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;

/**
* 메뉴 저장(메뉴 사진, 메뉴판, 태그 의존 엔티티 생성
Expand All @@ -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())
Expand All @@ -79,7 +79,7 @@ public SaveMenuResponse saveMenu(MenuDto menuDto) {
//s3 업로드및 이미지 연관관계 생성
List<MenuImg> menuImgs = menuImgService.saveMenuImgs(saveMenu.getId(), menuDto.getMenuImgs());
return SaveMenuResponse.of(saveMenu, store, store.getMap(), menuImgs, saveMenuMenuFolders, saveTag,
urlConverter);
urlConverterService);
}

/**
Expand Down Expand Up @@ -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);
}

/**
Expand Down Expand Up @@ -218,7 +218,7 @@ public GetMenuResponse findMenu(Long userId, Long menuId) {
List<String> imgUrls = menuImgService.findImgUrls(menuId);
List<Tag> tags = menuTagService.findTagNames(menuId);
List<MenuFolder> menuFolders = menuFolderService.findAllByMenuId(menuId);
return GetMenuResponse.of(menu, imgUrls, tags, menuFolders, urlConverter);
return GetMenuResponse.of(menu, imgUrls, tags, menuFolders, urlConverterService);
}


Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Loading