11package com .cloudmedia .identity .api ;
22
33import com .cloudmedia .identity .auth .config .AuthProperties ;
4+ import com .cloudmedia .identity .auth .service .AuthLoginUseCase ;
5+ import com .cloudmedia .identity .auth .service .AuthLogoutUseCase ;
46import com .cloudmedia .identity .auth .service .AuthRefreshUseCase ;
7+ import com .cloudmedia .identity .auth .service .AuthSocialLoginUseCase ;
58import com .cloudmedia .identity .api .dto .AuthTokensResponse ;
69import com .cloudmedia .identity .api .dto .LoginRequest ;
710import com .cloudmedia .identity .api .dto .LogoutRequest ;
811import com .cloudmedia .identity .api .dto .RefreshRequest ;
912import com .cloudmedia .identity .api .dto .SocialLoginRequest ;
1013import com .cloudmedia .identity .api .response .ApiMeta ;
1114import com .cloudmedia .identity .api .response .ApiSuccessResponse ;
12- import com .cloudmedia .identity .error .ApiException ;
1315import jakarta .validation .Valid ;
1416import java .time .Instant ;
1517import java .util .UUID ;
16- import org .springframework .http .HttpStatus ;
1718import org .springframework .http .ResponseEntity ;
1819import org .springframework .web .bind .annotation .PostMapping ;
1920import org .springframework .web .bind .annotation .RequestBody ;
2526@ RequestMapping ("/v1/auth" )
2627public class AuthController {
2728
29+ private final AuthLoginUseCase authLoginService ;
30+ private final AuthSocialLoginUseCase authSocialLoginService ;
2831 private final AuthRefreshUseCase authRefreshService ;
32+ private final AuthLogoutUseCase authLogoutService ;
2933 private final AuthProperties authProperties ;
3034
31- public AuthController (AuthRefreshUseCase authRefreshService , AuthProperties authProperties ) {
35+ public AuthController (AuthLoginUseCase authLoginService , AuthSocialLoginUseCase authSocialLoginService ,
36+ AuthRefreshUseCase authRefreshService , AuthLogoutUseCase authLogoutService , AuthProperties authProperties ) {
37+ this .authLoginService = authLoginService ;
38+ this .authSocialLoginService = authSocialLoginService ;
3239 this .authRefreshService = authRefreshService ;
40+ this .authLogoutService = authLogoutService ;
3341 this .authProperties = authProperties ;
3442 }
3543
3644 @ PostMapping ("/login" )
3745 public ResponseEntity <ApiSuccessResponse <AuthTokensResponse >> login (@ Valid @ RequestBody LoginRequest request ,
3846 @ RequestHeader (value = "X-Request-Id" , required = false ) String requestId ) {
39- throw new ApiException (HttpStatus .NOT_IMPLEMENTED , "AUTH_NOT_IMPLEMENTED" , "Login flow is not implemented yet" ,
40- meta (requestId ));
47+ var result = authLoginService .login (request .email (), request .password (), request .deviceInfo ());
48+ AuthTokensResponse response = toAuthTokensResponse (result );
49+ return ResponseEntity .ok (new ApiSuccessResponse <>(response , meta (requestId )));
4150 }
4251
4352 @ PostMapping ("/social-login" )
4453 public ResponseEntity <ApiSuccessResponse <AuthTokensResponse >> socialLogin (
4554 @ Valid @ RequestBody SocialLoginRequest request ,
4655 @ RequestHeader (value = "X-Request-Id" , required = false ) String requestId ) {
47- throw new ApiException (HttpStatus .NOT_IMPLEMENTED , "AUTH_NOT_IMPLEMENTED" ,
48- "Social login flow is not implemented yet" , meta (requestId ));
56+ var result = authSocialLoginService .socialLogin (request .provider (), request .providerToken (),
57+ request .deviceInfo ());
58+ AuthTokensResponse response = toAuthTokensResponse (result );
59+ return ResponseEntity .ok (new ApiSuccessResponse <>(response , meta (requestId )));
4960 }
5061
5162 @ PostMapping ("/refresh" )
@@ -61,8 +72,13 @@ public ResponseEntity<ApiSuccessResponse<AuthTokensResponse>> refresh(@Valid @Re
6172 @ PostMapping ("/logout" )
6273 public ResponseEntity <ApiSuccessResponse <Void >> logout (@ Valid @ RequestBody LogoutRequest request ,
6374 @ RequestHeader (value = "X-Request-Id" , required = false ) String requestId ) {
64- throw new ApiException (HttpStatus .NOT_IMPLEMENTED , "AUTH_NOT_IMPLEMENTED" , "Logout flow is not implemented yet" ,
65- meta (requestId ));
75+ authLogoutService .logout (request .sessionId (), request .allSessions ());
76+ return ResponseEntity .ok (new ApiSuccessResponse <>(null , meta (requestId )));
77+ }
78+
79+ private AuthTokensResponse toAuthTokensResponse (com .cloudmedia .identity .auth .service .RefreshResult result ) {
80+ return new AuthTokensResponse (result .accessToken (), result .refreshToken (), result .sessionId (),
81+ authProperties .getAccessTokenTtl ().toSeconds (), authProperties .getRefreshTokenTtl ().toSeconds ());
6682 }
6783
6884 private ApiMeta meta (String requestIdHeader ) {
0 commit comments