complete account service

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2024-08-04 13:20:45 +02:00
parent bb92409fda
commit cb73b2d7b5
18 changed files with 109 additions and 35 deletions

View File

@@ -1,4 +1,12 @@
package dev.mars3142.fhq.account; 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);
} }

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record DeleteResponse(boolean success) {
}

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record DeletedCompleted(String localId) {
}

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record LoginCompleted(String localId, String email, String displayName) {
}

View File

@@ -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) {
}

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record RefreshTokenCompleted(String localId, String token) {
}

View File

@@ -0,0 +1,5 @@
package dev.mars3142.fhq.account;
public record RefreshTokenResponse(String expiresIn, String tokenType, String refreshToken, String idToken, String userId,
String projectId) {
}

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record RegisterResponse(String idToken, String email, String refreshToken, String expiresId, String localId) {
}

View File

@@ -0,0 +1,4 @@
package dev.mars3142.fhq.account;
public record RegistrationCompleted(String email, String localId) {
}

View File

@@ -1,17 +1,17 @@
package dev.mars3142.fhq.account.repositories; 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.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.RefreshTokenResponse;
import dev.mars3142.fhq.account.repositories.impl.responses.RegisterResponse;
public interface AccountRepository { 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); LoginResponse login(String username, String password);
RefreshTokenResponse refreshToken(String token); RefreshTokenResponse refreshToken(String token);
AccountDeleteResponse delete(String token); DeleteResponse delete(String token);
} }

View File

@@ -1,14 +1,14 @@
package dev.mars3142.fhq.account.repositories.impl; 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.AccountRepository;
import dev.mars3142.fhq.account.repositories.impl.requests.AccountDeleteRequest; 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.LoginRequest;
import dev.mars3142.fhq.account.repositories.impl.requests.RefreshTokenRequest; 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.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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import lombok.val; import lombok.val;
@@ -23,14 +23,14 @@ public class AccountRepositoryImpl implements AccountRepository {
private final RestClient client; private final RestClient client;
@Override @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); val request = new AccountRegisterRequest(username, email, password);
return client return client
.post() .post()
.uri("/v1/account/register") .uri("/v1/account/register")
.body(request) .body(request)
.retrieve() .retrieve()
.body(AccountRegisterResponse.class); .body(RegisterResponse.class);
} }
@Override @Override
@@ -49,20 +49,20 @@ public class AccountRepositoryImpl implements AccountRepository {
val request = new RefreshTokenRequest(token); val request = new RefreshTokenRequest(token);
return client return client
.post() .post()
.uri("/v1/account/refresh") .uri("/v1/token/refresh")
.body(request) .body(request)
.retrieve() .retrieve()
.body(RefreshTokenResponse.class); .body(RefreshTokenResponse.class);
} }
@Override @Override
public AccountDeleteResponse delete(String token) { public DeleteResponse delete(String token) {
val request = new AccountDeleteRequest(token); val request = new AccountDeleteRequest(token);
return client return client
.post() .post()
.uri("/v1/account/delete") .uri("/v1/account/delete")
.body(request) .body(request)
.retrieve() .retrieve()
.body(AccountDeleteResponse.class); .body(DeleteResponse.class);
} }
} }

View File

@@ -1,4 +0,0 @@
package dev.mars3142.fhq.account.repositories.impl.responses;
public record AccountRegisterResponse() {
}

View File

@@ -1,4 +1,4 @@
package dev.mars3142.fhq.account.repositories.impl.responses; package dev.mars3142.fhq.account.repositories.impl.responses;
public record AccountDeleteResponse() { public record DeleteResponse(boolean deleted) {
} }

View File

@@ -1,4 +1,5 @@
package dev.mars3142.fhq.account.repositories.impl.responses; 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) {
} }

View File

@@ -1,4 +1,5 @@
package dev.mars3142.fhq.account.repositories.impl.responses; 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) {
} }

View File

@@ -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) {
}

View File

@@ -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;
}

View File

@@ -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());
}
}