diff --git a/backend/src/main/java/moadong/club/entity/Club.java b/backend/src/main/java/moadong/club/entity/Club.java index 8e1854c6..b619c4af 100644 --- a/backend/src/main/java/moadong/club/entity/Club.java +++ b/backend/src/main/java/moadong/club/entity/Club.java @@ -39,6 +39,8 @@ public class Club { @NotNull private ClubState state; + private String userId; + @Field("recruitmentInformation") private ClubRecruitmentInformation clubRecruitmentInformation; diff --git a/backend/src/main/java/moadong/club/repository/ClubRepository.java b/backend/src/main/java/moadong/club/repository/ClubRepository.java index f5c8b32c..30181ddb 100644 --- a/backend/src/main/java/moadong/club/repository/ClubRepository.java +++ b/backend/src/main/java/moadong/club/repository/ClubRepository.java @@ -14,6 +14,8 @@ public interface ClubRepository extends MongoRepository { Optional findClubById(ObjectId id); Optional> findClubByState(ClubState clubState); + + Optional findClubByUserId(String userId); @Query("{'division': {$regex: '^?0$', $options: 'i'}}") Optional> findClubByDivisionIgnoreCaseExact(String division); diff --git a/backend/src/main/java/moadong/user/controller/UserController.java b/backend/src/main/java/moadong/user/controller/UserController.java index a1b29504..4edfa64c 100644 --- a/backend/src/main/java/moadong/user/controller/UserController.java +++ b/backend/src/main/java/moadong/user/controller/UserController.java @@ -6,23 +6,22 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import moadong.global.payload.Response; +import moadong.global.util.JwtProvider; import moadong.user.annotation.CurrentUser; import moadong.user.payload.CustomUserDetails; import moadong.user.payload.request.UserLoginRequest; import moadong.user.payload.request.UserRegisterRequest; import moadong.user.payload.request.UserUpdateRequest; import moadong.user.payload.response.AccessTokenResponse; +import moadong.user.payload.response.FindUserClubResponse; +import moadong.user.payload.response.LoginResponse; import moadong.user.service.UserCommandService; import moadong.user.view.UserSwaggerView; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.CookieValue; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/auth/user") @@ -31,6 +30,7 @@ public class UserController { private final UserCommandService userCommandService; + private final JwtProvider jwtProvider; @PostMapping("/register") @Operation( @@ -45,8 +45,8 @@ public ResponseEntity registerUser(@RequestBody @Validated UserRegisterReques @PostMapping("/login") public ResponseEntity loginUser(@RequestBody @Validated UserLoginRequest request, HttpServletResponse response) { - AccessTokenResponse accessTokenResponse = userCommandService.loginUser(request, response); - return Response.ok(accessTokenResponse); + LoginResponse loginResponse = userCommandService.loginUser(request, response); + return Response.ok(loginResponse); } @PostMapping("/refresh") @@ -66,4 +66,11 @@ public ResponseEntity update(@CurrentUser CustomUserDetails user, return Response.ok("success update"); } + @PostMapping("/find/club") + @PreAuthorize("isAuthenticated()") + @SecurityRequirement(name = "BearerAuth") + public ResponseEntity findUserClub(@AuthenticationPrincipal CustomUserDetails userDetails){ + return Response.ok(new FindUserClubResponse(userDetails.getId())); + } + } diff --git a/backend/src/main/java/moadong/user/payload/response/FindUserClubResponse.java b/backend/src/main/java/moadong/user/payload/response/FindUserClubResponse.java new file mode 100644 index 00000000..f45c5a31 --- /dev/null +++ b/backend/src/main/java/moadong/user/payload/response/FindUserClubResponse.java @@ -0,0 +1,6 @@ +package moadong.user.payload.response; + +public record FindUserClubResponse( + String clubId +) { +} diff --git a/backend/src/main/java/moadong/user/payload/response/LoginResponse.java b/backend/src/main/java/moadong/user/payload/response/LoginResponse.java new file mode 100644 index 00000000..829cea73 --- /dev/null +++ b/backend/src/main/java/moadong/user/payload/response/LoginResponse.java @@ -0,0 +1,7 @@ +package moadong.user.payload.response; + +public record LoginResponse( + String accessToken, + String clubId +) { +} diff --git a/backend/src/main/java/moadong/user/service/UserCommandService.java b/backend/src/main/java/moadong/user/service/UserCommandService.java index 28b1e6ea..869078bd 100644 --- a/backend/src/main/java/moadong/user/service/UserCommandService.java +++ b/backend/src/main/java/moadong/user/service/UserCommandService.java @@ -10,10 +10,12 @@ import moadong.global.exception.RestApiException; import moadong.global.util.JwtProvider; import moadong.user.entity.User; +import moadong.user.payload.CustomUserDetails; import moadong.user.payload.request.UserLoginRequest; import moadong.user.payload.request.UserRegisterRequest; import moadong.user.payload.request.UserUpdateRequest; import moadong.user.payload.response.AccessTokenResponse; +import moadong.user.payload.response.LoginResponse; import moadong.user.repository.UserInformationRepository; import moadong.user.repository.UserRepository; import org.springframework.http.ResponseCookie; @@ -24,6 +26,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service @AllArgsConstructor public class UserCommandService { @@ -53,14 +57,14 @@ private void createClub() { clubRepository.save(club); } - public AccessTokenResponse loginUser(UserLoginRequest userLoginRequest, - HttpServletResponse response) { + public LoginResponse loginUser(UserLoginRequest userLoginRequest, + HttpServletResponse response) { try { Authentication authenticate = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(userLoginRequest.userId(), userLoginRequest.password())); - UserDetails userDetails = (UserDetails) authenticate.getPrincipal(); + CustomUserDetails userDetails = (CustomUserDetails) authenticate.getPrincipal(); String accessToken = jwtProvider.generateAccessToken(userDetails.getUsername()); String refreshToken = jwtProvider.generateRefreshToken(userDetails.getUsername()); @@ -72,7 +76,11 @@ public AccessTokenResponse loginUser(UserLoginRequest userLoginRequest, .build(); response.addHeader("Set-Cookie", cookie.toString()); - return new AccessTokenResponse(accessToken); + System.out.println(userDetails.getId()); + Club club = clubRepository.findClubByUserId(userDetails.getId()) + .orElseThrow(() -> new RestApiException(ErrorCode.CLUB_NOT_FOUND)); + + return new LoginResponse(accessToken,club.getId()); } catch (MongoWriteException e) { throw new RestApiException(ErrorCode.USER_ALREADY_EXIST); }