Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
7920f30
test: 테스트 환경 DB cleaner
david-parkk Mar 28, 2025
2b3488f
feat: ApiResponse Getter
david-parkk Mar 28, 2025
b71d552
test: 메뉴판 테스트 추가
david-parkk Mar 28, 2025
98639db
Merge branch 'develop' of https://github.com/OurMenu/OurMenu-BE-V2 in…
david-parkk Mar 28, 2025
d33da2b
feat: testData 추가
david-parkk Apr 4, 2025
16d0f04
test: 테스트 클래스 이름 추가, 주석 삭제
david-parkk Apr 4, 2025
3949ede
test: 테스트 추가
david-parkk Apr 4, 2025
bfa7e6e
test: testConfig 빈 설정 변경
david-parkk Apr 4, 2025
2a49815
test: 불필요한 코드 삭제
david-parkk Apr 8, 2025
5e8f360
fix: 불필요한 코드 삭제
david-parkk Apr 8, 2025
daed582
Merge branch 'develop' of https://github.com/OurMenu/OurMenu-BE-V2 in…
david-parkk Apr 8, 2025
1eab0e8
test: response 변경 & 테스트 추가
david-parkk Apr 8, 2025
6a73094
Merge pull request #76 from OurMenu/KAN-36-test/menu-folder
You-Hyuk Apr 10, 2025
a97d2e9
fix: workflow 이름 변경
david-parkk Apr 10, 2025
2ed0b72
fix: .gitignore
david-parkk Apr 10, 2025
2ccaece
del: hibernate auto ddl
david-parkk Apr 10, 2025
d40c221
docs: ddl.sql
david-parkk Apr 10, 2025
2e2886f
fix: cd worflow
david-parkk Apr 10, 2025
49b942c
del: 불필요한 코드 삭제
david-parkk Apr 10, 2025
c78979a
fix: 메뉴판 메뉴 조회 API 수정
david-parkk Apr 10, 2025
b9f19ed
fix: 불필요한 @Transactional 삭제
david-parkk Apr 10, 2025
f7fc06f
test: 테스트 추가
david-parkk Apr 10, 2025
f2056b6
fix: response 변경
david-parkk Apr 10, 2025
fe583df
test: 테스트 리펙토링
david-parkk Apr 10, 2025
f6f8051
Merge pull request #79 from OurMenu/KAN-38-fix/ddl
You-Hyuk Apr 14, 2025
bb71824
Merge pull request #81 from OurMenu/KAN-39-fix/menu
You-Hyuk Apr 14, 2025
30266f0
Merge pull request #82 from OurMenu/KAN-37-fix/menu-folder
You-Hyuk Apr 14, 2025
1573988
fix: gitignore 수정
david-parkk May 1, 2025
0de9c16
test 테스트 추가
david-parkk May 1, 2025
56f7f4f
test: 테스트 추가
david-parkk May 1, 2025
ba254a8
test: 테스트 추가
david-parkk May 1, 2025
fa88271
test: 테스트 추가
david-parkk May 1, 2025
fb96861
test: 테스트 추가
david-parkk May 1, 2025
3d9a0f7
test: 테스트 추가
david-parkk May 1, 2025
266f1dc
test: 테스트 추가
david-parkk May 1, 2025
6ef1d8e
refactor: test 데이터 리펙토링
david-parkk May 1, 2025
3fb7f47
Merge pull request #84 from OurMenu/KAN-40-test/menu
You-Hyuk May 2, 2025
e6cfdff
test: 불필요한 클래스 삭제
david-parkk May 5, 2025
85c71c7
Merge pull request #86 from OurMenu/KAN-41-test/search
david-parkk May 5, 2025
009018e
test: global test data 추가
david-parkk May 5, 2025
f28f96a
Merge branch 'develop' of https://github.com/OurMenu/OurMenu-BE-V2 in…
david-parkk May 5, 2025
a9466b4
Merge pull request #88 from OurMenu/KAN-42-test/home
david-parkk May 5, 2025
ea9f037
fix: Controller 메소드 Public 변경
You-Hyuk May 11, 2025
d530ca0
test: 회원가입 API 테스트
You-Hyuk May 11, 2025
b1ff7b5
test: 로그인 API 테스트
You-Hyuk May 11, 2025
4b201b2
test: 카카오 계정 검증 API 테스트
You-Hyuk May 11, 2025
bc18372
test: 식사시간 변경 API 테스트
You-Hyuk May 11, 2025
1bb68bc
test: 비밀번호 변경 API 테스트
You-Hyuk May 11, 2025
655bf3e
test: 로그아웃 API 테스트
You-Hyuk May 11, 2025
ada29af
test: 유저 정보 조회 API 테스트
You-Hyuk May 11, 2025
4105187
test: 유저 삭제 API 테스트
You-Hyuk May 11, 2025
faab141
fix: GlobalUserTestDate 비밀번호 인코딩
You-Hyuk May 11, 2025
b8ee1e1
test: Reissue API 테스트
You-Hyuk May 12, 2025
dbc965f
test: 이메일 인증 요청 API 테스트
You-Hyuk May 12, 2025
97b0a92
test: 이메일 인증 코드 검증 API 테스트
You-Hyuk May 12, 2025
66c7c25
fix: 임시 비밀번호 인코딩
You-Hyuk May 12, 2025
34aceb4
test: 임시 비밀번호 발급 API 테스트
You-Hyuk May 12, 2025
a34dfc8
fix: 로그아웃 API 테스트 오류 해결
You-Hyuk May 12, 2025
390b781
remove: 코드 제거
You-Hyuk May 12, 2025
404d5a8
feat: 토큰 고유 ID 추가
You-Hyuk May 12, 2025
e972d46
fix: 토큰 고유 ID 제거
You-Hyuk May 15, 2025
6832b0c
fix: SignUpRequest mealTime 자료형 변경
You-Hyuk May 15, 2025
173c807
fix: mealTime 변경
You-Hyuk May 15, 2025
379f39b
fix: HttpServletResponse 제거
You-Hyuk May 15, 2025
009f8d0
fix: 로그아웃 테스트 수정
You-Hyuk May 15, 2025
d9b47b9
Merge pull request #91 from OurMenu/KAN-43-test/user
david-parkk May 15, 2025
c593716
chore: 로그 설정
david-parkk May 22, 2025
e92ed1e
fix: GET /home response 변경
david-parkk May 23, 2025
bd38948
test: 캐시 API 테스트
david-parkk May 24, 2025
c198aaa
fix: Request NoArgsConstructor 추가
You-Hyuk May 24, 2025
e2573a4
feat: 유저 정보 조회 시 식사시간 여부 추가
You-Hyuk May 24, 2025
b2d7a61
feat: 마이페이지 URL 필드 추가
You-Hyuk May 24, 2025
0219254
feat: 랜덤 코드 영문자 제거
You-Hyuk May 24, 2025
242a33b
Merge pull request #93 from OurMenu/KAN-45-chore/logging
You-Hyuk May 24, 2025
193340b
Merge pull request #96 from OurMenu/KAN-47-fix/home
You-Hyuk May 24, 2025
a0efda5
Merge pull request #99 from OurMenu/KAN-49-fix/cache
You-Hyuk May 24, 2025
fdd8af9
fix: 유저 정보 조회 API 변경사항 테스트 반영
You-Hyuk May 24, 2025
405076b
fix: 메뉴핀 지도 이미지 확장자 변경
david-parkk May 26, 2025
8cdf87d
Merge pull request #102 from OurMenu/KAN-50-fix/menu-pin-img
You-Hyuk May 26, 2025
5d0aeef
fix: POST,GET/api/menu-folders
david-parkk May 26, 2025
5d12689
fix: PATCH/api/menu-folders/**
david-parkk May 26, 2025
7de6432
fix: POST/api/menus, GET/api/menu-folders/{menuFolderId}/menus
david-parkk May 26, 2025
3302f3c
fix: GET/api/menus/{menuId}
david-parkk May 26, 2025
6554ad6
Merge branch 'develop' of https://github.com/OurMenu/OurMenu-BE-V2 in…
david-parkk May 27, 2025
b909a48
fix: 지도 API 변경
david-parkk May 27, 2025
0450ff0
fix: home API 수정
david-parkk May 27, 2025
926ca30
feat: 유틸 클래스 설정
david-parkk May 27, 2025
48469a9
fix: 테스트 수정 & 네이밍 변경
david-parkk May 27, 2025
4b85dc7
fix: GET/api/home/questions response 변경
david-parkk May 28, 2025
e309782
fix: MealTime 요청 및 응답 LocalTime 변경
You-Hyuk May 28, 2025
2c15288
rename: MealTimeDtoList 네이밍 변경
You-Hyuk May 28, 2025
fdcc10b
fix: Transactional 어노테이션 추가
You-Hyuk May 28, 2025
ace10df
fix: 유저 API 테스트 MealTime 수정
You-Hyuk May 28, 2025
faddfd4
fix: Response success 필드 중복 제거
You-Hyuk May 28, 2025
4e2820f
fix: 메뉴핀 이미지 확장자 변경
david-parkk May 28, 2025
4505f93
test: 필요 없는 필드 삭제
david-parkk May 28, 2025
913f98e
test: 테스트 이름 변경
david-parkk May 28, 2025
32c9297
test: 테스트 추가
david-parkk May 28, 2025
0ba6f70
refactor: 조회 메소드 Transactional 어노테이션 제거
You-Hyuk May 28, 2025
63a6cce
Merge pull request #100 from OurMenu/KAN-46-fix/user
david-parkk May 29, 2025
a21c28f
Merge pull request #103 from OurMenu/KAN-48-fix/enum
david-parkk May 29, 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
2 changes: 1 addition & 1 deletion .github/workflows/cd-with-discord.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: CI and request Discord Message to review
name: CD and request Discord Message to deploy

on:
push:
Expand Down
38 changes: 34 additions & 4 deletions .github/workflows/ci-with-discord.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
mysql:
image: mysql:8.0
ports:
- 3306:3306
- 3307:3306
env:
MYSQL_DATABASE: testdb
MYSQL_ROOT_PASSWORD: testdb
Expand All @@ -35,6 +35,16 @@ jobs:
--health-timeout=5s
--health-retries=3

redis:
image: redis
ports:
- 6380:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5

steps:
- uses: actions/checkout@v4
- name: JDK 17 를 준비한다.
Expand All @@ -49,13 +59,33 @@ jobs:
- name: Gradle 를 준비한다.
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

- name: ACT 환경에 대해서 패키지를 업데이터 & 설치한다
if: ${{ env.ACT }}
run: |
apt-get update && apt-get install sudo -y

- name: sudo 설치 테스트한다
if: ${{ env.ACT }}
run: |
sudo id

- name: DDL 경로 확인
run: |
ls -al infra/sql/
cat infra/sql/ddl.sql

- name: DDL 파일을 실행하여 테이블을 생성한다.
run: |
sudo apt-get install -y default-mysql-client
mysql -h 127.0.0.1 -P 3307 -uroot -ptestdb testdb --verbose < infra/sql/ddl.sql

- name: 빌드한다.
env:
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3306/testdb
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:3307/testdb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: testdb
SPRING_JPA_HIBERNATE_DDL_AUTO: update
SPRING_DATA_REDIS_HOST: localhost
SPRING_DATA_REDIS_HOST: 127.0.0.1
SPRING_DATA_REDIS_PORT: 6380
SPRING_DATA_REDIS_PASSWORD:
MONGO_URL: ${{ secrets.MONGO_URL }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
.DS_Store

### STS ###
.apt_generated
Expand Down Expand Up @@ -37,3 +38,4 @@ out/
.vscode/

.env
.act_secrets
2 changes: 2 additions & 0 deletions infra/docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,5 @@ services:
S3_SECRET_KEY: ${S3_SECRET_KEY}
SPRING_SWAGGER_SERVER_URL: ${URL}
DEFAULT_BUCKET_URL: ${DEFAULT_BUCKET_URL}
volumes:
- /var/log/springboot/:/var/log/springboot/
136 changes: 136 additions & 0 deletions infra/sql/ddl.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
SET FOREIGN_KEY_CHECKS = 0;

create table home_question_answer (
id bigint not null auto_increment,
user_id bigint,
answer enum ('DISLIKE','LIKE','MOUNTAIN','RAINY','SEA','SPICY','SUMMER','SUNNY','SWEET','WINTER'),
question enum ('FEEL','SEASON','STRESS','TRIP','WEATHER'),
primary key (id)
) engine=InnoDB;

create table map (
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
location POINT SRID 4326 not null,
primary key (id)
) engine=InnoDB;

create table meal_time (
meal_time time(6),
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
user_id bigint,
primary key (id)
) engine=InnoDB;

create table menu (
is_crawled bit,
pin tinyint check (pin between 0 and 22),
price integer not null,
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
store_id bigint,
user_id bigint not null,
memo_content varchar(255),
memo_title varchar(255),
title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table menu_folder (
custom_index integer not null,
icon tinyint check (icon between 0 and 31),
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
user_id bigint not null,
img_url varchar(255),
title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table menu_menu_folder (
created_at datetime(6),
folder_id bigint,
id bigint not null auto_increment,
menu_id bigint,
modified_at datetime(6),
primary key (id)
) engine=InnoDB;

create table menu_img (
created_at datetime(6),
id bigint not null auto_increment,
menu_id bigint,
modified_at datetime(6),
img_url varchar(255),
primary key (id)
) engine=InnoDB;

create table menu_tag (
created_at datetime(6),
id bigint not null auto_increment,
menu_id bigint not null,
modified_at datetime(6),
tag enum ('ASIA','BREAD','BUSINESS','BUY_FOOD','CAFE','CHINA','COOL','DATE','DESSERT','FAST_FOOD','FISH','HOT','HOT_SPICY','JAPAN','KOREA','MEAT','NOODLE','ORGANIZATION','PROMISE','RICE','SOLO','SPICY','SWEET','WESTERN'),
primary key (id)
) engine=InnoDB;

create table not_owned_search_history (
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
user_id bigint not null,
address varchar(255) not null,
title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table not_found_store (
mapx float(53) not null,
mapy float(53) not null,
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
address varchar(255) not null,
store_id varchar(255),
title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table owned_menu_search (
created_at datetime(6),
id bigint not null auto_increment,
menu_id bigint not null,
modified_at datetime(6),
user_id bigint not null,
menu_title varchar(255) not null,
store_address varchar(255) not null,
store_title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table store (
created_at datetime(6),
id bigint not null auto_increment,
map_id bigint,
modified_at datetime(6),
address varchar(255),
title varchar(255) not null,
primary key (id)
) engine=InnoDB;

create table user (
created_at datetime(6),
id bigint not null auto_increment,
modified_at datetime(6),
email varchar(255),
password varchar(255),
sign_in_type enum ('EMAIL','KAKAO'),
primary key (id)
) engine=InnoDB;

SET FOREIGN_KEY_CHECKS = 1;
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public GetCacheInfoResponse getCacheInfo() {
private List<SimpleMenuFolderIconResponse> getMenuFolderIconInfo() {
return Arrays.stream(MenuFolderIcon.values())
.map(menuFolderIcon -> {
String menuFolderIconUrl = urlConvertor.getMenuFolderUrl(menuFolderIcon);
String menuFolderIconUrl = urlConvertor.getMenuFolderImgUrl(menuFolderIcon);
return SimpleMenuFolderIconResponse.of(menuFolderIcon, menuFolderIconUrl);
})
.toList();
Expand All @@ -44,7 +44,7 @@ private List<SimpleMenuPinResponse> getMenuPinInfo() {
.map(menuPin -> {
String menuPinMapUrl = urlConvertor.getMenuPinMapUrl(menuPin);
String menuPinAddUrl = urlConvertor.getMenuPinAddUrl(menuPin);
String menuPinMapAddDiable = urlConvertor.getMenuPinMapAddDiable(menuPin);
String menuPinMapAddDiable = urlConvertor.getMenuPinMapAddDisable(menuPin);
return SimpleMenuPinResponse.of(menuPin, menuPinMapUrl, menuPinAddUrl,
menuPinMapAddDiable);
})
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ourmenu.backend.domain.cache.util;

import com.ourmenu.backend.domain.cache.domain.MenuPin;
import java.util.List;

public class MenuPinConverter {

private MenuPinConverter() {

}

public static MenuPin of(List<MenuPin> menuPins) {
if (menuPins.size() == 1) {
return menuPins.get(0);
}
if (menuPins.size() == 2) {
return MenuPin.TWO;
}
if (menuPins.size() == 3) {
return MenuPin.THREE;
}
if (menuPins.size() == 4) {
return MenuPin.FOUR;
}
return MenuPin.FIVE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
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;
Expand All @@ -14,24 +15,21 @@ public class UrlConverter {
private String url;

public String getMenuPinMapUrl(MenuPin pin) {
return url + "/menu-pins/" + pin.getImgUrl() + "_map.svg";
return url + "/menu-pins/" + pin.getImgUrl() + "_map.png";
}

public String getMenuPinAddUrl(MenuPin pin) {
if (isETCMenuPin(pin)) {
return null;
}
return url + "/menu-pins/" + pin.getImgUrl() + "_add.svg";
return url + "/menu-pins/" + pin.getImgUrl() + "_add.png";
}

public String getMenuPinMapAddDiable(MenuPin pin) {
if (isETCMenuPin(pin)) {
return null;
}
return url + "/menu-pins/" + pin.getImgUrl() + "_add_disable.svg";
public String getMenuPinMapAddDisable(MenuPin pin) {
return url + "/menu-pins/" + pin.getImgUrl() + "_add_disable.png";
}

public String getMenuFolderUrl(MenuFolderIcon icon) {
public String getMenuFolderImgUrl(MenuFolderIcon icon) {
return url + "/menu-folder-icons/" + icon.getImgUrl() + ".svg";
}

Expand All @@ -47,6 +45,14 @@ public String getWhiteTagImgUrl(Tag tag) {
return url + "/tags/" + tag.getImgUrl() + "_white.svg";
}

public String getAnswerImgUrl(Answer answer) {
return url + "/answers/" + answer.toString() + ".svg";
}

public String getHomeRecommendTagImgUrl(Tag tag) {
return url + "/home_tags/" + tag.getTagEnum() + ".svg";
}

private boolean isETCMenuPin(MenuPin pin) {
return pin.equals(MenuPin.TWO) || pin.equals(MenuPin.THREE) || pin.equals(MenuPin.FOUR) || pin.equals(
MenuPin.FIVE);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.ourmenu.backend.domain.home.application;

import com.ourmenu.backend.domain.cache.util.UrlConverter;
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 @@ -29,6 +30,7 @@ public class HomeService {
private final RecommendMenuCacheService recommendMenuCacheService;
private final MenuService menuService;
private final MealTimeService mealTimeService;
private final UrlConverter urlConverter;

/**
* 홈 질문 응답 값을 저장 및 추천 메뉴를 캐싱한다. 질문에 관련 없는 응답이면 에러를 반환한다.
Expand Down Expand Up @@ -68,12 +70,12 @@ public SaveAndGetQuestionRequest updateQuestion(Long userId) {
.userId(userId)
.build();
HomeQuestionAnswer saveHomeQuestionAnswer = homeQuestionAnswerRepository.save(homeQuestionAnswer);
return SaveAndGetQuestionRequest.from(saveHomeQuestionAnswer);
return SaveAndGetQuestionRequest.from(saveHomeQuestionAnswer, urlConverter);
}

HomeQuestionAnswer homeQuestionAnswer = optionalHomeQuestionAnswer.get();
homeQuestionAnswer.update(randomQuestion);
return SaveAndGetQuestionRequest.from(homeQuestionAnswer);
return SaveAndGetQuestionRequest.from(homeQuestionAnswer, urlConverter);
}

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

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

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.ourmenu.backend.domain.tag.domain.Tag;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import lombok.Getter;

@Getter
Expand All @@ -38,6 +39,7 @@ public enum Answer {
SUMMER("여름", Tag.COOL, SUMMER1, SUMMER2, SUMMER3),
WINTER("겨울", Tag.HOT, WINTER1, WINTER2);

private static final Random RANDOM = new Random();
private String answer;
private Tag tag;
private List<HomeImg> homeImgs;
Expand All @@ -47,4 +49,9 @@ public enum Answer {
this.tag = tag;
this.homeImgs = Arrays.asList(homeImgs);
}

public HomeImg getRandomHomeImg() {
return homeImgs.get(RANDOM.nextInt(homeImgs.size()));
}

}
Loading