From 0db4e020101934a34ce44dd23d660498aff5c45e Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 15 Sep 2024 00:39:29 +0900 Subject: [PATCH 01/34] =?UTF-8?q?merge:=20=EC=B6=A9=EB=8F=8C=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/build.gradle | 106 +++++++ .../toaster/config/JpaQueryFactoryConfig.java | 34 +- .../java/com/app/toaster/exception/Error.java | 1 + .../com/app/toaster/exception/Success.java | 2 + .../querydsl/CustomToastRepository.java | 154 +++++++++ .../com/app/toaster/service/UserService.java | 5 + .../app/toaster/base/BaseRepositoryTest.java | 15 + .../config/TestJpaQueryFactoryConfig.java | 23 ++ .../querydsl/CustomToastRepositoryTest.java | 293 ++++++++++++++++++ 9 files changed, 616 insertions(+), 17 deletions(-) create mode 100644 linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java create mode 100644 linkmind/src/test/java/com/app/toaster/base/BaseRepositoryTest.java create mode 100644 linkmind/src/test/java/com/app/toaster/config/TestJpaQueryFactoryConfig.java create mode 100644 linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java diff --git a/linkmind/build.gradle b/linkmind/build.gradle index d1526bf8..0cdcbbd7 100644 --- a/linkmind/build.gradle +++ b/linkmind/build.gradle @@ -34,6 +34,7 @@ dependencies { implementation 'mysql:mysql-connector-java:8.0.32' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' +<<<<<<< HEAD testImplementation 'org.springframework.boot:spring-boot-starter-test' runtimeOnly 'com.mysql:mysql-connector-j' implementation 'org.springframework.boot:spring-boot-starter-validation' @@ -43,12 +44,30 @@ dependencies { implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' +======= + runtimeOnly 'com.h2database:h2' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation group: 'com.h2database', name: 'h2', version: '2.2.224' + testCompileOnly 'org.projectlombok:lombok' + testAnnotationProcessor 'org.projectlombok:lombok' + + runtimeOnly 'com.mysql:mysql-connector-j' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' + //JWT + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' + implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' + implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' +>>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) // FCM implementation 'com.google.firebase:firebase-admin:9.1.1' implementation 'com.squareup.okhttp3:okhttp:4.10.0' // Firebase 서버로 푸시 메시지 전송 시 필요 +<<<<<<< HEAD implementation 'org.springframework.boot:spring-boot-starter-actuator' //Query DSL @@ -56,6 +75,15 @@ dependencies { annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" +======= + implementation 'org.springframework.boot:spring-boot-starter-actuator' +// +// //Query DSL + implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" + annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" +>>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) // S3 AWS implementation("software.amazon.awssdk:bom:2.21.0") @@ -72,8 +100,86 @@ dependencies { implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' } +<<<<<<< HEAD tasks.named('test') { useJUnitPlatform() +======= +//sourceSets { +// main { +// java { +// srcDirs = ["$projectDir/src/main/java", "$projectDir/build/generated"] +// } +// } +//} +//compileJava { options.compilerArgs << '-parameters'} + + +tasks.named('test') { + useJUnitPlatform() +// finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport 동작 +>>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) } +//// jacoco report 설정 +//jacocoTestReport { +// reports { +// // html로 report 생성하기 +// // 빌드경로/jacoco/report.html 폴더 내부로 경로 설정 +// html.destination file("$jacoco/report.html") +// } +// +// // jacocoTestReport가 끝나면 jacocoTestCoverageVerification 동작 +// finalizedBy 'jacocoTestCoverageVerification' +//} +// +//// jacoco 커버리지 검증 설정 +//jacocoTestCoverageVerification { +// violationRules { +// rule { +// enabled = true // 커버리지 적용 여부 +// element = 'CLASS' // 커버리지 적용 단위 +// +// // 라인 커버리지 설정 +// // 적용 대상 전체 소스 코드들을 한줄 한줄 따졌을 때 테스트 코드가 작성되어 있는 줄의 빈도 +// // 테스트 코드가 작성되어 있는 비율이 90% 이상이어야 함 +// limit { +// counter = 'LINE' +// value = 'COVEREDRATIO' +// minimum = 0.10 +// } +// +// // 브랜치 커버리지 설정 +// // if-else 등을 활용하여 발생되는 분기들 중 테스트 코드가 작성되어 있는 빈도 +// // 테스트 코드가 작성되어 있는 비율이 90% 이상이어야 함 +// limit { +// counter = 'BRANCH' +// value = 'COVEREDRATIO' +// minimum = 0.00 +// } +// +// // 라인 최대 갯수 설정 +// // 빈 줄을 제외하고 하나의 자바 파일에서 작성될 수 있는 최대 라인 갯수 +// // 한 파일에 최대 500줄까지 작성되어야 함 +// limit { +// counter = 'LINE' +// value = 'TOTALCOUNT' +// maximum = 500 +// } +// // 커버리지 체크를 제외할 클래스들 +// excludes = [ +// // '*.test.*', +// '*.common.*', +// '*.config.*', +// '*.controller.*', +// '*.domain.*', +// '*.exception.*', +// '*.external.*', +// '*.infrastructure.*', +// '*.auth.*', +// '*.service.*' +// +// ] +// } +// } +//} diff --git a/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java b/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java index b7bbfd92..c020398e 100644 --- a/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java +++ b/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java @@ -1,17 +1,17 @@ -package com.app.toaster.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.querydsl.jpa.impl.JPAQueryFactory; - -import jakarta.persistence.EntityManager; - -@Configuration -public class JpaQueryFactoryConfig { - - @Bean - JPAQueryFactory jpaQueryFactory(EntityManager em) { - return new JPAQueryFactory(em); - } -} \ No newline at end of file +// package com.app.toaster.config; +// +// import org.springframework.context.annotation.Bean; +// import org.springframework.context.annotation.Configuration; +// +// import com.querydsl.jpa.impl.JPAQueryFactory; +// +// import jakarta.persistence.EntityManager; +// +// @Configuration +// public class JpaQueryFactoryConfig { +// +// @Bean +// JPAQueryFactory jpaQueryFactory(EntityManager em) { +// return new JPAQueryFactory(em); +// } +// } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/exception/Error.java b/linkmind/src/main/java/com/app/toaster/exception/Error.java index 4c356050..59b542e6 100644 --- a/linkmind/src/main/java/com/app/toaster/exception/Error.java +++ b/linkmind/src/main/java/com/app/toaster/exception/Error.java @@ -20,6 +20,7 @@ public enum Error { NOT_FOUND_IMAGE_EXCEPTION(HttpStatus.NOT_FOUND, "s3 서비스에서 이미지를 찾을 수 없습니다."), NOT_FOUND_TOAST_FILTER(HttpStatus.NOT_FOUND, "유효하지 않은 필터입니다."), NOT_FOUND_TIMER(HttpStatus.NOT_FOUND, "찾을 수 없는 타이머입니다."), + NOT_FOUND_POPUP_EXCEPTION(HttpStatus.NOT_FOUND, "유효하지 않은 팝업입니다."), /** * 400 BAD REQUEST EXCEPTION diff --git a/linkmind/src/main/java/com/app/toaster/exception/Success.java b/linkmind/src/main/java/com/app/toaster/exception/Success.java index 53fdb5f9..14c3200e 100644 --- a/linkmind/src/main/java/com/app/toaster/exception/Success.java +++ b/linkmind/src/main/java/com/app/toaster/exception/Success.java @@ -24,6 +24,7 @@ public enum Success { GET_LINKS_SUCCESS(HttpStatus.OK, "이주의 링크 조회 성공"), GET_SITES_SUCCESS(HttpStatus.OK, "추천 사이트 조회 성공"), GET_SETTINGS_SUCCESS(HttpStatus.OK, "설정 페이지 조회 성공"), + GET_POPUP_SUCCESS(HttpStatus.OK, "팝업 정보 조회 성공"), GET_CATEORIES_SUCCESS(HttpStatus.OK, "전체 카테고리 조회 성공"), GET_CATEORY_SUCCESS(HttpStatus.OK, "세부 카테고리 조회 성공"), @@ -52,6 +53,7 @@ public enum Success { PUSH_ALARM_PERIODIC_SUCCESS(HttpStatus.OK, "푸시알림 활성에 성공했습니다."), PUSH_ALARM_SUCCESS(HttpStatus.OK, "푸시알림 전송에 성공했습니다."), CLEAR_SCHEDULED_TASKS_SUCCESS(HttpStatus.OK, "스케줄러에서 예약된 작업을 제거했습니다."), + UPDATE_POPUP_SUCCESS(HttpStatus.OK, "팝업 데이터 수정 성공"), /** diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java new file mode 100644 index 00000000..90553ca8 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java @@ -0,0 +1,154 @@ +// package com.app.toaster.infrastructure.querydsl; +// +// import static com.app.toaster.domain.QToast.*; +// import static com.app.toaster.domain.QUser.*; +// +// import java.time.LocalDateTime; +// import java.util.ArrayList; +// import java.util.List; +// import org.springframework.data.jpa.repository.Modifying; +// import org.springframework.data.jpa.repository.Query; +// import org.springframework.data.repository.query.Param; +// import org.springframework.stereotype.Repository; +// +// import com.app.toaster.domain.Category; +// import com.app.toaster.domain.QToast; +// import com.app.toaster.domain.QUser; +// import com.app.toaster.domain.Toast; +// import com.app.toaster.domain.User; +// import com.querydsl.core.types.Path; +// import com.querydsl.core.types.dsl.BooleanExpression; +// import com.querydsl.jpa.impl.JPAQueryFactory; +// +// import jakarta.persistence.EntityManager; +// import lombok.RequiredArgsConstructor; +// +// @Repository +// @RequiredArgsConstructor +// public class CustomToastRepository { +// private final JPAQueryFactory queryFactory; +// // private final EntityManager em; +// public List getAllByCategory(Category category){ +// return queryFactory.select(toast) +// .from(toast) +// .where(eqCategoryId(category.getCategoryId())) +// .fetch(); +// } +// +// private BooleanExpression eqCategoryId(Long id){ +// if (id == null){ +// return null; +// } +// return toast.category.categoryId.eq(id); +// } +// +// ArrayList findByIsReadAndCategory(Boolean isRead, Category category){ +// return null; +// }; +// +// ArrayList getAllByUser(User user){ +// return null; +// } +// +// List getAllByUserOrderByCreatedAtDesc(User user){ +// return null; +// } +// +// +// ArrayList getAllByUserAndIsReadIsTrue(User user){ +// return null; +// } +// +// +// // @Modifying +// // @Query("UPDATE Toast t SET t.category = null WHERE t.category.categoryId IN :categoryIds") +// // void updateCategoryIdsToNull(@Param("categoryIds") List categoryIds){ +// // } +// +// //querydsl의 수정은 bulkupdate라 영속성컨텍스트를 안거치기 때문에 무조건 flush,clear해주자. +// void updateCategoryIdsToNull(List categoryIds){ +// queryFactory.update(toast) +// .set(toast.category, (Category)null) +// .where(toast.category.categoryId.in(categoryIds)) +// .execute(); +// // em.flush(); //test 코드에서는 따로 em을 주입하는 중이므로 테스트 후 넣자. +// // em.clear(); +// } +// +// +// List searchToastsByQuery(Long userId, String query){ +// return queryFactory.select(toast) +// .from(toast) +// .leftJoin(toast.user, user).fetchJoin() +// .where(eqToastOwner(userId), containToastTitle(query)) +// .fetch(); +// } +// private BooleanExpression eqToastOwner(Long userId){ +// return userId != null?toast.user.userId.eq(userId):null; +// } +// +// private BooleanExpression containToastTitle(String query){ +// if (query == null || query.isEmpty() || query.isBlank()){ +// return null; +// } +// return toast.title.containsIgnoreCase(query); +// } +// +// +// +// Long countAllByUser(User user){ +// return null; +// } +// +// +// Long countALLByUserAndIsReadTrue(User user){ +// return null; +// } +// +// +// Long countALLByUserAndIsReadFalse(User user){ +// return null; +// } +// +// +// Long countAllByCategory(Category category){ +// return null; +// } +// +// +// Long countAllByCategoryAndIsReadTrue(Category category){ +// return null; +// } +// +// +// Long countAllByCategoryAndIsReadFalse(Category category){ +// return null; +// } +// +// +// Integer getUnReadToastNumber(Long userId){ +// +// Integer count = queryFactory.select(toast.count().intValue()) +// .from(toast) +// .where(eqToastOwner(userId).and(toast.isRead.isFalse())) +// .fetchOne(); +// return (count!=null)?count:0; +// } +// +// +// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.createdAt >= :startOfWeek AND t.createdAt <= :endOfWeek") +// Long countAllByCreatedAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, +// @Param("endOfWeek") LocalDateTime endOfWeek, @Param("user") User user){ +// return null; +// } +// +// +// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.isRead = true AND t.updateAt >= :startOfWeek AND t.updateAt <= :endOfWeek") +// Long countAllByUpdateAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, +// @Param("endOfWeek") LocalDateTime endOfWeek, +// @Param("user") User user){ +// return null; +// } +// +// +// } diff --git a/linkmind/src/main/java/com/app/toaster/service/UserService.java b/linkmind/src/main/java/com/app/toaster/service/UserService.java index ca95cf22..47a25217 100644 --- a/linkmind/src/main/java/com/app/toaster/service/UserService.java +++ b/linkmind/src/main/java/com/app/toaster/service/UserService.java @@ -17,6 +17,8 @@ import com.app.toaster.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; +// import com.app.toaster.infrastructure.querydsl.CustomToastRepository; + import lombok.RequiredArgsConstructor; import java.time.DayOfWeek; @@ -31,6 +33,8 @@ public class UserService { private final UserRepository userRepository; private final ToastRepository toastRepository; + + // private final CustomToastRepository customToastRepository; private final CategoryRepository categoryRepository; @Transactional(readOnly = true) @@ -87,6 +91,7 @@ public MainPageResponseDto getMainPage(Long userId){ .categoryId(category.getCategoryId()) .categoryTitle(category.getTitle()) .toastNum(toastRepository.getAllByCategory(category).size()).build() + ).collect(Collectors.toList())).build(); return mainPageResponseDto; diff --git a/linkmind/src/test/java/com/app/toaster/base/BaseRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/base/BaseRepositoryTest.java new file mode 100644 index 00000000..2edf55d3 --- /dev/null +++ b/linkmind/src/test/java/com/app/toaster/base/BaseRepositoryTest.java @@ -0,0 +1,15 @@ +package com.app.toaster.base; + +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; + +// import com.app.toaster.config.TestJpaQueryFactoryConfig; + +// @Import(TestJpaQueryFactoryConfig.class) -> 쿼리dsl 사용 시 사용할 것. +@DataJpaTest //@Transactional 어노테이션을 포함하고 있다. 그래서 테스트가 완료되면 자동으로 롤백. +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@ActiveProfiles("local") +public abstract class BaseRepositoryTest { +} diff --git a/linkmind/src/test/java/com/app/toaster/config/TestJpaQueryFactoryConfig.java b/linkmind/src/test/java/com/app/toaster/config/TestJpaQueryFactoryConfig.java new file mode 100644 index 00000000..6c14f110 --- /dev/null +++ b/linkmind/src/test/java/com/app/toaster/config/TestJpaQueryFactoryConfig.java @@ -0,0 +1,23 @@ +// package com.app.toaster.config; +// +// import org.springframework.boot.test.context.TestConfiguration; +// import org.springframework.context.annotation.Bean; +// import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +// +// import com.querydsl.jpa.impl.JPAQueryFactory; +// +// import jakarta.persistence.EntityManager; +// import jakarta.persistence.PersistenceContext; +// +// @EnableJpaAuditing +// @TestConfiguration +// public class TestJpaQueryFactoryConfig { +// +// @PersistenceContext +// private EntityManager entityManager; +// +// @Bean +// JPAQueryFactory jpaQueryFactory(){ +// return new JPAQueryFactory(entityManager); +// } +// } diff --git a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java new file mode 100644 index 00000000..7cd5db8d --- /dev/null +++ b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java @@ -0,0 +1,293 @@ +// package com.app.toaster.infrastructure.querydsl; +// +// import static com.app.toaster.domain.QToast.*; +// import static com.app.toaster.fixture.Fixture.*; +// import static org.junit.jupiter.api.Assertions.*; +// +// import java.util.ArrayList; +// import java.util.List; +// +// import org.assertj.core.api.Assertions; +// import org.junit.jupiter.api.AfterEach; +// import org.junit.jupiter.api.BeforeEach; +// import org.junit.jupiter.api.DisplayName; +// import org.junit.jupiter.api.Nested; +// import org.junit.jupiter.api.Test; +// import org.junit.jupiter.api.extension.ExtendWith; +// import org.springframework.beans.factory.annotation.Autowired; +// import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +// import org.springframework.context.annotation.Import; +// import org.springframework.test.context.junit.jupiter.SpringExtension; +// import org.springframework.transaction.annotation.Transactional; +// +// import com.app.toaster.config.JpaQueryFactoryConfig; +// import com.app.toaster.domain.Toast; +// import com.app.toaster.fixture.Fixture; +// import com.app.toaster.infrastructure.CategoryRepository; +// import com.app.toaster.infrastructure.ToastRepository; +// import com.app.toaster.infrastructure.UserRepository; +// import com.querydsl.core.types.dsl.BooleanExpression; +// import com.querydsl.jpa.impl.JPAQueryFactory; +// +// import jakarta.persistence.EntityManager; +// import lombok.extern.slf4j.Slf4j; +// +// @Slf4j +// @ExtendWith(SpringExtension.class) +// @DataJpaTest(showSql = true) +// @Import(JpaQueryFactoryConfig.class) +// class CustomToastRepositoryTest { +// +// CustomToastRepository customToastRepository; +// JPAQueryFactory jpaQueryFactory; +// +// @Autowired +// ToastRepository toastRepository; +// +// @Autowired +// UserRepository userRepository; +// +// @Autowired +// CategoryRepository categoryRepository; +// +// @Autowired +// EntityManager em; +// +// @BeforeEach +// void setup() { +// jpaQueryFactory = new JPAQueryFactory(em); +// customToastRepository = new CustomToastRepository(jpaQueryFactory); +// +// userRepository.save(USER_1); +// categoryRepository.save(CATEGORY_1); +// categoryRepository.save(CATEGORY_2); +// toastRepository.save(TOAST_1); +// toastRepository.save(TOAST_2); +// toastRepository.save(TOAST_3); +// } +// @AfterEach +// void tearDown() { +// // 테스트 후 정리 작업 수행 +// em.clear(); +// userRepository.deleteAll(); +// categoryRepository.deleteAll(); +// toastRepository.deleteAll(); +// } +// +// +// @Nested +// @DisplayName("토스트 jpa repository test") +// class 토스트_JpaRepository_Test { +// +// @Nested +// @DisplayName("토스트 카테고리 jpa repository test") +// class 토스트_카테고리_jpa_test{ +// @Test +// @DisplayName("토스트의 getAllByCategory test") +// void test_ToastJpaRepository_조회() { +// +// List toastList = toastRepository.getAllByCategory(CATEGORY_1); +// +// +// Assertions.assertThat(toastList.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toastList.get(1).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// Assertions.assertThat(toastList.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// } +// @Nested +// @DisplayName("토스트 jpa repository 검색 test") +// class 토스트_JPA_검색_test{ +// +// @Test +// @DisplayName("토스트의 검색 쿼리 문자열이 앞에 있는 경우 test") +// void test_ToastJpaRepository_검색1(){ +// List toastList = toastRepository.searchToastsByQuery(USER_1.getUserId(),"검색"); +// +// Assertions.assertThat(toastList.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toastList.get(1).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// Assertions.assertThat(toastList.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// @Test +// @DisplayName("토스트의 검색 쿼리 문자열이 뒤에 있는 경우 test") +// void test_ToastJpaRepository_검색2(){ +// List toastList = toastRepository.searchToastsByQuery(USER_1.getUserId(),"되나"); +// +// Assertions.assertThat(toastList.get(0).getId()).isEqualTo(TOAST_1.getId()); +// Assertions.assertThat(toastList.get(1).getId()).isEqualTo(TOAST_3.getId()); +// // Assertions.assertThat(toastList.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// } +// +// @DisplayName("토스트 수정 관련 jpa test") +// @Nested +// class 토스트_JPA_수정_TEST{ +// @Test +// @DisplayName("토스트 수정 쿼리 jpa test") +// @Transactional +// void updateCategoryIdsToNull(){ +// //given +// List categoryIds = new ArrayList<>(); +// categoryIds.add(CATEGORY_1.getCategoryId()); +// categoryIds.add(CATEGORY_2.getCategoryId()); +// +// //when +// toastRepository.updateCategoryIdsToNull(categoryIds); +// +// //then +// Assertions.assertThat(TOAST_1.getCategory() == null); +// Assertions.assertThat(TOAST_2.getCategory() == null); +// Assertions.assertThat(TOAST_3.getCategory() == null); +// Assertions.assertThat(TOAST_3_CATEGORY_2.getCategory() == null); +// } +// } +// } +// @Nested +// @DisplayName("토스트 querydsl test") +// class 토스트_QueryDSL_Test{ +// @Nested +// @DisplayName("토스트 QueryDSL category test") +// class 토스트_QueryDSL_Category_Test { +// +// @Test +// @DisplayName("토스트의 queryDSL getAllByCategory test") +// void ToastQueryRepository_getAllByCategory_테스트() { +// +// List toasts = customToastRepository.getAllByCategory(CATEGORY_1); +// +// Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toasts.get(1).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// Assertions.assertThat(toasts.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// @Test +// @DisplayName("categoryid 결과를 찾지 못했을 때 test") +// void ToastQueryRepository_Category_id_2_테스트() { +// +// List toasts = jpaQueryFactory.selectFrom(toast) +// .where(eqCategoryId(CATEGORY_2.getCategoryId())) +// .fetch(); +// assertNotNull(toasts, "조회 데이터가 없습니다."); +// // Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// // Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// } +// +// @Nested +// @DisplayName("토스트 QueryDSL search test") +// class 토스트_QueryDSL_검색쿼리_test{ +// @Test +// @DisplayName("토스트의 queryDSL 문자열이 앞에 있을 때 쿼리 검색 test") +// @Transactional(readOnly = true) +// void ToastQueryRepository_searchToastsByQuery_테스트() { +// +// List toasts = customToastRepository.searchToastsByQuery(USER_1.getUserId(), "검색"); +// +// Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toasts.get(1).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// Assertions.assertThat(toasts.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// @Test +// @DisplayName("토스트의 queryDSL 문자열이 뒤에 있을 때 쿼리 검색 test") +// @Transactional(readOnly = true) +// void ToastQueryRepository_searchToastsByQuery_테스트2() { +// +// List toasts = customToastRepository.searchToastsByQuery(USER_1.getUserId(), "되나"); +// +// Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toasts.get(1).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// // Assertions.assertThat(toasts.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// +// @Test +// @DisplayName("검색 쿼리가 비어있을 때") +// @Transactional(readOnly = true) +// void ToastQueryRepository_searchToastsByQuery_테스트3() { +// +// List toasts = customToastRepository.searchToastsByQuery(USER_1.getUserId(), ""); +// +// Assertions.assertThat(toasts.get(0).getId()).isEqualTo(Fixture.TOAST_1.getId()); +// Assertions.assertThat(toasts.get(1).getId()).isEqualTo(Fixture.TOAST_2.getId()); +// Assertions.assertThat(toasts.get(2).getId()).isEqualTo(Fixture.TOAST_3.getId()); +// } +// } +// //적용하더라도 프로덕션 코드의 em부분 em.flush, em.clear체크. +// +// @Nested +// @DisplayName("토스트 수정 관련 querydsl test") +// class 토스트_QueryDSL_수정_TEST{ +// @Test +// @DisplayName("토스트 수정 쿼리 querydsl test") +// @Transactional +// void updateCategoryIdsToNull(){ +// //given +// List categoryIds = new ArrayList<>(); +// categoryIds.add(CATEGORY_1.getCategoryId()); +// categoryIds.add(CATEGORY_2.getCategoryId()); +// +// //when +// customToastRepository.updateCategoryIdsToNull(categoryIds); +// // +// em.flush(); +// em.clear(); +// +// //then +// Assertions.assertThat(TOAST_1.getCategory() == null); +// Assertions.assertThat(TOAST_2.getCategory() == null); +// Assertions.assertThat(TOAST_3.getCategory() == null); +// Assertions.assertThat(TOAST_3_CATEGORY_2.getCategory() == null); +// } +// } +// +// @Nested +// @DisplayName("토스트 QueryDSL 안읽은 토스트 개수 세기 test") +// class 토스트_QueryDSL_안읽은_토스트_개수_세기_test{ +// +// @Test +// @DisplayName("안읽은 토스트 개수 세기 쿼리 querydsl test") +// void countUnReadToast(){ +// //given +// TOAST_1.updateIsRead(false); +// TOAST_2.updateIsRead(false); +// em.flush(); +// +// //when +// Integer res = customToastRepository.getUnReadToastNumber(USER_1.getUserId()); +// // +// //em.clear(); +// +// //then +// Assertions.assertThat(res == 2); +// } +// +// @Test +// @DisplayName("안 읽은 토스트 개수가 없는 경우. querydsl test") +// void countUnReadToastAtNotFoundCase(){ +// //given +// TOAST_1.updateIsRead(true); +// TOAST_2.updateIsRead(true); +// TOAST_3.updateIsRead(true); +// em.flush(); +// +// //when +// Integer res = customToastRepository.getUnReadToastNumber(USER_1.getUserId()); +// // +// //em.clear(); +// +// //then +// Assertions.assertThat(res == 0); +// } +// +// } +// } +// +// +// +// private BooleanExpression eqCategoryId(Long id){ +// return id!=null?toast.category.categoryId.eq(id):null; +// } +// +// } \ No newline at end of file From 42f8fb72b8a94d16aef1ee886b2b6e059570313c Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 15 Sep 2024 14:24:40 +0900 Subject: [PATCH 02/34] =?UTF-8?q?[#240]=20feature:=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../popup/controller/PopupController.java | 38 +++++++++++ .../controller/request/PopUpRequestDto.java | 11 +++ .../response/InvisibleResponseDto.java | 7 ++ .../controller/response/PopupResponseDto.java | 12 ++++ .../com/app/toaster/popup/entity/Popup.java | 47 +++++++++++++ .../popup/entity/PopupInvisibleManager.java | 51 ++++++++++++++ .../PopupManagerRepository.java | 14 ++++ .../popup/infrastructure/PopupRepository.java | 11 +++ .../toaster/popup/service/PopupService.java | 68 +++++++++++++++++++ 9 files changed, 259 insertions(+) create mode 100644 linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/controller/response/PopupResponseDto.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java create mode 100644 linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java new file mode 100644 index 00000000..06a19bc5 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java @@ -0,0 +1,38 @@ +package com.app.toaster.popup.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.app.toaster.popup.controller.request.PopUpRequestDto; +import com.app.toaster.popup.controller.response.InvisibleResponseDto; +import com.app.toaster.popup.controller.response.PopupResponseDto; +import com.app.toaster.popup.service.PopupService; +import com.app.toaster.common.dto.ApiResponse; +import com.app.toaster.config.UserId; +import com.app.toaster.exception.Success; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v2/popup") +public class PopupController { + private final PopupService popupService; + + + @PatchMapping("/{userId}") + public ApiResponse updateInvisible(@PathVariable Long userId, @RequestBody PopUpRequestDto popUpRequestDto){ + return ApiResponse.success(Success.UPDATE_POPUP_SUCCESS, popupService.updatePopupInvisible(userId,popUpRequestDto)); + } + + @GetMapping("/{userId}") + public ApiResponse getPopUpInformation(@PathVariable(name = "userId") Long userId){ + return ApiResponse.success(Success.GET_POPUP_SUCCESS, popupService.findPopupInformation(userId)); + } + +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java b/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java new file mode 100644 index 00000000..741e045f --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java @@ -0,0 +1,11 @@ +package com.app.toaster.popup.controller.request; + +import jakarta.validation.Valid; + +public record PopUpRequestDto( + @Valid + Long popupId, + @Valid + boolean invisible +) { +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java b/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java new file mode 100644 index 00000000..98f15bb3 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java @@ -0,0 +1,7 @@ +package com.app.toaster.popup.controller.response; + +public record InvisibleResponseDto(Long popupId, boolean invisible) { + public static InvisibleResponseDto of(Long popupId, boolean invisible){ + return new InvisibleResponseDto(popupId, invisible); + } +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/response/PopupResponseDto.java b/linkmind/src/main/java/com/app/toaster/popup/controller/response/PopupResponseDto.java new file mode 100644 index 00000000..de553c44 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/response/PopupResponseDto.java @@ -0,0 +1,12 @@ +package com.app.toaster.popup.controller.response; + +import java.util.List; + +import com.app.toaster.popup.entity.Popup; + +public record PopupResponseDto(List popupList) { + + public static PopupResponseDto from(List popupList){ + return new PopupResponseDto(popupList); + } +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java b/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java new file mode 100644 index 00000000..7eb5c562 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java @@ -0,0 +1,47 @@ +package com.app.toaster.popup.entity; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Popup { + + @Id + @Column(name = "popup_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(columnDefinition = "TEXT", name = "image") + private String image; + + @Column(name = "active") + private boolean active; + + @Column(name = "link_url") + private String linkUrl; + + @Builder + private Popup(String image, boolean active, String linkUrl) { + this.image = image; + this.active = active; + this.linkUrl = linkUrl; + } + + public void updateIsActive(boolean isActive){ + this.active = active; + } +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java b/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java new file mode 100644 index 00000000..29dc2218 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java @@ -0,0 +1,51 @@ +package com.app.toaster.popup.entity; + +import org.hibernate.annotations.OnDelete; +import org.hibernate.annotations.OnDeleteAction; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * 유저를 엮을것인가? 그러기에는 userId만 필요함. + * popup을 엮을 것인가? -> popup이 없어지면 popupmanager도 삭제. + */ +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PopupInvisibleManager { + + @Id + @Column(name = "popup_manager_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private Long userId; + + @ManyToOne + @OnDelete(action = OnDeleteAction.CASCADE) + @JoinColumn(name = "popup_id") + private Popup popup; + + private boolean wantToInvisible; + + @Builder + private PopupInvisibleManager(Long userId, Popup popup, boolean wantToInvisible) { + this.userId = userId; + this.popup = popup; + this.wantToInvisible = wantToInvisible; + } + + public void updateInvisible(boolean wantToInvisible){ + this.wantToInvisible = wantToInvisible; + } +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java new file mode 100644 index 00000000..6344e53b --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java @@ -0,0 +1,14 @@ +package com.app.toaster.popup.infrastructure; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.app.toaster.popup.entity.Popup; +import com.app.toaster.popup.entity.PopupInvisibleManager; + +public interface PopupManagerRepository extends JpaRepository { + List findByUserId(Long userId); + Optional findByUserIdAndPopup(Long userId, Popup popup); +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java new file mode 100644 index 00000000..9c03d626 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java @@ -0,0 +1,11 @@ +package com.app.toaster.popup.infrastructure; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.app.toaster.popup.entity.Popup; + +public interface PopupRepository extends JpaRepository { + Optional findByIdAndActive(Long id, boolean active); +} diff --git a/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java new file mode 100644 index 00000000..c7c312a5 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java @@ -0,0 +1,68 @@ +package com.app.toaster.popup.service; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.app.toaster.exception.Error; +import com.app.toaster.exception.model.NotFoundException; +import com.app.toaster.popup.controller.request.PopUpRequestDto; +import com.app.toaster.popup.controller.response.InvisibleResponseDto; +import com.app.toaster.popup.controller.response.PopupResponseDto; +import com.app.toaster.popup.entity.Popup; +import com.app.toaster.popup.entity.PopupInvisibleManager; +import com.app.toaster.popup.infrastructure.PopupManagerRepository; +import com.app.toaster.popup.infrastructure.PopupRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +@Transactional +public class PopupService { + private final PopupManagerRepository popupManagerRepository; + private final PopupRepository popupRepository; + + public InvisibleResponseDto updatePopupInvisible(Long userId, PopUpRequestDto popUpRequestDto) { + Popup popup = findActivePopup(popUpRequestDto.popupId()); + + PopupInvisibleManager manager = findManagerWithUserIdAndPopup(userId, popup, popUpRequestDto.invisible()); + + manager.updateInvisible(popUpRequestDto.invisible()); // 어차피 더티체킹시에 똑같으면 쿼리 안나가겠지? + return InvisibleResponseDto.of(popup.getId(), manager.isWantToInvisible()); + } + + @Transactional(readOnly = true) + public PopupResponseDto findPopupInformation(Long userId) { + List invisibleManagerList = findInvisiblePopupIdList(userId); + return PopupResponseDto.from(popupRepository.findAll().stream() + .filter(Popup::isActive) + .filter(popup -> !invisibleManagerList.contains(popup.getId())) + .toList()); + } + + private Popup findActivePopup(Long id) { + return popupRepository.findByIdAndActive(id, true).orElseThrow( + () -> new NotFoundException(Error.NOT_FOUND_POPUP_EXCEPTION, Error.NOT_FOUND_POPUP_EXCEPTION.getMessage())); + } + + private PopupInvisibleManager findManagerWithUserIdAndPopup(Long userId, Popup popup, boolean invisible) { + return popupManagerRepository.findByUserIdAndPopup(userId, popup) + .orElseGet(() -> + popupManagerRepository.save(PopupInvisibleManager.builder() + .userId(userId) + .popup(popup) + .wantToInvisible(invisible) + .build()) + ); + } + + private List findInvisiblePopupIdList(Long userId) { + return popupManagerRepository.findByUserId(userId).stream() + .filter(PopupInvisibleManager::isWantToInvisible) + .map(PopupInvisibleManager::getPopup) + .map(Popup::getId) + .toList(); + } +} From 8634a22c362a88b95c72c03b08071697342ae76c Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 15 Sep 2024 14:44:40 +0900 Subject: [PATCH 03/34] =?UTF-8?q?[#240]=20chore:=20build.gradle=20?= =?UTF-8?q?=EC=B6=A9=EB=8F=8C=ED=9D=94=EC=A0=81=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/build.gradle | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/linkmind/build.gradle b/linkmind/build.gradle index 0cdcbbd7..2d94ddd7 100644 --- a/linkmind/build.gradle +++ b/linkmind/build.gradle @@ -34,17 +34,7 @@ dependencies { implementation 'mysql:mysql-connector-java:8.0.32' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' -<<<<<<< HEAD - testImplementation 'org.springframework.boot:spring-boot-starter-test' - runtimeOnly 'com.mysql:mysql-connector-j' - implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' - //JWT - implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' - implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' - implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' -======= runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' @@ -60,30 +50,20 @@ dependencies { implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' ->>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) // FCM implementation 'com.google.firebase:firebase-admin:9.1.1' implementation 'com.squareup.okhttp3:okhttp:4.10.0' // Firebase 서버로 푸시 메시지 전송 시 필요 -<<<<<<< HEAD - implementation 'org.springframework.boot:spring-boot-starter-actuator' - //Query DSL - implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" - annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" -======= implementation 'org.springframework.boot:spring-boot-starter-actuator' -// -// //Query DSL + +//Query DSL implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" ->>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) // S3 AWS implementation("software.amazon.awssdk:bom:2.21.0") @@ -100,12 +80,6 @@ dependencies { implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' } -<<<<<<< HEAD - - -tasks.named('test') { - useJUnitPlatform() -======= //sourceSets { // main { // java { @@ -119,7 +93,6 @@ tasks.named('test') { tasks.named('test') { useJUnitPlatform() // finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport 동작 ->>>>>>> e290d55 (#239 fix: queryDSL 의존성 제거 및 관련 내용들 주석처리) } //// jacoco report 설정 //jacocoTestReport { From 027e8d3308876da6ccf3d2267d3be44dda02ca0a Mon Sep 17 00:00:00 2001 From: soohyun Date: Mon, 16 Sep 2024 15:53:27 +0900 Subject: [PATCH 04/34] =?UTF-8?q?[#240]=20refactor:=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EC=88=98=EC=A0=95=20=ED=9B=84=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/app/toaster/popup/controller/PopupController.java | 8 ++++---- .../java/com/app/toaster/popup/service/PopupService.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java index 06a19bc5..f0b184d4 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java @@ -25,13 +25,13 @@ public class PopupController { private final PopupService popupService; - @PatchMapping("/{userId}") - public ApiResponse updateInvisible(@PathVariable Long userId, @RequestBody PopUpRequestDto popUpRequestDto){ + @PatchMapping + public ApiResponse updateInvisible(@UserId Long userId, @RequestBody PopUpRequestDto popUpRequestDto){ return ApiResponse.success(Success.UPDATE_POPUP_SUCCESS, popupService.updatePopupInvisible(userId,popUpRequestDto)); } - @GetMapping("/{userId}") - public ApiResponse getPopUpInformation(@PathVariable(name = "userId") Long userId){ + @GetMapping + public ApiResponse getPopUpInformation(@UserId Long userId){ return ApiResponse.success(Success.GET_POPUP_SUCCESS, popupService.findPopupInformation(userId)); } diff --git a/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java index c7c312a5..e20dde97 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java +++ b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java @@ -29,7 +29,7 @@ public InvisibleResponseDto updatePopupInvisible(Long userId, PopUpRequestDto po PopupInvisibleManager manager = findManagerWithUserIdAndPopup(userId, popup, popUpRequestDto.invisible()); - manager.updateInvisible(popUpRequestDto.invisible()); // 어차피 더티체킹시에 똑같으면 쿼리 안나가겠지? + manager.updateInvisible(popUpRequestDto.invisible()); return InvisibleResponseDto.of(popup.getId(), manager.isWantToInvisible()); } From 78b036d4e8c5bf7776b7f289f494837e69f54fac Mon Sep 17 00:00:00 2001 From: soohyun Date: Mon, 16 Sep 2024 17:35:02 +0900 Subject: [PATCH 05/34] =?UTF-8?q?[#240]=20feature:=20user=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=ED=83=88=ED=87=B4=20=EC=8B=9C=20manager=EB=8F=84=20?= =?UTF-8?q?=EB=B9=84=EC=9A=B0=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toaster/popup/infrastructure/PopupManagerRepository.java | 2 ++ .../main/java/com/app/toaster/service/auth/AuthService.java | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java index 6344e53b..755b1f38 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java +++ b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupManagerRepository.java @@ -11,4 +11,6 @@ public interface PopupManagerRepository extends JpaRepository { List findByUserId(Long userId); Optional findByUserIdAndPopup(Long userId, Popup popup); + + void deleteAllByUserId(Long userId); } diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 60db12f2..4855e586 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -26,6 +26,8 @@ import com.app.toaster.infrastructure.TimerRepository; import com.app.toaster.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.popup.entity.PopupInvisibleManager; +import com.app.toaster.popup.infrastructure.PopupManagerRepository; import com.app.toaster.service.auth.apple.AppleSignInService; import com.app.toaster.service.auth.kakao.KakaoSignInService; import com.app.toaster.service.auth.kakao.LoginResult; @@ -43,6 +45,7 @@ public class AuthService { private final UserRepository userRepository; private final CategoryRepository categoryRepository; + private final PopupManagerRepository popupManagerRepository; private final SlackApi slackApi; @@ -149,6 +152,7 @@ public void withdraw(Long userId) { } timerRepository.deleteAllByUser(user); categoryRepository.deleteAllByUser(user); + popupManagerRepository.deleteAllByUserId(userId); Long res = userRepository.deleteByUserId(userId); //res가 삭제된 컬럼의 개수 즉, 1이 아니면 뭔가 알 수 없는 에러. From c4e95097e13b0ed355095ab5589e784e17d75afb Mon Sep 17 00:00:00 2001 From: soohyun Date: Mon, 23 Sep 2024 00:42:41 +0900 Subject: [PATCH 06/34] =?UTF-8?q?#240=20feature:=20popup=201=EC=9D=BC?= =?UTF-8?q?=EB=8B=AB=EA=B8=B0,=207=EC=9D=BC=EB=8B=AB=EA=B8=B0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../popup/controller/PopupController.java | 5 +++- .../controller/request/PopUpRequestDto.java | 7 ++--- .../response/InvisibleResponseDto.java | 11 ++++++-- .../com/app/toaster/popup/entity/Popup.java | 15 ++++++---- .../popup/entity/PopupInvisibleManager.java | 11 +++++--- .../popup/infrastructure/PopupRepository.java | 3 -- .../toaster/popup/service/PopupService.java | 28 +++++++++++++------ 7 files changed, 50 insertions(+), 30 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java index f0b184d4..a5681880 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java @@ -1,5 +1,6 @@ package com.app.toaster.popup.controller; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -16,17 +17,19 @@ import com.app.toaster.config.UserId; import com.app.toaster.exception.Success; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor @RequestMapping("/api/v2/popup") +@Validated public class PopupController { private final PopupService popupService; @PatchMapping - public ApiResponse updateInvisible(@UserId Long userId, @RequestBody PopUpRequestDto popUpRequestDto){ + public ApiResponse updateInvisible(@UserId Long userId, @RequestBody @Valid PopUpRequestDto popUpRequestDto){ return ApiResponse.success(Success.UPDATE_POPUP_SUCCESS, popupService.updatePopupInvisible(userId,popUpRequestDto)); } diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java b/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java index 741e045f..64e1c950 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/request/PopUpRequestDto.java @@ -1,11 +1,10 @@ package com.app.toaster.popup.controller.request; -import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; public record PopUpRequestDto( - @Valid Long popupId, - @Valid - boolean invisible + @NotNull + Long hideDate ) { } diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java b/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java index 98f15bb3..43b34562 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/response/InvisibleResponseDto.java @@ -1,7 +1,12 @@ package com.app.toaster.popup.controller.response; -public record InvisibleResponseDto(Long popupId, boolean invisible) { - public static InvisibleResponseDto of(Long popupId, boolean invisible){ - return new InvisibleResponseDto(popupId, invisible); +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import org.springframework.format.annotation.DateTimeFormat; + +public record InvisibleResponseDto(Long popupId, String hideUntil) { + public static InvisibleResponseDto of(Long popupId, LocalDate hideUntil){ + return new InvisibleResponseDto(popupId, hideUntil.format(DateTimeFormatter.ofPattern("YYYY-MM-dd"))); } } diff --git a/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java b/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java index 7eb5c562..f9015825 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java +++ b/linkmind/src/main/java/com/app/toaster/popup/entity/Popup.java @@ -1,5 +1,6 @@ package com.app.toaster.popup.entity; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; @@ -28,20 +29,22 @@ public class Popup { @Column(columnDefinition = "TEXT", name = "image") private String image; - @Column(name = "active") - private boolean active; + private LocalDate activeStartDate; + + private LocalDate activeEndDate; @Column(name = "link_url") private String linkUrl; @Builder - private Popup(String image, boolean active, String linkUrl) { + private Popup(String image, LocalDate activeStartDate, LocalDate activeEndDate, String linkUrl) { this.image = image; - this.active = active; + this.activeStartDate = activeStartDate; + this.activeEndDate = activeEndDate; this.linkUrl = linkUrl; } - public void updateIsActive(boolean isActive){ - this.active = active; + public boolean isActivePopup(LocalDate today){ + return !today.isBefore(activeStartDate)&&!today.isAfter(activeEndDate); } } diff --git a/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java b/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java index 29dc2218..07995a1f 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java +++ b/linkmind/src/main/java/com/app/toaster/popup/entity/PopupInvisibleManager.java @@ -1,5 +1,8 @@ package com.app.toaster.popup.entity; +import java.time.LocalDate; +import java.time.LocalDateTime; + import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; @@ -18,6 +21,7 @@ /** * 유저를 엮을것인가? 그러기에는 userId만 필요함. * popup을 엮을 것인가? -> popup이 없어지면 popupmanager도 삭제. + * 요구사항 추가: 1일 안보기 + 7일 안보기 */ @Entity @Getter @@ -36,16 +40,15 @@ public class PopupInvisibleManager { @JoinColumn(name = "popup_id") private Popup popup; - private boolean wantToInvisible; + private LocalDate hideDateUntil; @Builder private PopupInvisibleManager(Long userId, Popup popup, boolean wantToInvisible) { this.userId = userId; this.popup = popup; - this.wantToInvisible = wantToInvisible; } - public void updateInvisible(boolean wantToInvisible){ - this.wantToInvisible = wantToInvisible; + public void updateInvisible(LocalDate untilDate){ + this.hideDateUntil = untilDate; // 계산해서 넘겨준 untilDate로 바꿈. } } diff --git a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java index 9c03d626..df26cd32 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java +++ b/linkmind/src/main/java/com/app/toaster/popup/infrastructure/PopupRepository.java @@ -1,11 +1,8 @@ package com.app.toaster.popup.infrastructure; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; import com.app.toaster.popup.entity.Popup; public interface PopupRepository extends JpaRepository { - Optional findByIdAndActive(Long id, boolean active); } diff --git a/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java index e20dde97..c3107f3b 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java +++ b/linkmind/src/main/java/com/app/toaster/popup/service/PopupService.java @@ -1,11 +1,14 @@ package com.app.toaster.popup.service; +import java.time.LocalDate; +import java.time.temporal.TemporalAmount; import java.util.List; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.app.toaster.exception.Error; +import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.popup.controller.request.PopUpRequestDto; import com.app.toaster.popup.controller.response.InvisibleResponseDto; @@ -27,40 +30,47 @@ public class PopupService { public InvisibleResponseDto updatePopupInvisible(Long userId, PopUpRequestDto popUpRequestDto) { Popup popup = findActivePopup(popUpRequestDto.popupId()); - PopupInvisibleManager manager = findManagerWithUserIdAndPopup(userId, popup, popUpRequestDto.invisible()); + PopupInvisibleManager manager = findManagerWithUserIdAndPopup(userId, popup); + LocalDate today = LocalDate.now(); - manager.updateInvisible(popUpRequestDto.invisible()); - return InvisibleResponseDto.of(popup.getId(), manager.isWantToInvisible()); + manager.updateInvisible(today.plusDays(popUpRequestDto.hideDate())); + return InvisibleResponseDto.of(popup.getId(), manager.getHideDateUntil()); } @Transactional(readOnly = true) public PopupResponseDto findPopupInformation(Long userId) { List invisibleManagerList = findInvisiblePopupIdList(userId); return PopupResponseDto.from(popupRepository.findAll().stream() - .filter(Popup::isActive) + .filter((popup) -> popup.isActivePopup(LocalDate.now())) .filter(popup -> !invisibleManagerList.contains(popup.getId())) .toList()); } private Popup findActivePopup(Long id) { - return popupRepository.findByIdAndActive(id, true).orElseThrow( - () -> new NotFoundException(Error.NOT_FOUND_POPUP_EXCEPTION, Error.NOT_FOUND_POPUP_EXCEPTION.getMessage())); + LocalDate today = LocalDate.now(); + Popup popup = popupRepository.findById(id) + .orElseThrow(()-> new NotFoundException(Error.NOT_FOUND_POPUP_EXCEPTION, Error.NOT_FOUND_POPUP_EXCEPTION.getMessage())); + if (!popup.isActivePopup(today)){ + throw new BadRequestException(Error.BAD_REQUEST_ID, Error.BAD_REQUEST_ID.getMessage()); + } + return popup; } - private PopupInvisibleManager findManagerWithUserIdAndPopup(Long userId, Popup popup, boolean invisible) { + private PopupInvisibleManager findManagerWithUserIdAndPopup(Long userId, Popup popup) { return popupManagerRepository.findByUserIdAndPopup(userId, popup) .orElseGet(() -> popupManagerRepository.save(PopupInvisibleManager.builder() .userId(userId) .popup(popup) - .wantToInvisible(invisible) .build()) ); } private List findInvisiblePopupIdList(Long userId) { return popupManagerRepository.findByUserId(userId).stream() - .filter(PopupInvisibleManager::isWantToInvisible) + .filter( + (manager) -> manager.getHideDateUntil().isAfter(LocalDate.now()) //오늘 날짜는 보여야지 + ) .map(PopupInvisibleManager::getPopup) .map(Popup::getId) .toList(); From c73254252046fd2fda4e89f759f6ac667a411ba2 Mon Sep 17 00:00:00 2001 From: soohyun Date: Sat, 5 Oct 2024 01:08:00 +0900 Subject: [PATCH 07/34] =?UTF-8?q?[#242]=20feature:=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EC=9D=B4=EB=8F=99=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toaster/controller/ToastController.java | 14 ++++++++++---- .../request/toast/MoveToastDto.java | 6 ++++++ .../response/toast/ModifiedCategory.java | 7 +++++++ .../toaster/service/toast/ToastService.java | 19 +++++++++++++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java create mode 100644 linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java diff --git a/linkmind/src/main/java/com/app/toaster/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/controller/ToastController.java index 4093d251..e46af637 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/ToastController.java @@ -3,7 +3,8 @@ import java.io.IOException; import java.util.List; -import com.app.toaster.controller.request.toast.UpdateToastDto; +import com.app.toaster.controller.request.toast.*; +import com.app.toaster.controller.response.toast.ModifiedCategory; import com.app.toaster.controller.response.toast.ModifiedTitle; import com.app.toaster.controller.response.toast.WeekLinkDto; import com.app.toaster.service.link.LinkService; @@ -22,9 +23,6 @@ import com.app.toaster.common.dto.ApiResponse; // import com.app.toaster.config.UserId; import com.app.toaster.config.UserId; -import com.app.toaster.controller.request.toast.IsReadDto; -import com.app.toaster.controller.request.toast.OgRequestDto; -import com.app.toaster.controller.request.toast.SaveToastDto; import com.app.toaster.controller.response.toast.IsReadResponse; import com.app.toaster.exception.Success; import com.app.toaster.service.parse.ParsingService; @@ -98,5 +96,13 @@ public ApiResponse modifyTitle( return ApiResponse.success(Success.UPDATE_TOAST_TITLE_SUCCESS, toastService.modifyTitle(userId,updateToastDto)); } + @PatchMapping("/category") + @ResponseStatus(HttpStatus.OK) + public ApiResponse modifyCategory( + @UserId Long userId, + @Valid @RequestBody MoveToastDto updateToastDto + ){ + return ApiResponse.success(Success.UPDATE_TOAST_TITLE_SUCCESS, toastService.modifyClip(userId,updateToastDto)); + } } diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java b/linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java new file mode 100644 index 00000000..cc80b8b0 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java @@ -0,0 +1,6 @@ +package com.app.toaster.controller.request.toast; + +import jakarta.validation.constraints.NotNull; + +public record MoveToastDto(Long toastId, @NotNull Long categoryId) { +} diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java b/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java new file mode 100644 index 00000000..1a1dc858 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java @@ -0,0 +1,7 @@ +package com.app.toaster.controller.response.toast; + +public record ModifiedCategory(Long categoryId) { + public static ModifiedCategory of(Long categoryId){ + return new ModifiedCategory(categoryId); + } +} diff --git a/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java b/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java index c956ce46..eb7e09cb 100644 --- a/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.stream.Collectors; +import com.app.toaster.controller.request.toast.MoveToastDto; +import com.app.toaster.controller.response.toast.ModifiedCategory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -148,7 +150,24 @@ public ModifiedTitle modifyTitle(Long userId, UpdateToastDto updateToastDto){ } toast.updateTitle(updateToastDto.title()); return ModifiedTitle.of(updateToastDto.title()); + } + @Transactional + public ModifiedCategory modifyClip(Long userId, MoveToastDto updateToastDto){ + User presentUser = userRepository.findByUserId(userId).orElseThrow( + ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) + ); + Toast toast = toastRepository.findById(updateToastDto.toastId()).orElseThrow( + () -> new BadRequestException(Error.BAD_REQUEST_ID, Error.BAD_REQUEST_ID.getMessage()) + ); + if (!presentUser.equals(toast.getUser())){ + throw new ForbiddenException(Error.UNAUTHORIZED_ACCESS, Error.UNAUTHORIZED_ACCESS.getMessage()); + } + Category category = categoryRepository.findById(updateToastDto.categoryId()).orElseThrow( + () -> new NotFoundException(Error.NOT_FOUND_CATEGORY_EXCEPTION, Error.NOT_FOUND_CATEGORY_EXCEPTION.getMessage()) + ); + toast.updateCategory(category); + return ModifiedCategory.of(updateToastDto.categoryId()); } From 5f5bd5b29f68dcd4f09a9f32d35e8041e5e4525f Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 6 Oct 2024 15:43:25 +0900 Subject: [PATCH 08/34] =?UTF-8?q?[#242]=20feature:=20=EC=B5=9C=EA=B7=BC=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5=ED=95=9C=203=EA=B0=9C=20=ED=86=A0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B0=8F=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CategoryController.java | 5 +- .../toaster/controller/MainController.java | 3 - .../request/toast/DeleteToastDto.java | 4 - .../request/toast/OgRequestDto.java | 4 - .../category/GetCategoryResponseDto.java | 5 +- .../response/search/SearchMainResult.java | 2 +- .../com/app/toaster/exception/Success.java | 2 + .../querydsl/CustomToastRepository.java | 2 +- .../com/app/toaster/service/UserService.java | 2 +- .../app/toaster/service/auth/AuthService.java | 8 +- .../service/category/CategoryService.java | 8 +- .../app/toaster/service/link/LinkService.java | 5 +- .../toaster/service/search/SearchService.java | 11 +- .../controller/ToastController.java | 21 +-- .../controller/request}/IsReadDto.java | 2 +- .../controller/request}/MoveToastDto.java | 2 +- .../controller/request}/SaveToastDto.java | 2 +- .../controller/request}/UpdateToastDto.java | 2 +- .../controller/response}/IsReadResponse.java | 2 +- .../response}/ModifiedCategory.java | 2 +- .../controller/response}/ModifiedTitle.java | 2 +- .../controller/response}/ToastDto.java | 5 +- .../controller/response}/ToastFilter.java | 2 +- .../controller/response}/WeekLinkDto.java | 2 +- .../app/toaster/{ => toast}/domain/Toast.java | 4 +- .../infrastructure/ToastRepository.java | 9 +- .../toast => toast/service}/ToastService.java | 130 +++++++----------- .../querydsl/CustomToastRepositoryTest.java | 4 +- 28 files changed, 99 insertions(+), 153 deletions(-) delete mode 100644 linkmind/src/main/java/com/app/toaster/controller/request/toast/DeleteToastDto.java delete mode 100644 linkmind/src/main/java/com/app/toaster/controller/request/toast/OgRequestDto.java rename linkmind/src/main/java/com/app/toaster/{ => toast}/controller/ToastController.java (84%) rename linkmind/src/main/java/com/app/toaster/{controller/request/toast => toast/controller/request}/IsReadDto.java (54%) rename linkmind/src/main/java/com/app/toaster/{controller/request/toast => toast/controller/request}/MoveToastDto.java (70%) rename linkmind/src/main/java/com/app/toaster/{controller/request/toast => toast/controller/request}/SaveToastDto.java (79%) rename linkmind/src/main/java/com/app/toaster/{controller/request/toast => toast/controller/request}/UpdateToastDto.java (88%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/IsReadResponse.java (73%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/ModifiedCategory.java (76%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/ModifiedTitle.java (75%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/ToastDto.java (70%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/ToastFilter.java (53%) rename linkmind/src/main/java/com/app/toaster/{controller/response/toast => toast/controller/response}/WeekLinkDto.java (84%) rename linkmind/src/main/java/com/app/toaster/{ => toast}/domain/Toast.java (93%) rename linkmind/src/main/java/com/app/toaster/{ => toast}/infrastructure/ToastRepository.java (91%) rename linkmind/src/main/java/com/app/toaster/{service/toast => toast/service}/ToastService.java (61%) diff --git a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java b/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java index 99e4446b..af14946f 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java @@ -4,8 +4,7 @@ import com.app.toaster.config.UserId; import com.app.toaster.controller.request.category.*; import com.app.toaster.controller.response.category.CategoriesResponse; -import com.app.toaster.controller.response.toast.ToastFilter; -import com.app.toaster.controller.response.category.CategoryResponse; +import com.app.toaster.toast.controller.response.ToastFilter; import com.app.toaster.controller.response.category.GetCategoryResponseDto; import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; @@ -14,14 +13,12 @@ import com.app.toaster.service.search.SearchService; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Pattern; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; -import java.util.List; @RestController @RequestMapping("/category") diff --git a/linkmind/src/main/java/com/app/toaster/controller/MainController.java b/linkmind/src/main/java/com/app/toaster/controller/MainController.java index 5c8fc860..fa442ff0 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/MainController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/MainController.java @@ -4,11 +4,8 @@ import org.springframework.web.bind.annotation.*; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; import com.app.toaster.controller.valid.TitleValid; -import com.app.toaster.service.UserService; import com.app.toaster.service.search.SearchService; -import com.app.toaster.service.toast.ToastService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/DeleteToastDto.java b/linkmind/src/main/java/com/app/toaster/controller/request/toast/DeleteToastDto.java deleted file mode 100644 index fa5b054a..00000000 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/DeleteToastDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.app.toaster.controller.request.toast; - -public record DeleteToastDto(Long toastId) { -} diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/OgRequestDto.java b/linkmind/src/main/java/com/app/toaster/controller/request/toast/OgRequestDto.java deleted file mode 100644 index 1523a76e..00000000 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/OgRequestDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.app.toaster.controller.request.toast; - -public record OgRequestDto(String linkUrl) { -} diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java b/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java index f274ccf6..ee37086f 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java @@ -1,11 +1,8 @@ package com.app.toaster.controller.response.category; -import com.app.toaster.controller.response.auth.TokenResponseDto; -import com.app.toaster.controller.response.toast.ToastDto; -import com.app.toaster.domain.Toast; +import com.app.toaster.toast.controller.response.ToastDto; import lombok.Builder; -import java.util.ArrayList; import java.util.List; @Builder diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java b/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java index 70eb55f9..6752ca47 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java +++ b/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java @@ -2,7 +2,7 @@ import java.util.List; -import com.app.toaster.controller.response.toast.ToastDto; +import com.app.toaster.toast.controller.response.ToastDto; public record SearchMainResult(String keyword, List toasts, List categories) { public static SearchMainResult of(String keyword, List toasts, List categories){ diff --git a/linkmind/src/main/java/com/app/toaster/exception/Success.java b/linkmind/src/main/java/com/app/toaster/exception/Success.java index 14c3200e..34055ba3 100644 --- a/linkmind/src/main/java/com/app/toaster/exception/Success.java +++ b/linkmind/src/main/java/com/app/toaster/exception/Success.java @@ -25,6 +25,7 @@ public enum Success { GET_SITES_SUCCESS(HttpStatus.OK, "추천 사이트 조회 성공"), GET_SETTINGS_SUCCESS(HttpStatus.OK, "설정 페이지 조회 성공"), GET_POPUP_SUCCESS(HttpStatus.OK, "팝업 정보 조회 성공"), + GET_RECENT_TOAST_SUCCESS(HttpStatus.OK, "최근 저장한 토스트 조회 성공"), GET_CATEORIES_SUCCESS(HttpStatus.OK, "전체 카테고리 조회 성공"), GET_CATEORY_SUCCESS(HttpStatus.OK, "세부 카테고리 조회 성공"), @@ -47,6 +48,7 @@ public enum Success { UPDATE_ISREAD_SUCCESS(HttpStatus.OK, "열람여부 수정 완료"), UPDATE_CATEGORY_TITLE_SUCCESS(HttpStatus.OK, "카테고리 수정 완료"), + MOVE_CATEGORY_SUCCESS(HttpStatus.OK, "카테고리 이동 성공"), UPDATE_TIMER_DATETIME_SUCCESS(HttpStatus.OK, "타이머 시간/날짜 수정 완료"), UPDATE_TIMER_COMMENT_SUCCESS(HttpStatus.OK, "타이머 코멘트 수정 완료"), CHANGE_TIMER_ALARM_SUCCESS(HttpStatus.OK, "타이머 알람여부 수정 완료"), diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java index 90553ca8..25044802 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java +++ b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java @@ -14,7 +14,7 @@ // import com.app.toaster.domain.Category; // import com.app.toaster.domain.QToast; // import com.app.toaster.domain.QUser; -// import com.app.toaster.domain.Toast; +// import com.app.toaster.toast.domain.Toast; // import com.app.toaster.domain.User; // import com.querydsl.core.types.Path; // import com.querydsl.core.types.dsl.BooleanExpression; diff --git a/linkmind/src/main/java/com/app/toaster/service/UserService.java b/linkmind/src/main/java/com/app/toaster/service/UserService.java index 47a25217..3da664cd 100644 --- a/linkmind/src/main/java/com/app/toaster/service/UserService.java +++ b/linkmind/src/main/java/com/app/toaster/service/UserService.java @@ -14,7 +14,7 @@ import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.NotFoundException; -import com.app.toaster.infrastructure.ToastRepository; +import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; // import com.app.toaster.infrastructure.querydsl.CustomToastRepository; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 4855e586..5837d439 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -5,9 +5,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.jwt.JwtService; import com.app.toaster.controller.request.auth.SignInRequestDto; import com.app.toaster.controller.response.auth.SignInResponseDto; @@ -17,21 +15,19 @@ import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.Success; -import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.exception.model.UnprocessableEntityException; import com.app.toaster.external.client.slack.SlackApi; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.infrastructure.TimerRepository; -import com.app.toaster.infrastructure.ToastRepository; +import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; -import com.app.toaster.popup.entity.PopupInvisibleManager; import com.app.toaster.popup.infrastructure.PopupManagerRepository; import com.app.toaster.service.auth.apple.AppleSignInService; import com.app.toaster.service.auth.kakao.KakaoSignInService; import com.app.toaster.service.auth.kakao.LoginResult; -import com.app.toaster.service.toast.ToastService; +import com.app.toaster.toast.service.ToastService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java index b1fd6de1..7e477997 100644 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java +++ b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java @@ -3,13 +3,13 @@ import com.app.toaster.controller.request.category.*; import com.app.toaster.controller.response.category.CategoriesResponse; import com.app.toaster.controller.response.category.DuplicatedResponse; -import com.app.toaster.controller.response.toast.ToastDto; -import com.app.toaster.controller.response.toast.ToastFilter; +import com.app.toaster.toast.controller.response.ToastDto; +import com.app.toaster.toast.controller.response.ToastFilter; import com.app.toaster.controller.response.category.CategoryResponse; import com.app.toaster.controller.response.category.GetCategoryResponseDto; import com.app.toaster.domain.Category; import com.app.toaster.domain.Reminder; -import com.app.toaster.domain.Toast; +import com.app.toaster.toast.domain.Toast; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; @@ -17,7 +17,7 @@ import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.infrastructure.TimerRepository; -import com.app.toaster.infrastructure.ToastRepository; +import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java b/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java index 4509e41a..1358e865 100644 --- a/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java +++ b/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java @@ -1,6 +1,6 @@ package com.app.toaster.service.link; -import com.app.toaster.controller.response.toast.WeekLinkDto; +import com.app.toaster.toast.controller.response.WeekLinkDto; import com.app.toaster.domain.Link; import com.app.toaster.infrastructure.LinkRepository; import lombok.RequiredArgsConstructor; @@ -9,10 +9,7 @@ import java.time.Duration; import java.time.LocalDateTime; -import java.time.Period; -import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor diff --git a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java index f1f78837..ce4a86da 100644 --- a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java +++ b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java @@ -8,24 +8,19 @@ import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.controller.response.search.CategoryResult; -import com.app.toaster.controller.response.search.SearchCategoryResult; import com.app.toaster.controller.response.search.SearchMainResult; -import com.app.toaster.controller.response.search.ToastResult; -import com.app.toaster.controller.response.toast.ToastDto; +import com.app.toaster.toast.controller.response.ToastDto; import com.app.toaster.domain.Category; -import com.app.toaster.domain.Toast; +import com.app.toaster.toast.domain.Toast; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.Success; import com.app.toaster.exception.model.BadRequestException; -import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.infrastructure.CategoryRepository; -import com.app.toaster.infrastructure.ToastRepository; +import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; -import com.google.protobuf.Api; -import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; @Service diff --git a/linkmind/src/main/java/com/app/toaster/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java similarity index 84% rename from linkmind/src/main/java/com/app/toaster/controller/ToastController.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java index e46af637..a1e68938 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java @@ -1,13 +1,11 @@ -package com.app.toaster.controller; +package com.app.toaster.toast.controller; import java.io.IOException; import java.util.List; -import com.app.toaster.controller.request.toast.*; -import com.app.toaster.controller.response.toast.ModifiedCategory; -import com.app.toaster.controller.response.toast.ModifiedTitle; -import com.app.toaster.controller.response.toast.WeekLinkDto; import com.app.toaster.service.link.LinkService; +import com.app.toaster.toast.controller.request.*; +import com.app.toaster.toast.controller.response.*; import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; @@ -23,10 +21,9 @@ import com.app.toaster.common.dto.ApiResponse; // import com.app.toaster.config.UserId; import com.app.toaster.config.UserId; -import com.app.toaster.controller.response.toast.IsReadResponse; import com.app.toaster.exception.Success; import com.app.toaster.service.parse.ParsingService; -import com.app.toaster.service.toast.ToastService; +import com.app.toaster.toast.service.ToastService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -87,6 +84,14 @@ public ApiResponse> getWeekLinks( return ApiResponse.success(Success.GET_LINKS_SUCCESS, linkService.getWeekLinks()); } + @GetMapping("/recent-saved") + @ResponseStatus(HttpStatus.OK) + public ApiResponse> getRecentSavedLinks( + @UserId Long userId + ) { + return ApiResponse.success(Success.GET_RECENT_TOAST_SUCCESS, toastService.getToastTop3_savedRecently(userId)); + } + @PatchMapping("/title") @ResponseStatus(HttpStatus.OK) public ApiResponse modifyTitle( @@ -102,7 +107,7 @@ public ApiResponse modifyCategory( @UserId Long userId, @Valid @RequestBody MoveToastDto updateToastDto ){ - return ApiResponse.success(Success.UPDATE_TOAST_TITLE_SUCCESS, toastService.modifyClip(userId,updateToastDto)); + return ApiResponse.success(Success.MOVE_CATEGORY_SUCCESS, toastService.modifyClip(userId,updateToastDto)); } } diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/IsReadDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/IsReadDto.java similarity index 54% rename from linkmind/src/main/java/com/app/toaster/controller/request/toast/IsReadDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/request/IsReadDto.java index 18297ad0..46729f05 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/IsReadDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/IsReadDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.toast; +package com.app.toaster.toast.controller.request; public record IsReadDto(Long toastId, Boolean isRead) { } diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java similarity index 70% rename from linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java index cc80b8b0..6978a6fd 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/MoveToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.toast; +package com.app.toaster.toast.controller.request; import jakarta.validation.constraints.NotNull; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/SaveToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java similarity index 79% rename from linkmind/src/main/java/com/app/toaster/controller/request/toast/SaveToastDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java index 34eeb1e2..bb8a50c8 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/SaveToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.toast; +package com.app.toaster.toast.controller.request; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/toast/UpdateToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java similarity index 88% rename from linkmind/src/main/java/com/app/toaster/controller/request/toast/UpdateToastDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java index 0126eafe..42d868dd 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/toast/UpdateToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.toast; +package com.app.toaster.toast.controller.request; import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/IsReadResponse.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/IsReadResponse.java similarity index 73% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/IsReadResponse.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/IsReadResponse.java index cabc9463..ed8508aa 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/IsReadResponse.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/IsReadResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; public record IsReadResponse(Boolean isRead) { public static IsReadResponse of(Boolean isRead){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedCategory.java similarity index 76% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedCategory.java index 1a1dc858..aef5065b 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedCategory.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedCategory.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; public record ModifiedCategory(Long categoryId) { public static ModifiedCategory of(Long categoryId){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedTitle.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedTitle.java similarity index 75% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedTitle.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedTitle.java index 362d8810..39c00b40 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ModifiedTitle.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ModifiedTitle.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; public record ModifiedTitle(String updatedTitle) { public static ModifiedTitle of(String updatedTitle){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastDto.java similarity index 70% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastDto.java index bc79188f..9e59c506 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastDto.java @@ -1,7 +1,6 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; -import com.app.toaster.controller.response.category.GetCategoryResponseDto; -import com.app.toaster.domain.Toast; +import com.app.toaster.toast.domain.Toast; public record ToastDto (Long toastId, String toastTitle, String linkUrl, Boolean isRead, String categoryTitle, String thumbnailUrl){ public static ToastDto of(Toast toast){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastFilter.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastFilter.java similarity index 53% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastFilter.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastFilter.java index 33a916dd..61676578 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/ToastFilter.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/ToastFilter.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; public enum ToastFilter { ALL, diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/toast/WeekLinkDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java similarity index 84% rename from linkmind/src/main/java/com/app/toaster/controller/response/toast/WeekLinkDto.java rename to linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java index 37c1d5ca..1046f1fd 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/toast/WeekLinkDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.toast; +package com.app.toaster.toast.controller.response; import com.app.toaster.domain.Link; diff --git a/linkmind/src/main/java/com/app/toaster/domain/Toast.java b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java similarity index 93% rename from linkmind/src/main/java/com/app/toaster/domain/Toast.java rename to linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java index d8ab1323..2cf27ab0 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Toast.java +++ b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java @@ -1,9 +1,11 @@ -package com.app.toaster.domain; +package com.app.toaster.toast.domain; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import com.app.toaster.domain.Category; +import com.app.toaster.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/ToastRepository.java b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java similarity index 91% rename from linkmind/src/main/java/com/app/toaster/infrastructure/ToastRepository.java rename to linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java index 0b9c4f23..d02a6870 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/ToastRepository.java +++ b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java @@ -1,4 +1,4 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.toast.infrastructure; import com.app.toaster.domain.Category; import com.app.toaster.domain.User; @@ -6,12 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import com.app.toaster.domain.Category; -import com.app.toaster.domain.Toast; -import com.app.toaster.domain.User; +import com.app.toaster.toast.domain.Toast; import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.time.LocalDateTime; @@ -64,4 +61,6 @@ Long countAllByUpdateAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, @Param("endOfWeek") LocalDateTime endOfWeek, @Param("user") User user); + List findTop3ByUserOrderByCreatedAtDesc(User user); + } diff --git a/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java similarity index 61% rename from linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java rename to linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java index eb7e09cb..b5f49226 100644 --- a/linkmind/src/main/java/com/app/toaster/service/toast/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java @@ -1,40 +1,37 @@ -package com.app.toaster.service.toast; +package com.app.toaster.toast.service; import java.io.IOException; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import com.app.toaster.controller.request.toast.MoveToastDto; -import com.app.toaster.controller.response.toast.ModifiedCategory; +import com.app.toaster.toast.controller.request.MoveToastDto; +import com.app.toaster.toast.controller.response.ModifiedCategory; +import com.app.toaster.toast.controller.response.ToastDto; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.app.toaster.controller.request.toast.IsReadDto; -import com.app.toaster.controller.request.toast.SaveToastDto; -import com.app.toaster.controller.request.toast.UpdateToastDto; +import com.app.toaster.toast.controller.request.IsReadDto; +import com.app.toaster.toast.controller.request.SaveToastDto; +import com.app.toaster.toast.controller.request.UpdateToastDto; import com.app.toaster.controller.response.parse.OgResponse; -import com.app.toaster.controller.response.toast.IsReadResponse; -import com.app.toaster.controller.response.toast.ModifiedTitle; +import com.app.toaster.toast.controller.response.IsReadResponse; +import com.app.toaster.toast.controller.response.ModifiedTitle; import com.app.toaster.domain.Category; -import com.app.toaster.domain.Toast; +import com.app.toaster.toast.domain.Toast; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.ForbiddenException; import com.app.toaster.exception.model.NotFoundException; -import com.app.toaster.external.client.aws.ImagePresignedUrlResponse; -import com.app.toaster.external.client.aws.PresignedUrlVO; import com.app.toaster.external.client.aws.S3Service; import com.app.toaster.infrastructure.CategoryRepository; -import com.app.toaster.infrastructure.ToastRepository; +import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; import com.app.toaster.service.parse.ParsingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import software.amazon.awssdk.utils.Logger; @Service @RequiredArgsConstructor @@ -45,8 +42,6 @@ public class ToastService { private final CategoryRepository categoryRepository; private final S3Service s3Service; private final ParsingService parsingService; - private static final String TOAST_IMAGE_FOLDER_NAME = "toast/"; - private static Logger logger; @Value("${static-image.root}") private String BASIC_ROOT; @@ -55,9 +50,7 @@ public class ToastService { @Transactional public void createToast(Long userId, SaveToastDto saveToastDto){ //해당 유저 탐색 - User presentUser = userRepository.findByUserId(userId).orElseThrow( - ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) - ); + User presentUser = findUser(userId); //토스트 생성 try { System.out.println(saveToastDto.linkUrl()); @@ -87,15 +80,8 @@ public void createToast(Long userId, SaveToastDto saveToastDto){ } @Transactional public IsReadResponse readToast(Long userId, IsReadDto isReadDto){ - User presentUser = userRepository.findByUserId(userId).orElseThrow( - ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) - ); - Toast toast = toastRepository.findById(isReadDto.toastId()).orElseThrow( - () -> new NotFoundException(Error.NOT_FOUND_TOAST_EXCEPTION, Error.NOT_FOUND_TOAST_EXCEPTION.getMessage()) - ); - if (!presentUser.equals(toast.getUser())){ - throw new ForbiddenException(Error.INVALID_USER_ACCESS, Error.INVALID_USER_ACCESS.getMessage()); - } + Toast toast = findToast(isReadDto.toastId()); + isOwnerOfToast(userId,toast); if (isReadDto.isRead() && toast.getIsRead() || !isReadDto.isRead() && !toast.getIsRead()){ throw new BadRequestException(Error.BAD_REQUEST_ISREAD, Error.BAD_REQUEST_ISREAD.getMessage()); } @@ -108,6 +94,15 @@ public IsReadResponse readToast(Long userId, IsReadDto isReadDto){ return IsReadResponse.of(isReadDto.isRead()); } + @Transactional(readOnly = true) + public List getToastTop3_savedRecently(Long userId){ + User presentUser = findUser(userId); + return toastRepository.findTop3ByUserOrderByCreatedAtDesc(presentUser) + .stream() + .map(ToastDto::of) + .toList(); + } + @Transactional public void deleteToast(Long userId, Long toastId) throws IOException { User presentUser = userRepository.findByUserId(userId).orElseThrow( @@ -139,35 +134,44 @@ public void deleteAllToast(User user) throws IOException { @Transactional public ModifiedTitle modifyTitle(Long userId, UpdateToastDto updateToastDto){ - User presentUser = userRepository.findByUserId(userId).orElseThrow( - ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) - ); - Toast toast = toastRepository.findById(updateToastDto.toastId()).orElseThrow( - () -> new BadRequestException(Error.BAD_REQUEST_ID, Error.BAD_REQUEST_ID.getMessage()) - ); - if (!presentUser.equals(toast.getUser())){ - throw new ForbiddenException(Error.UNAUTHORIZED_ACCESS, Error.UNAUTHORIZED_ACCESS.getMessage()); - } + Toast toast = findToast(updateToastDto.toastId()); + isOwnerOfToast(userId,toast); toast.updateTitle(updateToastDto.title()); return ModifiedTitle.of(updateToastDto.title()); } @Transactional public ModifiedCategory modifyClip(Long userId, MoveToastDto updateToastDto){ - User presentUser = userRepository.findByUserId(userId).orElseThrow( + Toast toast = findToast(updateToastDto.toastId()); + isOwnerOfToast(userId, toast); + Category category = findCategory(updateToastDto.categoryId()); + toast.updateCategory(category); + return ModifiedCategory.of(updateToastDto.categoryId()); + } + + private void isOwnerOfToast(Long userId, Toast toast){ + User presentUser = findUser(userId); + if (!presentUser.equals(toast.getUser())){ + throw new ForbiddenException(Error.UNAUTHORIZED_ACCESS, Error.UNAUTHORIZED_ACCESS.getMessage()); + } + } + + private User findUser(Long userId){ + return userRepository.findByUserId(userId).orElseThrow( ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) ); - Toast toast = toastRepository.findById(updateToastDto.toastId()).orElseThrow( + } + + private Toast findToast(Long toastId){ + return toastRepository.findById(toastId).orElseThrow( () -> new BadRequestException(Error.BAD_REQUEST_ID, Error.BAD_REQUEST_ID.getMessage()) ); - if (!presentUser.equals(toast.getUser())){ - throw new ForbiddenException(Error.UNAUTHORIZED_ACCESS, Error.UNAUTHORIZED_ACCESS.getMessage()); - } - Category category = categoryRepository.findById(updateToastDto.categoryId()).orElseThrow( + } + + private Category findCategory(Long categoryId){ + return categoryRepository.findById(categoryId).orElseThrow( () -> new NotFoundException(Error.NOT_FOUND_CATEGORY_EXCEPTION, Error.NOT_FOUND_CATEGORY_EXCEPTION.getMessage()) ); - toast.updateCategory(category); - return ModifiedCategory.of(updateToastDto.categoryId()); } @@ -182,42 +186,6 @@ private void checkCategoryIsEmpty(Toast toast, Long categoryId){ toast.updateCategory(foundCategory); } } - // presigned url로 저장하는 로직 - private void convertToBytes(){ - // RestClient restClient = RestClient.create(BASIC_ROOT+res.imageAdvanced()); - // Response response = restClient.get(); - // byte[] imageBytes = response.content().asByteArray(); - } - - public ImagePresignedUrlResponse getUploadPreSignedUrl(String filename) { - try { - - PresignedUrlVO presignedUrlVO = s3Service.getUploadPreSignedUrl(filename ,TOAST_IMAGE_FOLDER_NAME); - return new ImagePresignedUrlResponse( - presignedUrlVO.fileName(), - presignedUrlVO.url() - ); - } catch (Exception e) { - - System.out.println(e.getMessage()); - System.out.println(String.valueOf(e.getCause())); - System.out.println(Arrays.toString(e.getStackTrace())); - throw e; - } - } - // presign url로 요청 보내는 api - private void requestPreSignedUrl(){ - // HttpHeaders headers = new HttpHeaders(); - // headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); - // final String imageUrl = TOAST_IMAGE_FOLDER_NAME+realRes.fileName(); - // s3Service.getURL(imageUrl); - // - // HttpEntity entity = new HttpEntity<>(bytes, headers); - // - // // RestTemplate을 사용하여 PUT 요청을 보낸다. - // RestTemplate restTemplate = new RestTemplate(); - // restTemplate.put(realRes.preSignedUrl(), entity); - } private String checkIsBasicImage(String imageUrl){ if (!imageUrl.startsWith("http")){ diff --git a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java index 7cd5db8d..e8cc47a2 100644 --- a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java +++ b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java @@ -21,10 +21,10 @@ // import org.springframework.transaction.annotation.Transactional; // // import com.app.toaster.config.JpaQueryFactoryConfig; -// import com.app.toaster.domain.Toast; +// import com.app.toaster.toast.domain.Toast; // import com.app.toaster.fixture.Fixture; // import com.app.toaster.infrastructure.CategoryRepository; -// import com.app.toaster.infrastructure.ToastRepository; +// import com.app.toaster.toast.infrastructure.ToastRepository; // import com.app.toaster.infrastructure.UserRepository; // import com.querydsl.core.types.dsl.BooleanExpression; // import com.querydsl.jpa.impl.JPAQueryFactory; From e049bd6dc3b4fe2501625e80badefb8c35433af2 Mon Sep 17 00:00:00 2001 From: soohyun Date: Thu, 10 Oct 2024 00:28:37 +0900 Subject: [PATCH 09/34] =?UTF-8?q?[#242]=20fix:=20=EC=95=88=EC=98=AC?= =?UTF-8?q?=EB=9D=BC=EA=B0=84=20dto=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/toaster/toast/controller/request/OgRequestDto.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 linkmind/src/main/java/com/app/toaster/toast/controller/request/OgRequestDto.java diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/request/OgRequestDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/OgRequestDto.java new file mode 100644 index 00000000..b039ae9b --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/OgRequestDto.java @@ -0,0 +1,4 @@ +package com.app.toaster.toast.controller.request; + +public record OgRequestDto(String linkUrl) { +} From 822547fccf6f5bcf4e3ad0ecc4d9178a0032cb79 Mon Sep 17 00:00:00 2001 From: mmihye Date: Thu, 10 Oct 2024 22:10:43 +0900 Subject: [PATCH 10/34] =?UTF-8?q?[#243]=20feat:=20=EB=94=94=EC=8A=A4?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/build.gradle | 9 ++++ .../com/app/toaster/ToasterApplication.java | 2 + .../java/com/app/toaster/exception/Error.java | 1 + .../client/discord/DiscordClient.java | 13 +++++ .../client/discord/DiscordMessage.java | 29 ++++++++++ .../discord/DiscordMessageProvider.java | 54 +++++++++++++++++++ .../app/toaster/service/auth/AuthService.java | 9 +++- 7 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessage.java create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java diff --git a/linkmind/build.gradle b/linkmind/build.gradle index 2d94ddd7..99c38747 100644 --- a/linkmind/build.gradle +++ b/linkmind/build.gradle @@ -79,6 +79,15 @@ dependencies { implementation 'io.sentry:sentry-spring-boot-starter:5.7.0' + // openfeign + implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' + +} + +dependencyManagement { + imports { + mavenBom("org.springframework.cloud:spring-cloud-dependencies:2023.0.3") + } } //sourceSets { // main { diff --git a/linkmind/src/main/java/com/app/toaster/ToasterApplication.java b/linkmind/src/main/java/com/app/toaster/ToasterApplication.java index cc0c595a..d85e4b44 100644 --- a/linkmind/src/main/java/com/app/toaster/ToasterApplication.java +++ b/linkmind/src/main/java/com/app/toaster/ToasterApplication.java @@ -3,6 +3,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cglib.core.Local; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import javax.annotation.PostConstruct; @@ -10,6 +11,7 @@ import java.util.TimeZone; @SpringBootApplication +@EnableFeignClients @EnableJpaAuditing public class ToasterApplication { diff --git a/linkmind/src/main/java/com/app/toaster/exception/Error.java b/linkmind/src/main/java/com/app/toaster/exception/Error.java index 59b542e6..164c3f96 100644 --- a/linkmind/src/main/java/com/app/toaster/exception/Error.java +++ b/linkmind/src/main/java/com/app/toaster/exception/Error.java @@ -70,6 +70,7 @@ public enum Error { CREATE_PUBLIC_KEY_EXCEPTION(HttpStatus.INTERNAL_SERVER_ERROR, "publickey 생성 과정 중 문제가 발생했습니다."), FAIL_TO_SEND_PUSH_ALARM(HttpStatus.INTERNAL_SERVER_ERROR, "다수기기 푸시메시지 전송 실패"), FAIL_TO_SEND_SQS(HttpStatus.INTERNAL_SERVER_ERROR, "sqs 전송 실패"), + INVALID_DISCORD_MESSAGE(HttpStatus.INTERNAL_SERVER_ERROR, "디스코드 알림 전송 실패"), CREATE_TOAST_PROCCESS_EXCEPTION(HttpStatus.INTERNAL_SERVER_ERROR, "토스트 저장 중 문제가 발생했습니다. 카테고리 또는 s3 관련 문제로 예상됩니다.") ; diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java new file mode 100644 index 00000000..6f27ff52 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java @@ -0,0 +1,13 @@ +package com.app.toaster.external.client.discord; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = "${discord.name}", url = "${discord.webhook-url}") +public interface DiscordClient { + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + void sendMessage(@RequestBody DiscordMessage discordMessage); +} \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessage.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessage.java new file mode 100644 index 00000000..ba64baf7 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessage.java @@ -0,0 +1,29 @@ +package com.app.toaster.external.client.discord; + +import java.util.List; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +public class DiscordMessage { + + private String content; + private List embeds; + + @Builder + @AllArgsConstructor(access = AccessLevel.PROTECTED) + @NoArgsConstructor(access = AccessLevel.PROTECTED) + @Getter + public static class Embed { + + private String title; + private String description; + } +} \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java new file mode 100644 index 00000000..c7a2fd22 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -0,0 +1,54 @@ +package com.app.toaster.external.client.discord; + +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.context.ApplicationContextException; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.WebRequest; + +import com.app.toaster.exception.Error; +import com.app.toaster.exception.model.CustomException; +import com.app.toaster.infrastructure.UserRepository; + +import feign.FeignException; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Component +public class DiscordMessageProvider { + private final DiscordClient discordClient; + private final UserRepository userRepository; + + public void sendSignUpNotification() { + sendMessageToDiscord(createSingUpMessage()); + } + + private void sendMessageToDiscord(DiscordMessage discordMessage) { + try { + discordClient.sendMessage(discordMessage); + } catch (FeignException e) { + throw new CustomException(Error.INVALID_DISCORD_MESSAGE, Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); + } + } + + private DiscordMessage createSingUpMessage() { + return DiscordMessage.builder() + .content("# 😍 회원가입 이벤트가 발생했습니다.") + .embeds( + List.of( + DiscordMessage.Embed.builder() + .title("ℹ️ 회원가입 정보") + .description( + "### 🕖 발생 시간\n" + + LocalDateTime.now() + + "\n" + + "### 📜 유저 가입 정보\n" + + "토스터의 " + userRepository.count() + "번째 유저가 생성되었습니다!! ❤️" + + "\n") + .build() + ) + ) + .build(); + } +} \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 4855e586..a5e6cbb0 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -1,11 +1,13 @@ package com.app.toaster.service.auth; import java.io.IOException; +import java.time.LocalDateTime; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; +import org.springframework.web.context.request.WebRequest; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.jwt.JwtService; @@ -21,6 +23,8 @@ import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.exception.model.UnprocessableEntityException; +import com.app.toaster.external.client.discord.DiscordMessage; +import com.app.toaster.external.client.discord.DiscordMessageProvider; import com.app.toaster.external.client.slack.SlackApi; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.infrastructure.TimerRepository; @@ -48,6 +52,7 @@ public class AuthService { private final PopupManagerRepository popupManagerRepository; private final SlackApi slackApi; + private final DiscordMessageProvider discordMessageProvider; private final Long TOKEN_EXPIRATION_TIME_ACCESS = 7*24*60 * 60 * 1000L; //7일 @@ -76,7 +81,8 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque .socialType(socialType).build(); newUser.updateFcmIsAllowed(true); //신규 유저면 true박고 userRepository.save(newUser); - slackApi.sendSuccess(Success.LOGIN_SUCCESS); + // slackApi.sendSuccess(Success.LOGIN_SUCCESS); + discordMessageProvider.sendSignUpNotification(); } User user = userRepository.findBySocialIdAndSocialType(socialId, socialType) @@ -167,4 +173,5 @@ public TokenHealthDto checkHealthOfToken(String refreshToken){ return TokenHealthDto.of(jwtService.verifyToken(refreshToken)); } + } From fce672707e650e80e3139527204a5ce0fb72be8a Mon Sep 17 00:00:00 2001 From: mmihye Date: Thu, 10 Oct 2024 22:42:04 +0900 Subject: [PATCH 11/34] =?UTF-8?q?[#243]=20feat:=20=EB=94=94=EC=8A=A4?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20+?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=EC=95=8C=EB=A6=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advice/ControllerExceptionAdvice.java | 28 ++++---- .../controller/HealthCheckController.java | 10 +++ ...ordClient.java => DiscordErrorClient.java} | 5 +- .../discord/DiscordMessageProvider.java | 65 +++++++++++++++++-- .../client/discord/DiscordSingUpClient.java | 12 ++++ 5 files changed, 98 insertions(+), 22 deletions(-) rename linkmind/src/main/java/com/app/toaster/external/client/discord/{DiscordClient.java => DiscordErrorClient.java} (70%) create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java diff --git a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java index 6be80bc7..73508fd0 100644 --- a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java +++ b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java @@ -20,11 +20,13 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.WebRequest; import org.springframework.web.method.annotation.HandlerMethodValidationException; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; +import com.app.toaster.external.client.discord.DiscordMessageProvider; import com.app.toaster.external.client.slack.SlackApi; import io.sentry.Sentry; @@ -39,12 +41,13 @@ @RequiredArgsConstructor public class ControllerExceptionAdvice { private final SlackApi slackApi; + private final DiscordMessageProvider discordMessageProvider; /** * custom error */ @ExceptionHandler(CustomException.class) - protected ResponseEntity handleCustomException(CustomException e) { + protected ResponseEntity handleCustomException(CustomException e , WebRequest request) { Sentry.captureException(e); return ResponseEntity.status(e.getHttpStatus()) .body(ApiResponse.error(e.getError(), e.getMessage())); @@ -52,7 +55,7 @@ protected ResponseEntity handleCustomException(CustomException e) { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MethodArgumentNotValidException.class) - protected ResponseEntity handleConstraintDefinitionException(final MethodArgumentNotValidException e) { + protected ResponseEntity handleConstraintDefinitionException(final MethodArgumentNotValidException e, WebRequest request) { FieldError fieldError = e.getBindingResult().getFieldError(); Sentry.captureException(e); return ResponseEntity.status(e.getStatusCode()) @@ -60,7 +63,7 @@ protected ResponseEntity handleConstraintDefinitionException(final } @ExceptionHandler(MalformedURLException.class) - protected ResponseEntity handleConstraintDefinitionException(final MalformedURLException e) { + protected ResponseEntity handleConstraintDefinitionException(final MalformedURLException e, WebRequest request) { Sentry.captureException(e); return ResponseEntity.status(Error.MALFORMED_URL_EXEPTION.getErrorCode()) .body(ApiResponse.error(Error.MALFORMED_URL_EXEPTION, Error.MALFORMED_URL_EXEPTION.getMessage())); @@ -68,42 +71,42 @@ protected ResponseEntity handleConstraintDefinitionException(final @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(DateTimeParseException.class) - protected ResponseEntity handleDateTimeParseException(final DateTimeParseException e) { + protected ResponseEntity handleDateTimeParseException(final DateTimeParseException e, WebRequest request) { return ResponseEntity.status(Error.BAD_REQUEST_REMIND_TIME.getErrorCode()) .body(ApiResponse.error(Error.BAD_REQUEST_REMIND_TIME, Error.BAD_REQUEST_REMIND_TIME.getMessage())); } @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpRequestMethodNotSupportedException.class) - protected ResponseEntity handleHttpRequestMethodNotSupportedException(final HttpRequestMethodNotSupportedException e) { + protected ResponseEntity handleHttpRequestMethodNotSupportedException(final HttpRequestMethodNotSupportedException e, WebRequest request) { return ResponseEntity.status(e.getStatusCode()) .body(ApiResponse.error(Error.REQUEST_METHOD_VALIDATION_EXCEPTION, Error.REQUEST_METHOD_VALIDATION_EXCEPTION.getMessage())); } @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMediaTypeNotSupportedException.class) - protected ResponseEntity handleHttpMediaTypeNotSupportedException(final HttpMediaTypeNotSupportedException e) { + protected ResponseEntity handleHttpMediaTypeNotSupportedException(final HttpMediaTypeNotSupportedException e, WebRequest request) { return ResponseEntity.status(e.getStatusCode()) .body(ApiResponse.error(Error.REQUEST_MEDIA_TYPE_VALIDATION_EXCEPTION, Error.REQUEST_MEDIA_TYPE_VALIDATION_EXCEPTION.getMessage())); } @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MissingServletRequestParameterException.class) - protected ResponseEntity MissingServletRequestParameterException(final MissingServletRequestParameterException e) { + protected ResponseEntity MissingServletRequestParameterException(final MissingServletRequestParameterException e, WebRequest request) { return ResponseEntity.status(e.getStatusCode()) .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); } @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) - protected ResponseEntity MissingServletRequestParameterException(final HttpMessageNotReadableException e) { + protected ResponseEntity MissingServletRequestParameterException(final HttpMessageNotReadableException e, WebRequest request) { return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode()) .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); } @ResponseStatus(HttpStatus.BAD_REQUEST) // 커스텀 validation 에러 핸들링. @ExceptionHandler(HandlerMethodValidationException.class) - protected ResponseEntity ConstraintViolationException(final HandlerMethodValidationException e) { + protected ResponseEntity ConstraintViolationException(final HandlerMethodValidationException e, WebRequest request) { Sentry.captureException(e); return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode()) .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); @@ -111,7 +114,7 @@ protected ResponseEntity ConstraintViolationException(final Handler @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(UnknownHostException.class) - protected ResponseEntity UnknownHostException(final UnknownHostException e) { + protected ResponseEntity UnknownHostException(final UnknownHostException e, WebRequest request) { Sentry.captureException(e); return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode()) .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); @@ -119,7 +122,7 @@ protected ResponseEntity UnknownHostException(final UnknownHostExce @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MissingRequestHeaderException.class) - protected ResponseEntity MissingRequestHeaderException(final MissingRequestHeaderException e){ + protected ResponseEntity MissingRequestHeaderException(final MissingRequestHeaderException e, WebRequest request){ Sentry.captureException(e); return ResponseEntity.status(Error.BAD_REQUEST_VALIDATION.getErrorCode()) .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); @@ -134,8 +137,9 @@ protected ResponseEntity MissingRequestHeaderException(final Missin @ExceptionHandler(Exception.class) protected ApiResponse handleException(final Exception error, final HttpServletRequest request) throws IOException { - slackApi.sendAlert(error, request); + // slackApi.sendAlert(error, request); Sentry.captureException(error); + discordMessageProvider.sendErrorNotification(error,request.getRequestURI()); return ApiResponse.error(Error.INTERNAL_SERVER_ERROR); } diff --git a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java index 3582b1f8..2d04f01b 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java @@ -1,8 +1,18 @@ package com.app.toaster.controller; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import com.app.toaster.controller.request.toast.IsReadDto; +import com.app.toaster.controller.response.toast.IsReadResponse; +import com.app.toaster.domain.User; +import com.app.toaster.exception.Error; +import com.app.toaster.exception.model.NotFoundException; +import com.app.toaster.infrastructure.UserRepository; + +import lombok.RequiredArgsConstructor; + @RestController public class HealthCheckController { diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java similarity index 70% rename from linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java rename to linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java index 6f27ff52..aba5a0f8 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java @@ -1,13 +1,12 @@ package com.app.toaster.external.client.discord; -import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -@FeignClient(name = "${discord.name}", url = "${discord.webhook-url}") -public interface DiscordClient { +@FeignClient(name = "${discord.sign-name}", url = "${discord.webhook-url-error}") +public interface DiscordErrorClient { @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) void sendMessage(@RequestBody DiscordMessage discordMessage); } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index c7a2fd22..9ca8fe56 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -1,10 +1,14 @@ package com.app.toaster.external.client.discord; +import java.io.PrintWriter; +import java.io.StringWriter; import java.time.LocalDateTime; import java.util.List; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContextException; import org.springframework.stereotype.Component; +import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; import com.app.toaster.exception.Error; @@ -12,26 +16,30 @@ import com.app.toaster.infrastructure.UserRepository; import feign.FeignException; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Component public class DiscordMessageProvider { - private final DiscordClient discordClient; + private final DiscordSingUpClient discordSingUpClient; + private final DiscordErrorClient discordErrorClient; private final UserRepository userRepository; - public void sendSignUpNotification() { - sendMessageToDiscord(createSingUpMessage()); - } - - private void sendMessageToDiscord(DiscordMessage discordMessage) { try { - discordClient.sendMessage(discordMessage); + discordSingUpClient.sendMessage(createSingUpMessage()); } catch (FeignException e) { throw new CustomException(Error.INVALID_DISCORD_MESSAGE, Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); } } + public void sendErrorNotification(Exception e, String request) { + try { + discordErrorClient.sendMessage(createErrorMessage(e,request)); + } catch (FeignException error) { + throw new CustomException(Error.INVALID_DISCORD_MESSAGE, Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); + } + } private DiscordMessage createSingUpMessage() { return DiscordMessage.builder() .content("# 😍 회원가입 이벤트가 발생했습니다.") @@ -51,4 +59,47 @@ private DiscordMessage createSingUpMessage() { ) .build(); } + + + private DiscordMessage createErrorMessage(Exception e, String requestUrl) { + return DiscordMessage.builder() + .content("# 🚨 삐용삐용 에러났어요 에러났어요") + .embeds( + List.of( + DiscordMessage.Embed.builder() + .title("ℹ️ 에러 정보") + .description( + "### 🕖 발생 시간\n" + + LocalDateTime.now() + + "\n" + + "### 🔗 요청 URL\n" + + requestUrl + + "\n" + + "### 📄 Stack Trace\n" + + "```\n" + + getStackTrace(e).substring(0, 1000) + + "\n```") + .build() + ) + ) + .build(); + } + + private String createRequestFullPath(WebRequest webRequest) { + HttpServletRequest request = ((ServletWebRequest) webRequest).getRequest(); + String fullPath = request.getMethod() + " " + request.getRequestURL(); + + String queryString = request.getQueryString(); + if (queryString != null) { + fullPath += "?" + queryString; + } + + return fullPath; + } + + private String getStackTrace(Exception e) { + StringWriter stringWriter = new StringWriter(); + e.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString(); + } } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java new file mode 100644 index 00000000..23a37e82 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java @@ -0,0 +1,12 @@ +package com.app.toaster.external.client.discord; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +@FeignClient(name = "${discord.error-name}", url = "${discord.webhook-url-sign}") +public interface DiscordSingUpClient { + @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) + void sendMessage(@RequestBody DiscordMessage discordMessage); +} \ No newline at end of file From 522c69d63ea28b39869bf7cdb41e77badd755785 Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 13 Oct 2024 01:38:44 +0900 Subject: [PATCH 12/34] =?UTF-8?q?[#242]=20refactor:=20not=20null=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/app/toaster/toast/controller/ToastController.java | 1 + .../app/toaster/toast/controller/request/MoveToastDto.java | 2 +- .../src/main/java/com/app/toaster/toast/domain/Toast.java | 4 ++++ .../java/com/app/toaster/toast/service/ToastService.java | 6 +++--- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java index a1e68938..d875f895 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java @@ -39,6 +39,7 @@ public class ToastController { @PostMapping("/og") @ResponseStatus(HttpStatus.OK) + @Deprecated public ApiResponse getOgAdvanced( @RequestBody OgRequestDto ogRequestDto ) throws IOException { diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java index 6978a6fd..bb9c1ea3 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/MoveToastDto.java @@ -2,5 +2,5 @@ import jakarta.validation.constraints.NotNull; -public record MoveToastDto(Long toastId, @NotNull Long categoryId) { +public record MoveToastDto(@NotNull Long toastId, @NotNull Long categoryId) { } diff --git a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java index 2cf27ab0..d255ba27 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java +++ b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java @@ -72,4 +72,8 @@ public void setUpdateAt(){ this.updateAt=LocalDateTime.now(); } + public boolean isToastOwner(User presentUser){ + return this.user.equals(presentUser); + } + } diff --git a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java index b5f49226..dbeb7c9a 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java @@ -104,7 +104,7 @@ public List getToastTop3_savedRecently(Long userId){ } @Transactional - public void deleteToast(Long userId, Long toastId) throws IOException { + public void deleteToast(Long userId, Long toastId) { User presentUser = userRepository.findByUserId(userId).orElseThrow( ()-> new NotFoundException(Error.NOT_FOUND_USER_EXCEPTION, Error.NOT_FOUND_USER_EXCEPTION.getMessage()) ); @@ -150,8 +150,8 @@ public ModifiedCategory modifyClip(Long userId, MoveToastDto updateToastDto){ } private void isOwnerOfToast(Long userId, Toast toast){ - User presentUser = findUser(userId); - if (!presentUser.equals(toast.getUser())){ + User presentUser = findUser(userId); + if (!toast.isToastOwner(presentUser)){ throw new ForbiddenException(Error.UNAUTHORIZED_ACCESS, Error.UNAUTHORIZED_ACCESS.getMessage()); } } From 18aa6a1cd4491285d41fddc424e188b9f736a467 Mon Sep 17 00:00:00 2001 From: soohyun Date: Sun, 13 Oct 2024 02:50:20 +0900 Subject: [PATCH 13/34] =?UTF-8?q?[#242]=20refactor:=20toastid=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java index d255ba27..eee99993 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java +++ b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java @@ -17,9 +17,10 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Toast { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long Id; + private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") From 41edf260f142919825ee2bb7084b6bd791863137 Mon Sep 17 00:00:00 2001 From: soohyun Date: Mon, 14 Oct 2024 22:11:11 +0900 Subject: [PATCH 14/34] =?UTF-8?q?[#245]=20refactor:=20=ED=86=A0=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=9C=EB=AA=A9=20=EC=88=98=EC=A0=95=20validatio?= =?UTF-8?q?n=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toaster/controller/valid/TitleValid.java | 2 +- .../controller/valid/TitleValidator.java | 22 +++++++++++++------ .../valid/marker/ToastValidationGroup.java | 4 ++++ .../controller/request/UpdateToastDto.java | 3 ++- 4 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java b/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java index 43b9ad25..9abe70aa 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java +++ b/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java @@ -17,5 +17,5 @@ String message() default "Invalid title"; Class[] groups() default {}; Class[] payload() default {}; - String pattern() default "[가-힣|a-z|A-Z|0-9|]"; + String pattern() default "^[\\S][가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9\\s]{0,20}$"; } diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java b/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java index ed537c23..01f6cdc1 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java +++ b/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java @@ -1,18 +1,17 @@ package com.app.toaster.controller.valid; - -import com.app.toaster.exception.Error; -import com.app.toaster.exception.model.CustomException; - +import com.app.toaster.controller.valid.marker.ToastValidationGroup; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; public class TitleValidator implements ConstraintValidator { - public String pattern; + private String pattern; + private Class[] groups; @Override public void initialize(TitleValid constraintAnnotation) { this.pattern = constraintAnnotation.pattern(); + this.groups = constraintAnnotation.groups(); } @Override @@ -39,13 +38,13 @@ public boolean isValid(String title, ConstraintValidatorContext context) { return false; } - if(title.length()>15){ + if(!isGroupActive(ToastValidationGroup.class) && title.length()>15){ //토스트쪽이 아니면 검증을 합니다. context.buildConstraintViolationWithTemplate("이름은 최대 15자까지 입력 가능해요") .addConstraintViolation(); return false; } - if(!title.matches("^[\\S][가-힣ㄱ-ㅎㅏ-ㅣa-zA-Z0-9\\s]{0,20}$")){ + if(!title.matches(pattern)){ context.buildConstraintViolationWithTemplate("특수 문자로는 검색할 수 없어요.") .addConstraintViolation(); return false; @@ -53,4 +52,13 @@ public boolean isValid(String title, ConstraintValidatorContext context) { return true; } + + private boolean isGroupActive(Class targetGroup) { + for (Class group : groups) { + if (group.equals(targetGroup)) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java b/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java new file mode 100644 index 00000000..457405f8 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java @@ -0,0 +1,4 @@ +package com.app.toaster.controller.valid.marker; + +public interface ToastValidationGroup { +} diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java index 42d868dd..18d19f9f 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java @@ -3,9 +3,10 @@ import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.controller.valid.marker.ToastValidationGroup; import jakarta.validation.constraints.NotNull; -public record UpdateToastDto(Long toastId, @TitleValid(payload = Severity.Error.class) @NotNull String title) { +public record UpdateToastDto(Long toastId, @TitleValid(payload = Severity.Error.class, groups = {ToastValidationGroup.class}) @NotNull String title) { public static UpdateToastDto of(Long toastId, String title){ return new UpdateToastDto(toastId,title); } From 83e5387fe20efcf95df8f542b8e21508d0fe374b Mon Sep 17 00:00:00 2001 From: mmihye Date: Tue, 15 Oct 2024 23:01:38 +0900 Subject: [PATCH 15/34] =?UTF-8?q?[#243]=20feat:=20=EB=A1=9C=EC=BB=AC?= =?UTF-8?q?=EC=97=90=EC=84=9C=EB=8A=94=20=EC=97=90=EB=9F=AC=EB=A9=94?= =?UTF-8?q?=EC=8B=9C=EC=A7=80=20=EC=A0=84=EC=86=A1=EB=90=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advice/ControllerExceptionAdvice.java | 3 +- .../discord/DiscordMessageProvider.java | 28 ++++++++++--------- .../client/discord/NotificationType.java | 6 ++++ .../app/toaster/service/auth/AuthService.java | 3 +- 4 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java diff --git a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java index 73508fd0..912433ad 100644 --- a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java +++ b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java @@ -27,6 +27,7 @@ import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; import com.app.toaster.external.client.discord.DiscordMessageProvider; +import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; import io.sentry.Sentry; @@ -139,7 +140,7 @@ protected ApiResponse handleException(final Exception error, final HttpS IOException { // slackApi.sendAlert(error, request); Sentry.captureException(error); - discordMessageProvider.sendErrorNotification(error,request.getRequestURI()); + discordMessageProvider.sendNotification(NotificationType.ERROR,error,request.getRequestURI()); return ApiResponse.error(Error.INTERNAL_SERVER_ERROR); } diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index 9ca8fe56..8cdfd6fe 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -3,10 +3,12 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.time.LocalDateTime; +import java.util.Arrays; import java.util.List; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContextException; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; @@ -23,23 +25,23 @@ @Component public class DiscordMessageProvider { private final DiscordSingUpClient discordSingUpClient; - private final DiscordErrorClient discordErrorClient; private final UserRepository userRepository; - public void sendSignUpNotification() { - try { - discordSingUpClient.sendMessage(createSingUpMessage()); - } catch (FeignException e) { - throw new CustomException(Error.INVALID_DISCORD_MESSAGE, Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); - } - } + private final Environment environment; - public void sendErrorNotification(Exception e, String request) { - try { - discordErrorClient.sendMessage(createErrorMessage(e,request)); - } catch (FeignException error) { - throw new CustomException(Error.INVALID_DISCORD_MESSAGE, Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); + public void sendNotification(NotificationType type, Exception e, String request) { + if (!Arrays.asList(environment.getActiveProfiles()).contains("local")) { + try { + switch (type){ + case ERROR -> discordSingUpClient.sendMessage(createErrorMessage(e,request)); + case SINGUP -> discordSingUpClient.sendMessage(createSingUpMessage()); + } + } catch (FeignException error) { + throw new CustomException(Error.INVALID_DISCORD_MESSAGE, + Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); + } } } + private DiscordMessage createSingUpMessage() { return DiscordMessage.builder() .content("# 😍 회원가입 이벤트가 발생했습니다.") diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java new file mode 100644 index 00000000..d04f3774 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java @@ -0,0 +1,6 @@ +package com.app.toaster.external.client.discord; + +public enum NotificationType { + ERROR, + SINGUP +} diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index a5e6cbb0..e5bcbf43 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -25,6 +25,7 @@ import com.app.toaster.exception.model.UnprocessableEntityException; import com.app.toaster.external.client.discord.DiscordMessage; import com.app.toaster.external.client.discord.DiscordMessageProvider; +import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.infrastructure.TimerRepository; @@ -82,7 +83,7 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque newUser.updateFcmIsAllowed(true); //신규 유저면 true박고 userRepository.save(newUser); // slackApi.sendSuccess(Success.LOGIN_SUCCESS); - discordMessageProvider.sendSignUpNotification(); + discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); } User user = userRepository.findBySocialIdAndSocialType(socialId, socialType) From f947bdfd0eba0f40e69b30ad55c5542817db975b Mon Sep 17 00:00:00 2001 From: mmihye Date: Wed, 16 Oct 2024 23:12:54 +0900 Subject: [PATCH 16/34] =?UTF-8?q?[#243]=20fix:=20=EC=98=A4=ED=83=80?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/client/discord/DiscordMessageProvider.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index 8cdfd6fe..f7986710 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -33,7 +33,7 @@ public void sendNotification(NotificationType type, Exception e, String request) try { switch (type){ case ERROR -> discordSingUpClient.sendMessage(createErrorMessage(e,request)); - case SINGUP -> discordSingUpClient.sendMessage(createSingUpMessage()); + case SINGUP -> discordSingUpClient.sendMessage(createSignUpMessage()); } } catch (FeignException error) { throw new CustomException(Error.INVALID_DISCORD_MESSAGE, @@ -42,7 +42,7 @@ public void sendNotification(NotificationType type, Exception e, String request) } } - private DiscordMessage createSingUpMessage() { + private DiscordMessage createSignUpMessage() { return DiscordMessage.builder() .content("# 😍 회원가입 이벤트가 발생했습니다.") .embeds( From 81f671729cbb323624bfb173ab197444adf3cdb0 Mon Sep 17 00:00:00 2001 From: mmihye Date: Wed, 16 Oct 2024 23:30:30 +0900 Subject: [PATCH 17/34] =?UTF-8?q?[#243]=20fix:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EC=8B=9C=20=EB=94=94=EC=8A=A4=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=95=8C=EB=A6=BC=20=EC=97=90=EB=9F=AC=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/app/toaster/service/auth/AuthService.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index e5bcbf43..6ed4c0b0 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -39,7 +39,9 @@ import com.app.toaster.service.toast.ToastService; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Service @RequiredArgsConstructor public class AuthService { @@ -83,7 +85,12 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque newUser.updateFcmIsAllowed(true); //신규 유저면 true박고 userRepository.save(newUser); // slackApi.sendSuccess(Success.LOGIN_SUCCESS); - discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); + + try { + discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); + } catch (Exception e) { + log.warn("discord SingUpNotification fail : userId = {}", newUser.getUserId()); + } } User user = userRepository.findBySocialIdAndSocialType(socialId, socialType) From a0f568f2fe35a750c70c1c2faa71349c78d1c5ba Mon Sep 17 00:00:00 2001 From: mmihye Date: Tue, 22 Oct 2024 22:07:10 +0900 Subject: [PATCH 18/34] =?UTF-8?q?[#243]=20fix:=20=EC=98=A4=ED=83=80?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/client/discord/DiscordMessageProvider.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index f7986710..02f0483c 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -24,7 +24,7 @@ @RequiredArgsConstructor @Component public class DiscordMessageProvider { - private final DiscordSingUpClient discordSingUpClient; + private final DiscordSingUpClient discordSignUpClient; private final UserRepository userRepository; private final Environment environment; @@ -32,8 +32,8 @@ public void sendNotification(NotificationType type, Exception e, String request) if (!Arrays.asList(environment.getActiveProfiles()).contains("local")) { try { switch (type){ - case ERROR -> discordSingUpClient.sendMessage(createErrorMessage(e,request)); - case SINGUP -> discordSingUpClient.sendMessage(createSignUpMessage()); + case ERROR -> discordSignUpClient.sendMessage(createErrorMessage(e,request)); + case SINGUP -> discordSignUpClient.sendMessage(createSignUpMessage()); } } catch (FeignException error) { throw new CustomException(Error.INVALID_DISCORD_MESSAGE, From ad8cbd580404c1def6bfff5373200991ae704ee9 Mon Sep 17 00:00:00 2001 From: mmihye Date: Tue, 22 Oct 2024 22:18:29 +0900 Subject: [PATCH 19/34] =?UTF-8?q?[#243]=20feat:=20TransactionalEventListen?= =?UTF-8?q?er=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../external/client/discord/DiscordMessageProvider.java | 5 +++++ .../java/com/app/toaster/service/auth/AuthService.java | 7 +------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index 02f0483c..5ca77c26 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -10,6 +10,10 @@ import org.springframework.context.ApplicationContextException; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; @@ -28,6 +32,7 @@ public class DiscordMessageProvider { private final UserRepository userRepository; private final Environment environment; + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void sendNotification(NotificationType type, Exception e, String request) { if (!Arrays.asList(environment.getActiveProfiles()).contains("local")) { try { diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 6ed4c0b0..84b44c4a 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -84,13 +84,8 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque .socialType(socialType).build(); newUser.updateFcmIsAllowed(true); //신규 유저면 true박고 userRepository.save(newUser); - // slackApi.sendSuccess(Success.LOGIN_SUCCESS); - try { - discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); - } catch (Exception e) { - log.warn("discord SingUpNotification fail : userId = {}", newUser.getUserId()); - } + discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); } User user = userRepository.findBySocialIdAndSocialType(socialId, socialType) From d8bb06f889dc10e27b9822801ee3fab82e780938 Mon Sep 17 00:00:00 2001 From: mmihye Date: Thu, 24 Oct 2024 20:30:00 +0900 Subject: [PATCH 20/34] =?UTF-8?q?[#243]=20feat:=20TransactionalEventListen?= =?UTF-8?q?er=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20DiscordClient=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../advice/ControllerExceptionAdvice.java | 4 ++- .../controller/HealthCheckController.java | 5 ++++ ...ordErrorClient.java => DiscordClient.java} | 8 ++++-- .../discord/DiscordMessageProvider.java | 28 +++++++++++-------- .../client/discord/DiscordSingUpClient.java | 12 -------- .../client/discord/NotificationDto.java | 9 ++++++ .../client/discord/NotificationType.java | 2 +- .../app/toaster/service/auth/AuthService.java | 3 +- 8 files changed, 42 insertions(+), 29 deletions(-) rename linkmind/src/main/java/com/app/toaster/external/client/discord/{DiscordErrorClient.java => DiscordClient.java} (64%) delete mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java create mode 100644 linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationDto.java diff --git a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java index 912433ad..34734d78 100644 --- a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java +++ b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java @@ -27,6 +27,7 @@ import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; import com.app.toaster.external.client.discord.DiscordMessageProvider; +import com.app.toaster.external.client.discord.NotificationDto; import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; @@ -140,7 +141,8 @@ protected ApiResponse handleException(final Exception error, final HttpS IOException { // slackApi.sendAlert(error, request); Sentry.captureException(error); - discordMessageProvider.sendNotification(NotificationType.ERROR,error,request.getRequestURI()); + discordMessageProvider.sendNotification( + new NotificationDto(NotificationType.ERROR,error,request.getRequestURI())); return ApiResponse.error(Error.INTERNAL_SERVER_ERROR); } diff --git a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java index 2d04f01b..ddfe7911 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java @@ -9,12 +9,17 @@ import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.NotFoundException; +import com.app.toaster.external.client.discord.DiscordMessageProvider; +import com.app.toaster.external.client.discord.NotificationDto; +import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; @RestController +@RequiredArgsConstructor public class HealthCheckController { + private final DiscordMessageProvider discordMessageProvider; @GetMapping("/health") public String healthCheck() { diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java similarity index 64% rename from linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java rename to linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java index aba5a0f8..b56c3684 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordErrorClient.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordClient.java @@ -1,12 +1,14 @@ package com.app.toaster.external.client.discord; +import java.net.URI; + import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; -@FeignClient(name = "${discord.sign-name}", url = "${discord.webhook-url-error}") -public interface DiscordErrorClient { +@FeignClient(name = "discord-feign-client", url = "URI") +public interface DiscordClient { @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) - void sendMessage(@RequestBody DiscordMessage discordMessage); + void sendMessage(URI uri, @RequestBody DiscordMessage discordMessage); } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index 5ca77c26..2ec99663 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -2,16 +2,14 @@ import java.io.PrintWriter; import java.io.StringWriter; +import java.net.URI; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.ApplicationContextException; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; import org.springframework.web.context.request.ServletWebRequest; @@ -24,25 +22,33 @@ import feign.FeignException; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor @Component +@Slf4j public class DiscordMessageProvider { - private final DiscordSingUpClient discordSignUpClient; + private final DiscordClient discordClient; private final UserRepository userRepository; private final Environment environment; + @Value("${discord.webhook-url-error}") + private String webhookUrlError; + + + @Value("${discord.webhook-url-sign}") + private String webhookUrlSign; + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - public void sendNotification(NotificationType type, Exception e, String request) { + public void sendNotification(NotificationDto notification) { if (!Arrays.asList(environment.getActiveProfiles()).contains("local")) { try { - switch (type){ - case ERROR -> discordSignUpClient.sendMessage(createErrorMessage(e,request)); - case SINGUP -> discordSignUpClient.sendMessage(createSignUpMessage()); + switch (notification.type()){ + case ERROR -> discordClient.sendMessage(URI.create(webhookUrlError), createErrorMessage(notification.e(), notification.request())); + case SIGNUP -> discordClient.sendMessage(URI.create(webhookUrlSign), createSignUpMessage()); } - } catch (FeignException error) { - throw new CustomException(Error.INVALID_DISCORD_MESSAGE, - Error.INVALID_APPLE_IDENTITY_TOKEN.getMessage()); + } catch (Exception error) { + log.warn("discord notification fail : " + error); } } } diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java deleted file mode 100644 index 23a37e82..00000000 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordSingUpClient.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.app.toaster.external.client.discord; - -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; - -@FeignClient(name = "${discord.error-name}", url = "${discord.webhook-url-sign}") -public interface DiscordSingUpClient { - @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) - void sendMessage(@RequestBody DiscordMessage discordMessage); -} \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationDto.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationDto.java new file mode 100644 index 00000000..5a745c74 --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationDto.java @@ -0,0 +1,9 @@ +package com.app.toaster.external.client.discord; + + +public record NotificationDto( + NotificationType type, + Exception e, + String request +) { +} diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java index d04f3774..ac154ab0 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java @@ -2,5 +2,5 @@ public enum NotificationType { ERROR, - SINGUP + SIGNUP } diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 84b44c4a..6a34f89b 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -25,6 +25,7 @@ import com.app.toaster.exception.model.UnprocessableEntityException; import com.app.toaster.external.client.discord.DiscordMessage; import com.app.toaster.external.client.discord.DiscordMessageProvider; +import com.app.toaster.external.client.discord.NotificationDto; import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; import com.app.toaster.infrastructure.CategoryRepository; @@ -85,7 +86,7 @@ public SignInResponseDto signIn(String socialAccessToken, SignInRequestDto reque newUser.updateFcmIsAllowed(true); //신규 유저면 true박고 userRepository.save(newUser); - discordMessageProvider.sendNotification(NotificationType.SINGUP,null,null); + discordMessageProvider.sendNotification(new NotificationDto(NotificationType.SIGNUP,null,null)); } User user = userRepository.findBySocialIdAndSocialType(socialId, socialType) From 898fa9d08710c05751c4af3c5f109edc3a4ee309 Mon Sep 17 00:00:00 2001 From: mmihye Date: Thu, 24 Oct 2024 20:31:37 +0900 Subject: [PATCH 21/34] =?UTF-8?q?[#243]=20fix:=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EC=97=86=EB=8A=94=20import=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/app/toaster/controller/HealthCheckController.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java index ddfe7911..43d22a44 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java @@ -4,11 +4,6 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import com.app.toaster.controller.request.toast.IsReadDto; -import com.app.toaster.controller.response.toast.IsReadResponse; -import com.app.toaster.domain.User; -import com.app.toaster.exception.Error; -import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.external.client.discord.DiscordMessageProvider; import com.app.toaster.external.client.discord.NotificationDto; import com.app.toaster.external.client.discord.NotificationType; From 2e52fba630b65bf046339dd5ebfd5916fbdfd2e1 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 11:20:47 +0900 Subject: [PATCH 22/34] =?UTF-8?q?[#245]=20fix:=20crawler=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80=20exception=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toaster/common/advice/ControllerExceptionAdvice.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java index 34734d78..dfc59494 100644 --- a/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java +++ b/linkmind/src/main/java/com/app/toaster/common/advice/ControllerExceptionAdvice.java @@ -37,6 +37,7 @@ import jakarta.validation.ConstraintViolationException; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; +import org.springframework.web.servlet.resource.NoResourceFoundException; @RestControllerAdvice @Component @@ -99,6 +100,13 @@ protected ResponseEntity MissingServletRequestParameterException(fi .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); } + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(NoResourceFoundException.class) + protected ResponseEntity ServletCrawlerException(final NoResourceFoundException e, WebRequest request) { + return ResponseEntity.status(e.getStatusCode()) + .body(ApiResponse.error(Error.BAD_REQUEST_VALIDATION, Error.BAD_REQUEST_VALIDATION.getMessage())); + } + @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) protected ResponseEntity MissingServletRequestParameterException(final HttpMessageNotReadableException e, WebRequest request) { From 95cf8e9fac91f4e5866a51be1d88b7ffef9844a3 Mon Sep 17 00:00:00 2001 From: soohyun <49307946+sss4920@users.noreply.github.com> Date: Fri, 25 Oct 2024 17:36:26 +0900 Subject: [PATCH 23/34] =?UTF-8?q?[#248]=20docs:=20readme=20=EB=B0=8F=20erd?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 33d38a6f..a2443d26 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # TOASTER-SERVER -![Frame 31](https://github.com/Link-MIND/TOASTER-Server/assets/92644651/c88432e0-5cb3-423f-9986-137fa4dfd5e1) +![image](https://github.com/user-attachments/assets/627ffad2-6206-4c96-bfce-7ae7574b3237) + 더 이상 **링크**를 태우지 마세요. **토스트 먹듯이 간단하게!** @@ -33,7 +34,8 @@ ## 📦 ERD -스크린샷 2024-01-19 오후 10 31 57 +![image](https://github.com/user-attachments/assets/46eed52a-e4bb-4001-9d6d-20246ca4ad1b) +

