Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
d871d1e
chore: ``format_sql`` 프로퍼티 추가
snowykte0426 Feb 21, 2025
4ded58a
add: Booking Application Port 및 Place Persistence Port 추가
snowykte0426 Feb 21, 2025
ee9414b
add: ``BookingApplicationAdapter`` 선언
snowykte0426 Feb 21, 2025
5b9ae36
update: QueryDSL 기반 Custom Repository명 변경
snowykte0426 Feb 21, 2025
2b69792
add: ``Place`` 관련 API Response DTO 정의
snowykte0426 Feb 21, 2025
e3bdeff
add: ``Booking`` Repository 선언 및 정의
snowykte0426 Feb 21, 2025
9b6dadc
add: ``Place`` Repository 구현
snowykte0426 Feb 21, 2025
f4445f7
add: 예약 가능한 장소 조회 Use Case 구현
snowykte0426 Feb 21, 2025
32fccd2
add: Place 영속 계층 Adapter 선언 맟 정의
snowykte0426 Feb 21, 2025
23facd4
update: TimeSlot Domain에서 복합 키 구현을 위한 Record 정의
snowykte0426 Feb 21, 2025
48f1163
update: 실제 RDB 스키마와 동일하도록 변경
snowykte0426 Feb 21, 2025
c486189
update: Entity 변경에 따른 Mapper 클래스 수정
snowykte0426 Feb 21, 2025
b93c7e5
update: ``GET /api/v1/bookings/available`` 구현
snowykte0426 Feb 21, 2025
b74ba19
update: ``Booking`` 엔드포인트 변경
snowykte0426 Feb 21, 2025
1b9d997
update: ``GET /api/v1/booking/information`` 엔드포인트 정의
snowykte0426 Feb 23, 2025
e3f8058
update: ``BookingApplicationAdapter`` 클래스에 UseCase 클래스 연결
snowykte0426 Feb 23, 2025
0547ba4
add: ``BookingMapper`` 클래스에 ``toReponse`` 메서드 추가
snowykte0426 Feb 23, 2025
11b459f
update: 불필요 어노테이션 제거
snowykte0426 Feb 23, 2025
b6112ce
update: ``president`` 필드 추가
snowykte0426 Feb 23, 2025
da45910
add: ``FindBookingByDateAndTimeAndPlaceUseCase`` 클래스 선언
snowykte0426 Feb 23, 2025
f009fff
add: 예약 정보 조회 쿼리 메서드 구현
snowykte0426 Feb 24, 2025
fa08218
add: ``Booking`` 영속성 계층 Port,Adapter 구현
snowykte0426 Feb 24, 2025
da518e9
update: ``FindBookingByDAteAndTimeAndPlaceUseCase`` 구현
snowykte0426 Feb 24, 2025
b0595cd
update: ``placeType`` 파라미터 nullable
snowykte0426 Feb 24, 2025
c899c9e
fix: RDB 테이블과 Entity 동기화
snowykte0426 Feb 24, 2025
90eef65
add: ``CreateBookingUseCase`` 클래스 구현
snowykte0426 Feb 24, 2025
7d9197a
add: 예약 생성 API 실행 시 발생 가능 예외 상황 정의
snowykte0426 Feb 24, 2025
7a67585
add: 예약 생성 API 실행 시 발생 가능 예외 클래스 정의
snowykte0426 Feb 24, 2025
7f68719
add: ``save`` 메서드 추가
snowykte0426 Feb 24, 2025
c5f7ff8
update: ``createBooking`` 메서드 구현
snowykte0426 Feb 24, 2025
42677f6
add: 여러 사용자 조회 쿼리 메서드 추가
snowykte0426 Feb 24, 2025
df17223
add: 예약 생성 API Request DTO 정의
snowykte0426 Feb 24, 2025
376a2dd
add: 장소명을 활용한 장소 정보 쿼리 메서드 추가
snowykte0426 Feb 24, 2025
9f15d49
add: 장소 미조회 시 예외 클래스 추가
snowykte0426 Feb 24, 2025
1244937
add: 장소명을 활용한 장소 정보 조회 메서드 추가
snowykte0426 Feb 24, 2025
2d8fbd1
fix: Entity와 Domain 동기화
snowykte0426 Feb 24, 2025
2e8bca6
add: ``TimeSlot`` Persistence 계층 구성
snowykte0426 Feb 24, 2025
57a6005
update: ``@Setter`` 어노테이션 제거
snowykte0426 Feb 24, 2025
7ccd125
update: Web Request,Request 구분 제거 및 엔드포인트 검증 강화
snowykte0426 Feb 24, 2025
e874dd5
add: Cache 관련 프로퍼티 추가
snowykte0426 Feb 24, 2025
d718797
add: ``CacheConfig`` 설정 클래스 구현
snowykte0426 Feb 24, 2025
15b664e
add: ``findAll`` 메서드 진입점 추가
snowykte0426 Feb 24, 2025
db185b1
delete: 미사용 메서드 제거
snowykte0426 Feb 24, 2025
9277295
update: 예외 클래스명 수정 및 예외 적용 범위 확대
snowykte0426 Feb 24, 2025
fe23637
update: 캐시를 활용한 성능 향상 전략 적용
snowykte0426 Feb 24, 2025
68642b0
add: ``Java Caffeine`` 라이브러리 및 Spring Cache Starter 추가
snowykte0426 Feb 24, 2025
db72ca2
delete: 미사용 예외 클래스 제거
snowykte0426 Feb 24, 2025
45dea30
add: 예약 인원 초과 예외 추가
snowykte0426 Feb 25, 2025
3bb7f85
update: 예약 인원 최대치 검사 로직 추가
snowykte0426 Feb 25, 2025
2f21141
update: 미사용 의존성 제거
snowykte0426 Feb 25, 2025
abc7887
test: 예약 생성,예약 검색 Use Case 클래스 단위 테스트 작성
snowykte0426 Mar 2, 2025
4004d58
test: 예약 가능한 장소 조회 Use Case 클래스 테스트 코드 추가
snowykte0426 Mar 2, 2025
8d1ba97
Merge branch 'develop' of https://github.com/Team-Ampersand/Groom-Ser…
snowykte0426 Mar 6, 2025
2908844
update: 코드 재사용을 위한 Recode명 수정 및 요구사항의 변화에 따른 검증 어노테이션 제거
snowykte0426 Mar 8, 2025
91d1883
update: 임시 Mock 제거 및 실제 기능 구현
snowykte0426 Mar 8, 2025
ee899a5
add: 예약 대표자가 아닌 사용자의 요청 시 발행될 예외 추가
snowykte0426 Mar 8, 2025
1fefa79
update: 인증/인가 엔드포인트를 제외한 모든 엔드포인트에 접근 권한 설정
snowykte0426 Mar 8, 2025
890503d
add: 예약 리소스 조회 및 존재 여부 확인 메서드 추가
snowykte0426 Mar 8, 2025
17924bf
update: Deprecated 된 메서드 사용 중지
snowykte0426 Mar 8, 2025
3722765
update: ``Security Context Holder``에 권한 정보 저장 추가
snowykte0426 Mar 8, 2025
d801fb8
add: 예약 수정 API 구현
snowykte0426 Mar 8, 2025
d9afdba
update: 토큰 발행 시 권한 정보 포함하도록 수정
snowykte0426 Mar 8, 2025
b2f87ca
update: 유효하지 않은 예약 수정 시 예외 추가
snowykte0426 Mar 8, 2025
e6ef27a
fix: 올바르지 않은 메서드 적용 수정
snowykte0426 Mar 8, 2025
11a4732
add: 비관적 락 적용 ``SELETE`` 메서드 추가
snowykte0426 Mar 8, 2025
1f49f8c
add: 예약 삭제 비즈니스 로직 추가
snowykte0426 Mar 8, 2025
73601f3
add: 예약 삭제 비즈니스 로직 구현
snowykte0426 Mar 8, 2025
270c3c0
add: 예약 삭제 엔드포인트 구현
snowykte0426 Mar 8, 2025
14c9560
update: ``updateBooking`` 메서드의 반환 타입을 Void로 변경
snowykte0426 Mar 8, 2025
4758692
fix: 예약 삭제 로직에서 대표자 이메일 확인 조건 수정
snowykte0426 Mar 8, 2025
43d4533
add: Booking 미존재 시 방어 코드 추가
snowykte0426 Mar 8, 2025
4351345
update: 미사용 의존성 DI 제거
snowykte0426 Mar 8, 2025
b5265f6
test: 예약 수정,삭제 로직 테스트 코드 작성
snowykte0426 Mar 8, 2025
d0550f9
test: 실제 로직에 맞게 테스트 코드 적용
snowykte0426 Mar 8, 2025
8afd3ad
update: 루트 경로에 대한 접근 권한을 허용
snowykte0426 Mar 8, 2025
cf4a344
update: 상태 확인 엔드포인트 변경
snowykte0426 Mar 8, 2025
3ec3ae5
update: 수정된 헬스 체크 경로에 대한 curl 명령어 수정
snowykte0426 Mar 8, 2025
514d708
update: ``CreateBookingUseCase``에 비관적 락 적용
snowykte0426 Mar 8, 2025
aa7dbff
test: 비관적 락 적용에 따른 메서드 변경 적용
snowykte0426 Mar 8, 2025
d5dcdd8
update: ``findMemberByEmail`` 메서드에 ``Optional`` 적용
snowykte0426 Mar 8, 2025
4ec7711
update: 메서드 이름을 Java 네이밍 규칙에 맞게 수정
snowykte0426 Mar 8, 2025
521775c
update: ``FindBookingByDateAndTimeAndPlaceUseCase``에서 ``BookingPersis…
snowykte0426 Mar 8, 2025
1164ef3
update: QueryDSL 구현을 Adapter로 이전
snowykte0426 Mar 8, 2025
db80837
update: QueryDSL 구현을 Adapter로 이전
snowykte0426 Mar 8, 2025
f5be9c2
update: ``Booking`` 테이블에 인덱스 적용
snowykte0426 Mar 9, 2025
95b0ec7
fix: 사용자 정보 객체 반환 시 비밀번호 노출 문제 해결
snowykte0426 Mar 9, 2025
8ff4892
fix: 예약이 불가능한 시간대이기 때문에 예약이 존재하지 않는 장소를 예약 가능한 장소로 반환하던 문제 수정
snowykte0426 Mar 9, 2025
6d8e231
update: 올바르지 않았던 패키지명 수정
snowykte0426 Mar 9, 2025
65383e2
update: ``AuthService`` 메서드 분리
snowykte0426 Mar 9, 2025
8ae38b9
update: ``GetBookingResponse``에 예약 ID 추가
snowykte0426 Mar 10, 2025
a70d313
add: 오래된 Booking 데이터 삭제 스케쥴러 구현
snowykte0426 Mar 10, 2025
74f1d19
test: 오래된 예약 삭제 Use Case 클래스 테스트 코드 작성
snowykte0426 Mar 10, 2025
c0bff35
test: Use Case 테스트 클래스의 DisplayName 수정
snowykte0426 Mar 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ jobs:
set -e

