Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
Expand Down
10 changes: 10 additions & 0 deletions docker-compose.local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ services:
volumes:
- rabbitmq-data:/var/lib/rabbitmq

redis:
container_name: zerozero_redis
image: redis:6.0.9
ports:
- '6379:6379'
restart: always
volumes:
- ./docker/redis/data:/data
- ./docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf

volumes:
mongo-data:
rabbitmq-data:
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.zerozero.core.application.BaseUseCase;
import com.zerozero.core.domain.entity.Status;
import com.zerozero.core.domain.entity.User;
import com.zerozero.core.domain.infra.repository.RefreshTokenJPARepository;
import com.zerozero.core.domain.infra.repository.RefreshTokenRepository;
import com.zerozero.core.domain.infra.repository.UserJPARepository;
import com.zerozero.core.domain.vo.AccessToken;
import com.zerozero.core.domain.vo.RefreshToken;
Expand Down Expand Up @@ -47,7 +47,7 @@ public class HandleOAuthLoginUseCase implements BaseUseCase<HandleOAuthLoginRequ

private final JwtUtil jwtUtil;

private final RefreshTokenJPARepository refreshTokenJPARepository;
private final RefreshTokenRepository refreshTokenRepository;

@Override
public HandleOAuthLoginResponse execute(HandleOAuthLoginRequest request) {
Expand Down Expand Up @@ -89,7 +89,7 @@ public HandleOAuthLoginResponse execute(HandleOAuthLoginRequest request) {
private HandleOAuthLoginResponse generateAndBuildResponse(User user) {
AccessToken accessToken = jwtUtil.generateAccessToken(user);
RefreshToken refreshToken = jwtUtil.generateRefreshToken(user);
refreshTokenJPARepository.save(refreshToken.toEntity());
refreshTokenRepository.save(refreshToken.toEntity(user.getId()));

return HandleOAuthLoginResponse.builder()
.user(com.zerozero.core.domain.vo.User.of(user))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.zerozero.core.application.BaseResponse;
import com.zerozero.core.application.BaseUseCase;
import com.zerozero.core.domain.entity.User;
import com.zerozero.core.domain.infra.repository.RefreshTokenJPARepository;
import com.zerozero.core.domain.infra.repository.RefreshTokenRepository;
import com.zerozero.core.domain.infra.repository.UserJPARepository;
import com.zerozero.core.domain.vo.AccessToken;
import com.zerozero.core.domain.vo.RefreshToken;
Expand Down Expand Up @@ -39,7 +39,7 @@ public class RefreshUserTokenUseCase implements BaseUseCase<RefreshUserTokenRequ

private final UserJPARepository userJPARepository;

private final RefreshTokenJPARepository refreshTokenJPARepository;
private final RefreshTokenRepository refreshTokenRepository;

@Override
public RefreshUserTokenResponse execute(RefreshUserTokenRequest request) {
Expand All @@ -62,7 +62,7 @@ public RefreshUserTokenResponse execute(RefreshUserTokenRequest request) {
return RefreshUserTokenResponse.builder().success(false)
.errorCode(RefreshUserTokenErrorCode.NOT_EXIST_USER).build();
}
com.zerozero.core.domain.entity.RefreshToken alreadyExistRefreshToken = refreshTokenJPARepository.findByUserId(user.getId());
com.zerozero.core.domain.entity.RefreshToken alreadyExistRefreshToken = refreshTokenRepository.findById(user.getId()).orElse(null);
if (alreadyExistRefreshToken == null) {
log.error("[RefreshUserTokenUseCase] Refresh token not exist");
return RefreshUserTokenResponse.builder().success(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,27 @@
import com.zerozero.auth.application.RefreshUserTokenUseCase.RefreshUserTokenResponse.Tokens;
import com.zerozero.auth.presentation.RefreshUserTokenController.RefreshUserTokenResponse.Token;
import com.zerozero.configuration.swagger.ApiErrorCode;
import com.zerozero.core.application.BaseRequest;
import com.zerozero.core.application.BaseResponse;
import com.zerozero.core.domain.vo.AccessToken;
import com.zerozero.core.domain.vo.RefreshToken;
import com.zerozero.core.exception.error.GlobalErrorCode;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
Expand All @@ -39,11 +41,11 @@ public class RefreshUserTokenController {
operationId = "/refresh/token"
)
@ApiErrorCode({GlobalErrorCode.class, RefreshUserTokenErrorCode.class})
@PostMapping("/refresh/token")
public ResponseEntity<RefreshUserTokenResponse> refreshUserToken(@Parameter(hidden = true) RefreshToken refreshToken) {
@GetMapping("/refresh/token")
public ResponseEntity<RefreshUserTokenResponse> refreshUserToken(@ParameterObject RefreshUserTokenRequest refreshUserTokenRequest) {
RefreshUserTokenUseCase.RefreshUserTokenResponse refreshUserTokenResponse = refreshUserTokenUseCase.execute(
RefreshUserTokenUseCase.RefreshUserTokenRequest.builder()
.refreshToken(refreshToken)
.refreshToken(RefreshToken.of(refreshUserTokenRequest.getRefreshToken()))
.build());
if (refreshUserTokenResponse == null || !refreshUserTokenResponse.isSuccess()) {
Optional.ofNullable(refreshUserTokenResponse)
Expand Down Expand Up @@ -80,4 +82,17 @@ public static class RefreshUserTokenResponse extends BaseResponse<GlobalErrorCod
record Token(String accessToken, String refreshToken) {
}
}

@ToString
@Getter
@Setter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Schema(description = "토큰 재발급 요청")
public static class RefreshUserTokenRequest implements BaseRequest {

@Schema(description = "리프레시 토큰")
private String refreshToken;
}
}
29 changes: 9 additions & 20 deletions src/main/java/com/zerozero/core/domain/entity/RefreshToken.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,18 @@
package com.zerozero.core.domain.entity;

import com.zerozero.core.domain.shared.BaseAutoIncrementEntity;
import jakarta.persistence.Entity;
import java.util.UUID;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Setter
@SuperBuilder
public class RefreshToken extends BaseAutoIncrementEntity {

private String refreshToken;
@Builder
@RedisHash(value = "refreshToken", timeToLive = 604_800_000)
public class RefreshToken {

@Id
private UUID userId;

public RefreshToken update(String refreshToken) {
this.refreshToken = refreshToken;
return this;
}
}
private String refreshToken;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.zerozero.core.domain.infra.repository;

import com.zerozero.core.domain.entity.RefreshToken;
import java.util.UUID;
import org.springframework.data.repository.CrudRepository;

public interface RefreshTokenRepository extends CrudRepository<RefreshToken, UUID> {
}
3 changes: 2 additions & 1 deletion src/main/java/com/zerozero/core/domain/vo/RefreshToken.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ public static RefreshToken of(com.zerozero.core.domain.entity.RefreshToken entit
.build();
}

public com.zerozero.core.domain.entity.RefreshToken toEntity() {
public com.zerozero.core.domain.entity.RefreshToken toEntity(UUID userId) {
return com.zerozero.core.domain.entity.RefreshToken.builder()
.userId(userId)
.refreshToken(this.getToken())
.build();
}
Expand Down