Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature]JWT 토큰 전달 시 관리자가 생성한 동아리 아이디 반환 API 추가 #228

Merged
merged 2 commits into from
Mar 21, 2025
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
2 changes: 2 additions & 0 deletions backend/src/main/java/moadong/club/entity/Club.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public class Club {
@NotNull
private ClubState state;

private String userId;


@Field("recruitmentInformation")
private ClubRecruitmentInformation clubRecruitmentInformation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
public interface ClubRepository extends MongoRepository<Club, String> {
Optional<Club> findClubById(ObjectId id);
Optional<List<Club>> findClubByState(ClubState clubState);

Optional<Club> findClubByUserId(String userId);
@Query("{'division': {$regex: '^?0$', $options: 'i'}}")
Optional<List<Club>> findClubByDivisionIgnoreCaseExact(String division);

Expand Down
23 changes: 15 additions & 8 deletions backend/src/main/java/moadong/user/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -31,6 +30,7 @@
public class UserController {

private final UserCommandService userCommandService;
private final JwtProvider jwtProvider;

@PostMapping("/register")
@Operation(
Expand All @@ -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")
Expand All @@ -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()));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package moadong.user.payload.response;

public record FindUserClubResponse(
String clubId
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package moadong.user.payload.response;

public record LoginResponse(
String accessToken,
String clubId
) {
}
16 changes: 12 additions & 4 deletions backend/src/main/java/moadong/user/service/UserCommandService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand Down Expand Up @@ -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());

Expand All @@ -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);
}
Expand Down