Skip to content

Commit

Permalink
Merge pull request #126 from teamterning/develop
Browse files Browse the repository at this point in the history
[🔀 merge] [2차] 코드 리펙토링 사항 적용 (2)
  • Loading branch information
junggyo1020 authored Sep 7, 2024
2 parents bbe1d01 + 23f2f08 commit ba346b0
Show file tree
Hide file tree
Showing 21 changed files with 176 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,20 @@ public ResponseEntity<SuccessResponse> createScrap(
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_CREATE_SCRAP));
}

@DeleteMapping("/scraps/{scrapId}")
@DeleteMapping("/scraps/{internshipAnnouncementId}")
public ResponseEntity<SuccessResponse> deleteScrap(
@AuthenticationPrincipal Long userId,
@PathVariable Long scrapId) {
scrapService.deleteScrap(scrapId, userId);
@PathVariable Long internshipAnnouncementId) {
scrapService.deleteScrap(internshipAnnouncementId, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_DELETE_SCRAP));
}

@PatchMapping("/scraps/{scrapId}")
@PatchMapping("/scraps/{internshipAnnouncementId}")
public ResponseEntity<SuccessResponse> updateScrapColor(
@AuthenticationPrincipal Long userId,
@PathVariable Long scrapId,
@PathVariable Long internshipAnnouncementId,
@RequestBody UpdateScrapRequestDto request) {
scrapService.updateScrapColor(scrapId, request, userId);
scrapService.updateScrapColor(internshipAnnouncementId, request, userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_UPDATE_SCRAP));
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package org.terning.terningserver.controller;

import lombok.RequiredArgsConstructor;
import org.apache.coyote.Response;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.terning.terningserver.controller.swagger.UserSwagger;
import org.terning.terningserver.dto.user.request.ProfileUpdateRequestDto;
import org.terning.terningserver.dto.user.response.ProfileResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.service.UserService;

import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_GET_PROFILE;
import static org.terning.terningserver.exception.enums.SuccessMessage.SUCCESS_UPDATE_PROFILE;

@RestController
@RequiredArgsConstructor
Expand All @@ -28,4 +28,13 @@ public ResponseEntity<SuccessResponse<ProfileResponseDto>> getProfile(
ProfileResponseDto profile = userService.getProfile(userId);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_GET_PROFILE, profile));
}