From 0d27603499b0654ff573217c8f4deebcc7d16924 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:11:30 +0900 Subject: [PATCH 24/34] =?UTF-8?q?[#250]=20refactor:=20link=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/app/toaster/{ => link}/domain/Link.java | 2 +- .../toaster/{ => link}/infrastructure/LinkRepository.java | 7 ++----- .../{service/link => link/service}/LinkService.java | 6 +++--- .../com/app/toaster/toast/controller/ToastController.java | 2 +- .../app/toaster/toast/controller/response/WeekLinkDto.java | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => link}/domain/Link.java (96%) rename linkmind/src/main/java/com/app/toaster/{ => link}/infrastructure/LinkRepository.java (71%) rename linkmind/src/main/java/com/app/toaster/{service/link => link/service}/LinkService.java (87%) diff --git a/linkmind/src/main/java/com/app/toaster/domain/Link.java b/linkmind/src/main/java/com/app/toaster/link/domain/Link.java similarity index 96% rename from linkmind/src/main/java/com/app/toaster/domain/Link.java rename to linkmind/src/main/java/com/app/toaster/link/domain/Link.java index 48188126..e35e61f2 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Link.java +++ b/linkmind/src/main/java/com/app/toaster/link/domain/Link.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.link.domain; import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.databind.annotation.JsonNaming; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/LinkRepository.java b/linkmind/src/main/java/com/app/toaster/link/infrastructure/LinkRepository.java similarity index 71% rename from linkmind/src/main/java/com/app/toaster/infrastructure/LinkRepository.java rename to linkmind/src/main/java/com/app/toaster/link/infrastructure/LinkRepository.java index 6a63beba..b99e7a44 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/LinkRepository.java +++ b/linkmind/src/main/java/com/app/toaster/link/infrastructure/LinkRepository.java @@ -1,13 +1,10 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.link.infrastructure; -import com.app.toaster.domain.Category; -import com.app.toaster.domain.Link; -import com.app.toaster.domain.User; +import com.app.toaster.link.domain.Link; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.List; @Repository diff --git a/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java b/linkmind/src/main/java/com/app/toaster/link/service/LinkService.java similarity index 87% rename from linkmind/src/main/java/com/app/toaster/service/link/LinkService.java rename to linkmind/src/main/java/com/app/toaster/link/service/LinkService.java index 1358e865..adcc03d4 100644 --- a/linkmind/src/main/java/com/app/toaster/service/link/LinkService.java +++ b/linkmind/src/main/java/com/app/toaster/link/service/LinkService.java @@ -1,8 +1,8 @@ -package com.app.toaster.service.link; +package com.app.toaster.link.service; import com.app.toaster.toast.controller.response.WeekLinkDto; -import com.app.toaster.domain.Link; -import com.app.toaster.infrastructure.LinkRepository; +import com.app.toaster.link.domain.Link; +import com.app.toaster.link.infrastructure.LinkRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java index d875f895..9c315ff9 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java @@ -3,7 +3,7 @@ import java.io.IOException; import java.util.List; -import com.app.toaster.service.link.LinkService; +import com.app.toaster.link.service.LinkService; import com.app.toaster.toast.controller.request.*; import com.app.toaster.toast.controller.response.*; import org.springframework.http.HttpStatus; diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java index 1046f1fd..d728e92b 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/response/WeekLinkDto.java @@ -1,6 +1,6 @@ package com.app.toaster.toast.controller.response; -import com.app.toaster.domain.Link; +import com.app.toaster.link.domain.Link; public record WeekLinkDto(Long linkId, String linkTitle, String linkImg, String linkUrl) { public static WeekLinkDto of(Link link){ From 0d98f7b694c3c30c08499dde4b8cf320ad56bb5c Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:17:34 +0900 Subject: [PATCH 25/34] =?UTF-8?q?[#250]=20refactor:=20=ED=83=80=EC=9D=B4?= =?UTF-8?q?=EB=A8=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/app/toaster/domain/Category.java | 4 +--- .../app/toaster/service/auth/AuthService.java | 7 +------ .../service/category/CategoryService.java | 4 ++-- .../toaster/service/timer/TimerService.java | 18 +++++++++--------- .../controller/TimerController.java | 17 +++++------------ .../request}/CreateTimerRequestDto.java | 2 +- .../request}/UpdateTimerCommentDto.java | 2 +- .../request}/UpdateTimerDateTimeDto.java | 2 +- .../response}/CompletedTimerDto.java | 8 ++------ .../response}/GetTimerPageResponseDto.java | 2 +- .../response}/GetTimerResponseDto.java | 8 ++------ .../controller/response}/WaitingTimerDto.java | 6 ++---- .../toaster/{ => timer}/domain/Reminder.java | 5 ++++- .../infrastructure/TimerRepository.java | 8 +++----- 14 files changed, 35 insertions(+), 58 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => timer}/controller/TimerController.java (83%) rename linkmind/src/main/java/com/app/toaster/{controller/request/timer => timer/controller/request}/CreateTimerRequestDto.java (80%) rename linkmind/src/main/java/com/app/toaster/{controller/request/timer => timer/controller/request}/UpdateTimerCommentDto.java (54%) rename linkmind/src/main/java/com/app/toaster/{controller/request/timer => timer/controller/request}/UpdateTimerDateTimeDto.java (70%) rename linkmind/src/main/java/com/app/toaster/{controller/response/timer => timer/controller/response}/CompletedTimerDto.java (66%) rename linkmind/src/main/java/com/app/toaster/{controller/response/timer => timer/controller/response}/GetTimerPageResponseDto.java (78%) rename linkmind/src/main/java/com/app/toaster/{controller/response/timer => timer/controller/response}/GetTimerResponseDto.java (65%) rename linkmind/src/main/java/com/app/toaster/{controller/response/timer => timer/controller/response}/WaitingTimerDto.java (81%) rename linkmind/src/main/java/com/app/toaster/{ => timer}/domain/Reminder.java (90%) rename linkmind/src/main/java/com/app/toaster/{ => timer}/infrastructure/TimerRepository.java (79%) diff --git a/linkmind/src/main/java/com/app/toaster/domain/Category.java b/linkmind/src/main/java/com/app/toaster/domain/Category.java index 82003080..a7bc4549 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Category.java +++ b/linkmind/src/main/java/com/app/toaster/domain/Category.java @@ -1,12 +1,10 @@ package com.app.toaster.domain; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; +import com.app.toaster.timer.domain.Reminder; import jakarta.persistence.*; -import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java index 93becbc8..0cb0fdae 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java @@ -1,13 +1,10 @@ package com.app.toaster.service.auth; import java.io.IOException; -import java.time.LocalDateTime; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.context.request.WebRequest; import com.app.toaster.config.jwt.JwtService; @@ -18,17 +15,15 @@ import com.app.toaster.domain.SocialType; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; -import com.app.toaster.exception.Success; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.exception.model.UnprocessableEntityException; -import com.app.toaster.external.client.discord.DiscordMessage; import com.app.toaster.external.client.discord.DiscordMessageProvider; import com.app.toaster.external.client.discord.NotificationDto; import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; import com.app.toaster.infrastructure.CategoryRepository; -import com.app.toaster.infrastructure.TimerRepository; +import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; import com.app.toaster.popup.infrastructure.PopupManagerRepository; diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java index 7e477997..1d56926b 100644 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java +++ b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java @@ -8,7 +8,7 @@ import com.app.toaster.controller.response.category.CategoryResponse; import com.app.toaster.controller.response.category.GetCategoryResponseDto; import com.app.toaster.domain.Category; -import com.app.toaster.domain.Reminder; +import com.app.toaster.timer.domain.Reminder; import com.app.toaster.toast.domain.Toast; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; @@ -16,7 +16,7 @@ import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.infrastructure.CategoryRepository; -import com.app.toaster.infrastructure.TimerRepository; +import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; diff --git a/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java b/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java index 0d063d6b..f3484193 100644 --- a/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java +++ b/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java @@ -1,14 +1,14 @@ package com.app.toaster.service.timer; -import com.app.toaster.controller.request.timer.CreateTimerRequestDto; -import com.app.toaster.controller.request.timer.UpdateTimerCommentDto; -import com.app.toaster.controller.request.timer.UpdateTimerDateTimeDto; -import com.app.toaster.controller.response.timer.CompletedTimerDto; -import com.app.toaster.controller.response.timer.GetTimerPageResponseDto; -import com.app.toaster.controller.response.timer.GetTimerResponseDto; -import com.app.toaster.controller.response.timer.WaitingTimerDto; +import com.app.toaster.timer.controller.request.CreateTimerRequestDto; +import com.app.toaster.timer.controller.request.UpdateTimerCommentDto; +import com.app.toaster.timer.controller.request.UpdateTimerDateTimeDto; +import com.app.toaster.timer.controller.response.CompletedTimerDto; +import com.app.toaster.timer.controller.response.GetTimerPageResponseDto; +import com.app.toaster.timer.controller.response.GetTimerResponseDto; +import com.app.toaster.timer.controller.response.WaitingTimerDto; import com.app.toaster.domain.Category; -import com.app.toaster.domain.Reminder; +import com.app.toaster.timer.domain.Reminder; import com.app.toaster.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; @@ -16,7 +16,7 @@ import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.exception.model.UnauthorizedException; import com.app.toaster.infrastructure.CategoryRepository; -import com.app.toaster.infrastructure.TimerRepository; +import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/linkmind/src/main/java/com/app/toaster/controller/TimerController.java b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java similarity index 83% rename from linkmind/src/main/java/com/app/toaster/controller/TimerController.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java index f8e6612d..4ff76cd4 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/TimerController.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java @@ -1,24 +1,17 @@ -package com.app.toaster.controller; +package com.app.toaster.timer.controller; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.UserId; -import com.app.toaster.controller.request.timer.CreateTimerRequestDto; -import com.app.toaster.controller.request.timer.UpdateTimerCommentDto; -import com.app.toaster.controller.request.timer.UpdateTimerDateTimeDto; -import com.app.toaster.controller.response.timer.GetTimerResponseDto; -import com.app.toaster.exception.Error; +import com.app.toaster.timer.controller.request.CreateTimerRequestDto; +import com.app.toaster.timer.controller.request.UpdateTimerCommentDto; +import com.app.toaster.timer.controller.request.UpdateTimerDateTimeDto; +import com.app.toaster.timer.controller.response.GetTimerResponseDto; import com.app.toaster.exception.Success; -import com.app.toaster.exception.model.CustomException; import com.app.toaster.service.timer.TimerService; -import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; -import java.io.IOException; - @RestController @RequiredArgsConstructor @RequestMapping("/timer") diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/timer/CreateTimerRequestDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/request/CreateTimerRequestDto.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/request/timer/CreateTimerRequestDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/request/CreateTimerRequestDto.java index 43ead24f..7180246d 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/timer/CreateTimerRequestDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/request/CreateTimerRequestDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.timer; +package com.app.toaster.timer.controller.request; import lombok.Getter; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerCommentDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerCommentDto.java similarity index 54% rename from linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerCommentDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerCommentDto.java index effa0185..b4ea5884 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerCommentDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerCommentDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.timer; +package com.app.toaster.timer.controller.request; public record UpdateTimerCommentDto(String newComment) { } diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerDateTimeDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerDateTimeDto.java similarity index 70% rename from linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerDateTimeDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerDateTimeDto.java index b09485ac..46c6369a 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/timer/UpdateTimerDateTimeDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/request/UpdateTimerDateTimeDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.timer; +package com.app.toaster.timer.controller.request; import java.util.ArrayList; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/timer/CompletedTimerDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/response/CompletedTimerDto.java similarity index 66% rename from linkmind/src/main/java/com/app/toaster/controller/response/timer/CompletedTimerDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/response/CompletedTimerDto.java index 4d21a373..74228b43 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/timer/CompletedTimerDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/response/CompletedTimerDto.java @@ -1,10 +1,6 @@ -package com.app.toaster.controller.response.timer; +package com.app.toaster.timer.controller.response; -import com.app.toaster.controller.response.search.CategoryResult; -import com.app.toaster.controller.response.search.SearchCategoryResult; -import com.app.toaster.domain.Reminder; - -import java.util.List; +import com.app.toaster.timer.domain.Reminder; public record CompletedTimerDto(Long timerId, Long categoryId, String remindTime, String remindDate, String comment) { public static CompletedTimerDto of(Reminder timer,String remindTime, String remindDate){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerPageResponseDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerPageResponseDto.java similarity index 78% rename from linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerPageResponseDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerPageResponseDto.java index cd47332e..72120552 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerPageResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerPageResponseDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.timer; +package com.app.toaster.timer.controller.response; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerResponseDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerResponseDto.java similarity index 65% rename from linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerResponseDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerResponseDto.java index 9311b07b..ae436344 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/timer/GetTimerResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/response/GetTimerResponseDto.java @@ -1,12 +1,8 @@ -package com.app.toaster.controller.response.timer; +package com.app.toaster.timer.controller.response; -import com.app.toaster.controller.response.search.CategoryResult; -import com.app.toaster.controller.response.search.SearchMainResult; -import com.app.toaster.controller.response.search.ToastResult; -import com.app.toaster.domain.Reminder; +import com.app.toaster.timer.domain.Reminder; import java.util.ArrayList; -import java.util.List; public record GetTimerResponseDto (String categoryName, String remindTime, diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/timer/WaitingTimerDto.java b/linkmind/src/main/java/com/app/toaster/timer/controller/response/WaitingTimerDto.java similarity index 81% rename from linkmind/src/main/java/com/app/toaster/controller/response/timer/WaitingTimerDto.java rename to linkmind/src/main/java/com/app/toaster/timer/controller/response/WaitingTimerDto.java index 91860816..8e779bea 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/timer/WaitingTimerDto.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/response/WaitingTimerDto.java @@ -1,10 +1,8 @@ -package com.app.toaster.controller.response.timer; +package com.app.toaster.timer.controller.response; -import com.app.toaster.domain.Reminder; +import com.app.toaster.timer.domain.Reminder; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; public record WaitingTimerDto(Long timerId, String remindTime, String remindDates, Boolean isAlarm, LocalDateTime updateAt, String comment, Long categoryId) { public static WaitingTimerDto of(Reminder timer, String remindTime, String remindDates) { diff --git a/linkmind/src/main/java/com/app/toaster/domain/Reminder.java b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java similarity index 90% rename from linkmind/src/main/java/com/app/toaster/domain/Reminder.java rename to linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java index 4f513176..ee31c76a 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Reminder.java +++ b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java @@ -1,5 +1,8 @@ -package com.app.toaster.domain; +package com.app.toaster.timer.domain; +import com.app.toaster.domain.Category; +import com.app.toaster.domain.IntegerListConverter; +import com.app.toaster.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/TimerRepository.java b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java similarity index 79% rename from linkmind/src/main/java/com/app/toaster/infrastructure/TimerRepository.java rename to linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java index 53183b93..29f01329 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/TimerRepository.java +++ b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java @@ -1,17 +1,15 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.timer.infrastructure; import com.app.toaster.domain.Category; -import com.app.toaster.domain.Reminder; +import com.app.toaster.timer.domain.Reminder; import com.app.toaster.domain.User; -import org.checkerframework.checker.units.qual.C; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository; import java.util.ArrayList; -import java.util.List; + @Repository public interface TimerRepository extends JpaRepository { From 86a90bdbf4dbd0a592fab20332dd3541e55e7333 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:23:10 +0900 Subject: [PATCH 26/34] =?UTF-8?q?[#250]=20refactor:=20=EC=B6=94=EC=B2=9C?= =?UTF-8?q?=EC=82=AC=EC=9D=B4=ED=8A=B8=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=20=EB=B0=8F=20timer=20service=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RecommendSiteController.java | 7 +++---- .../toaster/{ => recommendsite}/domain/RecommendSite.java | 4 +--- .../com/app/toaster/{ => recommendsite}/domain/Topic.java | 2 +- .../infrastructure/RecommedSiteRepository.java | 7 ++----- .../service}/RecommendSiteService.java | 8 +++----- .../com/app/toaster/timer/controller/TimerController.java | 2 +- .../{service/timer => timer/service}/TimerService.java | 2 +- 7 files changed, 12 insertions(+), 20 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => recommendsite}/controller/RecommendSiteController.java (78%) rename linkmind/src/main/java/com/app/toaster/{ => recommendsite}/domain/RecommendSite.java (92%) rename linkmind/src/main/java/com/app/toaster/{ => recommendsite}/domain/Topic.java (83%) rename linkmind/src/main/java/com/app/toaster/{ => recommendsite}/infrastructure/RecommedSiteRepository.java (52%) rename linkmind/src/main/java/com/app/toaster/{service/recommendSite => recommendsite/service}/RecommendSiteService.java (60%) rename linkmind/src/main/java/com/app/toaster/{service/timer => timer/service}/TimerService.java (99%) diff --git a/linkmind/src/main/java/com/app/toaster/controller/RecommendSiteController.java b/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java similarity index 78% rename from linkmind/src/main/java/com/app/toaster/controller/RecommendSiteController.java rename to linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java index 0c742977..dad637e0 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/RecommendSiteController.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java @@ -1,13 +1,12 @@ -package com.app.toaster.controller; +package com.app.toaster.recommendsite.controller; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.UserId; -import com.app.toaster.domain.RecommendSite; +import com.app.toaster.recommendsite.domain.RecommendSite; import com.app.toaster.exception.Success; -import com.app.toaster.service.recommendSite.RecommendSiteService; +import com.app.toaster.recommendsite.service.RecommendSiteService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/domain/RecommendSite.java b/linkmind/src/main/java/com/app/toaster/recommendsite/domain/RecommendSite.java similarity index 92% rename from linkmind/src/main/java/com/app/toaster/domain/RecommendSite.java rename to linkmind/src/main/java/com/app/toaster/recommendsite/domain/RecommendSite.java index 84af147d..ed392a9e 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/RecommendSite.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/domain/RecommendSite.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.recommendsite.domain; import jakarta.persistence.*; import lombok.AccessLevel; @@ -6,8 +6,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; - @Getter @Entity diff --git a/linkmind/src/main/java/com/app/toaster/domain/Topic.java b/linkmind/src/main/java/com/app/toaster/recommendsite/domain/Topic.java similarity index 83% rename from linkmind/src/main/java/com/app/toaster/domain/Topic.java rename to linkmind/src/main/java/com/app/toaster/recommendsite/domain/Topic.java index 09e36124..d20673dd 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Topic.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/domain/Topic.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.recommendsite.domain; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/RecommedSiteRepository.java b/linkmind/src/main/java/com/app/toaster/recommendsite/infrastructure/RecommedSiteRepository.java similarity index 52% rename from linkmind/src/main/java/com/app/toaster/infrastructure/RecommedSiteRepository.java rename to linkmind/src/main/java/com/app/toaster/recommendsite/infrastructure/RecommedSiteRepository.java index 425ce2e3..fb2fbcee 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/RecommedSiteRepository.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/infrastructure/RecommedSiteRepository.java @@ -1,12 +1,9 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.recommendsite.infrastructure; -import com.app.toaster.domain.RecommendSite; +import com.app.toaster.recommendsite.domain.RecommendSite; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.ArrayList; -import java.util.List; - public interface RecommedSiteRepository extends JpaRepository { } diff --git a/linkmind/src/main/java/com/app/toaster/service/recommendSite/RecommendSiteService.java b/linkmind/src/main/java/com/app/toaster/recommendsite/service/RecommendSiteService.java similarity index 60% rename from linkmind/src/main/java/com/app/toaster/service/recommendSite/RecommendSiteService.java rename to linkmind/src/main/java/com/app/toaster/recommendsite/service/RecommendSiteService.java index 8da86813..0fc66795 100644 --- a/linkmind/src/main/java/com/app/toaster/service/recommendSite/RecommendSiteService.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/service/RecommendSiteService.java @@ -1,12 +1,10 @@ -package com.app.toaster.service.recommendSite; +package com.app.toaster.recommendsite.service; -import com.app.toaster.domain.RecommendSite; -import com.app.toaster.infrastructure.RecommedSiteRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.recommendsite.domain.RecommendSite; +import com.app.toaster.recommendsite.infrastructure.RecommedSiteRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java index 4ff76cd4..31c1d353 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java @@ -7,7 +7,7 @@ import com.app.toaster.timer.controller.request.UpdateTimerDateTimeDto; import com.app.toaster.timer.controller.response.GetTimerResponseDto; import com.app.toaster.exception.Success; -import com.app.toaster.service.timer.TimerService; +import com.app.toaster.timer.service.TimerService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; diff --git a/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java similarity index 99% rename from linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java rename to linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java index f3484193..564ecc74 100644 --- a/linkmind/src/main/java/com/app/toaster/service/timer/TimerService.java +++ b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.timer; +package com.app.toaster.timer.service; import com.app.toaster.timer.controller.request.CreateTimerRequestDto; import com.app.toaster.timer.controller.request.UpdateTimerCommentDto; From 29a7d3aa22a545c6d2ff25c86fd71acf4caacce8 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:25:17 +0900 Subject: [PATCH 27/34] =?UTF-8?q?[#250]=20refactor:=20parsing=20service=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{service/parse => parse/service}/ParsingService.java | 2 +- .../java/com/app/toaster/toast/controller/ToastController.java | 2 +- .../main/java/com/app/toaster/toast/service/ToastService.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename linkmind/src/main/java/com/app/toaster/{service/parse => parse/service}/ParsingService.java (98%) diff --git a/linkmind/src/main/java/com/app/toaster/service/parse/ParsingService.java b/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java similarity index 98% rename from linkmind/src/main/java/com/app/toaster/service/parse/ParsingService.java rename to linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java index 2df81e58..41d3c158 100644 --- a/linkmind/src/main/java/com/app/toaster/service/parse/ParsingService.java +++ b/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.parse; +package com.app.toaster.parse.service; import java.io.IOException; import java.net.ConnectException; diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java index 9c315ff9..d00465e9 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java @@ -22,7 +22,7 @@ // import com.app.toaster.config.UserId; import com.app.toaster.config.UserId; import com.app.toaster.exception.Success; -import com.app.toaster.service.parse.ParsingService; +import com.app.toaster.parse.service.ParsingService; import com.app.toaster.toast.service.ToastService; import jakarta.validation.Valid; diff --git a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java index dbeb7c9a..876476e1 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java @@ -28,7 +28,7 @@ import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.infrastructure.UserRepository; -import com.app.toaster.service.parse.ParsingService; +import com.app.toaster.parse.service.ParsingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; From a2ffb045e467a9d6ccdc72f1f5b6f9a3406157e0 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:36:23 +0900 Subject: [PATCH 28/34] =?UTF-8?q?[#250]=20refactor:=20auth,=20user=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => auth}/controller/AuthController.java | 12 +++++----- .../controller/request}/SignInRequestDto.java | 2 +- .../response}/SignInResponseDto.java | 2 +- .../controller/response}/TokenHealthDto.java | 2 +- .../response}/TokenResponseDto.java | 2 +- .../auth => auth/service}/AuthService.java | 22 +++++++++---------- .../service}/apple/AppleSignInService.java | 11 +++++----- .../apple/response/ApplePublicKey.java | 2 +- .../apple/response/ApplePublicKeys.java | 4 +--- .../service}/apple/verify/AppleJwtParser.java | 2 +- .../service}/apple/verify/EncryptUtils.java | 2 +- .../apple/verify/PublicKeyGenerator.java | 8 +++---- .../service}/kakao/KakaoAccount.java | 2 +- .../service}/kakao/KakaoSignInService.java | 3 +-- .../service}/kakao/KakaoUserProfile.java | 2 +- .../service}/kakao/KakaoUserResponse.java | 2 +- .../service}/kakao/LoginResult.java | 2 +- .../auth => auth/service}/kakao/Strategy.java | 2 +- .../controller/HealthCheckController.java | 4 ---- .../java/com/app/toaster/domain/Category.java | 1 + .../discord/DiscordMessageProvider.java | 5 +---- .../external/client/slack/SlackApi.java | 2 +- .../infrastructure/CategoryRepository.java | 5 +---- .../querydsl/CustomToastRepository.java | 2 +- .../controller/response}/OgResponse.java | 2 +- .../toaster/parse/service/ParsingService.java | 7 +----- .../service/category/CategoryService.java | 4 ++-- .../toaster/service/search/SearchService.java | 4 ++-- .../app/toaster/timer/domain/Reminder.java | 7 +----- .../timer/infrastructure/TimerRepository.java | 2 +- .../toaster/timer/service/TimerService.java | 4 ++-- .../com/app/toaster/toast/domain/Toast.java | 5 +---- .../toast/infrastructure/ToastRepository.java | 2 +- .../toaster/toast/service/ToastService.java | 6 ++--- .../{ => user}/controller/UserController.java | 7 +++--- .../request}/UpdateAllowedPush.java | 2 +- .../controller/response}/MyPageResponse.java | 2 +- .../controller/response}/SettingResponse.java | 2 +- .../toaster/{ => user}/domain/SocialType.java | 2 +- .../app/toaster/{ => user}/domain/User.java | 2 +- .../infrastructure/UserRepository.java | 6 ++--- .../{ => user}/service/UserService.java | 10 ++++----- .../querydsl/CustomToastRepositoryTest.java | 2 +- 43 files changed, 76 insertions(+), 105 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => auth}/controller/AuthController.java (85%) rename linkmind/src/main/java/com/app/toaster/{controller/request/auth => auth/controller/request}/SignInRequestDto.java (59%) rename linkmind/src/main/java/com/app/toaster/{controller/response/auth => auth/controller/response}/SignInResponseDto.java (89%) rename linkmind/src/main/java/com/app/toaster/{controller/response/auth => auth/controller/response}/TokenHealthDto.java (75%) rename linkmind/src/main/java/com/app/toaster/{controller/response/auth => auth/controller/response}/TokenResponseDto.java (81%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/AuthService.java (91%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/AppleSignInService.java (78%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/response/ApplePublicKey.java (67%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/response/ApplePublicKeys.java (84%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/verify/AppleJwtParser.java (97%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/verify/EncryptUtils.java (93%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/apple/verify/PublicKeyGenerator.java (88%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/KakaoAccount.java (56%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/KakaoSignInService.java (96%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/KakaoUserProfile.java (63%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/KakaoUserResponse.java (80%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/LoginResult.java (81%) rename linkmind/src/main/java/com/app/toaster/{service/auth => auth/service}/kakao/Strategy.java (51%) rename linkmind/src/main/java/com/app/toaster/{controller/response/parse => parse/controller/response}/OgResponse.java (80%) rename linkmind/src/main/java/com/app/toaster/{ => user}/controller/UserController.java (90%) rename linkmind/src/main/java/com/app/toaster/{controller/request/user => user/controller/request}/UpdateAllowedPush.java (54%) rename linkmind/src/main/java/com/app/toaster/{controller/response/user => user/controller/response}/MyPageResponse.java (87%) rename linkmind/src/main/java/com/app/toaster/{controller/response/user => user/controller/response}/SettingResponse.java (80%) rename linkmind/src/main/java/com/app/toaster/{ => user}/domain/SocialType.java (77%) rename linkmind/src/main/java/com/app/toaster/{ => user}/domain/User.java (97%) rename linkmind/src/main/java/com/app/toaster/{ => user}/infrastructure/UserRepository.java (79%) rename linkmind/src/main/java/com/app/toaster/{ => user}/service/UserService.java (94%) diff --git a/linkmind/src/main/java/com/app/toaster/controller/AuthController.java b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java similarity index 85% rename from linkmind/src/main/java/com/app/toaster/controller/AuthController.java rename to linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java index 0bd3f6a7..0de5381a 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/AuthController.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller; +package com.app.toaster.auth.controller; import java.io.IOException; @@ -14,12 +14,12 @@ import com.app.toaster.common.dto.ApiResponse; // import com.app.toaster.config.UserId; import com.app.toaster.config.UserId; -import com.app.toaster.controller.request.auth.SignInRequestDto; -import com.app.toaster.controller.response.auth.SignInResponseDto; -import com.app.toaster.controller.response.auth.TokenHealthDto; -import com.app.toaster.controller.response.auth.TokenResponseDto; +import com.app.toaster.auth.controller.request.SignInRequestDto; +import com.app.toaster.auth.controller.response.SignInResponseDto; +import com.app.toaster.auth.controller.response.TokenHealthDto; +import com.app.toaster.auth.controller.response.TokenResponseDto; import com.app.toaster.exception.Success; -import com.app.toaster.service.auth.AuthService; +import com.app.toaster.auth.service.AuthService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java similarity index 59% rename from linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java rename to linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java index a8876bfe..72742468 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/auth/SignInRequestDto.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/request/SignInRequestDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.auth; +package com.app.toaster.auth.controller.request; public record SignInRequestDto(String socialType, String fcmToken) { } diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java similarity index 89% rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java index eee40bf6..a7269605 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/SignInResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/SignInResponseDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.auth; +package com.app.toaster.auth.controller.response; public record SignInResponseDto(Long userId, String accessToken, String refreshToken, String fcmToken, Boolean isRegistered,Boolean fcmIsAllowed, String profile) { public static SignInResponseDto of(Long userId, String accessToken, String refreshToken, String fcmToken, diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java similarity index 75% rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java index 7d65e852..42455b87 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenHealthDto.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenHealthDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.auth; +package com.app.toaster.auth.controller.response; public record TokenHealthDto(boolean tokenHealth) { public static TokenHealthDto of(boolean tokenHealth){return new TokenHealthDto(tokenHealth);} diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java similarity index 81% rename from linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java rename to linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java index 37f2e926..a162c1ec 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/auth/TokenResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/response/TokenResponseDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.auth; +package com.app.toaster.auth.controller.response; public record TokenResponseDto(String accessToken, String refreshToken) { public static TokenResponseDto of(String accessToken, String refreshToken){ diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java similarity index 91% rename from linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java rename to linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java index 0cb0fdae..721fb484 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth; +package com.app.toaster.auth.service; import java.io.IOException; @@ -8,12 +8,12 @@ import com.app.toaster.config.jwt.JwtService; -import com.app.toaster.controller.request.auth.SignInRequestDto; -import com.app.toaster.controller.response.auth.SignInResponseDto; -import com.app.toaster.controller.response.auth.TokenHealthDto; -import com.app.toaster.controller.response.auth.TokenResponseDto; -import com.app.toaster.domain.SocialType; -import com.app.toaster.domain.User; +import com.app.toaster.auth.controller.request.SignInRequestDto; +import com.app.toaster.auth.controller.response.SignInResponseDto; +import com.app.toaster.auth.controller.response.TokenHealthDto; +import com.app.toaster.auth.controller.response.TokenResponseDto; +import com.app.toaster.user.domain.SocialType; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; @@ -25,11 +25,11 @@ import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import com.app.toaster.popup.infrastructure.PopupManagerRepository; -import com.app.toaster.service.auth.apple.AppleSignInService; -import com.app.toaster.service.auth.kakao.KakaoSignInService; -import com.app.toaster.service.auth.kakao.LoginResult; +import com.app.toaster.auth.service.apple.AppleSignInService; +import com.app.toaster.auth.service.kakao.KakaoSignInService; +import com.app.toaster.auth.service.kakao.LoginResult; import com.app.toaster.toast.service.ToastService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java similarity index 78% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java index 7c7b8330..07630819 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/AppleSignInService.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/AppleSignInService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.apple; +package com.app.toaster.auth.service.apple; import java.security.PublicKey; import java.util.Map; @@ -7,11 +7,10 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestClient; -import com.app.toaster.service.auth.apple.response.ApplePublicKeys; -import com.app.toaster.service.auth.apple.verify.AppleJwtParser; -import com.app.toaster.service.auth.apple.verify.PublicKeyGenerator; -import com.app.toaster.service.auth.kakao.LoginResult; -import com.mysql.cj.log.Log; +import com.app.toaster.auth.service.apple.response.ApplePublicKeys; +import com.app.toaster.auth.service.apple.verify.AppleJwtParser; +import com.app.toaster.auth.service.apple.verify.PublicKeyGenerator; +import com.app.toaster.auth.service.kakao.LoginResult; import io.jsonwebtoken.Claims; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java similarity index 67% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java index 808848bc..eb321486 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKey.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKey.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.apple.response; +package com.app.toaster.auth.service.apple.response; public record ApplePublicKey( String kty, diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java similarity index 84% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java index 09be00ee..f7f56a30 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/response/ApplePublicKeys.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/response/ApplePublicKeys.java @@ -1,12 +1,10 @@ -package com.app.toaster.service.auth.apple.response; +package com.app.toaster.auth.service.apple.response; import java.util.List; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; -import lombok.extern.slf4j.Slf4j; - public record ApplePublicKeys(List keys) { public ApplePublicKey getMatchesKey(String alg, String kid) { diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java similarity index 97% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java index 1786b1d9..59febec3 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/AppleJwtParser.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/AppleJwtParser.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.apple.verify; +package com.app.toaster.auth.service.apple.verify; import java.security.PublicKey; import java.util.Base64; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java similarity index 93% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java index 0635998e..d1939c09 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/EncryptUtils.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/EncryptUtils.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.apple.verify; +package com.app.toaster.auth.service.apple.verify; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java similarity index 88% rename from linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java rename to linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java index 11080824..6b272d5f 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/apple/verify/PublicKeyGenerator.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/apple/verify/PublicKeyGenerator.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.apple.verify; +package com.app.toaster.auth.service.apple.verify; import java.math.BigInteger; import java.security.KeyFactory; @@ -13,10 +13,8 @@ import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; -import com.app.toaster.service.auth.apple.response.ApplePublicKey; -import com.app.toaster.service.auth.apple.response.ApplePublicKeys; - -import lombok.extern.slf4j.Slf4j; +import com.app.toaster.auth.service.apple.response.ApplePublicKey; +import com.app.toaster.auth.service.apple.response.ApplePublicKeys; @Component public class PublicKeyGenerator { diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java similarity index 56% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java index 131902fd..d6582e1e 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoAccount.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoAccount.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; public record KakaoAccount(KakaoUserProfile profile) { } diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java similarity index 96% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java index 814a4ba3..c0e1bbc5 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoSignInService.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoSignInService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; import java.util.HashMap; import java.util.Map; @@ -13,7 +13,6 @@ import org.springframework.web.client.RestTemplate; import com.app.toaster.exception.Error; -import com.app.toaster.exception.model.ForbiddenException; import com.app.toaster.exception.model.UnprocessableEntityException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.JsonArray; diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java similarity index 63% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java index 9044293c..5667e160 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserProfile.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserProfile.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; public record KakaoUserProfile(String nickname, String profileImageUrl) { } diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java index 253ce5b9..c87a5883 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/KakaoUserResponse.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/KakaoUserResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; public record KakaoUserResponse(KakaoAccount kakaoAccount) { public static KakaoUserResponse of(KakaoAccount kakaoAccount){ diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java similarity index 81% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java index 556e48c8..0cf22581 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/LoginResult.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/LoginResult.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; public record LoginResult(String id, String profile, String nickname) { public static LoginResult of(String id, String profile,String nickname){ diff --git a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java similarity index 51% rename from linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java rename to linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java index bfcdf390..1ebd0793 100644 --- a/linkmind/src/main/java/com/app/toaster/service/auth/kakao/Strategy.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/kakao/Strategy.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.auth.kakao; +package com.app.toaster.auth.service.kakao; public enum Strategy { WITHDRAWAL, diff --git a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java index 43d22a44..0d8a72c7 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java +++ b/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java @@ -1,13 +1,9 @@ package com.app.toaster.controller; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.app.toaster.external.client.discord.DiscordMessageProvider; -import com.app.toaster.external.client.discord.NotificationDto; -import com.app.toaster.external.client.discord.NotificationType; -import com.app.toaster.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/domain/Category.java b/linkmind/src/main/java/com/app/toaster/domain/Category.java index a7bc4549..dc17d703 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Category.java +++ b/linkmind/src/main/java/com/app/toaster/domain/Category.java @@ -4,6 +4,7 @@ import com.app.toaster.timer.domain.Reminder; +import com.app.toaster.user.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java index 2ec99663..90f23200 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java @@ -15,11 +15,8 @@ import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.context.request.WebRequest; -import com.app.toaster.exception.Error; -import com.app.toaster.exception.model.CustomException; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; -import feign.FeignException; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/linkmind/src/main/java/com/app/toaster/external/client/slack/SlackApi.java b/linkmind/src/main/java/com/app/toaster/external/client/slack/SlackApi.java index 6c352db8..eff05bbd 100644 --- a/linkmind/src/main/java/com/app/toaster/external/client/slack/SlackApi.java +++ b/linkmind/src/main/java/com/app/toaster/external/client/slack/SlackApi.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; import com.app.toaster.exception.Success; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import com.slack.api.Slack; import com.slack.api.model.block.Blocks; import com.slack.api.model.block.LayoutBlock; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java b/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java index 0b29c63b..3190da6b 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java +++ b/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java @@ -3,18 +3,15 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; -import com.app.toaster.controller.request.category.ChangeCateoryTitleDto; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import com.app.toaster.domain.Category; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -import org.springframework.transaction.annotation.Transactional; public interface CategoryRepository extends JpaRepository { diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java index 25044802..062dc101 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java +++ b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java @@ -15,7 +15,7 @@ // import com.app.toaster.domain.QToast; // import com.app.toaster.domain.QUser; // import com.app.toaster.toast.domain.Toast; -// import com.app.toaster.domain.User; +// import com.app.toaster.user.domain.User; // import com.querydsl.core.types.Path; // import com.querydsl.core.types.dsl.BooleanExpression; // import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/parse/OgResponse.java b/linkmind/src/main/java/com/app/toaster/parse/controller/response/OgResponse.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/response/parse/OgResponse.java rename to linkmind/src/main/java/com/app/toaster/parse/controller/response/OgResponse.java index c7960a9e..5f705545 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/parse/OgResponse.java +++ b/linkmind/src/main/java/com/app/toaster/parse/controller/response/OgResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.parse; +package com.app.toaster.parse.controller.response; public record OgResponse(String titleAdvanced, String imageAdvanced) { public static OgResponse of(String titleAdvanced, String imageAdvanced){ diff --git a/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java b/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java index 41d3c158..758674ff 100644 --- a/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java +++ b/linkmind/src/main/java/com/app/toaster/parse/service/ParsingService.java @@ -3,9 +3,6 @@ import java.io.IOException; import java.net.ConnectException; import java.net.MalformedURLException; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.List; import javax.net.ssl.SSLHandshakeException; @@ -18,13 +15,11 @@ // import com.app.toaster.external.client.aws.S3Service; -import com.app.toaster.controller.response.parse.OgResponse; +import com.app.toaster.parse.controller.response.OgResponse; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; -import com.app.toaster.external.client.aws.AWSConfig; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Service diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java index 1d56926b..796d31ff 100644 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java +++ b/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java @@ -10,7 +10,7 @@ import com.app.toaster.domain.Category; import com.app.toaster.timer.domain.Reminder; import com.app.toaster.toast.domain.Toast; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; @@ -18,7 +18,7 @@ import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import lombok.val; diff --git a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java index ce4a86da..eef79d6f 100644 --- a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java +++ b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java @@ -12,14 +12,14 @@ import com.app.toaster.toast.controller.response.ToastDto; import com.app.toaster.domain.Category; import com.app.toaster.toast.domain.Toast; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.Success; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.toast.infrastructure.ToastRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java index ee31c76a..20f26b23 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java +++ b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java @@ -2,21 +2,16 @@ import com.app.toaster.domain.Category; import com.app.toaster.domain.IntegerListConverter; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.jetbrains.annotations.NotNull; -import org.springframework.cglib.core.Local; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.ArrayList; -import java.util.List; @Entity @Getter diff --git a/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java index 29f01329..294cee2f 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java +++ b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java @@ -2,7 +2,7 @@ import com.app.toaster.domain.Category; import com.app.toaster.timer.domain.Reminder; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java index 564ecc74..bc99f840 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java +++ b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java @@ -9,7 +9,7 @@ import com.app.toaster.timer.controller.response.WaitingTimerDto; import com.app.toaster.domain.Category; import com.app.toaster.timer.domain.Reminder; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.ForbiddenException; @@ -17,7 +17,7 @@ import com.app.toaster.exception.model.UnauthorizedException; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java index eee99993..ace56fcd 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java +++ b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java @@ -1,17 +1,14 @@ package com.app.toaster.toast.domain; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; import com.app.toaster.domain.Category; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; @Getter @Entity diff --git a/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java index d02a6870..710aa4f2 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java +++ b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java @@ -1,7 +1,7 @@ package com.app.toaster.toast.infrastructure; import com.app.toaster.domain.Category; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; diff --git a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java index 876476e1..b5736bef 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java @@ -13,12 +13,12 @@ import com.app.toaster.toast.controller.request.IsReadDto; import com.app.toaster.toast.controller.request.SaveToastDto; import com.app.toaster.toast.controller.request.UpdateToastDto; -import com.app.toaster.controller.response.parse.OgResponse; +import com.app.toaster.parse.controller.response.OgResponse; import com.app.toaster.toast.controller.response.IsReadResponse; import com.app.toaster.toast.controller.response.ModifiedTitle; import com.app.toaster.domain.Category; import com.app.toaster.toast.domain.Toast; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; @@ -27,7 +27,7 @@ import com.app.toaster.external.client.aws.S3Service; import com.app.toaster.infrastructure.CategoryRepository; import com.app.toaster.toast.infrastructure.ToastRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; import com.app.toaster.parse.service.ParsingService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/UserController.java b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java similarity index 90% rename from linkmind/src/main/java/com/app/toaster/controller/UserController.java rename to linkmind/src/main/java/com/app/toaster/user/controller/UserController.java index 4767ae16..5abb2a9c 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/UserController.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller; +package com.app.toaster.user.controller; import java.util.HashMap; import java.util.Map; @@ -8,16 +8,15 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.UserId; -import com.app.toaster.controller.request.user.UpdateAllowedPush; +import com.app.toaster.user.controller.request.UpdateAllowedPush; import com.app.toaster.exception.Success; -import com.app.toaster.service.UserService; +import com.app.toaster.user.service.UserService; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/user/UpdateAllowedPush.java b/linkmind/src/main/java/com/app/toaster/user/controller/request/UpdateAllowedPush.java similarity index 54% rename from linkmind/src/main/java/com/app/toaster/controller/request/user/UpdateAllowedPush.java rename to linkmind/src/main/java/com/app/toaster/user/controller/request/UpdateAllowedPush.java index 052ebd75..83d24106 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/user/UpdateAllowedPush.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/request/UpdateAllowedPush.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.user; +package com.app.toaster.user.controller.request; public record UpdateAllowedPush(Boolean allowedPush) { } diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/user/MyPageResponse.java b/linkmind/src/main/java/com/app/toaster/user/controller/response/MyPageResponse.java similarity index 87% rename from linkmind/src/main/java/com/app/toaster/controller/response/user/MyPageResponse.java rename to linkmind/src/main/java/com/app/toaster/user/controller/response/MyPageResponse.java index 75a42668..0d3ae956 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/user/MyPageResponse.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/response/MyPageResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.user; +package com.app.toaster.user.controller.response; public record MyPageResponse(String nickname, String profile, Long allReadToast, Long thisWeekendRead, Long thisWeekendSaved ) { public static MyPageResponse of(String nickname, String profile, Long allReadToast, Long thisWeekendRead, Long thisWeekendSaved ){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/user/SettingResponse.java b/linkmind/src/main/java/com/app/toaster/user/controller/response/SettingResponse.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/response/user/SettingResponse.java rename to linkmind/src/main/java/com/app/toaster/user/controller/response/SettingResponse.java index 03bc862e..1f48d10c 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/user/SettingResponse.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/response/SettingResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.user; +package com.app.toaster.user.controller.response; public record SettingResponse(String nickname, Boolean fcmIsAllowed) { public static SettingResponse of(String nickname, Boolean fcmIsAllowed){ diff --git a/linkmind/src/main/java/com/app/toaster/domain/SocialType.java b/linkmind/src/main/java/com/app/toaster/user/domain/SocialType.java similarity index 77% rename from linkmind/src/main/java/com/app/toaster/domain/SocialType.java rename to linkmind/src/main/java/com/app/toaster/user/domain/SocialType.java index 9d5e83d1..3d63ff1b 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/SocialType.java +++ b/linkmind/src/main/java/com/app/toaster/user/domain/SocialType.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.user.domain; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/linkmind/src/main/java/com/app/toaster/domain/User.java b/linkmind/src/main/java/com/app/toaster/user/domain/User.java similarity index 97% rename from linkmind/src/main/java/com/app/toaster/domain/User.java rename to linkmind/src/main/java/com/app/toaster/user/domain/User.java index 4dfcaf95..a09dec12 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/User.java +++ b/linkmind/src/main/java/com/app/toaster/user/domain/User.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.user.domain; import java.util.Objects; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/UserRepository.java b/linkmind/src/main/java/com/app/toaster/user/infrastructure/UserRepository.java similarity index 79% rename from linkmind/src/main/java/com/app/toaster/infrastructure/UserRepository.java rename to linkmind/src/main/java/com/app/toaster/user/infrastructure/UserRepository.java index 6c240e9e..e8091f5a 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/UserRepository.java +++ b/linkmind/src/main/java/com/app/toaster/user/infrastructure/UserRepository.java @@ -1,11 +1,11 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.user.infrastructure; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import com.app.toaster.domain.SocialType; -import com.app.toaster.domain.User; +import com.app.toaster.user.domain.SocialType; +import com.app.toaster.user.domain.User; public interface UserRepository extends JpaRepository { Boolean existsBySocialIdAndSocialType(String socialId, SocialType socialType); diff --git a/linkmind/src/main/java/com/app/toaster/service/UserService.java b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java similarity index 94% rename from linkmind/src/main/java/com/app/toaster/service/UserService.java rename to linkmind/src/main/java/com/app/toaster/user/service/UserService.java index 3da664cd..47fc95dc 100644 --- a/linkmind/src/main/java/com/app/toaster/service/UserService.java +++ b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service; +package com.app.toaster.user.service; import com.app.toaster.controller.response.category.CategoryResponse; import com.app.toaster.controller.response.main.MainPageResponseDto; @@ -8,14 +8,14 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.app.toaster.controller.response.user.MyPageResponse; -import com.app.toaster.controller.response.user.SettingResponse; -import com.app.toaster.domain.User; +import com.app.toaster.user.controller.response.MyPageResponse; +import com.app.toaster.user.controller.response.SettingResponse; +import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.toast.infrastructure.ToastRepository; -import com.app.toaster.infrastructure.UserRepository; +import com.app.toaster.user.infrastructure.UserRepository; // import com.app.toaster.infrastructure.querydsl.CustomToastRepository; diff --git a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java index e8cc47a2..3c1fe832 100644 --- a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java +++ b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java @@ -25,7 +25,7 @@ // import com.app.toaster.fixture.Fixture; // import com.app.toaster.infrastructure.CategoryRepository; // import com.app.toaster.toast.infrastructure.ToastRepository; -// import com.app.toaster.infrastructure.UserRepository; +// import com.app.toaster.user.infrastructure.UserRepository; // import com.querydsl.core.types.dsl.BooleanExpression; // import com.querydsl.jpa.impl.JPAQueryFactory; // From 2ce814447b93305f92316fc03d426ec684e90534 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:51:23 +0900 Subject: [PATCH 29/34] =?UTF-8?q?[#250]=20refactor:=20category=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/toaster/auth/service/AuthService.java | 2 +- .../controller/CategoryController.java | 12 +- .../request}/ChangeCateoryPriorityDto.java | 2 +- .../request}/ChangeCateoryTitleDto.java | 2 +- .../request}/CreateCategoryDto.java | 2 +- .../request}/DeleteCategoryDto.java | 2 +- .../response}/CategoriesResponse.java | 2 +- .../response}/CategoryResponse.java | 2 +- .../response}/DuplicatedResponse.java | 2 +- .../response}/GetCategoryResponseDto.java | 2 +- .../{ => category}/domain/Category.java | 2 +- .../infrastructure/CategoryRepository.java | 4 +- .../service}/CategoryService.java | 18 +- .../{ => common}/domain/BaseTimeEntity.java | 2 +- .../domain/IntegerListConverter.java | 2 +- .../toaster/config/JpaQueryFactoryConfig.java | 17 -- .../response/main/MainPageResponseDto.java | 2 +- .../response/search/SearchCategoryResult.java | 2 - .../querydsl/CustomToastRepository.java | 154 ------------------ .../category/CategoryQueryService.java | 12 -- .../category/CategoryUpdateService.java | 12 -- .../toaster/service/search/SearchService.java | 4 +- .../app/toaster/timer/domain/Reminder.java | 4 +- .../timer/infrastructure/TimerRepository.java | 2 +- .../toaster/timer/service/TimerService.java | 4 +- .../com/app/toaster/toast/domain/Toast.java | 2 +- .../toast/infrastructure/ToastRepository.java | 2 +- .../toaster/toast/service/ToastService.java | 4 +- .../app/toaster/user/service/UserService.java | 6 +- .../querydsl/CustomToastRepositoryTest.java | 2 +- 30 files changed, 47 insertions(+), 240 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => category}/controller/CategoryController.java (88%) rename linkmind/src/main/java/com/app/toaster/{controller/request/category => category/controller/request}/ChangeCateoryPriorityDto.java (76%) rename linkmind/src/main/java/com/app/toaster/{controller/request/category => category/controller/request}/ChangeCateoryTitleDto.java (85%) rename linkmind/src/main/java/com/app/toaster/{controller/request/category => category/controller/request}/CreateCategoryDto.java (83%) rename linkmind/src/main/java/com/app/toaster/{controller/request/category => category/controller/request}/DeleteCategoryDto.java (75%) rename linkmind/src/main/java/com/app/toaster/{controller/response/category => category/controller/response}/CategoriesResponse.java (84%) rename linkmind/src/main/java/com/app/toaster/{controller/response/category => category/controller/response}/CategoryResponse.java (73%) rename linkmind/src/main/java/com/app/toaster/{controller/response/category => category/controller/response}/DuplicatedResponse.java (75%) rename linkmind/src/main/java/com/app/toaster/{controller/response/category => category/controller/response}/GetCategoryResponseDto.java (80%) rename linkmind/src/main/java/com/app/toaster/{ => category}/domain/Category.java (96%) rename linkmind/src/main/java/com/app/toaster/{ => category}/infrastructure/CategoryRepository.java (96%) rename linkmind/src/main/java/com/app/toaster/{service/category => category/service}/CategoryService.java (92%) rename linkmind/src/main/java/com/app/toaster/{ => common}/domain/BaseTimeEntity.java (94%) rename linkmind/src/main/java/com/app/toaster/{ => common}/domain/IntegerListConverter.java (95%) delete mode 100644 linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java delete mode 100644 linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java delete mode 100644 linkmind/src/main/java/com/app/toaster/service/category/CategoryQueryService.java delete mode 100644 linkmind/src/main/java/com/app/toaster/service/category/CategoryUpdateService.java diff --git a/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java index 721fb484..0ab8096a 100644 --- a/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java @@ -22,7 +22,7 @@ import com.app.toaster.external.client.discord.NotificationDto; import com.app.toaster.external.client.discord.NotificationType; import com.app.toaster.external.client.slack.SlackApi; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.user.infrastructure.UserRepository; diff --git a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java similarity index 88% rename from linkmind/src/main/java/com/app/toaster/controller/CategoryController.java rename to linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java index af14946f..d2cb300b 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/CategoryController.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java @@ -1,15 +1,17 @@ -package com.app.toaster.controller; +package com.app.toaster.category.controller; +import com.app.toaster.category.controller.request.ChangeCateoryPriorityDto; +import com.app.toaster.category.controller.request.ChangeCateoryTitleDto; +import com.app.toaster.category.controller.request.CreateCategoryDto; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.config.UserId; -import com.app.toaster.controller.request.category.*; -import com.app.toaster.controller.response.category.CategoriesResponse; +import com.app.toaster.category.controller.response.CategoriesResponse; import com.app.toaster.toast.controller.response.ToastFilter; -import com.app.toaster.controller.response.category.GetCategoryResponseDto; +import com.app.toaster.category.controller.response.GetCategoryResponseDto; import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; import com.app.toaster.exception.Success; -import com.app.toaster.service.category.CategoryService; +import com.app.toaster.category.service.CategoryService; import com.app.toaster.service.search.SearchService; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java similarity index 76% rename from linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java rename to linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java index c3276d18..4337f794 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryPriorityDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryPriorityDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.category; +package com.app.toaster.category.controller.request; import jakarta.validation.constraints.NotNull; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java similarity index 85% rename from linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java rename to linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java index c05e4c16..7914db5d 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/category/ChangeCateoryTitleDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.category; +package com.app.toaster.category.controller.request; import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java similarity index 83% rename from linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java rename to linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java index 39ba634b..ba083eee 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/category/CreateCategoryDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.category; +package com.app.toaster.category.controller.request; import com.app.toaster.controller.valid.Severity; import com.app.toaster.controller.valid.TitleValid; diff --git a/linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java similarity index 75% rename from linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java rename to linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java index a2c705c4..f65e784b 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/request/category/DeleteCategoryDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/DeleteCategoryDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.request.category; +package com.app.toaster.category.controller.request; import jakarta.validation.constraints.NotNull; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java similarity index 84% rename from linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java rename to linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java index 6c4c5d79..abb89d63 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoriesResponse.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoriesResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.category; +package com.app.toaster.category.controller.response; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java similarity index 73% rename from linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java rename to linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java index 8abb5567..84ee62f4 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/category/CategoryResponse.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/CategoryResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.category; +package com.app.toaster.category.controller.response; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java similarity index 75% rename from linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java rename to linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java index 8254fbde..606fd69c 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/category/DuplicatedResponse.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/DuplicatedResponse.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.category; +package com.app.toaster.category.controller.response; public record DuplicatedResponse(Boolean isDupicated) { public static DuplicatedResponse of(Boolean isDupicated){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java rename to linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java index ee37086f..4424f4f4 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/category/GetCategoryResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/response/GetCategoryResponseDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.category; +package com.app.toaster.category.controller.response; import com.app.toaster.toast.controller.response.ToastDto; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/domain/Category.java b/linkmind/src/main/java/com/app/toaster/category/domain/Category.java similarity index 96% rename from linkmind/src/main/java/com/app/toaster/domain/Category.java rename to linkmind/src/main/java/com/app/toaster/category/domain/Category.java index dc17d703..9b3c34c7 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/Category.java +++ b/linkmind/src/main/java/com/app/toaster/category/domain/Category.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.category.domain; import java.time.LocalDateTime; diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java b/linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java similarity index 96% rename from linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java rename to linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java index 3190da6b..12b86c06 100644 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/CategoryRepository.java +++ b/linkmind/src/main/java/com/app/toaster/category/infrastructure/CategoryRepository.java @@ -1,4 +1,4 @@ -package com.app.toaster.infrastructure; +package com.app.toaster.category.infrastructure; import java.util.ArrayList; @@ -8,7 +8,7 @@ import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java b/linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java similarity index 92% rename from linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java rename to linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java index 796d31ff..fd7ffbd2 100644 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryService.java +++ b/linkmind/src/main/java/com/app/toaster/category/service/CategoryService.java @@ -1,13 +1,15 @@ -package com.app.toaster.service.category; +package com.app.toaster.category.service; -import com.app.toaster.controller.request.category.*; -import com.app.toaster.controller.response.category.CategoriesResponse; -import com.app.toaster.controller.response.category.DuplicatedResponse; +import com.app.toaster.category.controller.request.ChangeCateoryPriorityDto; +import com.app.toaster.category.controller.request.ChangeCateoryTitleDto; +import com.app.toaster.category.controller.request.CreateCategoryDto; +import com.app.toaster.category.controller.response.CategoriesResponse; +import com.app.toaster.category.controller.response.DuplicatedResponse; import com.app.toaster.toast.controller.response.ToastDto; import com.app.toaster.toast.controller.response.ToastFilter; -import com.app.toaster.controller.response.category.CategoryResponse; -import com.app.toaster.controller.response.category.GetCategoryResponseDto; -import com.app.toaster.domain.Category; +import com.app.toaster.category.controller.response.CategoryResponse; +import com.app.toaster.category.controller.response.GetCategoryResponseDto; +import com.app.toaster.category.domain.Category; import com.app.toaster.timer.domain.Reminder; import com.app.toaster.toast.domain.Toast; import com.app.toaster.user.domain.User; @@ -15,7 +17,7 @@ import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.CustomException; import com.app.toaster.exception.model.NotFoundException; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.user.infrastructure.UserRepository; diff --git a/linkmind/src/main/java/com/app/toaster/domain/BaseTimeEntity.java b/linkmind/src/main/java/com/app/toaster/common/domain/BaseTimeEntity.java similarity index 94% rename from linkmind/src/main/java/com/app/toaster/domain/BaseTimeEntity.java rename to linkmind/src/main/java/com/app/toaster/common/domain/BaseTimeEntity.java index b261aa23..f5be0c98 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/BaseTimeEntity.java +++ b/linkmind/src/main/java/com/app/toaster/common/domain/BaseTimeEntity.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.common.domain; import jakarta.persistence.EntityListeners; diff --git a/linkmind/src/main/java/com/app/toaster/domain/IntegerListConverter.java b/linkmind/src/main/java/com/app/toaster/common/domain/IntegerListConverter.java similarity index 95% rename from linkmind/src/main/java/com/app/toaster/domain/IntegerListConverter.java rename to linkmind/src/main/java/com/app/toaster/common/domain/IntegerListConverter.java index 6d151397..6c5946be 100644 --- a/linkmind/src/main/java/com/app/toaster/domain/IntegerListConverter.java +++ b/linkmind/src/main/java/com/app/toaster/common/domain/IntegerListConverter.java @@ -1,4 +1,4 @@ -package com.app.toaster.domain; +package com.app.toaster.common.domain; import jakarta.persistence.AttributeConverter; import jakarta.persistence.Converter; diff --git a/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java b/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java deleted file mode 100644 index c020398e..00000000 --- a/linkmind/src/main/java/com/app/toaster/config/JpaQueryFactoryConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -// package com.app.toaster.config; -// -// import org.springframework.context.annotation.Bean; -// import org.springframework.context.annotation.Configuration; -// -// import com.querydsl.jpa.impl.JPAQueryFactory; -// -// import jakarta.persistence.EntityManager; -// -// @Configuration -// public class JpaQueryFactoryConfig { -// -// @Bean -// JPAQueryFactory jpaQueryFactory(EntityManager em) { -// return new JPAQueryFactory(em); -// } -// } \ No newline at end of file diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java b/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java index d094f004..1afc33dc 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java @@ -1,6 +1,6 @@ package com.app.toaster.controller.response.main; -import com.app.toaster.controller.response.category.CategoryResponse; +import com.app.toaster.category.controller.response.CategoryResponse; import lombok.Builder; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java b/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java index a1cb98ea..0399f4e5 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java +++ b/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java @@ -2,8 +2,6 @@ import java.util.List; -import com.app.toaster.domain.Category; - public record SearchCategoryResult(List categories) { public static SearchCategoryResult of(List categories){ return new SearchCategoryResult(categories); diff --git a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java b/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java deleted file mode 100644 index 062dc101..00000000 --- a/linkmind/src/main/java/com/app/toaster/infrastructure/querydsl/CustomToastRepository.java +++ /dev/null @@ -1,154 +0,0 @@ -// package com.app.toaster.infrastructure.querydsl; -// -// import static com.app.toaster.domain.QToast.*; -// import static com.app.toaster.domain.QUser.*; -// -// import java.time.LocalDateTime; -// import java.util.ArrayList; -// import java.util.List; -// import org.springframework.data.jpa.repository.Modifying; -// import org.springframework.data.jpa.repository.Query; -// import org.springframework.data.repository.query.Param; -// import org.springframework.stereotype.Repository; -// -// import com.app.toaster.domain.Category; -// import com.app.toaster.domain.QToast; -// import com.app.toaster.domain.QUser; -// import com.app.toaster.toast.domain.Toast; -// import com.app.toaster.user.domain.User; -// import com.querydsl.core.types.Path; -// import com.querydsl.core.types.dsl.BooleanExpression; -// import com.querydsl.jpa.impl.JPAQueryFactory; -// -// import jakarta.persistence.EntityManager; -// import lombok.RequiredArgsConstructor; -// -// @Repository -// @RequiredArgsConstructor -// public class CustomToastRepository { -// private final JPAQueryFactory queryFactory; -// // private final EntityManager em; -// public List getAllByCategory(Category category){ -// return queryFactory.select(toast) -// .from(toast) -// .where(eqCategoryId(category.getCategoryId())) -// .fetch(); -// } -// -// private BooleanExpression eqCategoryId(Long id){ -// if (id == null){ -// return null; -// } -// return toast.category.categoryId.eq(id); -// } -// -// ArrayList findByIsReadAndCategory(Boolean isRead, Category category){ -// return null; -// }; -// -// ArrayList getAllByUser(User user){ -// return null; -// } -// -// List getAllByUserOrderByCreatedAtDesc(User user){ -// return null; -// } -// -// -// ArrayList getAllByUserAndIsReadIsTrue(User user){ -// return null; -// } -// -// -// // @Modifying -// // @Query("UPDATE Toast t SET t.category = null WHERE t.category.categoryId IN :categoryIds") -// // void updateCategoryIdsToNull(@Param("categoryIds") List categoryIds){ -// // } -// -// //querydsl의 수정은 bulkupdate라 영속성컨텍스트를 안거치기 때문에 무조건 flush,clear해주자. -// void updateCategoryIdsToNull(List categoryIds){ -// queryFactory.update(toast) -// .set(toast.category, (Category)null) -// .where(toast.category.categoryId.in(categoryIds)) -// .execute(); -// // em.flush(); //test 코드에서는 따로 em을 주입하는 중이므로 테스트 후 넣자. -// // em.clear(); -// } -// -// -// List searchToastsByQuery(Long userId, String query){ -// return queryFactory.select(toast) -// .from(toast) -// .leftJoin(toast.user, user).fetchJoin() -// .where(eqToastOwner(userId), containToastTitle(query)) -// .fetch(); -// } -// private BooleanExpression eqToastOwner(Long userId){ -// return userId != null?toast.user.userId.eq(userId):null; -// } -// -// private BooleanExpression containToastTitle(String query){ -// if (query == null || query.isEmpty() || query.isBlank()){ -// return null; -// } -// return toast.title.containsIgnoreCase(query); -// } -// -// -// -// Long countAllByUser(User user){ -// return null; -// } -// -// -// Long countALLByUserAndIsReadTrue(User user){ -// return null; -// } -// -// -// Long countALLByUserAndIsReadFalse(User user){ -// return null; -// } -// -// -// Long countAllByCategory(Category category){ -// return null; -// } -// -// -// Long countAllByCategoryAndIsReadTrue(Category category){ -// return null; -// } -// -// -// Long countAllByCategoryAndIsReadFalse(Category category){ -// return null; -// } -// -// -// Integer getUnReadToastNumber(Long userId){ -// -// Integer count = queryFactory.select(toast.count().intValue()) -// .from(toast) -// .where(eqToastOwner(userId).and(toast.isRead.isFalse())) -// .fetchOne(); -// return (count!=null)?count:0; -// } -// -// -// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.createdAt >= :startOfWeek AND t.createdAt <= :endOfWeek") -// Long countAllByCreatedAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, -// @Param("endOfWeek") LocalDateTime endOfWeek, @Param("user") User user){ -// return null; -// } -// -// -// @Query("SELECT COUNT(t) FROM Toast t WHERE t.user=:user AND t.isRead = true AND t.updateAt >= :startOfWeek AND t.updateAt <= :endOfWeek") -// Long countAllByUpdateAtThisWeek(@Param("startOfWeek") LocalDateTime startOfWeek, -// @Param("endOfWeek") LocalDateTime endOfWeek, -// @Param("user") User user){ -// return null; -// } -// -// -// } diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryQueryService.java b/linkmind/src/main/java/com/app/toaster/service/category/CategoryQueryService.java deleted file mode 100644 index bb7f9f87..00000000 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryQueryService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.app.toaster.service.category; - -import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; - -@Transactional(readOnly = true) -@RequiredArgsConstructor -public class CategoryQueryService { - - // R -} diff --git a/linkmind/src/main/java/com/app/toaster/service/category/CategoryUpdateService.java b/linkmind/src/main/java/com/app/toaster/service/category/CategoryUpdateService.java deleted file mode 100644 index 7b464601..00000000 --- a/linkmind/src/main/java/com/app/toaster/service/category/CategoryUpdateService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.app.toaster.service.category; - -import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; - -@Transactional -@RequiredArgsConstructor -public class CategoryUpdateService { - - // CUD -} diff --git a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java index eef79d6f..db969782 100644 --- a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java +++ b/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java @@ -10,14 +10,14 @@ import com.app.toaster.controller.response.search.CategoryResult; import com.app.toaster.controller.response.search.SearchMainResult; import com.app.toaster.toast.controller.response.ToastDto; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.toast.domain.Toast; import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; import com.app.toaster.exception.Success; import com.app.toaster.exception.model.BadRequestException; import com.app.toaster.exception.model.NotFoundException; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.infrastructure.CategoryRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.user.infrastructure.UserRepository; diff --git a/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java index 20f26b23..e2a8802a 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java +++ b/linkmind/src/main/java/com/app/toaster/timer/domain/Reminder.java @@ -1,7 +1,7 @@ package com.app.toaster.timer.domain; -import com.app.toaster.domain.Category; -import com.app.toaster.domain.IntegerListConverter; +import com.app.toaster.category.domain.Category; +import com.app.toaster.common.domain.IntegerListConverter; import com.app.toaster.user.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java index 294cee2f..b9153d8d 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java +++ b/linkmind/src/main/java/com/app/toaster/timer/infrastructure/TimerRepository.java @@ -1,6 +1,6 @@ package com.app.toaster.timer.infrastructure; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.timer.domain.Reminder; import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java index bc99f840..148e5f25 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java +++ b/linkmind/src/main/java/com/app/toaster/timer/service/TimerService.java @@ -7,7 +7,7 @@ import com.app.toaster.timer.controller.response.GetTimerPageResponseDto; import com.app.toaster.timer.controller.response.GetTimerResponseDto; import com.app.toaster.timer.controller.response.WaitingTimerDto; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.timer.domain.Reminder; import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; @@ -15,7 +15,7 @@ import com.app.toaster.exception.model.ForbiddenException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.exception.model.UnauthorizedException; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.infrastructure.CategoryRepository; import com.app.toaster.timer.infrastructure.TimerRepository; import com.app.toaster.user.infrastructure.UserRepository; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java index ace56fcd..07918e50 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java +++ b/linkmind/src/main/java/com/app/toaster/toast/domain/Toast.java @@ -2,7 +2,7 @@ import java.time.LocalDateTime; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.user.domain.User; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java index 710aa4f2..6be78d39 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java +++ b/linkmind/src/main/java/com/app/toaster/toast/infrastructure/ToastRepository.java @@ -1,6 +1,6 @@ package com.app.toaster.toast.infrastructure; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java index b5736bef..646d55b5 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java +++ b/linkmind/src/main/java/com/app/toaster/toast/service/ToastService.java @@ -16,7 +16,7 @@ import com.app.toaster.parse.controller.response.OgResponse; import com.app.toaster.toast.controller.response.IsReadResponse; import com.app.toaster.toast.controller.response.ModifiedTitle; -import com.app.toaster.domain.Category; +import com.app.toaster.category.domain.Category; import com.app.toaster.toast.domain.Toast; import com.app.toaster.user.domain.User; import com.app.toaster.exception.Error; @@ -25,7 +25,7 @@ import com.app.toaster.exception.model.ForbiddenException; import com.app.toaster.exception.model.NotFoundException; import com.app.toaster.external.client.aws.S3Service; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.infrastructure.CategoryRepository; import com.app.toaster.toast.infrastructure.ToastRepository; import com.app.toaster.user.infrastructure.UserRepository; import com.app.toaster.parse.service.ParsingService; diff --git a/linkmind/src/main/java/com/app/toaster/user/service/UserService.java b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java index 47fc95dc..ff868ffd 100644 --- a/linkmind/src/main/java/com/app/toaster/user/service/UserService.java +++ b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java @@ -1,9 +1,9 @@ package com.app.toaster.user.service; -import com.app.toaster.controller.response.category.CategoryResponse; +import com.app.toaster.category.controller.response.CategoryResponse; import com.app.toaster.controller.response.main.MainPageResponseDto; -import com.app.toaster.domain.Category; -import com.app.toaster.infrastructure.CategoryRepository; +import com.app.toaster.category.domain.Category; +import com.app.toaster.category.infrastructure.CategoryRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java index 3c1fe832..7d9f06e5 100644 --- a/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java +++ b/linkmind/src/test/java/com/app/toaster/infrastructure/querydsl/CustomToastRepositoryTest.java @@ -23,7 +23,7 @@ // import com.app.toaster.config.JpaQueryFactoryConfig; // import com.app.toaster.toast.domain.Toast; // import com.app.toaster.fixture.Fixture; -// import com.app.toaster.infrastructure.CategoryRepository; +// import com.app.toaster.category.infrastructure.CategoryRepository; // import com.app.toaster.toast.infrastructure.ToastRepository; // import com.app.toaster.user.infrastructure.UserRepository; // import com.querydsl.core.types.dsl.BooleanExpression; From 4b1db8fa489cb84ee57c7d2853212232b93783e3 Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 18:59:56 +0900 Subject: [PATCH 30/34] =?UTF-8?q?[#250]=20refactor:=20search,=20mainpage?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/toaster/category/controller/CategoryController.java | 2 +- .../toaster/{ => mainpage}/controller/MainController.java | 4 ++-- .../controller/response}/MainPageResponseDto.java | 2 +- .../controller/response}/CategoryResult.java | 2 +- .../controller/response}/SearchCategoryResult.java | 2 +- .../controller/response}/SearchMainResult.java | 2 +- .../search => search/controller/response}/ToastResult.java | 2 +- .../{service/search => search/service}/SearchService.java | 6 +++--- .../com/app/toaster/user/controller/UserController.java | 2 +- .../main/java/com/app/toaster/user/service/UserService.java | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => mainpage}/controller/MainController.java (85%) rename linkmind/src/main/java/com/app/toaster/{controller/response/main => mainpage/controller/response}/MainPageResponseDto.java (82%) rename linkmind/src/main/java/com/app/toaster/{controller/response/search => search/controller/response}/CategoryResult.java (80%) rename linkmind/src/main/java/com/app/toaster/{controller/response/search => search/controller/response}/SearchCategoryResult.java (80%) rename linkmind/src/main/java/com/app/toaster/{controller/response/search => search/controller/response}/SearchMainResult.java (87%) rename linkmind/src/main/java/com/app/toaster/{controller/response/search => search/controller/response}/ToastResult.java (75%) rename linkmind/src/main/java/com/app/toaster/{service/search => search/service}/SearchService.java (92%) diff --git a/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java index d2cb300b..d8d9b1cb 100644 --- a/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java @@ -12,7 +12,7 @@ import com.app.toaster.controller.valid.TitleValid; import com.app.toaster.exception.Success; import com.app.toaster.category.service.CategoryService; -import com.app.toaster.service.search.SearchService; +import com.app.toaster.search.service.SearchService; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/MainController.java b/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java similarity index 85% rename from linkmind/src/main/java/com/app/toaster/controller/MainController.java rename to linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java index fa442ff0..e5cbe131 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/MainController.java +++ b/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java @@ -1,11 +1,11 @@ -package com.app.toaster.controller; +package com.app.toaster.mainpage.controller; import com.app.toaster.config.UserId; import org.springframework.web.bind.annotation.*; import com.app.toaster.common.dto.ApiResponse; import com.app.toaster.controller.valid.TitleValid; -import com.app.toaster.service.search.SearchService; +import com.app.toaster.search.service.SearchService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java b/linkmind/src/main/java/com/app/toaster/mainpage/controller/response/MainPageResponseDto.java similarity index 82% rename from linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java rename to linkmind/src/main/java/com/app/toaster/mainpage/controller/response/MainPageResponseDto.java index 1afc33dc..1643261a 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/main/MainPageResponseDto.java +++ b/linkmind/src/main/java/com/app/toaster/mainpage/controller/response/MainPageResponseDto.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.main; +package com.app.toaster.mainpage.controller.response; import com.app.toaster.category.controller.response.CategoryResponse; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/CategoryResult.java b/linkmind/src/main/java/com/app/toaster/search/controller/response/CategoryResult.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/response/search/CategoryResult.java rename to linkmind/src/main/java/com/app/toaster/search/controller/response/CategoryResult.java index 5e264c8e..8c7b98c7 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/CategoryResult.java +++ b/linkmind/src/main/java/com/app/toaster/search/controller/response/CategoryResult.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.search; +package com.app.toaster.search.controller.response; public record CategoryResult(Long categoryId, String title, Long toastNum) { public static CategoryResult of(Long categoryId, String title, Long toastNum){ diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java b/linkmind/src/main/java/com/app/toaster/search/controller/response/SearchCategoryResult.java similarity index 80% rename from linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java rename to linkmind/src/main/java/com/app/toaster/search/controller/response/SearchCategoryResult.java index 0399f4e5..81e160a1 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchCategoryResult.java +++ b/linkmind/src/main/java/com/app/toaster/search/controller/response/SearchCategoryResult.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.search; +package com.app.toaster.search.controller.response; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java b/linkmind/src/main/java/com/app/toaster/search/controller/response/SearchMainResult.java similarity index 87% rename from linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java rename to linkmind/src/main/java/com/app/toaster/search/controller/response/SearchMainResult.java index 6752ca47..2889a364 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/SearchMainResult.java +++ b/linkmind/src/main/java/com/app/toaster/search/controller/response/SearchMainResult.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.search; +package com.app.toaster.search.controller.response; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/controller/response/search/ToastResult.java b/linkmind/src/main/java/com/app/toaster/search/controller/response/ToastResult.java similarity index 75% rename from linkmind/src/main/java/com/app/toaster/controller/response/search/ToastResult.java rename to linkmind/src/main/java/com/app/toaster/search/controller/response/ToastResult.java index b4416fd5..1f703074 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/response/search/ToastResult.java +++ b/linkmind/src/main/java/com/app/toaster/search/controller/response/ToastResult.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.response.search; +package com.app.toaster.search.controller.response; public record ToastResult(Long toastId, String title) { public static ToastResult of(Long toastId, String title){ diff --git a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java b/linkmind/src/main/java/com/app/toaster/search/service/SearchService.java similarity index 92% rename from linkmind/src/main/java/com/app/toaster/service/search/SearchService.java rename to linkmind/src/main/java/com/app/toaster/search/service/SearchService.java index db969782..84c050e6 100644 --- a/linkmind/src/main/java/com/app/toaster/service/search/SearchService.java +++ b/linkmind/src/main/java/com/app/toaster/search/service/SearchService.java @@ -1,4 +1,4 @@ -package com.app.toaster.service.search; +package com.app.toaster.search.service; import java.util.List; import java.util.stream.Collectors; @@ -7,8 +7,8 @@ import org.springframework.transaction.annotation.Transactional; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.controller.response.search.CategoryResult; -import com.app.toaster.controller.response.search.SearchMainResult; +import com.app.toaster.search.controller.response.CategoryResult; +import com.app.toaster.search.controller.response.SearchMainResult; import com.app.toaster.toast.controller.response.ToastDto; import com.app.toaster.category.domain.Category; import com.app.toaster.toast.domain.Toast; diff --git a/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java index 5abb2a9c..aa717853 100644 --- a/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java @@ -3,7 +3,7 @@ import java.util.HashMap; import java.util.Map; -import com.app.toaster.controller.response.main.MainPageResponseDto; +import com.app.toaster.mainpage.controller.response.MainPageResponseDto; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; diff --git a/linkmind/src/main/java/com/app/toaster/user/service/UserService.java b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java index ff868ffd..8cbb787f 100644 --- a/linkmind/src/main/java/com/app/toaster/user/service/UserService.java +++ b/linkmind/src/main/java/com/app/toaster/user/service/UserService.java @@ -1,7 +1,7 @@ package com.app.toaster.user.service; import com.app.toaster.category.controller.response.CategoryResponse; -import com.app.toaster.controller.response.main.MainPageResponseDto; +import com.app.toaster.mainpage.controller.response.MainPageResponseDto; import com.app.toaster.category.domain.Category; import com.app.toaster.category.infrastructure.CategoryRepository; From 9ae3f1048f9d239f0d265b04051a5622bdef29fe Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 19:06:21 +0900 Subject: [PATCH 31/34] =?UTF-8?q?[#250]=20refactor:=20=EA=B3=B5=ED=86=B5?= =?UTF-8?q?=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/app/toaster/auth/controller/AuthController.java | 2 +- .../main/java/com/app/toaster/auth/service/AuthService.java | 2 +- .../app/toaster/category/controller/CategoryController.java | 6 +++--- .../category/controller/request/ChangeCateoryTitleDto.java | 4 ++-- .../category/controller/request/CreateCategoryDto.java | 4 ++-- .../java/com/app/toaster/{ => common}/config/UserId.java | 2 +- .../com/app/toaster/{ => common}/config/UserIdResolver.java | 5 ++--- .../java/com/app/toaster/{ => common}/config/WebConfig.java | 2 +- .../com/app/toaster/{ => common}/config/jwt/JwtService.java | 2 +- .../controller/valid/marker/ToastValidationGroup.java | 4 ---- .../com/app/toaster/mainpage/controller/MainController.java | 4 ++-- .../com/app/toaster/popup/controller/PopupController.java | 4 +--- .../recommendsite/controller/RecommendSiteController.java | 2 +- .../com/app/toaster/timer/controller/TimerController.java | 2 +- .../com/app/toaster/toast/controller/ToastController.java | 2 +- .../app/toaster/toast/controller/request/SaveToastDto.java | 5 ----- .../toaster/toast/controller/request/UpdateToastDto.java | 6 +++--- .../com/app/toaster/user/controller/UserController.java | 2 +- .../{controller => utils/health}/HealthCheckController.java | 2 +- .../app/toaster/{controller => utils}/valid/Severity.java | 2 +- .../app/toaster/{controller => utils}/valid/TitleValid.java | 3 +-- .../toaster/{controller => utils}/valid/TitleValidator.java | 4 ++-- .../toaster/utils/valid/marker/ToastValidationGroup.java | 4 ++++ 23 files changed, 33 insertions(+), 42 deletions(-) rename linkmind/src/main/java/com/app/toaster/{ => common}/config/UserId.java (86%) rename linkmind/src/main/java/com/app/toaster/{ => common}/config/UserIdResolver.java (94%) rename linkmind/src/main/java/com/app/toaster/{ => common}/config/WebConfig.java (93%) rename linkmind/src/main/java/com/app/toaster/{ => common}/config/jwt/JwtService.java (98%) delete mode 100644 linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java rename linkmind/src/main/java/com/app/toaster/{controller => utils/health}/HealthCheckController.java (92%) rename linkmind/src/main/java/com/app/toaster/{controller => utils}/valid/Severity.java (79%) rename linkmind/src/main/java/com/app/toaster/{controller => utils}/valid/TitleValid.java (90%) rename linkmind/src/main/java/com/app/toaster/{controller => utils}/valid/TitleValidator.java (94%) create mode 100644 linkmind/src/main/java/com/app/toaster/utils/valid/marker/ToastValidationGroup.java diff --git a/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java index 0de5381a..9d53f49c 100644 --- a/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java +++ b/linkmind/src/main/java/com/app/toaster/auth/controller/AuthController.java @@ -13,7 +13,7 @@ import com.app.toaster.common.dto.ApiResponse; // import com.app.toaster.config.UserId; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.auth.controller.request.SignInRequestDto; import com.app.toaster.auth.controller.response.SignInResponseDto; import com.app.toaster.auth.controller.response.TokenHealthDto; diff --git a/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java index 0ab8096a..497234f8 100644 --- a/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java +++ b/linkmind/src/main/java/com/app/toaster/auth/service/AuthService.java @@ -7,7 +7,7 @@ import org.springframework.transaction.annotation.Transactional; -import com.app.toaster.config.jwt.JwtService; +import com.app.toaster.common.config.jwt.JwtService; import com.app.toaster.auth.controller.request.SignInRequestDto; import com.app.toaster.auth.controller.response.SignInResponseDto; import com.app.toaster.auth.controller.response.TokenHealthDto; diff --git a/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java index d8d9b1cb..dd4cb164 100644 --- a/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/CategoryController.java @@ -4,12 +4,12 @@ import com.app.toaster.category.controller.request.ChangeCateoryTitleDto; import com.app.toaster.category.controller.request.CreateCategoryDto; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.category.controller.response.CategoriesResponse; import com.app.toaster.toast.controller.response.ToastFilter; import com.app.toaster.category.controller.response.GetCategoryResponseDto; -import com.app.toaster.controller.valid.Severity; -import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.utils.valid.Severity; +import com.app.toaster.utils.valid.TitleValid; import com.app.toaster.exception.Success; import com.app.toaster.category.service.CategoryService; import com.app.toaster.search.service.SearchService; diff --git a/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java index 7914db5d..9a9f7b53 100644 --- a/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/ChangeCateoryTitleDto.java @@ -1,7 +1,7 @@ package com.app.toaster.category.controller.request; -import com.app.toaster.controller.valid.Severity; -import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.utils.valid.Severity; +import com.app.toaster.utils.valid.TitleValid; import jakarta.validation.constraints.NotNull; public record ChangeCateoryTitleDto( diff --git a/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java index ba083eee..64807482 100644 --- a/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java +++ b/linkmind/src/main/java/com/app/toaster/category/controller/request/CreateCategoryDto.java @@ -1,7 +1,7 @@ package com.app.toaster.category.controller.request; -import com.app.toaster.controller.valid.Severity; -import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.utils.valid.Severity; +import com.app.toaster.utils.valid.TitleValid; import jakarta.validation.constraints.NotNull; public record CreateCategoryDto(@TitleValid(payload = Severity.Error.class) @NotNull String categoryTitle) { diff --git a/linkmind/src/main/java/com/app/toaster/config/UserId.java b/linkmind/src/main/java/com/app/toaster/common/config/UserId.java similarity index 86% rename from linkmind/src/main/java/com/app/toaster/config/UserId.java rename to linkmind/src/main/java/com/app/toaster/common/config/UserId.java index 88bc0e8f..2b06b6cf 100644 --- a/linkmind/src/main/java/com/app/toaster/config/UserId.java +++ b/linkmind/src/main/java/com/app/toaster/common/config/UserId.java @@ -1,4 +1,4 @@ -package com.app.toaster.config; +package com.app.toaster.common.config; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/linkmind/src/main/java/com/app/toaster/config/UserIdResolver.java b/linkmind/src/main/java/com/app/toaster/common/config/UserIdResolver.java similarity index 94% rename from linkmind/src/main/java/com/app/toaster/config/UserIdResolver.java rename to linkmind/src/main/java/com/app/toaster/common/config/UserIdResolver.java index 2f2566e5..f1f1bbdf 100644 --- a/linkmind/src/main/java/com/app/toaster/config/UserIdResolver.java +++ b/linkmind/src/main/java/com/app/toaster/common/config/UserIdResolver.java @@ -1,5 +1,6 @@ -package com.app.toaster.config; +package com.app.toaster.common.config; +import com.app.toaster.common.config.jwt.JwtService; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; @@ -7,8 +8,6 @@ import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; -import com.app.toaster.config.jwt.JwtService; - import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/config/WebConfig.java b/linkmind/src/main/java/com/app/toaster/common/config/WebConfig.java similarity index 93% rename from linkmind/src/main/java/com/app/toaster/config/WebConfig.java rename to linkmind/src/main/java/com/app/toaster/common/config/WebConfig.java index c1e66998..dc9e16ab 100644 --- a/linkmind/src/main/java/com/app/toaster/config/WebConfig.java +++ b/linkmind/src/main/java/com/app/toaster/common/config/WebConfig.java @@ -1,4 +1,4 @@ -package com.app.toaster.config; +package com.app.toaster.common.config; import java.util.List; diff --git a/linkmind/src/main/java/com/app/toaster/config/jwt/JwtService.java b/linkmind/src/main/java/com/app/toaster/common/config/jwt/JwtService.java similarity index 98% rename from linkmind/src/main/java/com/app/toaster/config/jwt/JwtService.java rename to linkmind/src/main/java/com/app/toaster/common/config/jwt/JwtService.java index e87d86e2..a7770db4 100644 --- a/linkmind/src/main/java/com/app/toaster/config/jwt/JwtService.java +++ b/linkmind/src/main/java/com/app/toaster/common/config/jwt/JwtService.java @@ -1,4 +1,4 @@ -package com.app.toaster.config.jwt; +package com.app.toaster.common.config.jwt; import static io.jsonwebtoken.Jwts.*; diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java b/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java deleted file mode 100644 index 457405f8..00000000 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/marker/ToastValidationGroup.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.app.toaster.controller.valid.marker; - -public interface ToastValidationGroup { -} diff --git a/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java b/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java index e5cbe131..95ac49ac 100644 --- a/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java +++ b/linkmind/src/main/java/com/app/toaster/mainpage/controller/MainController.java @@ -1,10 +1,10 @@ package com.app.toaster.mainpage.controller; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import org.springframework.web.bind.annotation.*; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.utils.valid.TitleValid; import com.app.toaster.search.service.SearchService; import lombok.RequiredArgsConstructor; diff --git a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java index a5681880..b90a16a7 100644 --- a/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java +++ b/linkmind/src/main/java/com/app/toaster/popup/controller/PopupController.java @@ -3,10 +3,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.app.toaster.popup.controller.request.PopUpRequestDto; @@ -14,7 +12,7 @@ import com.app.toaster.popup.controller.response.PopupResponseDto; import com.app.toaster.popup.service.PopupService; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.exception.Success; import jakarta.validation.Valid; diff --git a/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java b/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java index dad637e0..38b5a0eb 100644 --- a/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java +++ b/linkmind/src/main/java/com/app/toaster/recommendsite/controller/RecommendSiteController.java @@ -1,7 +1,7 @@ package com.app.toaster.recommendsite.controller; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.recommendsite.domain.RecommendSite; import com.app.toaster.exception.Success; import com.app.toaster.recommendsite.service.RecommendSiteService; diff --git a/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java index 31c1d353..dd516533 100644 --- a/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java +++ b/linkmind/src/main/java/com/app/toaster/timer/controller/TimerController.java @@ -1,7 +1,7 @@ package com.app.toaster.timer.controller; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.timer.controller.request.CreateTimerRequestDto; import com.app.toaster.timer.controller.request.UpdateTimerCommentDto; import com.app.toaster.timer.controller.request.UpdateTimerDateTimeDto; diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java index d00465e9..096b9265 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/ToastController.java @@ -20,7 +20,7 @@ import com.app.toaster.common.dto.ApiResponse; // import com.app.toaster.config.UserId; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.exception.Success; import com.app.toaster.parse.service.ParsingService; import com.app.toaster.toast.service.ToastService; diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java index bb8a50c8..96ebf28e 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/SaveToastDto.java @@ -1,9 +1,4 @@ package com.app.toaster.toast.controller.request; -import java.util.List; - -import com.app.toaster.controller.valid.Severity; -import com.app.toaster.controller.valid.TitleValid; - public record SaveToastDto(String linkUrl, Long categoryId) { } diff --git a/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java index 18d19f9f..6a54a61f 100644 --- a/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java +++ b/linkmind/src/main/java/com/app/toaster/toast/controller/request/UpdateToastDto.java @@ -1,9 +1,9 @@ package com.app.toaster.toast.controller.request; -import com.app.toaster.controller.valid.Severity; -import com.app.toaster.controller.valid.TitleValid; +import com.app.toaster.utils.valid.Severity; +import com.app.toaster.utils.valid.TitleValid; -import com.app.toaster.controller.valid.marker.ToastValidationGroup; +import com.app.toaster.utils.valid.marker.ToastValidationGroup; import jakarta.validation.constraints.NotNull; public record UpdateToastDto(Long toastId, @TitleValid(payload = Severity.Error.class, groups = {ToastValidationGroup.class}) @NotNull String title) { diff --git a/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java index aa717853..1ff45542 100644 --- a/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java +++ b/linkmind/src/main/java/com/app/toaster/user/controller/UserController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController; import com.app.toaster.common.dto.ApiResponse; -import com.app.toaster.config.UserId; +import com.app.toaster.common.config.UserId; import com.app.toaster.user.controller.request.UpdateAllowedPush; import com.app.toaster.exception.Success; import com.app.toaster.user.service.UserService; diff --git a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java b/linkmind/src/main/java/com/app/toaster/utils/health/HealthCheckController.java similarity index 92% rename from linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java rename to linkmind/src/main/java/com/app/toaster/utils/health/HealthCheckController.java index 0d8a72c7..aad8785c 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/HealthCheckController.java +++ b/linkmind/src/main/java/com/app/toaster/utils/health/HealthCheckController.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller; +package com.app.toaster.utils.health; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/Severity.java b/linkmind/src/main/java/com/app/toaster/utils/valid/Severity.java similarity index 79% rename from linkmind/src/main/java/com/app/toaster/controller/valid/Severity.java rename to linkmind/src/main/java/com/app/toaster/utils/valid/Severity.java index 66bc5868..6f99ec2e 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/Severity.java +++ b/linkmind/src/main/java/com/app/toaster/utils/valid/Severity.java @@ -1,4 +1,4 @@ -package com.app.toaster.controller.valid; +package com.app.toaster.utils.valid; import jakarta.validation.Payload; diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java b/linkmind/src/main/java/com/app/toaster/utils/valid/TitleValid.java similarity index 90% rename from linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java rename to linkmind/src/main/java/com/app/toaster/utils/valid/TitleValid.java index 9abe70aa..811f6a8e 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValid.java +++ b/linkmind/src/main/java/com/app/toaster/utils/valid/TitleValid.java @@ -1,10 +1,9 @@ -package com.app.toaster.controller.valid; +package com.app.toaster.utils.valid; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import java.util.ArrayList; import jakarta.validation.Constraint; import jakarta.validation.Payload; diff --git a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java b/linkmind/src/main/java/com/app/toaster/utils/valid/TitleValidator.java similarity index 94% rename from linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java rename to linkmind/src/main/java/com/app/toaster/utils/valid/TitleValidator.java index 01f6cdc1..5006f68a 100644 --- a/linkmind/src/main/java/com/app/toaster/controller/valid/TitleValidator.java +++ b/linkmind/src/main/java/com/app/toaster/utils/valid/TitleValidator.java @@ -1,6 +1,6 @@ -package com.app.toaster.controller.valid; +package com.app.toaster.utils.valid; -import com.app.toaster.controller.valid.marker.ToastValidationGroup; +import com.app.toaster.utils.valid.marker.ToastValidationGroup; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; diff --git a/linkmind/src/main/java/com/app/toaster/utils/valid/marker/ToastValidationGroup.java b/linkmind/src/main/java/com/app/toaster/utils/valid/marker/ToastValidationGroup.java new file mode 100644 index 00000000..46891c7c --- /dev/null +++ b/linkmind/src/main/java/com/app/toaster/utils/valid/marker/ToastValidationGroup.java @@ -0,0 +1,4 @@ +package com.app.toaster.utils.valid.marker; + +public interface ToastValidationGroup { +} From 30910ee25e6036cf07a660e2bc4246d694158f8c Mon Sep 17 00:00:00 2001 From: soohyun Date: Fri, 25 Oct 2024 19:08:03 +0900 Subject: [PATCH 32/34] =?UTF-8?q?[#250]=20refactor:=20link=20id=20?= =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/src/main/java/com/app/toaster/link/domain/Link.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linkmind/src/main/java/com/app/toaster/link/domain/Link.java b/linkmind/src/main/java/com/app/toaster/link/domain/Link.java index e35e61f2..577d0a88 100644 --- a/linkmind/src/main/java/com/app/toaster/link/domain/Link.java +++ b/linkmind/src/main/java/com/app/toaster/link/domain/Link.java @@ -17,7 +17,7 @@ public class Link { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long Id; + private Long id; private String title; From 1cb6af6981604aad6b30ef40bbfc56e7a4bd09c6 Mon Sep 17 00:00:00 2001 From: soohyun <49307946+sss4920@users.noreply.github.com> Date: Fri, 25 Oct 2024 19:23:36 +0900 Subject: [PATCH 33/34] [#250] chore: delete .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 4246d468f8c27eb9a802725fbfded47448378252..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!EO^V5FMu}^{PV30i+%+acopVi&7yj+mIeO^wLFe02H#_2v*&$t8CI7qDXs& zU*JRd5`L$BW4ox;mMg8$j5K~@&y4MT-nG|6qz3cs1yP5HG?cLwp}0fX&)SeyXjum; z*T)&Wstk#(?xY2;(w**MPAK% zz2B;})?Rt=*I%t7{q))M*Ti>%d+OwIz-#ycqrpQ~ofIkN$w3Y0MKUc5TYiO)JB{d=4(Wh~bOhW1mF_dR zLE{0Uc07x)M1%ohKp4132EtybH}7!{GPE!t3_MH*cz-ZZ#yDW@(QO?l+!X-WMza&x z{L9EWCSV+}_6QF|`Bb1!RpE-Ed^*}qh>HW(9(_8gaQRSSWEE~G%8icxjSD9gdz4Zb z5C(2Du;!~BKK~E@e*eFnBsF0`82GOkQ0-wd9N>|{+1hwGK5Gs13zUW9YL9 Date: Tue, 3 Dec 2024 15:43:01 +0900 Subject: [PATCH 34/34] =?UTF-8?q?[#252]=20test:=20=EB=8F=99=EC=8B=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=9D=84=20=EC=A7=84=ED=96=89=ED=96=88?= =?UTF-8?q?=EC=9D=84=20=EB=95=8C=20=EC=A0=95=ED=95=A9=EC=84=B1=EC=9D=B4=20?= =?UTF-8?q?=EA=B9=A8=EC=A7=80=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=82=99=EA=B4=80=EC=A0=81=20=EB=9D=BD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linkmind/src/main/resources/data.sql | 1 - .../app/toaster/LinkmindApplicationTests.java | 13 --- .../repository/CategoryRepositoryTest.java | 38 +++++++ .../category/service/CategoryServiceTest.java | 106 ++++++++++++++++++ 4 files changed, 144 insertions(+), 14 deletions(-) delete mode 100644 linkmind/src/main/resources/data.sql delete mode 100644 linkmind/src/test/java/com/app/toaster/LinkmindApplicationTests.java create mode 100644 linkmind/src/test/java/com/app/toaster/category/repository/CategoryRepositoryTest.java create mode 100644 linkmind/src/test/java/com/app/toaster/category/service/CategoryServiceTest.java diff --git a/linkmind/src/main/resources/data.sql b/linkmind/src/main/resources/data.sql deleted file mode 100644 index 8b137891..00000000 --- a/linkmind/src/main/resources/data.sql +++ /dev/null @@ -1 +0,0 @@ - diff --git a/linkmind/src/test/java/com/app/toaster/LinkmindApplicationTests.java b/linkmind/src/test/java/com/app/toaster/LinkmindApplicationTests.java deleted file mode 100644 index 43f0eec4..00000000 --- a/linkmind/src/test/java/com/app/toaster/LinkmindApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.app.toaster; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class LinkmindApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/linkmind/src/test/java/com/app/toaster/category/repository/CategoryRepositoryTest.java b/linkmind/src/test/java/com/app/toaster/category/repository/CategoryRepositoryTest.java new file mode 100644 index 00000000..48f0a3e1 --- /dev/null +++ b/linkmind/src/test/java/com/app/toaster/category/repository/CategoryRepositoryTest.java @@ -0,0 +1,38 @@ +package com.app.toaster.category.repository; + +import com.app.toaster.ToasterApplication; +import com.app.toaster.category.infrastructure.CategoryRepository; +import com.app.toaster.user.domain.User; +import com.app.toaster.user.infrastructure.UserRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.ActiveProfiles; + +@DataJpaTest +@ActiveProfiles(profiles = "test") +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //mysql을 쓸 때는 이렇게 none으로 추가해줘야한다. +public class CategoryRepositoryTest { + + @Autowired + private CategoryRepository categoryRepository; + + @Autowired + private UserRepository userRepository; + + @Test + @DisplayName("category 우선순위 수정이 잘되는지 확인한다.") + void updateCategoryPriority(){ + categoryRepository.increasePriorityByOne(1L,1,3, 126L); + } + + @Test + @DisplayName("category를 우선순위별로 정렬하여 가져올때 리마인더를 가져오는지 확인한다.") + void getCategoryPriorityWithReminder(){ + User user = userRepository.findByUserId(126L).orElseThrow(); + + categoryRepository.findAllByUserOrderByPriority(user); + } +} diff --git a/linkmind/src/test/java/com/app/toaster/category/service/CategoryServiceTest.java b/linkmind/src/test/java/com/app/toaster/category/service/CategoryServiceTest.java new file mode 100644 index 00000000..44298ac1 --- /dev/null +++ b/linkmind/src/test/java/com/app/toaster/category/service/CategoryServiceTest.java @@ -0,0 +1,106 @@ +package com.app.toaster.category.service; + +import com.app.toaster.category.controller.request.ChangeCateoryPriorityDto; +import com.app.toaster.category.domain.Category; +import com.app.toaster.category.infrastructure.CategoryRepository; +import com.app.toaster.category.service.CategoryService; +import com.app.toaster.user.infrastructure.UserRepository; + +import org.junit.jupiter.api.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; + +@SpringBootTest +@ActiveProfiles(profiles = "test") +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //mysql을 쓸 때는 이렇게 none으로 추가해줘야한다. +//@Transactional +public class CategoryServiceTest { + + @Autowired + private CategoryService categoryService; + + @Autowired + private CategoryRepository categoryRepository; + + @Autowired + private UserRepository userRepository; + + private static final ArrayList list = new ArrayList<>(); + + + @BeforeEach + void preMakeList() { + Random random = new Random(); + list.add(new ChangeCateoryPriorityDto(random.nextLong(1, 5), random.nextInt(1, 5))); + list.add(new ChangeCateoryPriorityDto(random.nextLong(1, 5), random.nextInt(1, 5))); + } + + @AfterEach + void postList() { + list.clear(); + } + + + @Test + @DisplayName("category 우선순위 동시 수정을 무작위로 진행 했을 때 정합성이 유지된다.") + void categoryDeadLock() throws InterruptedException { + + ExecutorService executorService = Executors.newFixedThreadPool(2); + CountDownLatch latch = new CountDownLatch(2); + + executorService.execute(() -> { + try { + categoryService.editCategoryPriority(126L, list.get(0)); + } finally { + latch.countDown(); + } + }); //우선순위 순 -> 3 1 2 4 id순 -> 2,3,1,4 + executorService.execute(() -> { + try { + categoryService.editCategoryPriority(126L, list.get(1)); + } finally { + latch.countDown(); + } + }); //3,1,4,2 + latch.await(); + + ArrayList newList = categoryRepository.findAllByUserOrderByPriority(userRepository.findByUserId(126L).get()); + HashSet answer = newList.stream() + .map(Category::getPriority) + .collect(Collectors.toCollection(HashSet::new)); + + Assertions.assertEquals(4, answer.size()); //충돌 시 어떤 것이 바뀌었든, 같은 숫자의 우선순위가 들어가지 않는다. + } + + @Test + @DisplayName("category 우선순위 수정을 동시에 진행 하지않았을 때도 정합성이 유지된다.") + void categoryDeadLockValid() throws InterruptedException { + ArrayList list = new ArrayList<>(); + list.add(new ChangeCateoryPriorityDto(1L, 3)); + list.add(new ChangeCateoryPriorityDto(1L, 4)); + + categoryService.editCategoryPriority(126L, list.get(0)); + //2,3,1,4 + categoryService.editCategoryPriority(126L, list.get(1)); + //3,1,4,2 + ArrayList newList = categoryRepository.findAllByUserOrderByPriority(userRepository.findByUserId(126L).get()); + HashSet answer = newList.stream() + .map(Category::getPriority) + .collect(Collectors.toCollection(HashSet::new)); + + Assertions.assertEquals(4, answer.size()); //아 마지막꺼만 적용되나본데? + } + + +}