Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

refactor/#36 모듈 의존성 정리 #57

Merged
merged 6 commits into from
Jan 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,27 +39,6 @@ subprojects {
}

dependencies {
// Spring Boot 기본 스타터 패키지
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // 데이터베이스와 상호작용 (JPA 사용)
implementation 'org.springframework.boot:spring-boot-starter-validation' // 요청 데이터 검증
implementation 'org.springframework.boot:spring-boot-starter-web' // RESTful API 및 웹 애플리케이션 개발
implementation 'org.springframework.boot:spring-boot-starter-aop'

// Querydsl 관련 의존성 (타입 안전한 쿼리 작성)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // Querydsl JPA 지원
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // Querydsl Q클래스 생성
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
// 데이터베이스 연결
runtimeOnly 'org.postgresql:postgresql' // PostgreSQL 드라이버

// 지리 데이터 관리 도구
implementation 'org.locationtech.jts:jts-core:1.20.0'
implementation 'org.hibernate:hibernate-spatial:6.6.4.Final'

//swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.1'

// 개발 도구 및 반복 코드 감소
compileOnly 'org.projectlombok:lombok' // Lombok으로 반복 코드 제거 (Getter, Setter 등)
annotationProcessor 'org.projectlombok:lombok' // Lombok 애노테이션 프로세서
Expand Down
12 changes: 12 additions & 0 deletions soridam-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,16 @@ dependencies {
implementation project(':soridam-auth')
implementation project(':soridam-infra')
implementation project(':soridam-global-util')

//swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.1'

//지리 데이터
implementation 'org.locationtech.jts:jts-core:1.20.0'

//spring security
implementation 'org.springframework.boot:spring-boot-starter-security'

// 데이터베이스와 상호작용 (JPA 사용)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import lombok.RequiredArgsConstructor;
import sorisoop.soridam.api.noise.presentation.exception.NoiseNotFoundException;
import sorisoop.soridam.api.noise.presentation.request.NoiseCreateRequest;
import sorisoop.soridam.api.noise.presentation.request.NoiseSearchListRequest;
Expand All @@ -22,28 +23,24 @@
import sorisoop.soridam.api.noise.presentation.response.NoiseReviewResponse;
import sorisoop.soridam.api.noise.presentation.response.NoiseSummaryResponse;
import sorisoop.soridam.api.user.application.UserService;
import sorisoop.soridam.globalutil.geometry.GeometryUtils;
import sorisoop.soridam.domain.noise.domain.Noise;
import sorisoop.soridam.domain.noise.domain.NoiseLevel;
import sorisoop.soridam.domain.noise.domain.NoiseRepository;
import sorisoop.soridam.domain.noise.domain.Radius;
import sorisoop.soridam.domain.noise.infrastructure.JpaNoiseRepository;
import sorisoop.soridam.domain.noise.infrastructure.QueryNoiseRepository;
import sorisoop.soridam.domain.user.domain.User;

import lombok.RequiredArgsConstructor;
import sorisoop.soridam.globalutil.geometry.GeometryUtils;

@Service
@RequiredArgsConstructor
public class NoiseService {
private final JpaNoiseRepository jpaNoiseRepository;
private final QueryNoiseRepository queryNoiseRepository;
private final NoiseRepository noiseRepository;
private final GeometryUtils geometryUtils;
private final UserService userService;

@Transactional(readOnly = true)
public Optional<NoiseDetailResponse> getDetailNoise(double x, double y) {
Point point = createPoint(x, y);
List<Noise> results = queryNoiseRepository.getNearbyNoises(point);
List<Noise> results = noiseRepository.getNearbyNoises(point);

if (results.isEmpty()) return Optional.empty();

Expand All @@ -63,7 +60,7 @@ public Optional<NoiseListResponse> getNearbyNoise(NoiseSearchListRequest request
List<NoiseResponse> responses = requests.noiseSearchRequests().stream()
.map(request -> {
Point point = createPoint(request.x(), request.y());
List<Noise> results = queryNoiseRepository.findByAvgDecibleAndPoint(point, radius, noiseLevel);
List<Noise> results = noiseRepository.findByAvgDecibleAndPoint(point, radius, noiseLevel);

if (results.isEmpty()) return null;

Expand All @@ -86,7 +83,7 @@ public Optional<NoiseListResponse> getNearbyNoise(NoiseSearchListRequest request

@Transactional(readOnly = true)
public NoiseSummaryResponse getNoise(String id) {
Noise noise = jpaNoiseRepository.findById(NOISE.getPrefix() + id)
Noise noise = noiseRepository.findById(NOISE.getPrefix() + id)
.orElseThrow(NoiseNotFoundException::new);
return NoiseSummaryResponse.from(noise);
}
Expand All @@ -104,16 +101,16 @@ public NoisePersistResponse createNoise(NoiseCreateRequest request) {
request.review()
);

jpaNoiseRepository.save(noise);
noiseRepository.save(noise);
return NoisePersistResponse.from(noise);
}

@Transactional
public void deleteNoise(String id) {
if (!jpaNoiseRepository.existsById(id)) {
if (!noiseRepository.existsById(id)) {
throw new NoiseNotFoundException();
}
jpaNoiseRepository.deleteById(id);
noiseRepository.deleteById(id);
}
Comment on lines 109 to 114
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

deleteNoise 메서드의 ID 처리가 불완전합니다.

ID 접두사(prefix) 처리가 누락되었습니다. getNoise 메서드와 동일하게 NOISE.getPrefix()를 사용해야 합니다.

     @Transactional
     public void deleteNoise(String id) {
-        if (!noiseRepository.existsById(id)) {
+        String noiseId = NOISE.getPrefix() + id;
+        if (!noiseRepository.existsById(noiseId)) {
             throw new NoiseNotFoundException();
         }
-        noiseRepository.deleteById(id);
+        noiseRepository.deleteById(noiseId);
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public void deleteNoise(String id) {
if (!jpaNoiseRepository.existsById(id)) {
if (!noiseRepository.existsById(id)) {
throw new NoiseNotFoundException();
}
jpaNoiseRepository.deleteById(id);
noiseRepository.deleteById(id);
}
@Transactional
public void deleteNoise(String id) {
String noiseId = NOISE.getPrefix() + id;
if (!noiseRepository.existsById(noiseId)) {
throw new NoiseNotFoundException();
}
noiseRepository.deleteById(noiseId);
}


private Point createPoint(double x, double y) {
Expand Down
7 changes: 5 additions & 2 deletions soridam-auth/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ jar {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'

// OAuth 및 외부 API 호출
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' // OAuth2 클라이언트
// OAuth
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

// 도메인 및 공통 모듈
implementation project(':soridam-common')
Expand All @@ -19,4 +19,7 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

//swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.1'
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,18 @@
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import lombok.RequiredArgsConstructor;
import sorisoop.soridam.common.domain.Provider;
import sorisoop.soridam.domain.user.domain.User;
import sorisoop.soridam.domain.user.infrastructure.JpaUserRepository;
import sorisoop.soridam.domain.user.domain.UserRepository;

@Service
@RequiredArgsConstructor
public class CustomOidcUserService extends OidcUserService {
private final JpaUserRepository jpaUserRepository;
private final UserRepository userRepository;

@Override
@Transactional
public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException {
OidcUser oidcUser = super.loadUser(userRequest);
OidcIdToken idToken = oidcUser.getIdToken();
Expand All @@ -38,15 +36,15 @@ public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2Authenticatio
private User getUserAndUpdateIfNeeded(Provider provider, Map<String, Object> attributes) {
String oAuthIdentity = attributes.get("sub").toString();

return jpaUserRepository.findByOauthIdentityAndProvider(oAuthIdentity, provider)
return userRepository.findByOauthIdentityAndProvider(oAuthIdentity, provider)
.map(existingUser -> {
updateUserInfo(existingUser, attributes);
return existingUser;
})
.orElseGet(() -> {
User newUser = OicdUserFactory.getOAuth2UserInfo(provider, attributes);
newUser.updateLastLoginTime();
return jpaUserRepository.save(newUser);
return userRepository.save(newUser);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
import sorisoop.soridam.auth.oauth.request.OidcLoginRequest;
import sorisoop.soridam.common.domain.Provider;
import sorisoop.soridam.domain.user.domain.User;
import sorisoop.soridam.domain.user.infrastructure.JpaUserRepository;
import sorisoop.soridam.domain.user.domain.UserRepository;

@RequiredArgsConstructor
public abstract class OidcService {
private final JpaUserRepository jpaUserRepository;
private final UserRepository userRepository;

protected abstract String getIssuer();
protected abstract String getJwkSetUri();
Expand Down Expand Up @@ -74,15 +74,15 @@ private OidcIdToken getOidcIdToken(Jwt jwt) {

protected User findOrCreateUser(OidcIdToken idToken) {
String identifier = idToken.getSubject();
return jpaUserRepository.findByOauthIdentityAndProvider(identifier, getProvider())
return userRepository.findByOauthIdentityAndProvider(identifier, getProvider())
.map(existingUser -> {
existingUser.updateLastLoginTime();
return jpaUserRepository.save(existingUser);
return userRepository.save(existingUser);
})
.orElseGet(() -> {
User newUser = createNewUser(identifier, new OidcUserInfo(idToken.getClaims()));
newUser.updateLastLoginTime();
return jpaUserRepository.save(newUser);
return userRepository.save(newUser);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
import sorisoop.soridam.auth.oauth.OidcService;
import sorisoop.soridam.common.domain.Provider;
import sorisoop.soridam.domain.user.domain.User;
import sorisoop.soridam.domain.user.infrastructure.JpaUserRepository;
import sorisoop.soridam.domain.user.domain.UserRepository;

@Service
public class GoogleOidcService extends OidcService {
private final GoogleOidcProperties properties;

public GoogleOidcService(JpaUserRepository jpaUserRepository, GoogleOidcProperties properties) {
super(jpaUserRepository);
public GoogleOidcService(UserRepository userRepository, GoogleOidcProperties properties) {
super(userRepository);
this.properties = properties;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
import sorisoop.soridam.auth.oauth.OidcService;
import sorisoop.soridam.common.domain.Provider;
import sorisoop.soridam.domain.user.domain.User;
import sorisoop.soridam.domain.user.infrastructure.JpaUserRepository;
import sorisoop.soridam.domain.user.domain.UserRepository;

@Service
public class KakaoOidcService extends OidcService {
private final KakaoOidcProperties properties;

public KakaoOidcService(JpaUserRepository jpaUserRepository, KakaoOidcProperties properties) {
super(jpaUserRepository);
public KakaoOidcService(UserRepository userRepository, KakaoOidcProperties properties) {
super(userRepository);
this.properties = properties;
}

Expand Down
14 changes: 14 additions & 0 deletions soridam-common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,18 @@ jar {
dependencies {
implementation project(':soridam-infra')
implementation project(':soridam-global-util')

// Querydsl 관련 의존성 (타입 안전한 쿼리 작성)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // Querydsl JPA 지원
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // Querydsl Q클래스 생성
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'

// 데이터베이스와 상호작용 (JPA 사용)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// 요청 데이터 검증
implementation 'org.springframework.boot:spring-boot-starter-validation'

// RESTful API
implementation 'org.springframework.boot:spring-boot-starter-web'
}
18 changes: 18 additions & 0 deletions soridam-domain/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,22 @@ dependencies {
implementation project(':soridam-global-util')
implementation project(':soridam-common')
implementation project(':soridam-infra')

// 지리 데이터 관리 도구
implementation 'org.locationtech.jts:jts-core:1.20.0'
implementation 'org.hibernate:hibernate-spatial:6.6.4.Final'

// Querydsl 관련 의존성 (타입 안전한 쿼리 작성)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // Querydsl JPA 지원
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // Querydsl Q클래스 생성
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'

// 데이터베이스 연결
runtimeOnly 'org.postgresql:postgresql' // PostgreSQL 드라이버

//spring security
implementation 'org.springframework.boot:spring-boot-starter-security'

// 데이터베이스와 상호작용 (JPA 사용)
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package sorisoop.soridam.domain.noise.domain;

import java.util.List;
import java.util.Optional;

import org.locationtech.jts.geom.Point;

public interface NoiseRepository {
List<Noise> getNearbyNoises(Point point);

List<Noise> findByAvgDecibleAndPoint(Point point, Radius radius, NoiseLevel noiseLevel);

Optional<Noise> findById(String id);

Noise save(Noise noise);

boolean existsById(String id);

void deleteById(String id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package sorisoop.soridam.domain.noise.infrastructure;

import java.util.List;
import java.util.Optional;

import org.locationtech.jts.geom.Point;
import org.springframework.stereotype.Repository;

import lombok.RequiredArgsConstructor;
import sorisoop.soridam.domain.noise.domain.Noise;
import sorisoop.soridam.domain.noise.domain.NoiseLevel;
import sorisoop.soridam.domain.noise.domain.NoiseRepository;
import sorisoop.soridam.domain.noise.domain.Radius;

@Repository
@RequiredArgsConstructor
public class NoiseRepositoryImpl implements NoiseRepository {
private final JpaNoiseRepository jpaNoiseRepository;
private final QueryNoiseRepository queryNoiseRepository;

@Override
public List<Noise> getNearbyNoises(Point point) {
return queryNoiseRepository.getNearbyNoises(point);
}

@Override
public List<Noise> findByAvgDecibleAndPoint(Point point, Radius radius, NoiseLevel noiseLevel) {
return queryNoiseRepository.findByAvgDecibleAndPoint(point, radius, noiseLevel);
}

@Override
public Optional<Noise> findById(String id) {
return jpaNoiseRepository.findById(id);
}

@Override
public Noise save(Noise noise) {
return jpaNoiseRepository.save(noise);
}

@Override
public boolean existsById(String id) {
return jpaNoiseRepository.existsById(id);
}

@Override
public void deleteById(String id) {
jpaNoiseRepository.deleteById(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package sorisoop.soridam.domain.user.domain;

import java.util.Optional;

import sorisoop.soridam.common.domain.Provider;

public interface UserRepository {
User save(User user);

Optional<User> findByEmail(String email);

Optional<User> findByOauthIdentityAndProvider(String oauthIdentifier, Provider provider);
}
Loading
Loading