@PatchMapping("/mypage/profile")
public ResponseEntity<SuccessResponse> updateProfile(
@AuthenticationPrincipal Long userId,
@RequestBody ProfileUpdateRequestDto request
){
userService.updateProfile(userId, request);
return ResponseEntity.ok(SuccessResponse.of(SUCCESS_UPDATE_PROFILE));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.ResponseEntity;
import org.terning.terningserver.dto.user.request.ProfileUpdateRequestDto;
import org.terning.terningserver.dto.user.response.ProfileResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;

Expand All @@ -11,6 +12,13 @@ public interface UserSwagger {

@Operation(summary = "마이페이지 > 프로필 정보 불러오기", description = "마이페이지에서 프로필 정보를 불러오는 API")
ResponseEntity<SuccessResponse<ProfileResponseDto>> getProfile(
Long userId
Long userId
);

@Operation(summary = "마이페이지 > 프로필 정보 수정하기", description = "마이페이지에서 프로필 정보를 수정하는 API")
ResponseEntity<SuccessResponse> updateProfile(
Long userId,
ProfileUpdateRequestDto request
);

}
12 changes: 10 additions & 2 deletions src/main/java/org/terning/terningserver/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.*;
import org.terning.terningserver.domain.common.BaseTimeEntity;
import org.terning.terningserver.domain.enums.AuthType;
import org.terning.terningserver.domain.enums.ProfileImage;
import org.terning.terningserver.domain.enums.State;
import org.terning.terningserver.exception.CustomException;

Expand Down Expand Up @@ -37,8 +38,9 @@ public class User extends BaseTimeEntity {
// TODO: 특수문자, 첫글자 , 12자리 이내
@Column(length = 12)
private String name; // 사용자 이름

private Integer profileImage; //유저 아이콘

@Enumerated(STRING)
private ProfileImage profileImage; //유저 아이콘

@Enumerated(STRING)
private AuthType authType; // 인증 유형 (예: 카카오, 애플)
Expand Down Expand Up @@ -68,4 +70,10 @@ public void resetRefreshToken() {
public void assignFilter(Filter filter) {
this.filter = filter;
}

//프로필 수정 메서드
public void updateProfile(String name, ProfileImage profileImage){
this.name = name;
this.profileImage = profileImage;
}
}
22 changes: 11 additions & 11 deletions src/main/java/org/terning/terningserver/domain/enums/Color.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
@Getter
public enum Color {

RED(0, "ED4E54"),
ORANGE1(1, "EE7647"),
ORANGE2(2, "F3A649"),
YELLOW(3, "F5E660"),
GREEN1(4, "C4E953"),
GREEN2(5, "84D558"),
BLUE1(6, "45D0CC"),
BLUE2(7, "4AA9F2"),
PURPLE(8, "9B64E2"),
PINK(9, "F260AC");
RED("red", "ED4E54"),
ORANGE("orange", "F3A649"),
LIGHT_GREEN("lightgreen", "C4E953"),
MINT("mint", "45D0CC"),
PURPLE("purple", "9B64E2"),
CORAL("coral", "EE7647"),
YELLOW("yellow", "F5E660"),
GREEN("green", "84D558"),
BLUE("blue", "4AA9F2"),
PINK("pink", "F260AC");

private final int key;
private final String name;
private final String value;

public String getColorValue() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.terning.terningserver.domain.enums;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Getter
public enum ProfileImage {
BASIC("basic"),
LUCKY("lucky"),
SMART("smart"),
GLASS("glass"),
CALENDAR("calendar");

private final String value;

public static ProfileImage fromValue(String value){
for(ProfileImage image : values()){
if(image.value.equalsIgnoreCase(value)){
return image;
}
}
throw new IllegalArgumentException("Invalid profile image: " + value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
@Builder(access = PRIVATE)
public record SignUpRequestDto(
@NonNull String name,
int profileImage,
String profileImage,
@NonNull AuthType authType
) {

public static SignUpRequestDto of(String name, int profileImage, AuthType authType){
public static SignUpRequestDto of(String name, String profileImage, AuthType authType){
return SignUpRequestDto.builder()
.name(name)
.profileImage(profileImage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
public record SignUpWithAuthIdRequestDto(
@NonNull String authId,
@NonNull String name,
int profileImage,
String profileImage,
@NonNull AuthType authType
) {
public static SignUpWithAuthIdRequestDto of(String authId, String name, int profileImage, AuthType authType){
public static SignUpWithAuthIdRequestDto of(String authId, String name, String profileImage, AuthType authType){
return SignUpWithAuthIdRequestDto.builder()
.authId(authId)
.name(name)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.terning.terningserver.dto.scrap.request;

public record CreateScrapRequestDto(
int color
String color
) {

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.terning.terningserver.dto.scrap.request;

public record UpdateScrapRequestDto(
int color
String color
) {
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.terning.terningserver.dto.user.request;

import lombok.Builder;
import lombok.NonNull;

import static lombok.AccessLevel.PRIVATE;

@Builder(access = PRIVATE)
public record ProfileUpdateRequestDto(
@NonNull String name,
String profileImage
) {
public static ProfileUpdateRequestDto of(String name, String profileImage){
return ProfileUpdateRequestDto.builder()
.name(name)
.profileImage(profileImage)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
@Builder
public record ProfileResponseDto(
String name,
String profileImage,
String authType
) {
public static ProfileResponseDto of(final User user){
return ProfileResponseDto.builder()
.name(user.getName())
.profileImage(user.getProfileImage().getValue()) // Enum to String
.authType(user.getAuthType().name().toUpperCase())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public enum ErrorMessage {
FAILED_SIGN_UP_USER_FILTER_CREATION(404, "사용자 필터 생성에 실패하였습니다"),
FAILED_SIGN_UP_USER_FILTER_ASSIGNMENT(404, "사용자 필터 연결에 실패하였습니다"),

//스크랩
// 스크랩
EXISTS_SCRAP_ALREADY(400, "이미 스크랩했습니다."),

// 로그 아웃
Expand All @@ -32,12 +32,15 @@ public enum ErrorMessage {

// 계정 탈퇴
FAILED_WITHDRAW(404, "계정 탈퇴에 실패하였습니다"),

// 마이페이지
INVALID_PROFILE_IMAGE(404, "유효하지 않은 프로필 이미지 입니다."),

//404(NotFound)
// 404(NotFound)
NOT_FOUND_INTERN_CATEGORY(404, "해당 인턴 공고는 존재하지 않습니다"),
NOT_FOUND_INTERN_EXCEPTION(404, "해당 인턴 공고는 존재하지 않습니다"),
NOT_FOUND_USER_EXCEPTION(404, "해당 유저가 존재하지 않습니다"),
NOT_FOUND_SCRAP(404, "해당 스크랩 id에 대한 스크랩 정보가 존재하지 않습니다"),
NOT_FOUND_SCRAP(404, "스크랩 정보가 존재하지 않습니다"),
FORBIDDEN_DELETE_SCRAP(403, "해당 유저가 스크랩하지 않았으므로 스크랩 취소가 불가합니다");

private final int status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public enum SuccessMessage {
SUCCESS_UPDATE_USER_FILTER(200, "필터링 재설정에 성공했습니다"),

// My page (마이페이지 화면)
SUCCESS_GET_PROFILE(200, "마이페이지 > 프로필 정보 불러오기를 성공했습니다");

SUCCESS_GET_PROFILE(200, "마이페이지 > 프로필 정보 불러오기를 성공했습니다"),
SUCCESS_UPDATE_PROFILE(200, "프로필 수정에 성공했습니다");

private final int status;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public interface ScrapRepository extends JpaRepository<Scrap, Long>, ScrapReposi

// List<Scrap> findByUserIdAndInternshipAnnouncement_Deadline(Long userId, LocalDate deadline);

void deleteByInternshipAnnouncementIdAndUserId(Long internshipId, Long userId);

List<Scrap> findByUserIdAndInternshipAnnouncement_DeadlineBetween(Long userId, LocalDate start, LocalDate end);

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.terning.terningserver.domain.Token;
import org.terning.terningserver.domain.User;
import org.terning.terningserver.domain.enums.Grade;
import org.terning.terningserver.domain.enums.ProfileImage;
import org.terning.terningserver.domain.enums.WorkingPeriod;
import org.terning.terningserver.dto.auth.request.SignInRequestDto;
import org.terning.terningserver.dto.auth.request.SignUpFilterRequestDto;
Expand Down Expand Up @@ -47,22 +48,10 @@ public class AuthServiceImpl implements AuthService {
@Transactional
public SignInResponseDto signIn(String authAccessToken, SignInRequestDto request) {
String authId = getAuthId(request.authType(), authAccessToken);
Optional<User> userOptional = userRepository.findByAuthIdAndAuthType(authId, request.authType());

if (userOptional.isPresent()) {
User user = userOptional.get();
Token token = getToken(user);
user.updateRefreshToken(token.getRefreshToken());
return SignInResponseDto.of(
token,
authId,
request.authType(),
user.getId()
);
}
else {
return SignInResponseDto.of(null, authId, request.authType(), null);
}

return findUserByAuthIdAndType(authId, request.authType())
.map(user -> createSignInResponseForExistingUser(user, authId, request.authType()))
.orElseGet(() -> createSignInResponseForNonExistingUser(authId, request.authType()));
}

@Transactional
Expand Down Expand Up @@ -113,6 +102,25 @@ public void connectFilterToUser(long userId, long filterId) {
userRepository.save(user);
}

private Optional<User> findUserByAuthIdAndType(String authId, AuthType authType) {
return userRepository.findByAuthIdAndAuthType(authId, authType);
}

private SignInResponseDto createSignInResponseForExistingUser(User user, String authId, AuthType authType) {
Token token = getToken(user);
user.updateRefreshToken(token.getRefreshToken());
return SignInResponseDto.of(
token,
authId,
authType,
user.getId()
);
}

private SignInResponseDto createSignInResponseForNonExistingUser(String authId, AuthType authType) {
return SignInResponseDto.of(null, authId, authType, null);
}

private String getAuthId(AuthType authType, String authAccessToken) {
return switch (authType) {
case APPLE -> appleService.getAppleData(authAccessToken);
Expand Down Expand Up @@ -142,11 +150,15 @@ private SignUpWithAuthIdRequestDto createSignUpRequestDto(String authId, SignUpR
}

private User createUser(SignUpWithAuthIdRequestDto requestDto) {
//프로필 이미지가 null일 경우 기본값 "basic"으로 설정
ProfileImage profileImage = requestDto.profileImage() != null
? ProfileImage.fromValue(requestDto.profileImage()) : ProfileImage.BASIC;

User user = User.builder()
.authId(requestDto.authId())
.name(requestDto.name())
.authType(requestDto.authType())
.profileImage(requestDto.profileImage())
.profileImage(profileImage) //String to Enum
.build();
return userRepository.save(user);
}
Expand Down
Loading

0 comments on commit ba346b0

Please sign in to comment.