diff --git a/src/main/java/dev/mars3142/fhq/account/AccountService.java b/src/main/java/dev/mars3142/fhq/account/AccountService.java index fc4bb50..2839e3f 100644 --- a/src/main/java/dev/mars3142/fhq/account/AccountService.java +++ b/src/main/java/dev/mars3142/fhq/account/AccountService.java @@ -1,4 +1,12 @@ package dev.mars3142.fhq.account; -public interface AccountService{ +public interface AccountService { + + RegisterResponse register(String username, String email, String password); + + LoginResponse login(String email, String password); + + RefreshTokenResponse refreshToken(String token); + + DeleteResponse delete(String token); } diff --git a/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java b/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java new file mode 100644 index 0000000..b16d0e4 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record DeleteResponse(boolean success) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java b/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java new file mode 100644 index 0000000..ddff218 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record DeletedCompleted(String localId) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java b/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java new file mode 100644 index 0000000..d8bf4ab --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record LoginCompleted(String localId, String email, String displayName) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/LoginResponse.java b/src/main/java/dev/mars3142/fhq/account/LoginResponse.java new file mode 100644 index 0000000..407dad6 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/LoginResponse.java @@ -0,0 +1,5 @@ +package dev.mars3142.fhq.account; + +public record LoginResponse(String localId, String email, String displayName, String idToken, String registered, + String refreshToken, String expiresIn) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java b/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java new file mode 100644 index 0000000..e7616f4 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record RefreshTokenCompleted(String localId, String token) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java b/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java new file mode 100644 index 0000000..d60bf72 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java @@ -0,0 +1,5 @@ +package dev.mars3142.fhq.account; + +public record RefreshTokenResponse(String expiresIn, String tokenType, String refreshToken, String idToken, String userId, + String projectId) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java new file mode 100644 index 0000000..68e931f --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record RegisterResponse(String idToken, String email, String refreshToken, String expiresId, String localId) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java b/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java new file mode 100644 index 0000000..8593194 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public record RegistrationCompleted(String email, String localId) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java b/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java index 3d6ae18..f290f61 100644 --- a/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java +++ b/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java @@ -1,17 +1,17 @@ package dev.mars3142.fhq.account.repositories; +import dev.mars3142.fhq.account.repositories.impl.responses.DeleteResponse; import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse; -import dev.mars3142.fhq.account.repositories.impl.responses.AccountDeleteResponse; -import dev.mars3142.fhq.account.repositories.impl.responses.AccountRegisterResponse; import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.RegisterResponse; public interface AccountRepository { - AccountRegisterResponse register(String username, String email, String password); + RegisterResponse register(String username, String email, String password); LoginResponse login(String username, String password); RefreshTokenResponse refreshToken(String token); - AccountDeleteResponse delete(String token); + DeleteResponse delete(String token); } diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java index b94eeee..2c1628d 100644 --- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java @@ -1,14 +1,14 @@ package dev.mars3142.fhq.account.repositories.impl; -import dev.mars3142.fhq.account.repositories.impl.responses.AccountRegisterResponse; -import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse; import dev.mars3142.fhq.account.repositories.AccountRepository; import dev.mars3142.fhq.account.repositories.impl.requests.AccountDeleteRequest; +import dev.mars3142.fhq.account.repositories.impl.requests.AccountRegisterRequest; import dev.mars3142.fhq.account.repositories.impl.requests.LoginRequest; import dev.mars3142.fhq.account.repositories.impl.requests.RefreshTokenRequest; -import dev.mars3142.fhq.account.repositories.impl.responses.AccountDeleteResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.DeleteResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse; import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse; -import dev.mars3142.fhq.account.repositories.impl.requests.AccountRegisterRequest; +import dev.mars3142.fhq.account.repositories.impl.responses.RegisterResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; @@ -23,14 +23,14 @@ public class AccountRepositoryImpl implements AccountRepository { private final RestClient client; @Override - public AccountRegisterResponse register(String username, String email, String password) { + public RegisterResponse register(String username, String email, String password) { val request = new AccountRegisterRequest(username, email, password); return client .post() .uri("/v1/account/register") .body(request) .retrieve() - .body(AccountRegisterResponse.class); + .body(RegisterResponse.class); } @Override @@ -49,20 +49,20 @@ public class AccountRepositoryImpl implements AccountRepository { val request = new RefreshTokenRequest(token); return client .post() - .uri("/v1/account/refresh") + .uri("/v1/token/refresh") .body(request) .retrieve() .body(RefreshTokenResponse.class); } @Override - public AccountDeleteResponse delete(String token) { + public DeleteResponse delete(String token) { val request = new AccountDeleteRequest(token); return client .post() .uri("/v1/account/delete") .body(request) .retrieve() - .body(AccountDeleteResponse.class); + .body(DeleteResponse.class); } } diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java deleted file mode 100644 index 4985ece..0000000 --- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.mars3142.fhq.account.repositories.impl.responses; - -public record AccountRegisterResponse() { -} diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountDeleteResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java similarity index 57% rename from src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountDeleteResponse.java rename to src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java index ef3d386..6e45855 100644 --- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountDeleteResponse.java +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java @@ -1,4 +1,4 @@ package dev.mars3142.fhq.account.repositories.impl.responses; -public record AccountDeleteResponse() { +public record DeleteResponse(boolean deleted) { } diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java index 61adc03..d87a4b1 100644 --- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java @@ -1,4 +1,5 @@ package dev.mars3142.fhq.account.repositories.impl.responses; -public record LoginResponse() { +public record LoginResponse(String localId, String email, String displayName, String idToken, String registered, + String refreshToken, String expiresIn) { } diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java index 5bccd9f..0aab28e 100644 --- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java @@ -1,4 +1,5 @@ package dev.mars3142.fhq.account.repositories.impl.responses; -public record RefreshTokenResponse() { +public record RefreshTokenResponse(String expiresIn, String tokenType, String refreshToken, String idToken, String userId, + String projectId) { } diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java new file mode 100644 index 0000000..e63cb2b --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account.repositories.impl.responses; + +public record RegisterResponse(String idToken, String email, String refreshToken, String expiresId, String localId) { +} diff --git a/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java b/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java deleted file mode 100644 index f0faa83..0000000 --- a/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java +++ /dev/null @@ -1,14 +0,0 @@ -package dev.mars3142.fhq.account.services; - -import dev.mars3142.fhq.account.repositories.AccountRepository; -import dev.mars3142.fhq.account.AccountService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class AccountServiceImpl implements AccountService { - - private final AccountRepository repository; - -} diff --git a/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java b/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java new file mode 100644 index 0000000..0d0fe51 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java @@ -0,0 +1,44 @@ +package dev.mars3142.fhq.account.services.impl; + +import dev.mars3142.fhq.account.*; +import dev.mars3142.fhq.account.repositories.AccountRepository; +import lombok.RequiredArgsConstructor; +import lombok.val; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class AccountServiceImpl implements AccountService { + + private final ApplicationEventPublisher events; + private final AccountRepository repository; + + @Override + public RegisterResponse register(String username, String email, String password) { + val response = repository.register(username, email, password); + events.publishEvent(new RegistrationCompleted(response.email(), response.localId())); + return new RegisterResponse(response.idToken(), response.email(), response.refreshToken(), response.expiresId(), response.localId()); + } + + @Override + public LoginResponse login(String email, String password) { + val response = repository.login(email, password); + events.publishEvent(new LoginCompleted(response.localId(), response.email(), response.displayName())); + return new LoginResponse(response.localId(), response.email(), response.displayName(), response.idToken(), response.registered(), response.refreshToken(), response.expiresIn()); + } + + @Override + public RefreshTokenResponse refreshToken(String token) { + val response = repository.refreshToken(token); + events.publishEvent(new RefreshTokenCompleted(response.userId(), response.idToken())); + return new RefreshTokenResponse(response.expiresIn(), response.tokenType(), response.refreshToken(), response.idToken(), response.userId(), response.projectId()); + } + + @Override + public DeleteResponse delete(String token) { + val response = repository.delete(token); + events.publishEvent(new DeletedCompleted("")); + return new DeleteResponse(response.deleted()); + } +}