Skip to content

Commit

Permalink
Merge pull request #145 from Kusitms-28th-MeetUp-C/feature/144-user
Browse files Browse the repository at this point in the history
[fix]:Main 회원가입 api 로직 수정
  • Loading branch information
RyuKwanKon committed Nov 20, 2023
2 parents c0bc060 + 2d8036d commit 002459b
Show file tree
Hide file tree
Showing 10 changed files with 67 additions and 53 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.kusitms.mainservice.domain.mypage.dto.response;

import com.kusitms.mainservice.domain.user.domain.User;
import com.kusitms.mainservice.domain.user.domain.UserType;
import lombok.Builder;
import lombok.Getter;

Expand All @@ -10,7 +9,7 @@
public class MyPageUserResponseDto {
private Long userId;
private String profile;
private UserType userType;
private String userType;
private String name;
private String email;
private int templateNum;
Expand All @@ -21,7 +20,7 @@ public static MyPageUserResponseDto of(User user,int templateNum, int roadmapNum
return MyPageUserResponseDto.builder()
.userId(user.getId())
.profile(user.getProfile())
.userType(user.getUserType())
.userType(user.getUserType().getStringUserType())
.name(user.getName())
.email(user.getEmail())
.templateNum(templateNum)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,8 @@ private Team createTeamFromRequestDto(TeamRequestDto teamRequestDto, User user)
}

private void deleteTeamSpaceList(Team team) {
team.getTeamSpaceList()
.forEach(teamSpace -> deleteTeamSpace(teamSpace.getId()));
team.getTeamSpaceList().forEach(teamSpace -> deleteTeamSpace(teamSpace.getId()));
team.resetTeamSpaceList();
// spaceList.forEach(space -> {
// if (!Objects.isNull(space.getTeamSpaceId()))
// deleteTeamSpace(space.getTeamSpaceId());
// });
}

private List<Team> getTeamListFromUserId(Long userId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,21 @@
public class UserController {
private final AuthService authService;

@PostMapping("/signIn")
@PostMapping("/signin")
public ResponseEntity<SuccessResponse<?>> signIn(@RequestHeader("Authorization") final String authToken,
@RequestBody final UserSignInRequestDto requestDto) {
final UserAuthResponseDto responseDto = authService.signIn(requestDto, authToken);
return SuccessResponse.ok(responseDto);
}

// @PostMapping("/signUp")
// public ResponseEntity<SuccessResponse<?>> signUp(@RequestHeader("Authorization") final String authToken,
// @RequestBody final UserSignUpRequestDto requestDto) {
// final UserAuthResponseDto responseDto = authService.signUp(requestDto, authToken);
// return SuccessResponse.ok(responseDto);
// }
@PostMapping("/signup")
public ResponseEntity<SuccessResponse<?>> signUp(@UserId final Long userId,
@RequestBody final UserSignUpRequestDto requestDto) {
authService.signUp(userId, requestDto);
return SuccessResponse.ok(null);
}

@PatchMapping("/signOut")
@PatchMapping("/signout")
public ResponseEntity<SuccessResponse<?>> signOut(@UserId final Long userId) {
authService.signOut(userId);
return SuccessResponse.ok(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,22 @@ public class User {
@Builder.Default
private List<Reviewer> reviewerList = new ArrayList<>();

public static User createUser(PlatformUserInfo platformUserInfo, String sessionId) {
public static User createUser(PlatformUserInfo platformUserInfo, Platform platform, String sessionId) {
return User.builder()
.platformId(platformUserInfo.getId())
.platform(platform)
.email(platformUserInfo.getEmail())
.name(platformUserInfo.getName())
.profile(platformUserInfo.getPicture())
.sessionId(sessionId)
.build();
}

public void updateSignUpUserInfo(String name, UserType userType){
this.name = name;
this.userType = userType;
}

public void updatePlatform(Platform platform) {
this.platform = platform;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,29 @@
package com.kusitms.mainservice.domain.user.domain;

import com.kusitms.mainservice.global.error.exception.InvalidValueException;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Arrays;

import static com.kusitms.mainservice.global.error.ErrorCode.INVALID_USER_TYPE;

@RequiredArgsConstructor
@Getter
public enum UserType {
PM,
마케터,
디자이너,
개발자,
기획자,
에디터
PM("PM"),
MARKETER("마케터"),
DESIGNER("디자이너"),
DEVELOPER("개발자"),
PLANNER("기획자"),
EDITOR("에디터");

private final String stringUserType;

public static UserType getEnumUserTypeFromStringUserType(String stringUserType) {
return Arrays.stream(values())
.filter(userType -> userType.stringUserType.equals(stringUserType))
.findFirst()
.orElseThrow(() -> new InvalidValueException(INVALID_USER_TYPE));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class UserSignUpRequestDto {
private String platform;
private String userName;
private String userType;
private String teamName;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.kusitms.mainservice.domain.user.dto.response;

import com.kusitms.mainservice.domain.user.domain.User;
import com.kusitms.mainservice.domain.user.domain.UserType;
import lombok.Builder;
import lombok.Getter;

Expand All @@ -10,7 +9,7 @@
public class DetailUserResponseDto {
private Long id;
private String profile;
private UserType userType;
private String userType;
private String name;
private String email;
private int templateNum;
Expand All @@ -21,7 +20,7 @@ public static DetailUserResponseDto of(User user, int templateNum, int roadmapNu
return DetailUserResponseDto.builder()
.id(user.getId())
.profile(user.getProfile())
.userType(user.getUserType())
.userType(user.getUserType().getStringUserType())
.name(user.getName())
.email(user.getEmail())
.templateNum(templateNum)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
@Builder
@Getter
public class UserAuthResponseDto {
private Long id;
private String email;
private String name;
private String picture;
Expand All @@ -19,7 +18,6 @@ public class UserAuthResponseDto {

public static UserAuthResponseDto of(User user, TokenInfo token, Boolean isFirst) {
return UserAuthResponseDto.builder()
.id(user.getId())
.email(user.getEmail())
.name(user.getName())
.picture(user.getProfile())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.kusitms.mainservice.domain.user.service;

import com.kusitms.mainservice.domain.team.domain.Team;
import com.kusitms.mainservice.domain.team.repository.TeamRepository;
import com.kusitms.mainservice.domain.user.auth.PlatformUserInfo;
import com.kusitms.mainservice.domain.user.auth.RestTemplateProvider;
import com.kusitms.mainservice.domain.user.domain.Platform;
import com.kusitms.mainservice.domain.user.domain.User;
import com.kusitms.mainservice.domain.user.domain.UserType;
import com.kusitms.mainservice.domain.user.dto.request.UserSignInRequestDto;
import com.kusitms.mainservice.domain.user.dto.request.UserSignUpRequestDto;
import com.kusitms.mainservice.domain.user.dto.response.UserAuthResponseDto;
import com.kusitms.mainservice.domain.user.repository.RefreshTokenRepository;
import com.kusitms.mainservice.domain.user.repository.UserRepository;
import com.kusitms.mainservice.global.config.auth.JwtProvider;
import com.kusitms.mainservice.global.config.auth.TokenInfo;
import com.kusitms.mainservice.global.error.exception.ConflictException;
import com.kusitms.mainservice.global.error.exception.EntityNotFoundException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -22,7 +25,7 @@

import static com.kusitms.mainservice.domain.user.domain.Platform.getEnumPlatformFromStringPlatform;
import static com.kusitms.mainservice.domain.user.domain.RefreshToken.createRefreshToken;
import static com.kusitms.mainservice.global.error.ErrorCode.DUPLICATE_USER;
import static com.kusitms.mainservice.domain.user.domain.UserType.getEnumUserTypeFromStringUserType;
import static com.kusitms.mainservice.global.error.ErrorCode.USER_NOT_FOUND;


Expand All @@ -32,30 +35,29 @@
@Service
public class AuthService {
private final UserRepository userRepository;
private final TeamRepository teamRepository;
private final JwtProvider jwtProvider;
private final RestTemplateProvider restTemplateProvider;
private final RefreshTokenRepository refreshTokenRepository;

public UserAuthResponseDto signIn(UserSignInRequestDto userSignInRequestDto, String authToken) {
Platform platform = getEnumPlatformFromStringPlatform(userSignInRequestDto.getPlatform());
PlatformUserInfo platformUser = getPlatformUserInfoFromRestTemplate(platform, authToken);
User getUser = getUserByPlatformUserInfo(platformUser);
Boolean isFistLogin = Objects.isNull(getUser.getPlatform()) ? Boolean.TRUE : Boolean.FALSE;
User getUser = getUserByPlatformUserInfo(platformUser, platform);
Boolean isFistLogin = Objects.isNull(getUser.getUserType()) ? Boolean.TRUE : Boolean.FALSE;
TokenInfo tokenInfo = issueAccessTokenAndRefreshToken(getUser);
updateRefreshToken(tokenInfo.getRefreshToken(), getUser);
saveUser(getUser, platform);
saveUser(getUser);
return UserAuthResponseDto.of(getUser, tokenInfo, isFistLogin);
}

// public UserAuthResponseDto signUp(UserSignUpRequestDto userSignUpRequestDto, String authToken) {
// Platform platform = getEnumPlatformFromStringPlatform(userSignUpRequestDto.getPlatform());
// PlatformUserInfo platformUser = getPlatformUserInfoFromRestTemplate(platform, authToken);
// validateDuplicateUser(platform, platformUser.getId());
// User createdUser = saveUser(platformUser, platform);
// TokenInfo tokenInfo = issueAccessTokenAndRefreshToken(createdUser);
// updateRefreshToken(tokenInfo.getRefreshToken(), createdUser);
// return UserAuthResponseDto.of(createdUser, tokenInfo);
// }
public void signUp(Long userId, UserSignUpRequestDto userSignUpRequestDto) {
User user = getUserFromUserId(userId);
UserType userType = getEnumUserTypeFromStringUserType(userSignUpRequestDto.getUserType());
user.updateSignUpUserInfo(userSignUpRequestDto.getUserName(), userType);
Team team = Team.createTeam(userSignUpRequestDto.getTeamName(), null, null, user);
saveTeam(team);
}

public void signOut(Long userId) {
User findUser = getUserFromUserId(userId);
Expand All @@ -67,13 +69,7 @@ private void deleteRefreshToken(User user) {
refreshTokenRepository.deleteById(user.getId());
}

private void validateDuplicateUser(Platform platform, String platformId) {
if (userRepository.existsUserByPlatformAndPlatformId(platform, platformId))
throw new ConflictException(DUPLICATE_USER);
}

private void saveUser(User createdUser, Platform platform) {
createdUser.updatePlatform(platform);
private void saveUser(User createdUser) {
userRepository.save(createdUser);
}

Expand All @@ -91,15 +87,19 @@ private User getUserFromUserId(Long userId) {
.orElseThrow(() -> new EntityNotFoundException(USER_NOT_FOUND));
}

private User getUserByPlatformUserInfo(PlatformUserInfo platformUserInfo) {
private User getUserByPlatformUserInfo(PlatformUserInfo platformUserInfo, Platform platform) {
return userRepository.findByPlatformId(platformUserInfo.getId())
.orElse(User.createUser(platformUserInfo, generateRandomUuid(platformUserInfo)));
.orElse(User.createUser(platformUserInfo, platform, generateRandomUuid(platformUserInfo)));
}

private PlatformUserInfo getPlatformUserInfoFromRestTemplate(Platform platform, String authToken) {
return restTemplateProvider.getUserInfoUsingRestTemplate(platform, authToken);
}

private void saveTeam(Team team) {
teamRepository.save(team);
}

private String generateRandomUuid(PlatformUserInfo platformUserInfo) {
UUID randomUuid = UUID.randomUUID();
String uuidAsString = randomUuid.toString().replace("-", "");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public enum ErrorCode {
INVALID_SHARED_TYPE(HttpStatus.BAD_REQUEST,"유효하지않은 공유된 템플릿,로드맵 타입 입니다."),
INVALID_TEAM_TYPE(HttpStatus.BAD_REQUEST, "유효하지 않은 팀 타입입니다."),
INVALID_TEAM_SPACE_SIZE(HttpStatus.BAD_REQUEST, "유효하지 않은 팀 스페이스 크기입니다."),
INVALID_USER_TYPE(HttpStatus.BAD_REQUEST, "유효하지 않은 유저 타입니다."),
EMPTY_TEAM_SPACE(HttpStatus.BAD_REQUEST, "요청에 팀 스페이스 정보가 없습니다."),

/**
Expand Down

0 comments on commit 002459b

Please sign in to comment.