diff --git a/src/main/java/com/somemore/center/domain/NEWCenter.java b/src/main/java/com/somemore/center/domain/NEWCenter.java new file mode 100644 index 000000000..9719e67b9 --- /dev/null +++ b/src/main/java/com/somemore/center/domain/NEWCenter.java @@ -0,0 +1,52 @@ +package com.somemore.center.domain; + +import com.somemore.global.common.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Entity +@Table(name = "new_center") // TODO prefix 삭제 +public class NEWCenter extends BaseEntity { + + public static final String DEFAULT_NAME = "기관"; + @Id + @GeneratedValue(strategy = GenerationType.UUID) + @Column(name = "id", nullable = false, columnDefinition = "BINARY(16)") + private UUID id; + + @Column(name = "user_id", nullable = false, columnDefinition = "BINARY(16)") + private UUID userId; + + @Column(name = "name", nullable = false) + private String name; + + @Column(name = "homepage_url", nullable = false) + private String homepageUrl; + + @Builder + private NEWCenter(UUID userId, String name, String homepageUrl) { + this.userId = userId; + this.name = name; + this.homepageUrl = homepageUrl; + } + + public static NEWCenter createDefault(UUID userId) { + return NEWCenter.builder() + .userId(userId) + .name(DEFAULT_NAME + userId.toString().substring(0, 8)) + .homepageUrl("") + .build(); + } +} diff --git a/src/main/java/com/somemore/center/repository/NEWCenterJpaRepository.java b/src/main/java/com/somemore/center/repository/NEWCenterJpaRepository.java new file mode 100644 index 000000000..07a93c4f5 --- /dev/null +++ b/src/main/java/com/somemore/center/repository/NEWCenterJpaRepository.java @@ -0,0 +1,11 @@ +package com.somemore.center.repository; + +import com.somemore.center.domain.NEWCenter; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository("newCenterJpaRepository") +public interface NEWCenterJpaRepository extends JpaRepository { +} diff --git a/src/main/java/com/somemore/center/repository/NEWCenterRepository.java b/src/main/java/com/somemore/center/repository/NEWCenterRepository.java new file mode 100644 index 000000000..4c0cb9d82 --- /dev/null +++ b/src/main/java/com/somemore/center/repository/NEWCenterRepository.java @@ -0,0 +1,15 @@ +package com.somemore.center.repository; + +import com.somemore.center.domain.NEWCenter; + +import java.util.Optional; +import java.util.UUID; + +public interface NEWCenterRepository { + + NEWCenter save(NEWCenter center); + + Optional findById(UUID id); + + Optional findByUserId(UUID userId); +} diff --git a/src/main/java/com/somemore/center/repository/NEWCenterRepositoryImpl.java b/src/main/java/com/somemore/center/repository/NEWCenterRepositoryImpl.java new file mode 100644 index 000000000..3022cbf4b --- /dev/null +++ b/src/main/java/com/somemore/center/repository/NEWCenterRepositoryImpl.java @@ -0,0 +1,50 @@ +package com.somemore.center.repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.somemore.center.domain.NEWCenter; +import com.somemore.center.domain.QNEWCenter; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository("newCenterRepository") +@RequiredArgsConstructor +public class NEWCenterRepositoryImpl implements NEWCenterRepository { + + @Qualifier("newCenterJpaRepository") + private final NEWCenterJpaRepository NEWCenterJpaRepository; + private final JPAQueryFactory queryFactory; + + private static final QNEWCenter center = QNEWCenter.nEWCenter; + + @Override + public NEWCenter save(NEWCenter center) { + return NEWCenterJpaRepository.save(center); + } + + @Override + public Optional findById(UUID id) { + return Optional.ofNullable( + queryFactory.selectFrom(center) + .where( + center.id.eq(id), + center.deleted.eq(false)) + .fetchOne() + ); + } + + @Override + public Optional findByUserId(UUID userId) { + return Optional.ofNullable( + queryFactory.selectFrom(center) + .where( + center.userId.eq(userId), + center.deleted.eq(false)) + .fetchOne() + + ); + } +} diff --git a/src/main/java/com/somemore/center/service/NEWRegisterCenterService.java b/src/main/java/com/somemore/center/service/NEWRegisterCenterService.java new file mode 100644 index 000000000..cf43c604d --- /dev/null +++ b/src/main/java/com/somemore/center/service/NEWRegisterCenterService.java @@ -0,0 +1,26 @@ +package com.somemore.center.service; + +import com.somemore.center.domain.NEWCenter; +import com.somemore.center.repository.NEWCenterRepository; +import com.somemore.center.usecase.NEWRegisterCenterUseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +@Transactional +public class NEWRegisterCenterService implements NEWRegisterCenterUseCase { + + @Qualifier("newCenterRepository") + private final NEWCenterRepository NEWCenterRepository; + + @Override + public NEWCenter register(UUID userId) { + NEWCenter center = NEWCenter.createDefault(userId); + return NEWCenterRepository.save(center); + } +} diff --git a/src/main/java/com/somemore/center/usecase/NEWRegisterCenterUseCase.java b/src/main/java/com/somemore/center/usecase/NEWRegisterCenterUseCase.java new file mode 100644 index 000000000..b56a8a1ee --- /dev/null +++ b/src/main/java/com/somemore/center/usecase/NEWRegisterCenterUseCase.java @@ -0,0 +1,10 @@ +package com.somemore.center.usecase; + +import com.somemore.center.domain.NEWCenter; + +import java.util.UUID; + +public interface NEWRegisterCenterUseCase { + + NEWCenter register(UUID userId); +} diff --git a/src/main/java/com/somemore/domains/center/domain/Center.java b/src/main/java/com/somemore/domains/center/domain/Center.java index 5fbc62910..c4ca6a219 100644 --- a/src/main/java/com/somemore/domains/center/domain/Center.java +++ b/src/main/java/com/somemore/domains/center/domain/Center.java @@ -33,34 +33,22 @@ public class Center extends BaseEntity { @Column(name = "homepage_link", nullable = false) private String homepageLink; - @Column(name = "account_id", nullable = false) - private String accountId; - - @Column(name = "account_pw", nullable = false) - private String accountPw; - - @Builder - private Center(String name, String contactNumber, String imgUrl, String introduce, String homepageLink, String accountId, String accountPw) { - + private Center(String name, String contactNumber, String imgUrl, String introduce, String homepageLink) { this.name = name; this.contactNumber = contactNumber; this.imgUrl = imgUrl; this.introduce = introduce; this.homepageLink = homepageLink; - this.accountId = accountId; - this.accountPw = accountPw; } - public static Center create(String name, String contactNumber, String imgUrl, String introduce, String homepageLink, String accountId, String accountPw) { + public static Center create(String name, String contactNumber, String imgUrl, String introduce, String homepageLink) { return Center.builder() .name(name) .contactNumber(contactNumber) .imgUrl(imgUrl) .introduce(introduce) .homepageLink(homepageLink) - .accountId(accountId) - .accountPw(accountPw) .build(); } diff --git a/src/main/java/com/somemore/domains/center/repository/center/CenterJpaRepository.java b/src/main/java/com/somemore/domains/center/repository/center/CenterJpaRepository.java index ef68ed2ea..0a0f7df70 100644 --- a/src/main/java/com/somemore/domains/center/repository/center/CenterJpaRepository.java +++ b/src/main/java/com/somemore/domains/center/repository/center/CenterJpaRepository.java @@ -2,13 +2,19 @@ import com.somemore.domains.center.domain.Center; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.Optional; import java.util.UUID; +@Repository("centerJpaRepository") public interface CenterJpaRepository extends JpaRepository { + boolean existsById(UUID id); + Optional
findCenterById(UUID id); + Optional
findByName(String name); + boolean existsByIdAndDeletedIsFalse(UUID id); } diff --git a/src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java b/src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java index 1d6af166a..9fe091776 100644 --- a/src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java +++ b/src/main/java/com/somemore/domains/center/repository/center/CenterRepository.java @@ -8,7 +8,6 @@ import java.util.Optional; import java.util.UUID; -@Repository public interface CenterRepository { Center save(Center center); boolean existsById(UUID id); @@ -17,8 +16,5 @@ default boolean doesNotExistById(UUID id) { } Optional
findCenterById(UUID id); List findCenterOverviewsByIds(List ids); - UUID findIdByAccountId(String accountId); - String findPasswordByAccountId(String accountId); void deleteAllInBatch(); - } diff --git a/src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java b/src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java index c8d03b148..99698f066 100644 --- a/src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java +++ b/src/main/java/com/somemore/domains/center/repository/center/CenterRepositoryImpl.java @@ -14,7 +14,7 @@ import java.util.UUID; @RequiredArgsConstructor -@Repository +@Repository("centerRepository") public class CenterRepositoryImpl implements CenterRepository { private final JPAQueryFactory queryFactory; @@ -61,28 +61,6 @@ public List findCenterOverviewsByIds(List ids) { .fetch(); } - @Override - public UUID findIdByAccountId(String accountId) { - - return queryFactory - .select(center.id) - .from(center) - .where(center.accountId.eq(accountId) - .and(isNotDeleted())) - .fetchOne(); - } - - @Override - public String findPasswordByAccountId(String accountId) { - - return queryFactory - .select(center.accountPw) - .from(center) - .where(center.accountId.eq(accountId) - .and(isNotDeleted())) - .fetchOne(); - } - @Override public void deleteAllInBatch() { centerJpaRepository.deleteAllInBatch(); diff --git a/src/main/java/com/somemore/domains/center/service/query/CenterSignService.java b/src/main/java/com/somemore/domains/center/service/query/CenterSignService.java deleted file mode 100644 index 3221e09c6..000000000 --- a/src/main/java/com/somemore/domains/center/service/query/CenterSignService.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.somemore.domains.center.service.query; - -import com.somemore.domains.center.repository.center.CenterRepository; -import com.somemore.domains.center.usecase.query.CenterSignUseCase; -import com.somemore.global.exception.BadRequestException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER; - -@Service -@Transactional -@RequiredArgsConstructor -public class CenterSignService implements CenterSignUseCase { - - private final CenterRepository centerRepository; - - @Override - public UUID getIdByAccountId(String accountId) { - UUID centerId = centerRepository.findIdByAccountId(accountId); - if (centerId == null) { - throw new BadRequestException(NOT_EXISTS_CENTER); - } - - return centerId; - } - - @Override - public String getPasswordByAccountId(String accountId) { - String password = centerRepository.findPasswordByAccountId(accountId); - if (password == null) { - throw new BadRequestException(NOT_EXISTS_CENTER); - } - - return password; - } -} diff --git a/src/main/java/com/somemore/domains/center/usecase/query/CenterSignUseCase.java b/src/main/java/com/somemore/domains/center/usecase/query/CenterSignUseCase.java deleted file mode 100644 index d572cabe5..000000000 --- a/src/main/java/com/somemore/domains/center/usecase/query/CenterSignUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.somemore.domains.center.usecase.query; - -import java.util.UUID; - -public interface CenterSignUseCase { - - UUID getIdByAccountId(String accountId); - String getPasswordByAccountId(String accountId); -} diff --git a/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java b/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java deleted file mode 100644 index 0373acc2b..000000000 --- a/src/main/java/com/somemore/domains/volunteer/controller/VolunteerSignController.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.somemore.domains.volunteer.controller; - -import com.somemore.domains.volunteer.usecase.GenerateOAuthUrlUseCase; -import com.somemore.global.auth.signout.usecase.SignOutUseCase; -import com.somemore.global.common.response.ApiResponse; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.view.RedirectView; - -@RestController -@Slf4j -@RequiredArgsConstructor -@RequestMapping("/api/volunteer") -@Tag(name = "Volunteer Sign API", description = "봉사자 로그인, 로그아웃") -public class VolunteerSignController { - - private final GenerateOAuthUrlUseCase generateOAuthUrlUseCase; - private final SignOutUseCase signOutUseCase; - - @PostMapping("/sign-in/oauth/{oauthProvider}") - public RedirectView signIn( - @Parameter(name = "oauthProvider", description = "OAuth 제공자 선택", example = "naver", required = true, schema = @Schema(allowableValues = {"naver"})) - @PathVariable("oauthProvider") String oauthProvider) { - - String redirectUrl = generateOAuthUrlUseCase.generateUrl(oauthProvider); - - return new RedirectView(redirectUrl); - } - - @PostMapping("/sign-out") - public ApiResponse signOut( - HttpServletResponse response, - @AuthenticationPrincipal String userId) { - - signOutUseCase.signOut(response, userId); - - return ApiResponse.ok("로그아웃되었습니다"); - } -} diff --git a/src/main/java/com/somemore/domains/volunteer/domain/Gender.java b/src/main/java/com/somemore/domains/volunteer/domain/Gender.java index 8b7f81b66..de8889065 100644 --- a/src/main/java/com/somemore/domains/volunteer/domain/Gender.java +++ b/src/main/java/com/somemore/domains/volunteer/domain/Gender.java @@ -14,6 +14,10 @@ public enum Gender { this.code = code; } + public static Gender getDefault() { + return UNDEFINED; + } + public static Gender from(String code) { for (Gender gender : Gender.values()) { if (gender.code.equalsIgnoreCase(code)) { diff --git a/src/main/java/com/somemore/domains/volunteer/domain/Tier.java b/src/main/java/com/somemore/domains/volunteer/domain/Tier.java index 6af0204d0..9caad73b8 100644 --- a/src/main/java/com/somemore/domains/volunteer/domain/Tier.java +++ b/src/main/java/com/somemore/domains/volunteer/domain/Tier.java @@ -12,4 +12,9 @@ public enum Tier { INDIGO, VIOLET, RAINBOW + ; + + public static Tier getDefault() { + return RED; + } } diff --git a/src/main/java/com/somemore/domains/volunteer/domain/Volunteer.java b/src/main/java/com/somemore/domains/volunteer/domain/Volunteer.java index 49b004787..d15ce300b 100644 --- a/src/main/java/com/somemore/domains/volunteer/domain/Volunteer.java +++ b/src/main/java/com/somemore/domains/volunteer/domain/Volunteer.java @@ -11,7 +11,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity -@Table(name = "volunteer") +@Table(name = "volunteer_old") // TODO 삭제될 엔티티(테이블) public class Volunteer extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.UUID) diff --git a/src/main/java/com/somemore/domains/volunteer/domain/VolunteerDetail.java b/src/main/java/com/somemore/domains/volunteer/domain/VolunteerDetail.java index d85dae750..59b3404d2 100644 --- a/src/main/java/com/somemore/domains/volunteer/domain/VolunteerDetail.java +++ b/src/main/java/com/somemore/domains/volunteer/domain/VolunteerDetail.java @@ -13,7 +13,7 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity -@Table(name = "volunteer_detail") +@Table(name = "volunteer_detail_old") // TODO 삭제될 엔티티(테이블) public class VolunteerDetail extends BaseEntity { @Id diff --git a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerJpaRepository.java b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerJpaRepository.java index 621a9b503..d35bc9c08 100644 --- a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerJpaRepository.java +++ b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerJpaRepository.java @@ -1,13 +1,16 @@ package com.somemore.domains.volunteer.repository; import com.somemore.domains.volunteer.domain.Volunteer; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import java.util.List; import java.util.UUID; -import org.springframework.data.jpa.repository.JpaRepository; +@Repository("oldVolunteerJpaRepository") public interface VolunteerJpaRepository extends JpaRepository { List findAllByIdInAndDeletedFalse(List ids); + boolean existsByIdAndDeletedIsFalse(UUID id); } diff --git a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepository.java b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepository.java index ee6ac42a8..35b7e24b4 100644 --- a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepository.java +++ b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepository.java @@ -7,9 +7,7 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -import org.springframework.stereotype.Repository; -@Repository public interface VolunteerRepository { Volunteer save(Volunteer volunteer); @@ -30,5 +28,7 @@ public interface VolunteerRepository { boolean existsByVolunteerId(UUID volunteerId); - default boolean doesNotExistsByVolunteerId(UUID volunteerId) { return !existsByVolunteerId(volunteerId); } + default boolean doesNotExistsByVolunteerId(UUID volunteerId) { + return !existsByVolunteerId(volunteerId); + } } diff --git a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImpl.java b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImpl.java index a7a301f06..744c8f2b7 100644 --- a/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImpl.java +++ b/src/main/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImpl.java @@ -14,12 +14,14 @@ import java.util.Optional; import java.util.UUID; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Repository; @RequiredArgsConstructor -@Repository +@Repository("oldVolunteerRepository") public class VolunteerRepositoryImpl implements VolunteerRepository { + @Qualifier("oldVolunteerJpaRepository") private final VolunteerJpaRepository volunteerJpaRepository; private final JPAQueryFactory queryFactory; diff --git a/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java b/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java deleted file mode 100644 index ffb0dd755..000000000 --- a/src/main/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.somemore.domains.volunteer.service; - -import com.somemore.domains.volunteer.usecase.GenerateOAuthUrlUseCase; -import com.somemore.global.auth.oauth.domain.OAuthProvider; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.web.util.UriComponentsBuilder; - -@Slf4j -@Service -@RequiredArgsConstructor -public class GenerateOAuthUrlService implements GenerateOAuthUrlUseCase { - - @Value("${app.back-url}") - private String backendRootUrl; - - @Override - public String generateUrl(String oAuthProvider) { - return UriComponentsBuilder.fromHttpUrl(generateBaseUrl()) - .pathSegment(OAuthProvider.from(oAuthProvider).getProviderName()) - .build() - .toUriString(); - } - - private String generateBaseUrl() { - return UriComponentsBuilder.fromHttpUrl(backendRootUrl) - .path("/oauth2/authorization") - .build() - .toUriString(); - } -} diff --git a/src/main/java/com/somemore/domains/volunteer/service/RegisterVolunteerService.java b/src/main/java/com/somemore/domains/volunteer/service/RegisterVolunteerService.java index fe0948a53..587a6d33d 100644 --- a/src/main/java/com/somemore/domains/volunteer/service/RegisterVolunteerService.java +++ b/src/main/java/com/somemore/domains/volunteer/service/RegisterVolunteerService.java @@ -2,10 +2,10 @@ import com.somemore.domains.volunteer.domain.Volunteer; import com.somemore.domains.volunteer.domain.VolunteerDetail; -import com.somemore.domains.volunteer.usecase.RegisterVolunteerUseCase; import com.somemore.domains.volunteer.dto.request.VolunteerRegisterRequestDto; import com.somemore.domains.volunteer.repository.VolunteerDetailRepository; import com.somemore.domains.volunteer.repository.VolunteerRepository; +import com.somemore.domains.volunteer.usecase.RegisterVolunteerUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/somemore/domains/volunteer/service/UpdateVolunteerProfileService.java b/src/main/java/com/somemore/domains/volunteer/service/UpdateVolunteerProfileService.java index c9ca42897..591e294e7 100644 --- a/src/main/java/com/somemore/domains/volunteer/service/UpdateVolunteerProfileService.java +++ b/src/main/java/com/somemore/domains/volunteer/service/UpdateVolunteerProfileService.java @@ -1,9 +1,9 @@ package com.somemore.domains.volunteer.service; import com.somemore.domains.volunteer.domain.Volunteer; +import com.somemore.domains.volunteer.repository.VolunteerRepository; import com.somemore.global.exception.BadRequestException; import com.somemore.domains.volunteer.dto.request.VolunteerProfileUpdateRequestDto; -import com.somemore.domains.volunteer.repository.VolunteerRepository; import com.somemore.domains.volunteer.usecase.UpdateVolunteerProfileUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/somemore/domains/volunteer/usecase/GenerateOAuthUrlUseCase.java b/src/main/java/com/somemore/domains/volunteer/usecase/GenerateOAuthUrlUseCase.java deleted file mode 100644 index a9b3db0f1..000000000 --- a/src/main/java/com/somemore/domains/volunteer/usecase/GenerateOAuthUrlUseCase.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.somemore.domains.volunteer.usecase; - -public interface GenerateOAuthUrlUseCase { - String generateUrl(String oAuthProvider); -} diff --git a/src/main/java/com/somemore/domains/volunteer/usecase/RegisterVolunteerUseCase.java b/src/main/java/com/somemore/domains/volunteer/usecase/RegisterVolunteerUseCase.java index 75d0028eb..3cf9236e1 100644 --- a/src/main/java/com/somemore/domains/volunteer/usecase/RegisterVolunteerUseCase.java +++ b/src/main/java/com/somemore/domains/volunteer/usecase/RegisterVolunteerUseCase.java @@ -3,5 +3,5 @@ import com.somemore.domains.volunteer.dto.request.VolunteerRegisterRequestDto; public interface RegisterVolunteerUseCase { - void registerVolunteer(VolunteerRegisterRequestDto dto); + void registerVolunteer(VolunteerRegisterRequestDto userId); } diff --git a/src/main/java/com/somemore/global/auth/controller/AuthController.java b/src/main/java/com/somemore/global/auth/controller/AuthController.java deleted file mode 100644 index f5fdeccde..000000000 --- a/src/main/java/com/somemore/global/auth/controller/AuthController.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.somemore.global.auth.controller; - -import com.somemore.global.auth.annotation.CurrentUser; -import com.somemore.global.auth.dto.UserInfoResponseDto; -import com.somemore.global.auth.jwt.domain.EncodedToken; -import com.somemore.global.auth.usecase.AuthQueryUseCase; -import com.somemore.global.common.response.ApiResponse; -import com.somemore.user.domain.UserRole; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.UUID; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/api/auth") -public class AuthController { - - private final AuthQueryUseCase authQueryUseCase; - - @GetMapping("/user-info") - public ApiResponse getUserInfo( - @CurrentUser UUID userId - ) { - UserRole role = authQueryUseCase.getRoleByUserId(userId); - - return ApiResponse.ok(HttpStatus.OK.value(), - UserInfoResponseDto.of(userId, role), - "유저 정보 응답 성공"); - } - - @GetMapping("/token") - public ApiResponse getToken( - @CurrentUser UUID userId - ) { - EncodedToken accessToken = authQueryUseCase.getAccessTokenByUserId(userId); - - return ApiResponse.ok(HttpStatus.OK.value(), - accessToken.getValueWithPrefix(), - "액세스 토큰 응답 성공"); - } -} diff --git a/src/main/java/com/somemore/global/auth/controller/SignController.java b/src/main/java/com/somemore/global/auth/controller/SignController.java deleted file mode 100644 index 151acbafa..000000000 --- a/src/main/java/com/somemore/global/auth/controller/SignController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.somemore.global.auth.controller; - -import com.somemore.global.auth.dto.SignRequestDto; -import com.somemore.global.auth.signout.usecase.SignOutUseCase; -import com.somemore.global.common.response.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/api") -@Tag(name = "Sign API", description = "ID,PW 로그인, 로그아웃") -public class SignController { - - private final SignOutUseCase signOutUseCase; - - /* - * ID 및 PW 기반 로그인 엔드포인트 (Swagger 문서화를 위한 엔드포인트) - * - * 이 엔드포인트는 실제로 작동하지 않으며, Spring Security 필터 체인에 의해 요청이 처리됩니다. - * 로그인 요청은 필터에서 가로채어 인증 절차를 수행하며, 이 엔드포인트로 전달되지 않습니다. - * 따라서 이 엔드포인트는 로그인 요청의 처리를 위한 진입점이 아니라, - * Swagger API 문서화를 위해 정의된 엔드포인트입니다. - * - * 실제 로그인 절차는 필터에서 처리됩니다. - */ - @PostMapping("/sign-in/id-pw") - public ApiResponse signIn( - @RequestParam SignRequestDto signRequestDto - ) { - return ApiResponse.ok("로그인되었습니다."); - } - - @PostMapping("/sign-out") - public ApiResponse signOut( - HttpServletResponse response, - @AuthenticationPrincipal String userId) { - - signOutUseCase.signOut(response, userId); - - return ApiResponse.ok("로그아웃되었습니다"); - } -} diff --git a/src/main/java/com/somemore/global/auth/dto/UserInfoResponseDto.java b/src/main/java/com/somemore/global/auth/dto/UserInfoResponseDto.java deleted file mode 100644 index 3e2ccbd81..000000000 --- a/src/main/java/com/somemore/global/auth/dto/UserInfoResponseDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.somemore.global.auth.dto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.somemore.user.domain.UserRole; -import io.swagger.v3.oas.annotations.media.Schema; - -import java.util.UUID; - -@Schema(description = "유저 정보 DTO") -public record UserInfoResponseDto( - @JsonProperty("USER_ID") - @Schema(description = "유저 ID") - String userId, - - @JsonProperty("ROLE") - @Schema(description = "유저 ROLE") - String role -) { - public static UserInfoResponseDto of(UUID userId, UserRole role) { - return new UserInfoResponseDto(userId.toString(), role.getAuthority()); - } -} diff --git a/src/main/java/com/somemore/global/auth/idpw/provider/CustomAuthenticationProvider.java b/src/main/java/com/somemore/global/auth/idpw/provider/CustomAuthenticationProvider.java index 9720a703e..d81f9031b 100644 --- a/src/main/java/com/somemore/global/auth/idpw/provider/CustomAuthenticationProvider.java +++ b/src/main/java/com/somemore/global/auth/idpw/provider/CustomAuthenticationProvider.java @@ -32,7 +32,7 @@ public Authentication authenticate(Authentication authentication) throws Authent User user = userQueryUseCase.getByAccountId(accountId); - validatePassword(rawAccountPassword, user.getPassword()); + validatePassword(rawAccountPassword, user.getAccountPassword()); EncodedToken accessToken = generateAccessToken(user); diff --git a/src/main/java/com/somemore/global/auth/jwt/controller/TokenExchangeController.java b/src/main/java/com/somemore/global/auth/jwt/controller/TokenExchangeController.java new file mode 100644 index 000000000..1adc89f43 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/jwt/controller/TokenExchangeController.java @@ -0,0 +1,34 @@ +package com.somemore.global.auth.jwt.controller; + +import com.somemore.global.auth.annotation.CurrentUser; +import com.somemore.global.auth.jwt.domain.EncodedToken; +import com.somemore.global.auth.jwt.manager.TokenManager; +import com.somemore.global.common.response.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/auth/token") +@Tag(name = "Token Exchange API", description = "SignInToken을 AccessToken으로 교환하는 API") +public class TokenExchangeController { + + private final TokenManager tokenManager; + + @GetMapping("/exchange") + public ApiResponse exchangeToken( + @CurrentUser UUID userId + ) { + EncodedToken accessToken = tokenManager.getAccessTokenByUserId(userId); + + return ApiResponse.ok(HttpStatus.OK.value(), + accessToken.getValueWithPrefix(), + "액세스 토큰 응답 성공"); + } +} diff --git a/src/main/java/com/somemore/global/auth/jwt/domain/EncodedToken.java b/src/main/java/com/somemore/global/auth/jwt/domain/EncodedToken.java index 311d37170..beeda1f09 100644 --- a/src/main/java/com/somemore/global/auth/jwt/domain/EncodedToken.java +++ b/src/main/java/com/somemore/global/auth/jwt/domain/EncodedToken.java @@ -5,6 +5,10 @@ public record EncodedToken(String value) { private static final String UNINITIALIZED = "UNINITIALIZED"; private static final String PREFIX = "Bearer "; + public static EncodedToken from(String value) { + return new EncodedToken(value); + } + public String getValueWithPrefix() { return PREFIX + this.value; } diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/domain/RefreshToken.java b/src/main/java/com/somemore/global/auth/jwt/domain/RefreshToken.java similarity index 89% rename from src/main/java/com/somemore/global/auth/jwt/refresh/domain/RefreshToken.java rename to src/main/java/com/somemore/global/auth/jwt/domain/RefreshToken.java index e1368c9d9..fcc436a07 100644 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/domain/RefreshToken.java +++ b/src/main/java/com/somemore/global/auth/jwt/domain/RefreshToken.java @@ -1,6 +1,5 @@ -package com.somemore.global.auth.jwt.refresh.domain; +package com.somemore.global.auth.jwt.domain; -import com.somemore.global.auth.jwt.domain.EncodedToken; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/somemore/global/auth/jwt/filter/JwtAuthFilter.java b/src/main/java/com/somemore/global/auth/jwt/filter/JwtAuthFilter.java index 18f0ce917..8bd75bf94 100644 --- a/src/main/java/com/somemore/global/auth/jwt/filter/JwtAuthFilter.java +++ b/src/main/java/com/somemore/global/auth/jwt/filter/JwtAuthFilter.java @@ -76,7 +76,7 @@ private static EncodedToken findAccessTokenFromHeader(HttpServletRequest request return EncodedToken.createUninitialized(); } - return new EncodedToken(authorizationHeader); + return EncodedToken.from(authorizationHeader); } private EncodedToken findAccessTokenFromCookie(HttpServletRequest request) { diff --git a/src/main/java/com/somemore/global/auth/jwt/generator/HmacJwtGenerator.java b/src/main/java/com/somemore/global/auth/jwt/generator/HmacJwtGenerator.java index 6d00476c4..a1ecf53f1 100644 --- a/src/main/java/com/somemore/global/auth/jwt/generator/HmacJwtGenerator.java +++ b/src/main/java/com/somemore/global/auth/jwt/generator/HmacJwtGenerator.java @@ -26,13 +26,15 @@ public EncodedToken generateToken(String userId, String role, TokenType tokenTyp Instant expiration = now.plusMillis(tokenType.getPeriodInMillis()); String uniqueId = UUID.randomUUID().toString(); // JTI - return new EncodedToken(Jwts.builder() - .claims(claims) - .id(uniqueId) - .issuedAt(Date.from(now)) - .expiration(Date.from(expiration)) - .signWith(secretKey, ALGORITHM) - .compact()); + return EncodedToken.from( + Jwts.builder() + .claims(claims) + .id(uniqueId) + .issuedAt(Date.from(now)) + .expiration(Date.from(expiration)) + .signWith(secretKey, ALGORITHM) + .compact() + ); } private static Claims buildClaims(String userId, String role) { diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/manager/RedisRefreshTokenManager.java b/src/main/java/com/somemore/global/auth/jwt/manager/RedisTokenManager.java similarity index 64% rename from src/main/java/com/somemore/global/auth/jwt/refresh/manager/RedisRefreshTokenManager.java rename to src/main/java/com/somemore/global/auth/jwt/manager/RedisTokenManager.java index 1185a3fde..f0536ce6f 100644 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/manager/RedisRefreshTokenManager.java +++ b/src/main/java/com/somemore/global/auth/jwt/manager/RedisTokenManager.java @@ -1,10 +1,10 @@ -package com.somemore.global.auth.jwt.refresh.manager; +package com.somemore.global.auth.jwt.manager; import com.somemore.global.auth.jwt.domain.EncodedToken; import com.somemore.global.auth.jwt.exception.JwtErrorType; import com.somemore.global.auth.jwt.exception.JwtException; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; -import com.somemore.global.auth.jwt.refresh.repository.RefreshTokenRepository; +import com.somemore.global.auth.jwt.domain.RefreshToken; +import com.somemore.global.auth.jwt.repository.RefreshTokenRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,20 +12,22 @@ @Service @RequiredArgsConstructor -public class RedisRefreshTokenManager implements RefreshTokenManager { +public class RedisTokenManager implements TokenManager { private final RefreshTokenRepository refreshTokenRepository; @Override - public RefreshToken findRefreshTokenByAccessToken(EncodedToken accessToken) { + public RefreshToken getRefreshTokenByAccessToken(EncodedToken accessToken) { return refreshTokenRepository.findByAccessToken(accessToken.value()) .orElseThrow(() -> new JwtException(JwtErrorType.EXPIRED_TOKEN)); } @Override - public RefreshToken findRefreshTokenByUserId(UUID userId) { - return refreshTokenRepository.findByUserId(userId.toString()) + public EncodedToken getAccessTokenByUserId(UUID userId) { + RefreshToken refreshToken = refreshTokenRepository.findByUserId(userId.toString()) .orElseThrow(() -> new JwtException(JwtErrorType.EXPIRED_TOKEN)); + + return EncodedToken.from(refreshToken.getAccessToken()); } @Override diff --git a/src/main/java/com/somemore/global/auth/jwt/manager/TokenManager.java b/src/main/java/com/somemore/global/auth/jwt/manager/TokenManager.java new file mode 100644 index 000000000..edec9be15 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/jwt/manager/TokenManager.java @@ -0,0 +1,16 @@ +package com.somemore.global.auth.jwt.manager; + +import com.somemore.global.auth.jwt.domain.EncodedToken; +import com.somemore.global.auth.jwt.domain.RefreshToken; + +import java.util.UUID; + +public interface TokenManager { + RefreshToken getRefreshTokenByAccessToken(EncodedToken accessToken); + + EncodedToken getAccessTokenByUserId(UUID userId); + + void save(RefreshToken refreshToken); + + void removeRefreshToken(String userId); +} diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/manager/RefreshTokenManager.java b/src/main/java/com/somemore/global/auth/jwt/refresh/manager/RefreshTokenManager.java deleted file mode 100644 index d4598d14c..000000000 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/manager/RefreshTokenManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.somemore.global.auth.jwt.refresh.manager; - -import com.somemore.global.auth.jwt.domain.EncodedToken; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; - -import java.util.UUID; - -public interface RefreshTokenManager { - RefreshToken findRefreshTokenByAccessToken(EncodedToken accessToken); - - RefreshToken findRefreshTokenByUserId(UUID userId); - - void save(RefreshToken refreshToken); - - void removeRefreshToken(String userId); -} diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/refresher/DefaultJwtRefresher.java b/src/main/java/com/somemore/global/auth/jwt/refresher/DefaultJwtRefresher.java similarity index 68% rename from src/main/java/com/somemore/global/auth/jwt/refresh/refresher/DefaultJwtRefresher.java rename to src/main/java/com/somemore/global/auth/jwt/refresher/DefaultJwtRefresher.java index 86430634e..73cffbd3a 100644 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/refresher/DefaultJwtRefresher.java +++ b/src/main/java/com/somemore/global/auth/jwt/refresher/DefaultJwtRefresher.java @@ -1,11 +1,11 @@ -package com.somemore.global.auth.jwt.refresh.refresher; +package com.somemore.global.auth.jwt.refresher; import com.somemore.global.auth.jwt.domain.EncodedToken; import com.somemore.global.auth.jwt.domain.TokenType; import com.somemore.global.auth.jwt.generator.JwtGenerator; import com.somemore.global.auth.jwt.parser.JwtParser; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; +import com.somemore.global.auth.jwt.domain.RefreshToken; +import com.somemore.global.auth.jwt.manager.TokenManager; import com.somemore.global.auth.jwt.validator.JwtValidator; import io.jsonwebtoken.Claims; import lombok.RequiredArgsConstructor; @@ -17,22 +17,22 @@ @Slf4j public class DefaultJwtRefresher implements JwtRefresher { - private final RefreshTokenManager refreshTokenManager; + private final TokenManager tokenManager; private final JwtValidator jwtValidator; private final JwtParser jwtParser; private final JwtGenerator jwtGenerator; @Override public EncodedToken refreshAccessToken(EncodedToken accessToken) { - RefreshToken refreshToken = refreshTokenManager.findRefreshTokenByAccessToken(accessToken); - EncodedToken refreshTokenValue = new EncodedToken(refreshToken.getRefreshToken()); + RefreshToken refreshToken = tokenManager.getRefreshTokenByAccessToken(accessToken); + EncodedToken refreshTokenValue = EncodedToken.from(refreshToken.getRefreshToken()); jwtValidator.validateToken(refreshTokenValue); Claims claims = jwtParser.parseToken(refreshTokenValue); refreshToken.updateAccessToken(generateAccessToken(claims)); - refreshTokenManager.save(refreshToken); + tokenManager.save(refreshToken); - return new EncodedToken(refreshToken.getAccessToken()); + return EncodedToken.from(refreshToken.getAccessToken()); } private EncodedToken generateAccessToken(Claims claims) { diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/refresher/JwtRefresher.java b/src/main/java/com/somemore/global/auth/jwt/refresher/JwtRefresher.java similarity index 73% rename from src/main/java/com/somemore/global/auth/jwt/refresh/refresher/JwtRefresher.java rename to src/main/java/com/somemore/global/auth/jwt/refresher/JwtRefresher.java index 962deb2a9..cc3e4cec2 100644 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/refresher/JwtRefresher.java +++ b/src/main/java/com/somemore/global/auth/jwt/refresher/JwtRefresher.java @@ -1,4 +1,4 @@ -package com.somemore.global.auth.jwt.refresh.refresher; +package com.somemore.global.auth.jwt.refresher; import com.somemore.global.auth.jwt.domain.EncodedToken; diff --git a/src/main/java/com/somemore/global/auth/jwt/refresh/repository/RefreshTokenRepository.java b/src/main/java/com/somemore/global/auth/jwt/repository/RefreshTokenRepository.java similarity index 74% rename from src/main/java/com/somemore/global/auth/jwt/refresh/repository/RefreshTokenRepository.java rename to src/main/java/com/somemore/global/auth/jwt/repository/RefreshTokenRepository.java index 289ac501b..562778aae 100644 --- a/src/main/java/com/somemore/global/auth/jwt/refresh/repository/RefreshTokenRepository.java +++ b/src/main/java/com/somemore/global/auth/jwt/repository/RefreshTokenRepository.java @@ -1,6 +1,6 @@ -package com.somemore.global.auth.jwt.refresh.repository; +package com.somemore.global.auth.jwt.repository; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; +import com.somemore.global.auth.jwt.domain.RefreshToken; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/somemore/global/auth/jwt/service/GenerateTokensOnLoginService.java b/src/main/java/com/somemore/global/auth/jwt/service/GenerateTokensOnLoginService.java index fc62ddc4d..455689fd2 100644 --- a/src/main/java/com/somemore/global/auth/jwt/service/GenerateTokensOnLoginService.java +++ b/src/main/java/com/somemore/global/auth/jwt/service/GenerateTokensOnLoginService.java @@ -4,8 +4,8 @@ import com.somemore.global.auth.jwt.domain.EncodedToken; import com.somemore.global.auth.jwt.domain.TokenType; import com.somemore.global.auth.jwt.generator.JwtGenerator; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; +import com.somemore.global.auth.jwt.domain.RefreshToken; +import com.somemore.global.auth.jwt.manager.TokenManager; import com.somemore.global.auth.jwt.usecase.GenerateTokensOnLoginUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -21,7 +21,7 @@ public class GenerateTokensOnLoginService implements GenerateTokensOnLoginUseCase { private final JwtGenerator jwtGenerator; - private final RefreshTokenManager refreshTokenManager; + private final TokenManager tokenManager; @Override public EncodedToken generateLoginToken(UUID userId, UserRole role) { @@ -54,6 +54,6 @@ private RefreshToken generateRefreshTokenWithAccessToken(UUID userId, UserRole r } private void saveRefreshToken(RefreshToken refreshToken) { - refreshTokenManager.save(refreshToken); + tokenManager.save(refreshToken); } } diff --git a/src/main/java/com/somemore/global/auth/jwt/service/JwtService.java b/src/main/java/com/somemore/global/auth/jwt/service/JwtService.java index 43600e8d3..d4ddb48f1 100644 --- a/src/main/java/com/somemore/global/auth/jwt/service/JwtService.java +++ b/src/main/java/com/somemore/global/auth/jwt/service/JwtService.java @@ -7,7 +7,7 @@ import com.somemore.global.auth.jwt.exception.JwtException; import com.somemore.global.auth.jwt.generator.JwtGenerator; import com.somemore.global.auth.jwt.parser.JwtParser; -import com.somemore.global.auth.jwt.refresh.refresher.JwtRefresher; +import com.somemore.global.auth.jwt.refresher.JwtRefresher; import com.somemore.global.auth.jwt.usecase.JwtUseCase; import com.somemore.global.auth.jwt.validator.JwtValidator; import io.jsonwebtoken.Claims; @@ -24,7 +24,6 @@ public class JwtService implements JwtUseCase { private final JwtParser jwtParser; private final JwtValidator jwtValidator; private final JwtRefresher jwtRefresher; - private final CookieUseCase cookieUseCase; @Override public EncodedToken generateToken(String userId, String role, TokenType tokenType) { @@ -48,7 +47,7 @@ public Claims getClaims(EncodedToken token) { private void handleJwtExpiredException(JwtException e, EncodedToken accessToken, HttpServletResponse response) { if (e.getErrorType() == JwtErrorType.EXPIRED_TOKEN) { EncodedToken refreshedToken = jwtRefresher.refreshAccessToken(accessToken); - cookieUseCase.setToken(response, refreshedToken.value(), TokenType.ACCESS); + // TODO 프론트엔드와 협의 : 만료된 액세스 토큰 관리 방법 return; } throw e; diff --git a/src/main/java/com/somemore/global/auth/sign/in/SignInController.java b/src/main/java/com/somemore/global/auth/sign/in/SignInController.java new file mode 100644 index 000000000..822b4665e --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/in/SignInController.java @@ -0,0 +1,57 @@ +package com.somemore.global.auth.sign.in; + +import com.somemore.global.common.response.ApiResponse; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping() +@Tag(name = "SignIn API", description = "유저 로그인") +public class SignInController { + + /** + * ID 및 PW 기반 로그인 엔드포인트 (Swagger 문서화를 위한 더미 엔드포인트) + *

+ * 이 엔드포인트는 실제로 동작하지 않으며, Spring Security의 필터 체인에 의해 요청이 처리됩니다. + * 사용자가 ID/PW로 로그인을 시도하면, 해당 요청은 Spring Security 필터 체인에서 가로채어 인증 절차를 수행하며, + * 이 엔드포인트로 전달되지 않습니다. + *

+ * 따라서 이 엔드포인트는 실제 인증 로직과는 무관하며, Swagger API 문서화를 위해 정의된 것입니다. + *

+ * 실제 인증 절차는 Spring Security의 필터에서 처리됩니다. + */ + @PostMapping("/api/sign-in/id-pw") + public ApiResponse signIn( + @RequestBody SignInRequestDto signInRequestDto) { + return ApiResponse.ok("로그인되었습니다."); + } + + /** + * OAuth2 소셜 로그인 엔드포인트 (Swagger 문서화를 위한 더미 엔드포인트) + *

+ * 이 엔드포인트는 실제로 동작하지 않으며, Spring Security가 제공하는 OAuth2 클라이언트 기능에 의해 처리됩니다. + * 클라이언트가 특정 OAuth 제공자(Naver, Kakao 등)로 로그인 요청을 보내면, + * 요청은 Spring Security의 OAuth2 필터 체인에 의해 가로채어 처리되며, 이 엔드포인트로 전달되지 않습니다. + *

+ * 따라서 이 엔드포인트는 실제 소셜 로그인 처리를 위한 진입점이 아니라, + * Swagger API 문서화를 위해 정의된 것입니다. + *

+ * 실제 OAuth2 로그인 절차는 Spring Security가 처리합니다. + */ + @GetMapping("oauth2/authorization/{oauthProvider}") + public ApiResponse signIn( + @Parameter(name = "oauthProvider", description = "OAuth 제공자 선택", example = "naver", required = true, schema = @Schema(allowableValues = {"naver, kakao"})) + @PathVariable("oauthProvider") String oauthProvider) { + + return ApiResponse.ok("로그인되었습니다."); + } +} diff --git a/src/main/java/com/somemore/global/auth/dto/SignRequestDto.java b/src/main/java/com/somemore/global/auth/sign/in/SignInRequestDto.java similarity index 84% rename from src/main/java/com/somemore/global/auth/dto/SignRequestDto.java rename to src/main/java/com/somemore/global/auth/sign/in/SignInRequestDto.java index dca6711c1..462171e35 100644 --- a/src/main/java/com/somemore/global/auth/dto/SignRequestDto.java +++ b/src/main/java/com/somemore/global/auth/sign/in/SignInRequestDto.java @@ -1,11 +1,11 @@ -package com.somemore.global.auth.dto; +package com.somemore.global.auth.sign.in; import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; import io.swagger.v3.oas.annotations.media.Schema; @JsonNaming(SnakeCaseStrategy.class) -public record SignRequestDto( +public record SignInRequestDto( @Schema(description = "ID", example = "somemore") String accountId, @Schema(description = "PW", example = "password1234") diff --git a/src/main/java/com/somemore/global/auth/sign/out/SignOutController.java b/src/main/java/com/somemore/global/auth/sign/out/SignOutController.java new file mode 100644 index 000000000..b7a07c45f --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/out/SignOutController.java @@ -0,0 +1,31 @@ +package com.somemore.global.auth.sign.out; + +import com.somemore.global.auth.annotation.CurrentUser; +import com.somemore.global.common.response.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.UUID; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api") +@Tag(name = "SignOut API", description = "유저 로그아웃") +public class SignOutController { + + private final SignOutUseCase signOutUseCase; + + @PostMapping("/sign-out") + public ApiResponse signOut( + HttpServletResponse response, + @CurrentUser UUID userId) { + + signOutUseCase.signOut(response, userId); + + return ApiResponse.ok("로그아웃되었습니다"); + } +} diff --git a/src/main/java/com/somemore/global/auth/sign/out/SignOutService.java b/src/main/java/com/somemore/global/auth/sign/out/SignOutService.java new file mode 100644 index 000000000..1a12ec668 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/out/SignOutService.java @@ -0,0 +1,27 @@ +package com.somemore.global.auth.sign.out; + +import com.somemore.global.auth.jwt.manager.TokenManager; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Slf4j +@Service +@RequiredArgsConstructor +@Transactional +public class SignOutService implements SignOutUseCase { + + private final TokenManager tokenManager; + + @Override + public void signOut( + HttpServletResponse response, + UUID userId) { + + tokenManager.removeRefreshToken(userId.toString()); + } +} diff --git a/src/main/java/com/somemore/global/auth/sign/out/SignOutUseCase.java b/src/main/java/com/somemore/global/auth/sign/out/SignOutUseCase.java new file mode 100644 index 000000000..4a5ca4821 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/out/SignOutUseCase.java @@ -0,0 +1,10 @@ +package com.somemore.global.auth.sign.out; + +import jakarta.servlet.http.HttpServletResponse; + +import java.util.UUID; + +public interface SignOutUseCase { + + void signOut(HttpServletResponse response, UUID userId); +} diff --git a/src/main/java/com/somemore/global/auth/sign/up/SignUpController.java b/src/main/java/com/somemore/global/auth/sign/up/SignUpController.java new file mode 100644 index 000000000..0b278ba2a --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/up/SignUpController.java @@ -0,0 +1,27 @@ +package com.somemore.global.auth.sign.up; + +import com.somemore.global.common.response.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api") +@Tag(name = "SignUp API", description = "유저 회원가입") +public class SignUpController { + + private final SignUpUseCase signUpUseCase; + + @PostMapping("/sign-up") + public ApiResponse signUp( + @RequestBody SignUpRequestDto signUpRequestDto + ) { + signUpUseCase.signUp(signUpRequestDto); + + return ApiResponse.ok("회원가입 되었습니다"); + } +} diff --git a/src/main/java/com/somemore/global/auth/sign/up/SignUpRequestDto.java b/src/main/java/com/somemore/global/auth/sign/up/SignUpRequestDto.java new file mode 100644 index 000000000..34c8f2460 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/up/SignUpRequestDto.java @@ -0,0 +1,23 @@ +package com.somemore.global.auth.sign.up; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +public record SignUpRequestDto( + + @Schema(description = "계정 ID", example = "making") + @NotBlank(message = "계정 ID는 필수 값이며 비어 있을 수 없습니다.") + String accountId, + + @Schema(description = "계정 비밀번호", example = "password") + @NotBlank(message = "계정 비밀번호는 필수 값이며 비어 있을 수 없습니다.") + String accountPassword, + + @Schema(description = "유저 역할", example = "VOLUNTEER", allowableValues = {"VOLUNTEER", "CENTER"}) + @NotBlank(message = "유저 역할은 필수 값이며 비어 있을 수 없습니다.") + String userRole +) { +} \ No newline at end of file diff --git a/src/main/java/com/somemore/global/auth/sign/up/SignUpService.java b/src/main/java/com/somemore/global/auth/sign/up/SignUpService.java new file mode 100644 index 000000000..335fbf3c2 --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/up/SignUpService.java @@ -0,0 +1,46 @@ +package com.somemore.global.auth.sign.up; + +import com.somemore.center.usecase.NEWRegisterCenterUseCase; +import com.somemore.user.domain.User; +import com.somemore.user.domain.UserRole; +import com.somemore.user.dto.UserAuthInfo; +import com.somemore.user.service.RegisterUserUseCase; +import com.somemore.volunteer.usecase.NEWRegisterVolunteerUseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +@Transactional +public class SignUpService implements SignUpUseCase { + + private final RegisterUserUseCase registerUserUseCase; + private final NEWRegisterVolunteerUseCase NEWRegisterVolunteerUseCase; + private final NEWRegisterCenterUseCase NEWRegisterCenterUseCase; + + @Override + public void signUp(SignUpRequestDto signUpRequestDto) { + User user = registerUserUseCase.registerLocalUser( + UserAuthInfo.of(signUpRequestDto.accountId(), signUpRequestDto.accountPassword()), + UserRole.from(signUpRequestDto.userRole())); + + // TODO 회원가입 이벤트 발행으로 변경 (봉사자 혹은 기관 등록) + // 임시 로직 + registerVolunteerOrCenter(user); + } + + private void registerVolunteerOrCenter(User user) { + UUID userId = user.getId(); + UserRole role = user.getRole(); + + if (role == UserRole.VOLUNTEER) { + NEWRegisterVolunteerUseCase.register(userId); + return; + } + + NEWRegisterCenterUseCase.register(userId); + } +} diff --git a/src/main/java/com/somemore/global/auth/sign/up/SignUpUseCase.java b/src/main/java/com/somemore/global/auth/sign/up/SignUpUseCase.java new file mode 100644 index 000000000..44e71b39e --- /dev/null +++ b/src/main/java/com/somemore/global/auth/sign/up/SignUpUseCase.java @@ -0,0 +1,6 @@ +package com.somemore.global.auth.sign.up; + +public interface SignUpUseCase { + + void signUp(SignUpRequestDto signUpRequestDto); +} diff --git a/src/main/java/com/somemore/global/auth/signout/service/SignOutService.java b/src/main/java/com/somemore/global/auth/signout/service/SignOutService.java deleted file mode 100644 index 0172f03b7..000000000 --- a/src/main/java/com/somemore/global/auth/signout/service/SignOutService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.somemore.global.auth.signout.service; - -import com.somemore.global.auth.cookie.CookieUseCase; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; -import com.somemore.global.auth.signout.usecase.SignOutUseCase; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Slf4j -@Service -@RequiredArgsConstructor -@Transactional -public class SignOutService implements SignOutUseCase { - - private final CookieUseCase cookieUseCase; - private final RefreshTokenManager refreshTokenManager; - - @Override - public void signOut( - HttpServletResponse response, - String volunteerId) { - - cookieUseCase.deleteAccessToken(response); - refreshTokenManager.removeRefreshToken(volunteerId); - } -} diff --git a/src/main/java/com/somemore/global/auth/signout/usecase/SignOutUseCase.java b/src/main/java/com/somemore/global/auth/signout/usecase/SignOutUseCase.java deleted file mode 100644 index 480d9abe4..000000000 --- a/src/main/java/com/somemore/global/auth/signout/usecase/SignOutUseCase.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.somemore.global.auth.signout.usecase; - -import jakarta.servlet.http.HttpServletResponse; - -public interface SignOutUseCase { - - void signOut(HttpServletResponse response, String volunteerId); -} diff --git a/src/main/java/com/somemore/global/auth/usecase/AuthQueryService.java b/src/main/java/com/somemore/global/auth/usecase/AuthQueryService.java deleted file mode 100644 index 9da0b7180..000000000 --- a/src/main/java/com/somemore/global/auth/usecase/AuthQueryService.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.somemore.global.auth.usecase; - -import com.somemore.global.auth.jwt.domain.EncodedToken; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; -import com.somemore.user.domain.UserRole; -import com.somemore.user.usecase.UserQueryUseCase; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.UUID; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class AuthQueryService implements AuthQueryUseCase { - - private final UserQueryUseCase userQueryUseCase; - private final RefreshTokenManager refreshTokenManager; - - @Override - public UserRole getRoleByUserId(UUID userId) { - return userQueryUseCase.getRoleById(userId); - } - - @Override - public EncodedToken getAccessTokenByUserId(UUID userId) { - return new EncodedToken( - refreshTokenManager.findRefreshTokenByUserId(userId) - .getAccessToken()); - } -} diff --git a/src/main/java/com/somemore/global/auth/usecase/AuthQueryUseCase.java b/src/main/java/com/somemore/global/auth/usecase/AuthQueryUseCase.java deleted file mode 100644 index 74caed416..000000000 --- a/src/main/java/com/somemore/global/auth/usecase/AuthQueryUseCase.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.somemore.global.auth.usecase; - -import com.somemore.global.auth.jwt.domain.EncodedToken; -import com.somemore.user.domain.UserRole; - -import java.util.UUID; - -public interface AuthQueryUseCase { - UserRole getRoleByUserId(UUID userId); - EncodedToken getAccessTokenByUserId(UUID userId); -} diff --git a/src/main/java/com/somemore/global/common/response/ApiResponse.java b/src/main/java/com/somemore/global/common/response/ApiResponse.java index c88f32b39..427ddf281 100644 --- a/src/main/java/com/somemore/global/common/response/ApiResponse.java +++ b/src/main/java/com/somemore/global/common/response/ApiResponse.java @@ -3,11 +3,14 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.http.HttpStatus; @NoArgsConstructor @Getter public class ApiResponse { + public static final String EMPTY = ""; + @Schema(description = "응답 상태 코드. 성공 시 200, 실패 시 오류 코드", example = "200") private int code; @Schema(description = "응답에 대한 메시지. 요청 성공/실패에 대한 설명", example = "요청 성공") @@ -15,16 +18,20 @@ public class ApiResponse { @Schema(description = "API 요청 처리 결과로 반환되는 데이터") private T data; - public static ApiResponse ok(int status, T data, String message) { - return new ApiResponse<>(status, message, data); + public static ApiResponse ok(String message) { + return new ApiResponse<>(HttpStatus.OK.value(), message, ""); + } + + public static ApiResponse ok(T data, String message) { + return new ApiResponse<>(HttpStatus.OK.value(), message, data); } public static ApiResponse ok(int status, String message) { - return new ApiResponse<>(status, message, ""); + return new ApiResponse<>(status, message, EMPTY); } - public static ApiResponse ok(String message) { - return new ApiResponse<>(200, message, ""); + public static ApiResponse ok(int status, T data, String message) { + return new ApiResponse<>(status, message, data); } public ApiResponse(int code, String message, T data) { diff --git a/src/main/java/com/somemore/user/controller/UserQueryController.java b/src/main/java/com/somemore/user/controller/UserQueryController.java new file mode 100644 index 000000000..e72c2d18f --- /dev/null +++ b/src/main/java/com/somemore/user/controller/UserQueryController.java @@ -0,0 +1,31 @@ +package com.somemore.user.controller; + +import com.somemore.global.common.response.ApiResponse; +import com.somemore.user.usecase.UserQueryUseCase; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Tag(name = "User Query API", description = "유저 조회 관련 API") +@RestController +@Slf4j +@RequiredArgsConstructor +@RequestMapping("/api/user") +public class UserQueryController { + + private final UserQueryUseCase userQueryUseCase; + + @GetMapping("/exists/") + @Operation(summary = "아이디 중복 확인", description = "입력한 아이디가 중복되었는지 확인합니다.") + public ApiResponse checkUserExists( + @RequestParam String accountId + ) { + boolean isAccountIdDuplicate = userQueryUseCase.isDuplicateAccountId(accountId); + return ApiResponse.ok(isAccountIdDuplicate, "중복 조회 완료"); + } +} diff --git a/src/main/java/com/somemore/user/domain/User.java b/src/main/java/com/somemore/user/domain/User.java index 2746f5702..acebfaa13 100644 --- a/src/main/java/com/somemore/user/domain/User.java +++ b/src/main/java/com/somemore/user/domain/User.java @@ -31,26 +31,26 @@ public class User extends BaseEntity { @Column(name = "account_id", nullable = false) private String accountId; - @Column(name = "password", nullable = false) - private String password; + @Column(name = "account_password", nullable = false) + private String accountPassword; @Enumerated(EnumType.STRING) @Column(name = "role", nullable = false) private UserRole role; - public static User from(UserAuthInfo userAuthInfo, UserRole role) { + public static User of(UserAuthInfo userAuthInfo, UserRole role) { return User.builder() .accountId(userAuthInfo.accountId()) - .password(userAuthInfo.password()) + .accountPassword(userAuthInfo.accountPassword()) .role(role) .build(); } @Builder - private User(String accountId, String password, UserRole role) { + private User(String accountId, String accountPassword, UserRole role) { this.accountId = accountId; - this.password = password; + this.accountPassword = accountPassword; this.role = role; } } diff --git a/src/main/java/com/somemore/user/domain/UserCommonAttribute.java b/src/main/java/com/somemore/user/domain/UserCommonAttribute.java index b23e49a44..e5c596b70 100644 --- a/src/main/java/com/somemore/user/domain/UserCommonAttribute.java +++ b/src/main/java/com/somemore/user/domain/UserCommonAttribute.java @@ -33,6 +33,9 @@ public class UserCommonAttribute extends BaseEntity { @Column(name = "nickname", nullable = false) private String nickname; + @Column(name = "contact_number", nullable = false) + private String contactNumber; + @Column(name = "img_url", nullable = false) private String imgUrl; @@ -51,6 +54,7 @@ public static UserCommonAttribute createDefault(UUID userId) { return UserCommonAttribute.builder() .userId(userId) .nickname(String.valueOf(UUID.randomUUID()).substring(0, 8)) + .contactNumber("") .imgUrl(ImageUploadService.DEFAULT_IMAGE_URL) .introduce("") .isCustomized(false) @@ -58,9 +62,10 @@ public static UserCommonAttribute createDefault(UUID userId) { } @Builder - private UserCommonAttribute(UUID userId, String nickname, String imgUrl, String introduce, boolean isCustomized) { + private UserCommonAttribute(UUID userId, String nickname, String contactNumber, String imgUrl, String introduce, boolean isCustomized) { this.userId = userId; this.nickname = nickname; + this.contactNumber = contactNumber; this.imgUrl = imgUrl; this.introduce = introduce; this.isCustomized = isCustomized; diff --git a/src/main/java/com/somemore/user/dto/UserAuthInfo.java b/src/main/java/com/somemore/user/dto/UserAuthInfo.java index b210496f0..674dc26a6 100644 --- a/src/main/java/com/somemore/user/dto/UserAuthInfo.java +++ b/src/main/java/com/somemore/user/dto/UserAuthInfo.java @@ -5,11 +5,15 @@ import java.util.UUID; public record UserAuthInfo(String accountId, - String password) { + String accountPassword) { + + public static UserAuthInfo of(String accountId, String accountPassword) { + return new UserAuthInfo(accountId, accountPassword); + } public static UserAuthInfo createForOAuth(OAuthProvider provider) { String accountId = provider.getProviderName() + UUID.randomUUID(); - String password = String.valueOf(UUID.randomUUID()); - return new UserAuthInfo(accountId, password); + String accountPassword = String.valueOf(UUID.randomUUID()); + return new UserAuthInfo(accountId, accountPassword); } } diff --git a/src/main/java/com/somemore/user/repository/user/UserRepository.java b/src/main/java/com/somemore/user/repository/user/UserRepository.java index 238ffddb1..a9b6b5a7e 100644 --- a/src/main/java/com/somemore/user/repository/user/UserRepository.java +++ b/src/main/java/com/somemore/user/repository/user/UserRepository.java @@ -15,4 +15,6 @@ public interface UserRepository { Optional findByAccountId(String accountId); User save(User user); + + boolean existsByAccountId(String accountId); } diff --git a/src/main/java/com/somemore/user/repository/user/UserRepositoryImpl.java b/src/main/java/com/somemore/user/repository/user/UserRepositoryImpl.java index f08d4e3e2..1f56208de 100644 --- a/src/main/java/com/somemore/user/repository/user/UserRepositoryImpl.java +++ b/src/main/java/com/somemore/user/repository/user/UserRepositoryImpl.java @@ -56,6 +56,16 @@ public User save(User user) { return userJpaRepository.save(user); } + @Override + public boolean existsByAccountId(String accountId) { + return queryFactory.select(user.accountId) + .from(user) + .where( + user.accountId.eq(accountId), + isNotDeleted()) + .fetchFirst() != null; + } + private static BooleanExpression isNotDeleted() { return user.deleted.eq(false); } diff --git a/src/main/java/com/somemore/user/service/RegisterUserService.java b/src/main/java/com/somemore/user/service/RegisterUserUseCase.java similarity index 91% rename from src/main/java/com/somemore/user/service/RegisterUserService.java rename to src/main/java/com/somemore/user/service/RegisterUserUseCase.java index 18b988194..a30766772 100644 --- a/src/main/java/com/somemore/user/service/RegisterUserService.java +++ b/src/main/java/com/somemore/user/service/RegisterUserUseCase.java @@ -9,7 +9,6 @@ import com.somemore.user.repository.user.UserRepository; import com.somemore.user.repository.usercommonattribute.UserCommonAttributeRepository; import com.somemore.user.repository.usersetting.UserSettingRepository; -import com.somemore.user.usecase.RegisterUserUseCase; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -21,7 +20,7 @@ @Slf4j @RequiredArgsConstructor @Transactional -public class RegisterUserService implements RegisterUserUseCase { +public class RegisterUserUseCase implements com.somemore.user.usecase.RegisterUserUseCase { private final UserRepository userRepository; private final UserSettingRepository userSettingRepository; @@ -39,7 +38,7 @@ public User registerLocalUser(UserAuthInfo userAuthInfo, UserRole role) { } private User createAndRegisterUser(UserRole role, UserAuthInfo userAuthInfo) { - User user = User.from(userAuthInfo, role); + User user = User.of(userAuthInfo, role); userRepository.save(user); UUID userId = user.getId(); diff --git a/src/main/java/com/somemore/user/service/UserQueryService.java b/src/main/java/com/somemore/user/service/UserQueryService.java index 9f026c420..2ce9ebf30 100644 --- a/src/main/java/com/somemore/user/service/UserQueryService.java +++ b/src/main/java/com/somemore/user/service/UserQueryService.java @@ -55,4 +55,9 @@ public boolean getIsCustomizedByUserId(UUID userId) { .orElseThrow(() -> new NoSuchElementException(NOT_EXIST_USER)); } + @Override + public boolean isDuplicateAccountId(String accountId) { + return userRepository.existsByAccountId(accountId); + } + } diff --git a/src/main/java/com/somemore/user/usecase/UserQueryUseCase.java b/src/main/java/com/somemore/user/usecase/UserQueryUseCase.java index 75339fab1..f41056b07 100644 --- a/src/main/java/com/somemore/user/usecase/UserQueryUseCase.java +++ b/src/main/java/com/somemore/user/usecase/UserQueryUseCase.java @@ -9,8 +9,14 @@ public interface UserQueryUseCase { User getById(UUID id); + UserRole getRoleById(UUID userId); + User getByAccountId(String accountId); + UserCommonAttribute getCommonAttributeByUserId(UUID userId); + boolean getIsCustomizedByUserId(UUID userId); + + boolean isDuplicateAccountId(String accountId); } diff --git a/src/main/java/com/somemore/volunteer/domain/NEWVolunteer.java b/src/main/java/com/somemore/volunteer/domain/NEWVolunteer.java new file mode 100644 index 000000000..1cddc21bc --- /dev/null +++ b/src/main/java/com/somemore/volunteer/domain/NEWVolunteer.java @@ -0,0 +1,68 @@ +package com.somemore.volunteer.domain; + +import com.somemore.domains.volunteer.domain.Gender; +import com.somemore.domains.volunteer.domain.Tier; +import com.somemore.global.common.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Entity +@Table(name = "new_volunteer") // TODO prefix 삭제 +public class NEWVolunteer extends BaseEntity { + + public static final String DEFAULT_NAME = "봉사자"; + @Id + @GeneratedValue(strategy = GenerationType.UUID) + @Column(name = "id", nullable = false, columnDefinition = "BINARY(16)") + private UUID id; + + @Column(name = "user_id", nullable = false, columnDefinition = "BINARY(16)") + private UUID userId; + + @Column(name = "name", nullable = false) + private String name; + + @Enumerated(EnumType.STRING) + @Column(name = "gender", nullable = false, length = 10) + private Gender gender; + + @Enumerated(EnumType.STRING) + @Column(name = "tier", nullable = false, length = 20) + private Tier tier; + + @Builder + private NEWVolunteer( + UUID userId, + String name, + Gender gender, + Tier tier + ) { + this.userId = userId; + this.name = name; + this.gender = gender; + this.tier = tier; + } + + public static NEWVolunteer createDefault(UUID userId) { + return NEWVolunteer.builder() + .userId(userId) + .name(DEFAULT_NAME + userId.toString().substring(0, 8)) + .gender(Gender.getDefault()) + .tier(Tier.getDefault()) + .build(); + } +} diff --git a/src/main/java/com/somemore/volunteer/repository/NEWVolunteerJpaRepository.java b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerJpaRepository.java new file mode 100644 index 000000000..b5f5ae4ad --- /dev/null +++ b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerJpaRepository.java @@ -0,0 +1,11 @@ +package com.somemore.volunteer.repository; + +import com.somemore.volunteer.domain.NEWVolunteer; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.UUID; + +@Repository("newVolunteerJpaRepository") +public interface NEWVolunteerJpaRepository extends JpaRepository { +} diff --git a/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepository.java b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepository.java new file mode 100644 index 000000000..4189070f0 --- /dev/null +++ b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepository.java @@ -0,0 +1,15 @@ +package com.somemore.volunteer.repository; + +import com.somemore.volunteer.domain.NEWVolunteer; + +import java.util.Optional; +import java.util.UUID; + +public interface NEWVolunteerRepository { + + NEWVolunteer save(NEWVolunteer volunteer); + + Optional findById(UUID id); + + Optional findByUserId(UUID userId); +} diff --git a/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImpl.java b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImpl.java new file mode 100644 index 000000000..94ff78d8b --- /dev/null +++ b/src/main/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImpl.java @@ -0,0 +1,55 @@ +package com.somemore.volunteer.repository; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.somemore.volunteer.domain.NEWVolunteer; +import com.somemore.volunteer.domain.QNEWVolunteer; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +import java.util.UUID; + +@Repository("newVolunteerRepository") +@RequiredArgsConstructor +public class NEWVolunteerRepositoryImpl implements NEWVolunteerRepository { + + @Qualifier("newVolunteerJpaRepository") + private final NEWVolunteerJpaRepository NEWVolunteerJpaRepository; + private final JPAQueryFactory queryFactory; + + private static final QNEWVolunteer volunteer = QNEWVolunteer.nEWVolunteer; + + @Override + public NEWVolunteer save(NEWVolunteer volunteer) { + return NEWVolunteerJpaRepository.save(volunteer); + } + + @Override + public Optional findById(UUID id) { + return Optional.ofNullable( + queryFactory.selectFrom(volunteer) + .where( + volunteer.id.eq(id), + isNotDeleted() + ) + .fetchOne() + ); + } + + @Override + public Optional findByUserId(UUID userId) { + return Optional.ofNullable( + queryFactory.selectFrom(volunteer) + .where( + volunteer.userId.eq(userId), + isNotDeleted() + ) + .fetchOne() + ); } + + private static BooleanExpression isNotDeleted() { + return volunteer.deleted.eq(false); + } +} diff --git a/src/main/java/com/somemore/volunteer/service/NEWRegisterVolunteerService.java b/src/main/java/com/somemore/volunteer/service/NEWRegisterVolunteerService.java new file mode 100644 index 000000000..b2c5fa32d --- /dev/null +++ b/src/main/java/com/somemore/volunteer/service/NEWRegisterVolunteerService.java @@ -0,0 +1,27 @@ +package com.somemore.volunteer.service; + +import com.somemore.volunteer.domain.NEWVolunteer; +import com.somemore.volunteer.repository.NEWVolunteerRepository; +import com.somemore.volunteer.usecase.NEWRegisterVolunteerUseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +@Transactional +public class NEWRegisterVolunteerService implements NEWRegisterVolunteerUseCase { + + @Qualifier("newVolunteerRepository") + private final NEWVolunteerRepository NEWVolunteerRepository; + + @Override + public NEWVolunteer register(UUID userId) { + NEWVolunteer volunteer = NEWVolunteer.createDefault(userId); + + return NEWVolunteerRepository.save(volunteer); + } +} diff --git a/src/main/java/com/somemore/volunteer/usecase/NEWRegisterVolunteerUseCase.java b/src/main/java/com/somemore/volunteer/usecase/NEWRegisterVolunteerUseCase.java new file mode 100644 index 000000000..ac7a842f9 --- /dev/null +++ b/src/main/java/com/somemore/volunteer/usecase/NEWRegisterVolunteerUseCase.java @@ -0,0 +1,10 @@ +package com.somemore.volunteer.usecase; + +import com.somemore.volunteer.domain.NEWVolunteer; + +import java.util.UUID; + +public interface NEWRegisterVolunteerUseCase { + + NEWVolunteer register(UUID userId); +} diff --git a/src/test/java/com/somemore/center/repository/NEWCenterRepositoryImplTest.java b/src/test/java/com/somemore/center/repository/NEWCenterRepositoryImplTest.java new file mode 100644 index 000000000..e18244c5d --- /dev/null +++ b/src/test/java/com/somemore/center/repository/NEWCenterRepositoryImplTest.java @@ -0,0 +1,39 @@ +package com.somemore.center.repository; + +import com.somemore.center.domain.NEWCenter; +import com.somemore.support.IntegrationTestSupport; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@Transactional +class NEWCenterRepositoryImplTest extends IntegrationTestSupport { + + @Autowired + private NEWCenterRepositoryImpl centerRepository; + + @DisplayName("유저 아이디로 기관을 등록할 수 있다.") + @Test + void saveVolunteerByUserId() { + // given + UUID userId = UUID.randomUUID(); + NEWCenter center = NEWCenter.createDefault(userId); + + // when + centerRepository.save(center); + + // then + NEWCenter centerByUserId = centerRepository.findByUserId(userId).orElseThrow(); + NEWCenter centerById = centerRepository.findById(center.getId()).orElseThrow(); + + assertThat(center) + .isEqualTo(centerByUserId) + .isEqualTo(centerById); + + } +} diff --git a/src/test/java/com/somemore/center/service/NEWRegisterCenterServiceTest.java b/src/test/java/com/somemore/center/service/NEWRegisterCenterServiceTest.java new file mode 100644 index 000000000..4ec9ff143 --- /dev/null +++ b/src/test/java/com/somemore/center/service/NEWRegisterCenterServiceTest.java @@ -0,0 +1,38 @@ +package com.somemore.center.service; + +import com.somemore.center.domain.NEWCenter; +import com.somemore.center.repository.NEWCenterRepository; +import com.somemore.support.IntegrationTestSupport; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@Transactional +class NEWRegisterCenterServiceTest extends IntegrationTestSupport { + + @Autowired + private NEWRegisterCenterService registerCenterService; + + @Autowired + private NEWCenterRepository centerRepository; + + @Test + @DisplayName("유저 아이디로 센터가 등록될 수 있다.") + void registerByUserId() { + // given + UUID userId = UUID.randomUUID(); + + // when + NEWCenter savedCenter = registerCenterService.register(userId); + + // then + NEWCenter foundCenter = centerRepository.findByUserId(userId).orElseThrow(); + assertThat(savedCenter).isEqualTo(foundCenter); + } + +} \ No newline at end of file diff --git a/src/test/java/com/somemore/domains/center/domain/CenterTest.java b/src/test/java/com/somemore/domains/center/domain/CenterTest.java index b7b9bf808..6a9f84d53 100644 --- a/src/test/java/com/somemore/domains/center/domain/CenterTest.java +++ b/src/test/java/com/somemore/domains/center/domain/CenterTest.java @@ -13,8 +13,6 @@ class CenterTest { private static final String IMG_URL = "http://example.com/image.jpg"; private static final String INTRODUCE = "우리는 서울 도서관입니다."; private static final String HOMEPAGE_LINK = "http://testcenter.com"; - private static final String ACCOUNT_ID = "testId"; - private static final String ACCOUNT_PW = "testPw"; @DisplayName("Center 엔티티를 생성할 수 있다.") @Test @@ -25,9 +23,7 @@ void create() { CONTACT_NUMBER, IMG_URL, INTRODUCE, - HOMEPAGE_LINK, - ACCOUNT_ID, - ACCOUNT_PW + HOMEPAGE_LINK ); //then @@ -36,9 +32,7 @@ void create() { () -> assertThat(center.getContactNumber()).isEqualTo(CONTACT_NUMBER), () -> assertThat(center.getImgUrl()).isEqualTo(IMG_URL), () -> assertThat(center.getIntroduce()).isEqualTo(INTRODUCE), - () -> assertThat(center.getHomepageLink()).isEqualTo(HOMEPAGE_LINK), - () -> assertThat(center.getAccountId()).isEqualTo(ACCOUNT_ID), - () -> assertThat(center.getAccountPw()).isEqualTo(ACCOUNT_PW) + () -> assertThat(center.getHomepageLink()).isEqualTo(HOMEPAGE_LINK) ); } diff --git a/src/test/java/com/somemore/domains/center/repository/CenterRepositoryTest.java b/src/test/java/com/somemore/domains/center/repository/CenterRepositoryTest.java index 557f8520c..5bc879a2b 100644 --- a/src/test/java/com/somemore/domains/center/repository/CenterRepositoryTest.java +++ b/src/test/java/com/somemore/domains/center/repository/CenterRepositoryTest.java @@ -36,8 +36,6 @@ void findById() { assertThat(foundCenter.get().getImgUrl()).isEqualTo("http://example.com/image.jpg"); assertThat(foundCenter.get().getIntroduce()).isEqualTo("기관 소개 내용"); assertThat(foundCenter.get().getHomepageLink()).isEqualTo("http://example.com"); - assertThat(foundCenter.get().getAccountId()).isEqualTo("account123"); - assertThat(foundCenter.get().getAccountPw()).isEqualTo("password123"); } @DisplayName("기관 id로 기관이 존재하는지 확인할 수 있다.") @@ -67,71 +65,13 @@ void notExistsById() { assertThat(isExist).isFalse(); } - @DisplayName("기관 계정 ID로 기관 ID를 조회할 수 있다.") - @Test - void findIdByAccountId() { - //given - Center center = createCenter(); - centerRepository.save(center); - - //when - UUID foundId = centerRepository.findIdByAccountId("account123"); - - //then - assertThat(foundId).isNotNull(); - assertThat(foundId).isEqualTo(center.getId()); - } - - @DisplayName("기관 계정 ID로 비밀번호를 조회할 수 있다.") - @Test - void findPasswordByAccountId() { - //given - Center center = createCenter(); - centerRepository.save(center); - - //when - String foundPassword = centerRepository.findPasswordByAccountId("account123"); - - //then - assertThat(foundPassword).isNotNull(); - assertThat(foundPassword).isEqualTo("password123"); - } - - @DisplayName("존재하지 않는 계정 ID로 기관 ID 조회 시 null을 반환한다.") - @Test - void findIdByNonExistentAccountId() { - //given - String nonExistentAccountId = "nonExistentAccount123"; - - //when - UUID foundId = centerRepository.findIdByAccountId(nonExistentAccountId); - - //then - assertThat(foundId).isNull(); - } - - @DisplayName("존재하지 않는 계정 ID로 비밀번호 조회 시 null을 반환한다.") - @Test - void findPasswordByNonExistentAccountId() { - //given - String nonExistentAccountId = "nonExistentAccount123"; - - //when - String foundPassword = centerRepository.findPasswordByAccountId(nonExistentAccountId); - - //then - assertThat(foundPassword).isNull(); - } - private static Center createCenter() { return Center.create( "기본 기관 이름", "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); } } diff --git a/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java b/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java index f8bcef244..fb949e9b0 100644 --- a/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java +++ b/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java @@ -82,9 +82,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerRepository.save(center); diff --git a/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java b/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java index dc427f1d7..7148f09e0 100644 --- a/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java +++ b/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java @@ -92,9 +92,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerRepository.save(center); diff --git a/src/test/java/com/somemore/domains/center/service/query/CenterQueryServiceTest.java b/src/test/java/com/somemore/domains/center/service/query/CenterQueryServiceTest.java index 4b8c509f0..058077268 100644 --- a/src/test/java/com/somemore/domains/center/service/query/CenterQueryServiceTest.java +++ b/src/test/java/com/somemore/domains/center/service/query/CenterQueryServiceTest.java @@ -125,9 +125,7 @@ void validateExistingCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); Center savedCenter = centerRepository.save(center); @@ -144,9 +142,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); } } diff --git a/src/test/java/com/somemore/domains/center/service/query/CenterSignServiceTest.java b/src/test/java/com/somemore/domains/center/service/query/CenterSignServiceTest.java deleted file mode 100644 index cd3b3342c..000000000 --- a/src/test/java/com/somemore/domains/center/service/query/CenterSignServiceTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.somemore.domains.center.service.query; - -import com.somemore.domains.center.domain.Center; -import com.somemore.domains.center.repository.center.CenterJpaRepository; -import com.somemore.domains.center.repository.center.CenterRepository; -import com.somemore.global.exception.BadRequestException; -import com.somemore.support.IntegrationTestSupport; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; - -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -@Transactional -class CenterSignServiceTest extends IntegrationTestSupport { - - @Autowired - private CenterSignService centerSignService; - - @Autowired - private CenterRepository centerRepository; - - @Autowired - private CenterJpaRepository centerJpaRepository; - - @BeforeEach - void cleanUp() { - centerJpaRepository.deleteAll(); - } - - @DisplayName("계정 ID로 센터 ID를 조회할 수 있다.") - @Test - void getIdByAccountId() { - //given - Center center = createCenter(); - centerRepository.save(center); - - //when - UUID centerId = centerSignService.getIdByAccountId("account123"); - - //then - assertThat(centerId) - .isNotNull() - .isEqualTo(center.getId()); - } - - @DisplayName("존재하지 않는 계정 ID로 센터 ID를 조회하면 예외가 발생한다.") - @Test - void getIdByNonExistentAccountId() { - //given - String nonExistentAccountId = "nonExistentAccount123"; - - //when - //then - assertThatThrownBy(() -> centerSignService.getIdByAccountId(nonExistentAccountId)) - .isInstanceOf(BadRequestException.class) - .hasMessage(NOT_EXISTS_CENTER.getMessage()); - } - - @DisplayName("계정 ID로 비밀번호를 조회할 수 있다.") - @Test - void getPasswordByAccountId() { - //given - Center center = createCenter(); - centerRepository.save(center); - - //when - String password = centerSignService.getPasswordByAccountId("account123"); - - //then - assertThat(password) - .isNotNull() - .isEqualTo("password123"); - } - - @DisplayName("존재하지 않는 계정 ID로 비밀번호를 조회하면 예외가 발생한다.") - @Test - void getPasswordByNonExistentAccountId() { - //given - String nonExistentAccountId = "nonExistentAccount123"; - - //when - //then - assertThatThrownBy(() -> centerSignService.getPasswordByAccountId(nonExistentAccountId)) - .isInstanceOf(BadRequestException.class) - .hasMessage(NOT_EXISTS_CENTER.getMessage()); - } - - private static Center createCenter() { - return Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com", - "account123", - "password123" - ); - } -} diff --git a/src/test/java/com/somemore/domains/interestcenter/repository/InterestCenterRepositoryImplTest.java b/src/test/java/com/somemore/domains/interestcenter/repository/InterestNEWCenterRepositoryImplTest.java similarity index 94% rename from src/test/java/com/somemore/domains/interestcenter/repository/InterestCenterRepositoryImplTest.java rename to src/test/java/com/somemore/domains/interestcenter/repository/InterestNEWCenterRepositoryImplTest.java index 9b38dbaac..bc139697a 100644 --- a/src/test/java/com/somemore/domains/interestcenter/repository/InterestCenterRepositoryImplTest.java +++ b/src/test/java/com/somemore/domains/interestcenter/repository/InterestNEWCenterRepositoryImplTest.java @@ -13,7 +13,7 @@ import static org.assertj.core.api.Assertions.assertThat; @Transactional -class InterestCenterRepositoryImplTest extends IntegrationTestSupport { +class InterestNEWCenterRepositoryImplTest extends IntegrationTestSupport { @Autowired private InterestCenterRepository interestCenterRepository; diff --git a/src/test/java/com/somemore/domains/interestcenter/service/CancelInterestCenterServiceTest.java b/src/test/java/com/somemore/domains/interestcenter/service/CancelInterestCenterServiceTest.java index 7f3b56d00..61b9c3b94 100644 --- a/src/test/java/com/somemore/domains/interestcenter/service/CancelInterestCenterServiceTest.java +++ b/src/test/java/com/somemore/domains/interestcenter/service/CancelInterestCenterServiceTest.java @@ -84,9 +84,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerRepository.save(center); diff --git a/src/test/java/com/somemore/domains/interestcenter/service/InterestCenterQueryServiceTest.java b/src/test/java/com/somemore/domains/interestcenter/service/InterestCenterQueryServiceTest.java index ebba619b9..2bde83904 100644 --- a/src/test/java/com/somemore/domains/interestcenter/service/InterestCenterQueryServiceTest.java +++ b/src/test/java/com/somemore/domains/interestcenter/service/InterestCenterQueryServiceTest.java @@ -125,18 +125,13 @@ void getVolunteerIdsByCenterId_ReturnsEmptyList_WhenNoVolunteers() { assertThat(result).isEmpty(); } - - - private Center createCenter() { return Center.create( "기본 기관 이름", "010-1234-5678", "http://image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); } diff --git a/src/test/java/com/somemore/domains/interestcenter/service/RegisterInterestCenterServiceTest.java b/src/test/java/com/somemore/domains/interestcenter/service/RegisterInterestCenterServiceTest.java index 2c84a7246..611b8b640 100644 --- a/src/test/java/com/somemore/domains/interestcenter/service/RegisterInterestCenterServiceTest.java +++ b/src/test/java/com/somemore/domains/interestcenter/service/RegisterInterestCenterServiceTest.java @@ -96,9 +96,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerRepository.save(center); diff --git a/src/test/java/com/somemore/domains/note/repository/NoteRepositoryImplTest.java b/src/test/java/com/somemore/domains/note/repository/NoteRepositoryImplTest.java index 64bd9cb50..6a1085d2c 100644 --- a/src/test/java/com/somemore/domains/note/repository/NoteRepositoryImplTest.java +++ b/src/test/java/com/somemore/domains/note/repository/NoteRepositoryImplTest.java @@ -143,9 +143,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerJpaRepository.save(center); diff --git a/src/test/java/com/somemore/domains/note/service/NoteQueryServiceTest.java b/src/test/java/com/somemore/domains/note/service/NoteQueryServiceTest.java index e1cbb26a6..059d42bea 100644 --- a/src/test/java/com/somemore/domains/note/service/NoteQueryServiceTest.java +++ b/src/test/java/com/somemore/domains/note/service/NoteQueryServiceTest.java @@ -181,9 +181,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerJpaRepository.save(center); diff --git a/src/test/java/com/somemore/domains/note/service/SendNoteToCenterServiceTest.java b/src/test/java/com/somemore/domains/note/service/SendNoteToCenterServiceTest.java index 23ab4a795..0d6445159 100644 --- a/src/test/java/com/somemore/domains/note/service/SendNoteToCenterServiceTest.java +++ b/src/test/java/com/somemore/domains/note/service/SendNoteToCenterServiceTest.java @@ -80,9 +80,7 @@ private Center createCenter() { "010-1234-5678", "http://example.com/image.jpg", "기관 소개 내용", - "http://example.com", - "account123", - "password123" + "http://example.com" ); centerRepository.save(center); diff --git a/src/test/java/com/somemore/domains/volunteer/repository/VolunteerDetailRepositoryImplTest.java b/src/test/java/com/somemore/domains/volunteer/repository/VolunteerDetailRepositoryImplTest.java index a98ad50eb..e26e63492 100644 --- a/src/test/java/com/somemore/domains/volunteer/repository/VolunteerDetailRepositoryImplTest.java +++ b/src/test/java/com/somemore/domains/volunteer/repository/VolunteerDetailRepositoryImplTest.java @@ -2,6 +2,7 @@ import com.somemore.domains.volunteer.domain.Gender; import com.somemore.domains.volunteer.domain.VolunteerDetail; +import com.somemore.domains.volunteer.repository.VolunteerDetailRepository; import com.somemore.support.IntegrationTestSupport; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,7 +15,7 @@ import static org.assertj.core.api.Assertions.assertThat; @Transactional -class VolunteerDetailRepositoryTest extends IntegrationTestSupport { +class VolunteerDetailRepositoryImplTest extends IntegrationTestSupport { @Autowired private VolunteerDetailRepository volunteerDetailRepository; diff --git a/src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryTest.java b/src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImplTest.java similarity index 95% rename from src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryTest.java rename to src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImplTest.java index f68277087..831d369c6 100644 --- a/src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryTest.java +++ b/src/test/java/com/somemore/domains/volunteer/repository/VolunteerRepositoryImplTest.java @@ -3,6 +3,7 @@ import com.somemore.domains.volunteer.domain.Volunteer; import com.somemore.domains.volunteer.domain.VolunteerDetail; import com.somemore.domains.volunteer.dto.request.VolunteerRegisterRequestDto; +import com.somemore.domains.volunteer.repository.VolunteerDetailRepository; import com.somemore.domains.volunteer.repository.mapper.VolunteerOverviewForRankingByHours; import com.somemore.domains.volunteer.repository.mapper.VolunteerSimpleInfo; import com.somemore.support.IntegrationTestSupport; @@ -22,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; @Transactional -class VolunteerRepositoryTest extends IntegrationTestSupport { +class VolunteerRepositoryImplTest extends IntegrationTestSupport { @Autowired private VolunteerRepository volunteerRepository; @@ -210,9 +211,9 @@ void notExistsVolunteerById() { } private void createVolunteerAndUpdateVolunteerStats(int i) { - Volunteer newVolunteer = Volunteer.createDefault(NAVER, "oauth-id-" + i); - newVolunteer.updateVolunteerStats(i * 10, i); - volunteerRepository.save(newVolunteer); + Volunteer Volunteer = com.somemore.domains.volunteer.domain.Volunteer.createDefault(NAVER, "oauth-id-" + i); + Volunteer.updateVolunteerStats(i * 10, i); + volunteerRepository.save(Volunteer); } private static VolunteerRegisterRequestDto createVolunteerRegisterRequestDto(String name) { diff --git a/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java b/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java deleted file mode 100644 index 92d6aebfe..000000000 --- a/src/test/java/com/somemore/domains/volunteer/service/GenerateOAuthUrlServiceTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.somemore.domains.volunteer.service; - -import com.somemore.global.auth.oauth.domain.OAuthProvider; -import com.somemore.support.IntegrationTestSupport; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; - -import static org.assertj.core.api.Assertions.assertThat; - -class GenerateOAuthUrlServiceTest extends IntegrationTestSupport { - - @Autowired - private GenerateOAuthUrlService generateOAuthUrlService; - - @Value("${app.back-url}") - private String backendRootUrl; - - - @Test - @DisplayName("Naver 제공자를 위한 OAuth URL이 올바르게 생성되는지 검증") - void generateUrl_ShouldReturnCorrectUrl_ForNaver() { - // Given - String oAuthProvider = OAuthProvider.NAVER.getProviderName(); - - // When - String result = generateOAuthUrlService.generateUrl(oAuthProvider); - - // Then - String expectedUrl = backendRootUrl + "/oauth2/authorization/naver"; - - assertThat(result).isEqualTo(expectedUrl); - } - - @Test - @DisplayName("Kakao 제공자를 위한 OAuth URL이 올바르게 생성되는지 검증") - void generateUrl_ShouldReturnCorrectUrl_ForKakao() { - // Given - String oAuthProvider = OAuthProvider.KAKAO.getProviderName(); - - // When - String result = generateOAuthUrlService.generateUrl(oAuthProvider); - - // Then - String expectedUrl = backendRootUrl + "/oauth2/authorization/kakao"; - - assertThat(result).isEqualTo(expectedUrl); - } -} diff --git a/src/test/java/com/somemore/global/auth/jwt/service/JwtServiceTest.java b/src/test/java/com/somemore/global/auth/jwt/service/JwtServiceTest.java index 568f3aa16..393bc3e13 100644 --- a/src/test/java/com/somemore/global/auth/jwt/service/JwtServiceTest.java +++ b/src/test/java/com/somemore/global/auth/jwt/service/JwtServiceTest.java @@ -1,14 +1,14 @@ package com.somemore.global.auth.jwt.service; -import com.somemore.support.IntegrationTestSupport; import com.somemore.global.auth.jwt.domain.EncodedToken; +import com.somemore.global.auth.jwt.domain.RefreshToken; import com.somemore.global.auth.jwt.domain.TokenType; -import com.somemore.user.domain.UserRole; import com.somemore.global.auth.jwt.exception.JwtErrorType; import com.somemore.global.auth.jwt.exception.JwtException; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; +import com.somemore.global.auth.jwt.manager.TokenManager; import com.somemore.global.auth.jwt.validator.JwtValidator; +import com.somemore.support.IntegrationTestSupport; +import com.somemore.user.domain.UserRole; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import org.junit.jupiter.api.AfterEach; @@ -23,7 +23,8 @@ import java.util.Date; import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; class JwtServiceTest extends IntegrationTestSupport { @@ -35,7 +36,7 @@ class JwtServiceTest extends IntegrationTestSupport { @Autowired private SecretKey secretKey; @Autowired - private RefreshTokenManager refreshTokenManager; + private TokenManager tokenManager; @Autowired private RedisTemplate redisTemplate; @@ -128,7 +129,7 @@ void throwExceptionWhenRefreshTokenIsInvalid() { EncodedToken expiredRefreshToken = createExpiredToken(userId, role); RefreshToken refreshToken = new RefreshToken(userId, expiredAccessToken, expiredRefreshToken); - refreshTokenManager.save(refreshToken); + tokenManager.save(refreshToken); // when // then @@ -156,28 +157,6 @@ void throwExceptionWhenRefreshTokenIsMissing() { .hasMessage(JwtErrorType.EXPIRED_TOKEN.getMessage()); } - @DisplayName("리프레시된 AccessToken은 쿠키에 올바르게 저장된다") - @Test - void refreshedAccessTokenIsSetInCookie() { - // given - String userId = UUID.randomUUID().toString(); - UserRole role = UserRole.VOLUNTEER; - - EncodedToken expiredAccessToken = createExpiredToken(userId, role); - createAndSaveRefreshToken(userId, expiredAccessToken, Instant.now().plusMillis(TokenType.REFRESH.getPeriodInMillis())); - - MockHttpServletResponse mockResponse = new MockHttpServletResponse(); - - // when - jwtService.processAccessToken(expiredAccessToken, mockResponse); - - // then - String cookieHeader = mockResponse.getHeader("Set-Cookie"); - assertThat(cookieHeader).contains("ACCESS_TOKEN="); - assertThat(cookieHeader).contains("HttpOnly"); - assertThat(cookieHeader).contains("Secure"); - } - @DisplayName("기존 RefreshToken이 갱신된다") @Test void refreshTokenIsUpdated() { @@ -193,7 +172,7 @@ void refreshTokenIsUpdated() { // when // then - assertThatThrownBy(() -> refreshTokenManager.findRefreshTokenByAccessToken(expiredAccessToken)) + assertThatThrownBy(() -> tokenManager.getRefreshTokenByAccessToken(expiredAccessToken)) .isInstanceOf(JwtException.class) .hasMessage(JwtErrorType.EXPIRED_TOKEN.getMessage()); @@ -207,7 +186,7 @@ void refreshTokenIsUpdated() { void invalidTokenThrowsJwtException() { // given String invalidToken = "invalid.token.value"; - EncodedToken encodedToken = new EncodedToken(invalidToken); + EncodedToken encodedToken = EncodedToken.from(invalidToken); // when // then @@ -252,7 +231,7 @@ private EncodedToken createExpiredToken(String userId, UserRole role) { Instant now = Instant.now(); Instant expiration = now.plusMillis(-1); // 과거 - return new EncodedToken(Jwts.builder() + return EncodedToken.from(Jwts.builder() .claims(claims) .issuedAt(Date.from(now)) .expiration(Date.from(expiration)) @@ -268,7 +247,7 @@ private RefreshToken createAndSaveRefreshToken(String userId, EncodedToken acces RefreshToken refreshToken = new RefreshToken( userId, accessToken, - new EncodedToken(Jwts.builder() + EncodedToken.from(Jwts.builder() .claims(claims) .id(uniqueId) .issuedAt(Date.from(now)) @@ -276,7 +255,7 @@ private RefreshToken createAndSaveRefreshToken(String userId, EncodedToken acces .signWith(secretKey, Jwts.SIG.HS256) .compact())); - refreshTokenManager.save(refreshToken); + tokenManager.save(refreshToken); return refreshToken; } diff --git a/src/test/java/com/somemore/domains/volunteer/service/SignOutVolunteerServiceTest.java b/src/test/java/com/somemore/global/auth/sign/SignOutVolunteerServiceTest.java similarity index 57% rename from src/test/java/com/somemore/domains/volunteer/service/SignOutVolunteerServiceTest.java rename to src/test/java/com/somemore/global/auth/sign/SignOutVolunteerServiceTest.java index 23b4e5e76..625291c77 100644 --- a/src/test/java/com/somemore/domains/volunteer/service/SignOutVolunteerServiceTest.java +++ b/src/test/java/com/somemore/global/auth/sign/SignOutVolunteerServiceTest.java @@ -1,16 +1,15 @@ -package com.somemore.domains.volunteer.service; +package com.somemore.global.auth.sign; -import com.somemore.global.auth.cookie.CookieUseCase; import com.somemore.global.auth.jwt.domain.EncodedToken; import com.somemore.global.auth.jwt.domain.TokenType; -import com.somemore.user.domain.UserRole; import com.somemore.global.auth.jwt.exception.JwtErrorType; import com.somemore.global.auth.jwt.exception.JwtException; import com.somemore.global.auth.jwt.generator.JwtGenerator; -import com.somemore.global.auth.jwt.refresh.domain.RefreshToken; -import com.somemore.global.auth.jwt.refresh.manager.RefreshTokenManager; -import com.somemore.global.auth.signout.service.SignOutService; +import com.somemore.global.auth.jwt.domain.RefreshToken; +import com.somemore.global.auth.jwt.manager.TokenManager; +import com.somemore.global.auth.sign.out.SignOutService; import com.somemore.support.IntegrationTestSupport; +import com.somemore.user.domain.UserRole; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -19,32 +18,31 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.mock.web.MockHttpServletResponse; -import java.util.Arrays; +import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThatNoException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; -class SignOutVolunteerServiceTest extends IntegrationTestSupport { +class SignOutServiceTest extends IntegrationTestSupport { @Autowired private SignOutService signOutVolunteerService; @Autowired - private CookieUseCase cookieUseCase; - @Autowired - private RefreshTokenManager refreshTokenManager; + private TokenManager tokenManager; @Autowired private JwtGenerator jwtGenerator; @Autowired private RedisTemplate redisTemplate; private MockHttpServletResponse response; - private String volunteerId; + private UUID userId; private UserRole role; @BeforeEach void setUp() { response = new MockHttpServletResponse(); - volunteerId = "test-volunteer"; + userId = UUID.randomUUID(); role = UserRole.VOLUNTEER; } @@ -58,35 +56,31 @@ void tearDown() { @DisplayName("로그아웃 시 액세스 토큰 쿠키를 삭제하고 리프레시 토큰을 제거해야 한다.") void signOutDeletesTokens() { // Given - EncodedToken accessToken = jwtGenerator.generateToken(volunteerId, role.getAuthority(), TokenType.ACCESS); + EncodedToken accessToken = jwtGenerator.generateToken(userId.toString(), role.getAuthority(), TokenType.ACCESS); RefreshToken refreshToken = new RefreshToken( - volunteerId, + userId.toString(), accessToken, - jwtGenerator.generateToken(volunteerId, role.getAuthority(), TokenType.REFRESH)); + jwtGenerator.generateToken(userId.toString(), role.getAuthority(), TokenType.REFRESH)); - refreshTokenManager.save(refreshToken); - cookieUseCase.setToken(response, accessToken.value(), TokenType.ACCESS); + tokenManager.save(refreshToken); // When - signOutVolunteerService.signOut(response, volunteerId); + signOutVolunteerService.signOut(response, userId); // Then - assertThatThrownBy(() -> refreshTokenManager.findRefreshTokenByAccessToken(accessToken)) + assertThatThrownBy(() -> tokenManager.getRefreshTokenByAccessToken(accessToken)) .isInstanceOf(JwtException.class) .hasMessage(JwtErrorType.EXPIRED_TOKEN.getMessage()); - - assertThat(Arrays.toString(response.getCookies())).contains(TokenType.SIGN_OUT.name()); } @Test @DisplayName("로그아웃 시 리프레시 토큰이 없어도 예외가 발생하지 않는다.") void signOutWithoutRefreshToken() { // When - signOutVolunteerService.signOut(response, volunteerId); + signOutVolunteerService.signOut(response, userId); // Then - assertThatNoException().isThrownBy(() -> signOutVolunteerService.signOut(response, volunteerId)); - assertThat(Arrays.toString(response.getCookies())).contains(TokenType.SIGN_OUT.name()); + assertThatNoException().isThrownBy(() -> signOutVolunteerService.signOut(response, userId)); } } diff --git a/src/test/java/com/somemore/support/fixture/CenterFixture.java b/src/test/java/com/somemore/support/fixture/CenterFixture.java index 4be307ac1..a28af198e 100644 --- a/src/test/java/com/somemore/support/fixture/CenterFixture.java +++ b/src/test/java/com/somemore/support/fixture/CenterFixture.java @@ -14,8 +14,6 @@ public static Center createCenter() { .imgUrl("https://image.domain.com/center-img") .introduce("센터 소개") .homepageLink("https://www.centerhomepage.com") - .accountId("center_account") - .accountPw("password123") .build(); } @@ -26,8 +24,6 @@ public static Center createCenter(String name) { .imgUrl("https://image.domain.com/center-img") .introduce("센터 소개") .homepageLink("https://www.centerhomepage.com") - .accountId("center_account") - .accountPw("password123") .build(); } diff --git a/src/test/java/com/somemore/user/repository/user/UserRepositoryImplTest.java b/src/test/java/com/somemore/user/repository/user/UserRepositoryImplTest.java index 40d44270b..2cc00310d 100644 --- a/src/test/java/com/somemore/user/repository/user/UserRepositoryImplTest.java +++ b/src/test/java/com/somemore/user/repository/user/UserRepositoryImplTest.java @@ -26,7 +26,7 @@ class UserRepositoryImplTest extends IntegrationTestSupport { void saveOAuthVolunteerUser() { // given UserAuthInfo userAuthInfo = UserAuthInfo.createForOAuth(OAuthProvider.NAVER); - User user = User.from(userAuthInfo, UserRole.VOLUNTEER); + User user = User.of(userAuthInfo, UserRole.VOLUNTEER); // when User savedUser = userRepository.save(user); @@ -42,7 +42,7 @@ void saveOAuthVolunteerUser() { void saveOAuthCenterUser() { // given UserAuthInfo userAuthInfo = UserAuthInfo.createForOAuth(OAuthProvider.NAVER); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); // when User savedUser = userRepository.save(user); @@ -58,7 +58,7 @@ void saveOAuthCenterUser() { void saveLocalCenterUser() { // given UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.test", "test"); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); // when User savedUser = userRepository.save(user); @@ -74,7 +74,7 @@ void saveLocalCenterUser() { void findById() { // given UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.test", "test"); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); User savedUser = userRepository.save(user); // when @@ -90,7 +90,7 @@ void findById() { void findByInvalidId() { // given UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.test", "test"); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); userRepository.save(user); UUID invalidUserId = UUID.randomUUID(); @@ -106,7 +106,7 @@ void findByInvalidId() { void findRoleById() { // given UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.test", "test"); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); User savedUser = userRepository.save(user); // when @@ -122,7 +122,7 @@ void findRoleById() { void findByAccountId() { // given UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.test", "test"); - User user = User.from(userAuthInfo, UserRole.CENTER); + User user = User.of(userAuthInfo, UserRole.CENTER); User savedUser = userRepository.save(user); // when diff --git a/src/test/java/com/somemore/user/service/RegisterUserServiceTest.java b/src/test/java/com/somemore/user/service/RegisterUserUseCaseTest.java similarity index 94% rename from src/test/java/com/somemore/user/service/RegisterUserServiceTest.java rename to src/test/java/com/somemore/user/service/RegisterUserUseCaseTest.java index 7e6eb7cb4..8f90123fb 100644 --- a/src/test/java/com/somemore/user/service/RegisterUserServiceTest.java +++ b/src/test/java/com/somemore/user/service/RegisterUserUseCaseTest.java @@ -12,7 +12,6 @@ import com.somemore.user.repository.user.UserRepository; import com.somemore.user.repository.usercommonattribute.UserCommonAttributeRepository; import com.somemore.user.repository.usersetting.UserSettingRepository; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -23,10 +22,10 @@ import static org.assertj.core.api.Assertions.assertThat; @Transactional -class RegisterUserServiceTest extends IntegrationTestSupport { +class RegisterUserUseCaseTest extends IntegrationTestSupport { @Autowired - private RegisterUserService registerUserService; + private RegisterUserUseCase registerUserUseCase; @Autowired private UserRepository userRepository; @@ -45,7 +44,7 @@ void registerOAuthUser() { CommonOAuthInfo commonOAuthInfo = new CommonOAuthInfo(provider, "test"); // when - User registeredUser = registerUserService.registerOAuthUser(commonOAuthInfo, UserRole.getOAuthUserDefaultRole()); + User registeredUser = registerUserUseCase.registerOAuthUser(commonOAuthInfo, UserRole.getOAuthUserDefaultRole()); // then User savedUser = userRepository.findById(registeredUser.getId()).orElseThrow(); @@ -79,7 +78,7 @@ void registerLocalUser() { UserRole role = UserRole.CENTER; // when - User registeredUser = registerUserService.registerLocalUser(userAuthInfo, role); + User registeredUser = registerUserUseCase.registerLocalUser(userAuthInfo, role); // then User savedUser = userRepository.findById(registeredUser.getId()).orElseThrow(); diff --git a/src/test/java/com/somemore/user/service/UserQueryServiceTest.java b/src/test/java/com/somemore/user/service/UserQueryServiceTest.java index 87c39279d..3dd165367 100644 --- a/src/test/java/com/somemore/user/service/UserQueryServiceTest.java +++ b/src/test/java/com/somemore/user/service/UserQueryServiceTest.java @@ -35,7 +35,7 @@ class UserQueryServiceTest extends IntegrationTestSupport { void setup() { UserAuthInfo userAuthInfo = UserAuthInfo.createForOAuth(OAuthProvider.NAVER); - user = userRepository.save(User.from(userAuthInfo, UserRole.VOLUNTEER)); + user = userRepository.save(User.of(userAuthInfo, UserRole.VOLUNTEER)); userCommonAttribute = userCommonAttributeRepository.save(UserCommonAttribute.createDefault(user.getId())); } diff --git a/src/test/java/com/somemore/user/service/ValidateBasicInfoServiceTest.java b/src/test/java/com/somemore/user/service/ValidateBasicInfoServiceTest.java index a4e76036b..db1de3761 100644 --- a/src/test/java/com/somemore/user/service/ValidateBasicInfoServiceTest.java +++ b/src/test/java/com/somemore/user/service/ValidateBasicInfoServiceTest.java @@ -32,7 +32,7 @@ class ValidateBasicInfoServiceTest extends IntegrationTestSupport { @BeforeEach void setup() { UserAuthInfo userAuthInfo = new UserAuthInfo("test@test.com", "Test User"); - user = userRepository.save(User.from(userAuthInfo, UserRole.VOLUNTEER)); + user = userRepository.save(User.of(userAuthInfo, UserRole.VOLUNTEER)); } @DisplayName("필수 입력 정보가 입력되었다면, true를 반환한다.") diff --git a/src/test/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImplTest.java b/src/test/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImplTest.java new file mode 100644 index 000000000..f4d49189d --- /dev/null +++ b/src/test/java/com/somemore/volunteer/repository/NEWVolunteerRepositoryImplTest.java @@ -0,0 +1,40 @@ +package com.somemore.volunteer.repository; + +import com.somemore.support.IntegrationTestSupport; +import com.somemore.volunteer.domain.NEWVolunteer; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@Transactional +class NEWVolunteerRepositoryImplTest extends IntegrationTestSupport { + + @Autowired + private NEWVolunteerRepositoryImpl volunteerRepository; + + @DisplayName("유저 아이디로 봉사자를 등록할 수 있다.") + @Test + void saveVolunteerByUserId() { + // given + UUID userId = UUID.randomUUID(); + NEWVolunteer volunteer = NEWVolunteer.createDefault(userId); + + // when + volunteerRepository.save(volunteer); + + // then + NEWVolunteer volunteerByUserId = volunteerRepository.findByUserId(userId).orElseThrow(); + NEWVolunteer volunteerById = volunteerRepository.findById(volunteer.getId()).orElseThrow(); + + + assertThat(volunteer) + .isEqualTo(volunteerByUserId) + .isEqualTo(volunteerById); + + } +} diff --git a/src/test/java/com/somemore/volunteer/service/NEWRegisterVolunteerServiceTest.java b/src/test/java/com/somemore/volunteer/service/NEWRegisterVolunteerServiceTest.java new file mode 100644 index 000000000..1e121e6cb --- /dev/null +++ b/src/test/java/com/somemore/volunteer/service/NEWRegisterVolunteerServiceTest.java @@ -0,0 +1,37 @@ +package com.somemore.volunteer.service; + +import com.somemore.support.IntegrationTestSupport; +import com.somemore.volunteer.domain.NEWVolunteer; +import com.somemore.volunteer.repository.NEWVolunteerRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@Transactional +class NEWRegisterVolunteerServiceTest extends IntegrationTestSupport { + + @Autowired + private NEWRegisterVolunteerService registerVolunteerService; + + @Autowired + private NEWVolunteerRepository volunteerRepository; + + @Test + @DisplayName("유저 아이디로 봉사자가 등록될 수 있다.") + void registerByUserId() { + // given + UUID userId = UUID.randomUUID(); + + // when + NEWVolunteer savedVolunteer = registerVolunteerService.register(userId); + + // then + NEWVolunteer foundVolunteer = volunteerRepository.findByUserId(userId).orElseThrow(); + assertThat(savedVolunteer).isEqualTo(foundVolunteer); + } +}