echo "🩺 Checking Application Health..."
RESPONSE=\$(curl -s "https://${{ secrets.PROD_SERVER_URL }}/")
RESPONSE=\$(curl -s "https://${{ secrets.PROD_SERVER_URL }}/health")

if [ "\$RESPONSE" = "OK" ]; then
echo "DEPLOYMENT_STATUS=successful"
Expand Down
4 changes: 4 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ dependencies {
implementation("org.springframework.boot:spring-boot-starter-mail")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-cache")

/** AOP */
implementation("org.aspectj:aspectjweaver:1.9.19")
Expand All @@ -49,6 +50,9 @@ dependencies {
runtimeOnly("org.mariadb.jdbc:mariadb-java-client:3.5.1")
runtimeOnly("com.h2database:h2:2.3.232")

/** Cache */
implementation("com.github.ben-manes.caffeine:caffeine:3.2.0")
Copy link

Choose a reason for hiding this comment

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

캐시 버저닝에 관한 고민을 해보고 어떻게 버저닝을 할건지에 대한 고민을 나중에라도 해보면 좋겠음.

Copy link
Member Author

Choose a reason for hiding this comment

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

현재는 단순히 TTL로 2시간만 설정되어 있는데
더 공부해보고 고민해보도록 하겠습니다
감사합니다❤️

Copy link

Choose a reason for hiding this comment

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

  1. 캐싱한 데이터가 두시간이 채 지나기 전에 수정이 된다면 어떻게 처리할 것인지.
  2. 서버를 여러대 띄우고 로드밸런싱하고있는데 서로다른 인스턴스들의 로컬캐시 버전이 일치하지 않을 수 있는 경우도 생각해보기
  3. 단순 디비 수정이 일어났을때 로컬캐시 동기화를 어떻게 해줄 것인지
  4. remote 캐시를 함께 사용하면서 캐시 저장소를 복제해서 여러대 두고있는데 master, slave 간의 버전 관리는 어떻게 해볼 수 있는지.
  5. master가 다운되어서 slave가 failvoer되었는데 slave의 최신 버전과 일치하지 않음. 그냥 둘건지?

이런거 생각해보세요

Copy link
Member Author

Choose a reason for hiding this comment

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

넵 조언 감사합니다


/** QueryDSL */
implementation("com.querydsl:querydsl-jpa:5.1.0:jakarta")
annotationProcessor("com.querydsl:querydsl-apt:5.1.0:jakarta")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.ampersand.groom.domain.auth.application.service;

import com.ampersand.groom.domain.auth.application.port.AuthPort;
import com.ampersand.groom.domain.auth.expection.*;
import com.ampersand.groom.domain.auth.domain.JwtToken;
import com.ampersand.groom.domain.auth.exception.*;
import com.ampersand.groom.domain.auth.presentation.data.request.SignupRequest;
import com.ampersand.groom.domain.member.domain.constant.MemberRole;
import com.ampersand.groom.domain.member.persistence.entity.MemberJpaEntity;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.time.Instant;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Service
@RequiredArgsConstructor
Expand All @@ -27,74 +30,95 @@ public class AuthService {
private long refreshTokenExpiration;

public JwtToken signIn(String email, String password) {
Copy link

Choose a reason for hiding this comment

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

로그인이라는 메서드 내에서 로직이 너무 많은 책임을 가지고있음. 비밀번호, 유저 접근 권한, 토큰 생성등 다양한 기능들은 코드만 보고는 읽기가 어려워보임. private으로 몇군데 분리를 시켜놓고 도메인 행위가 잘 나타났으면 좋겠음

Copy link
Member Author

Choose a reason for hiding this comment

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

65383e2

@se0hui서희와 논의한 후 리팩터링 하였습니다
좋은 리뷰 감사합니다!

MemberJpaEntity user = findUserByEmail(email);
validateUserStatus(user);
validatePassword(password, user.getPassword());
return generateJwtToken(email, user.getRole());
}

MemberJpaEntity user = authPort.findMembersByCriteria(email)
.orElseThrow(()->new UserNotFoundException());
public JwtToken refreshToken(String refreshToken) {
validateRefreshToken(refreshToken);
String email = jwtService.getEmailFromToken(refreshToken);
validateToken(email, refreshToken);
MemberJpaEntity user = findUserByEmail(email);
return generateJwtToken(email, user.getRole());
}

if(!user.getIsAvailable()) {
public void signup(SignupRequest request) {
checkUserExists(request.getEmail());
MemberJpaEntity newUser = createNewUser(request, calculateGenerationFromEmail(request.getEmail()));
authPort.save(newUser);
}

private MemberJpaEntity findUserByEmail(String email) {
return authPort.findMembersByCriteria(email)
.orElseThrow(UserNotFoundException::new);
}

private void validateUserStatus(MemberJpaEntity user) {
if (!user.getIsAvailable()) {
throw new UserForbiddenException();
}
}

if (!passwordEncoder.matches(password, user.getPassword())) {
private void validatePassword(String rawPassword, String encodedPassword) {
if (!passwordEncoder.matches(rawPassword, encodedPassword)) {
throw new PasswordInvalidException();
}
}

String accessToken = jwtService.createAccessToken(email);
String refreshToken = jwtService.createRefreshToken(email);

private JwtToken generateJwtToken(String email, MemberRole role) {
String accessToken = jwtService.createAccessToken(email, role);
String refreshToken = jwtService.createRefreshToken(email, role);
return JwtToken.builder()
.accessToken(accessToken)
.refreshToken(refreshToken)
.accessTokenExpiration(Instant.now().plusMillis(accessTokenExpiration))
.refreshTokenExpiration(Instant.now().plusMillis(refreshTokenExpiration))
.role(user.getRole())
.role(role)
.build();
}

public JwtToken refreshToken(String refreshToken) {
private void validateRefreshToken(String refreshToken) {
if (refreshToken == null || refreshToken.isEmpty()) {
throw new RefreshTokenRequestFormatInvalidException();
}
}

String email = jwtService.getEmailFromToken(refreshToken);
boolean isTokenValid = jwtService.refreshToken(email, refreshToken);
if (!isTokenValid) {
throw new RefreshTokenExpiredOrInvalidException();
}

if (!jwtService.validateToken(refreshToken)) {
private void validateToken(String email, String refreshToken) {
if (!jwtService.refreshToken(email, refreshToken) || !jwtService.validateToken(refreshToken)) {
throw new RefreshTokenExpiredOrInvalidException();
}

MemberJpaEntity user = authPort.findMembersByCriteria(email)
.orElseThrow(()->new UserNotFoundException());

String newAccessToken = jwtService.createAccessToken(email);
String newRefreshToken = jwtService.createRefreshToken(email);

return JwtToken.builder()
.accessToken(newAccessToken)
.refreshToken(newRefreshToken)
.accessTokenExpiration(Instant.now().plusMillis(accessTokenExpiration))
.refreshTokenExpiration(Instant.now().plusMillis(refreshTokenExpiration))
.role(user.getRole())
.build();
}

public void signup(SignupRequest request) {
authPort.findMembersByCriteria(request.getEmail())
.ifPresent(emailVerification -> {
private void checkUserExists(String email) {
authPort.findMembersByCriteria(email)
.ifPresent(user -> {
throw new UserExistException();
});
}

private int calculateGenerationFromEmail(String email) {
try {
Matcher matcher = Pattern.compile("\\d{2}").matcher(email);
if (!matcher.find()) {
throw new EmailFormatInvalidException();
}
int admissionYear = Integer.parseInt(matcher.group()) + 2000;
return (admissionYear - 2017) + 1;
} catch (NumberFormatException e) {
throw new EmailFormatInvalidException();
}
}

MemberJpaEntity newUser = MemberJpaEntity.builder()
private MemberJpaEntity createNewUser(SignupRequest request, int generation) {
return MemberJpaEntity.builder()
.name(request.getName())
.email(request.getEmail())
.password(passwordEncoder.encode(request.getPassword()))
.generation(1)
.generation(generation)
.isAvailable(true)
.role(MemberRole.ROLE_STUDENT)
.build();

authPort.save(newUser);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.ampersand.groom.domain.auth.application.service;

import com.ampersand.groom.domain.auth.application.port.AuthPort;
import com.ampersand.groom.domain.auth.expection.UserNotFoundException;
import com.ampersand.groom.domain.auth.exception.UserNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.ampersand.groom.domain.auth.application.service;

import com.ampersand.groom.domain.auth.application.port.EmailVerificationPort;
import com.ampersand.groom.domain.auth.expection.EmailFormatInvalidException;
import com.ampersand.groom.domain.auth.expection.VerificationCodeFormatInvalidException;
import com.ampersand.groom.domain.auth.expection.VerificationCodeExpiredOrInvalidException;
import com.ampersand.groom.domain.auth.exception.EmailFormatInvalidException;
import com.ampersand.groom.domain.auth.exception.VerificationCodeFormatInvalidException;
import com.ampersand.groom.domain.auth.exception.VerificationCodeExpiredOrInvalidException;
import com.ampersand.groom.domain.auth.persistence.EmailVerification;
import lombok.RequiredArgsConstructor;
import org.springframework.mail.SimpleMailMessage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.ampersand.groom.domain.auth.application.service;

import com.ampersand.groom.domain.member.domain.constant.MemberRole;
import io.jsonwebtoken.*;
import jakarta.servlet.http.HttpServletRequest;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

Expand All @@ -21,33 +23,29 @@ public class JwtService {
private final long accessTokenExpiration;
private final long refreshTokenExpiration;

public String createAccessToken(String email) {
return generateToken(email, accessTokenExpiration);
public String createAccessToken(String email, MemberRole roles) {
return generateToken(email, accessTokenExpiration, roles);
}

public String createRefreshToken(String email) {
String refreshToken = generateToken(email, refreshTokenExpiration);

public String createRefreshToken(String email, MemberRole roles) {
String refreshToken = generateToken(email, refreshTokenExpiration, roles);
redisTemplate.opsForValue().set("refresh_token:" + email, refreshToken, refreshTokenExpiration, TimeUnit.SECONDS);

return refreshToken;
}

public boolean refreshToken(String email, String refreshToken) {
String storedToken = redisTemplate.opsForValue().get("refresh_token:" + email);

if (storedToken == null || !storedToken.equals(refreshToken)) {
return false;
}
return true;
return storedToken != null && storedToken.equals(refreshToken);
}

private String generateToken(String subject, long expirationMs) {
private String generateToken(String subject, long expirationMs, MemberRole roles) {
Date now = new Date();
return Jwts.builder()
.setSubject(subject)
.setIssuedAt(now)
.setExpiration(new Date(now.getTime() + expirationMs))
.claim("sub", subject)
.claim("iat", now.getTime())
.claim("exp", now.getTime() + expirationMs)
.claim("role", roles)
.signWith(secretKey)
.compact();
}
Expand All @@ -56,6 +54,12 @@ public String getEmailFromToken(String token) {
return parseClaims(token).getSubject();
}

public MemberRole getRoleFromToken(String token) {
Claims claims = parseClaims(token);
String role = claims.get("role", String.class);
return role != null ? MemberRole.valueOf(role) : null;
}

public boolean validateToken(String token) {
try {
parseClaims(token);
Expand All @@ -67,10 +71,10 @@ public boolean validateToken(String token) {

private Claims parseClaims(String token) {
return Jwts.parser()
.setSigningKey(secretKey)
.verifyWith(secretKey)
.build()
.parseClaimsJws(token)
.getBody();
.parseSignedClaims(token)
.getPayload();
}

public String resolveToken(HttpServletRequest request) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.ampersand.groom.domain.auth.expection;
package com.ampersand.groom.domain.auth.exception;

import com.ampersand.groom.global.error.ErrorCode;
import com.ampersand.groom.global.error.exception.GroomException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ public class AuthPortAdapter implements AuthPort {

@Override
public Optional<MemberJpaEntity> findMembersByCriteria(String email) {
return memberJpaRepository.findMembersByCriteria(null, null, null, email, null, null)
.stream().findFirst();
return memberJpaRepository.findMemberByEmail(email);
}


Expand Down
Loading