Skip to content

Commit

Permalink
Merge pull request #42 from KNU-HAEDAL/issue/#41
Browse files Browse the repository at this point in the history
Issue/#41
  • Loading branch information
momnpa333 authored Jul 21, 2024
2 parents 31e60da + 972d9fd commit d354c6f
Show file tree
Hide file tree
Showing 18 changed files with 200 additions and 78 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class AuthController {
@PostMapping("/api/auth/oauth2")
public ApiResponse<AuthRes.LoginResponse> oauth2(
@RequestBody @Valid AuthReq.OAuth2LoginRequest request) {
Pair<JwtToken, UserModel> pair = authService.oAuth2LoginOrSignup(request.provider(),
Pair<JwtToken, UserModel.Main> pair = authService.oAuth2LoginOrSignup(request.provider(),
request.code(), request.state());
var response = AuthRes.LoginResponse.from(pair.getFirst(), pair.getSecond());
return ApiResponse.success(response);
Expand All @@ -37,7 +37,7 @@ public ApiResponse<AuthRes.LoginResponse> oauth2(
@PostMapping("/api/auth/signup")
public ApiResponse<AuthRes.LoginResponse> signup(
@RequestBody @Valid AuthReq.EmailSignupRequest request) {
Pair<JwtToken, UserModel> pair = authService.signup(request.toCommand());
Pair<JwtToken, UserModel.Main> pair = authService.signup(request.toCommand());
var response = AuthRes.LoginResponse.from(pair.getFirst(), pair.getSecond());
return ApiResponse.success(response);
}
Expand All @@ -46,7 +46,7 @@ public ApiResponse<AuthRes.LoginResponse> signup(
@PostMapping("/api/auth/login")
public ApiResponse<AuthRes.LoginResponse> login(
@RequestBody @Valid AuthReq.EmailLoginRequest request) {
Pair<JwtToken, UserModel> pair = authService.login(request.email(), request.password());
Pair<JwtToken, UserModel.Main> pair = authService.login(request.email(), request.password());
var response = AuthRes.LoginResponse.from(pair.getFirst(), pair.getSecond());
return ApiResponse.success(response);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ public record LoginResponse(
String refreshToken,
UserRes.UserInfo userInfo
) {
public static LoginResponse from(JwtToken jwtToken, UserModel userModel) {
var userInfo = UserRes.UserInfo.from(userModel);
public static LoginResponse from(JwtToken jwtToken, UserModel.Main userMain) {
var userInfo = UserRes.UserInfo.from(userMain);
return LoginResponse.builder()
.accessToken(jwtToken.getAccessToken())
.refreshToken(jwtToken.getRefreshToken())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.List;

@Tag(name = "user", description = "유저 API")
@RequiredArgsConstructor
Expand Down Expand Up @@ -44,16 +43,13 @@ public ApiResponse<Void> updateUser(

@Operation(summary = "스트릭 조회", description = "스트릭을 조회한다.")
@GetMapping("/api/user/strick")
public ApiResponse<List<UserRes.Strick>> getStrick(
public ApiResponse<UserRes.Strick> getStrick(
@AuthenticationPrincipal JwtUser jwtUser,
@RequestParam(required = false) LocalDate startDate, // false면 오늘
@RequestParam(required = false) LocalDate endDate // false면 365일전
) {
return ApiResponse.success(List.of(
new UserRes.Strick(List.of(
new UserRes.DayCount(LocalDate.now(), 1)
))
));
var userModelStrick = userService.getUserStrick(jwtUser.getId(), startDate, endDate);
return ApiResponse.success(UserRes.Strick.from(userModelStrick));
}

@Operation(summary = "유저 랭킹 페이징", description = "전체 유저 랭킹을 조회 페이징")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ public record UserInfo(
String email,
TierInfo tierInfo
) {
public static UserInfo from(UserModel userModel) {
var tierInfo = TierInfo.from(userModel.exp());
public static UserInfo from(UserModel.Main userMain) {
var tierInfo = TierInfo.from(userMain.exp());
return UserInfo.builder()
.id(userModel.id())
.nickname(userModel.nickname())
.profileImageUrl(userModel.profileImageUrl())
.email(userModel.email())
.id(userMain.id())
.nickname(userMain.nickname())
.profileImageUrl(userMain.profileImageUrl())
.email(userMain.email())
.tierInfo(tierInfo)
.build();
}
Expand All @@ -35,12 +35,12 @@ public record User(
String profileImageUrl,
TierInfo tierInfo
) {
public static User from(UserModel userModel) {
var tierInfo = TierInfo.from(userModel.exp());
public static User from(UserModel.Main userMain) {
var tierInfo = TierInfo.from(userMain.exp());
return User.builder()
.id(userModel.id())
.nickname(userModel.nickname())
.profileImageUrl(userModel.profileImageUrl())
.id(userMain.id())
.nickname(userMain.nickname())
.profileImageUrl(userMain.profileImageUrl())
.tierInfo(tierInfo)
.build();
}
Expand All @@ -65,8 +65,14 @@ public static TierInfo from(Integer exp) {

@Builder
public record Strick(
List<UserRes.DayCount> dayCounts
/** 여기서 Model의 DayCount를 사용해도 되는지 */
List<UserModel.DayCount> dayCounts
) {
public static Strick from(UserModel.Strick strick){
return Strick.builder()
.dayCounts(strick.dayCounts())
.build();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public class AuthService {
* OAuth2 로그인 또는 회원가입 <br> [state]는 nullable한 입력 값이다.<br> 1. OAuth2Client를 이용해 해당 provider로부터
* 유저정보를 가져옴 2. authToken으로 유저를 찾거나 없으면 회원가입 3. 토큰 발급, 유저정보 반환
*/
public Pair<JwtToken, UserModel> oAuth2LoginOrSignup(OAuth2Provider provider,
@NonNull String code, @Nullable String state) {
public Pair<JwtToken, UserModel.Main> oAuth2LoginOrSignup(OAuth2Provider provider,
@NonNull String code, @Nullable String state) {
OAuth2Client oAuth2Client = oAuth2Clients.stream()
.filter(client -> client.canHandle(provider))
.findFirst()
Expand All @@ -45,8 +45,8 @@ public Pair<JwtToken, UserModel> oAuth2LoginOrSignup(OAuth2Provider provider,

// 토큰 발급, 유저정보 반환
JwtToken jwtToken = createToken(user);
UserModel userModel = UserModel.from(user);
return Pair.of(jwtToken, userModel);
UserModel.Main userMain = UserModel.Main.from(user);
return Pair.of(jwtToken, userMain);
}


Expand All @@ -62,16 +62,16 @@ private JwtToken createToken(User user) {
}

@Transactional
public Pair<JwtToken, UserModel> signup(UserCommand.Create command) {
public Pair<JwtToken, UserModel.Main> signup(UserCommand.Create command) {
if (userReader.existsByEmail(command.getEmail())) {
throw new IllegalArgumentException("이미 존재하는 이메일입니다.");
}
command = command.copyEncodedPassword(passwordEncoder.encode(command.getPassword()));
User user = User.create(command);
userStore.store(user);
JwtToken jwtToken = createToken(user);
UserModel userModel = UserModel.from(user);
return Pair.of(jwtToken, userModel);
UserModel.Main userMain = UserModel.Main.from(user);
return Pair.of(jwtToken, userMain);
}

@Transactional
Expand All @@ -85,7 +85,7 @@ public void createManager(UserCommand.Create command) {
}

@Transactional(readOnly = true)
public Pair<JwtToken, UserModel> login(String email, String password) {
public Pair<JwtToken, UserModel.Main> login(String email, String password) {
User user = userReader.findByEmail(email)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 이메일입니다."));

Expand All @@ -94,8 +94,8 @@ public Pair<JwtToken, UserModel> login(String email, String password) {
}

JwtToken jwtToken = createToken(user);
UserModel userModel = UserModel.from(user);
return Pair.of(jwtToken, userModel);
UserModel.Main userMain = UserModel.Main.from(user);
return Pair.of(jwtToken, userMain);
}

public String reissueToken(String rawToken) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.haedal.zzansuni.domain.challengegroup;

import lombok.Builder;
import lombok.Getter;
import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeModel;
import org.haedal.zzansuni.domain.challengegroup.image.ChallengeGroupImage;
import org.haedal.zzansuni.domain.user.UserModel;
Expand Down Expand Up @@ -116,7 +115,7 @@ public static Detail from(ChallengeGroup challengeGroup, List<ChallengeGroupImag

@Builder
public record Ranking(
UserModel user,
UserModel.Main user,
Integer rank,
Integer accumulatedPoint
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private static PageImpl<ChallengeGroupModel.Ranking> getRankingPage(Pageable pag
Integer rank = challengeGroupUserExps.getNumber() * challengeGroupUserExps.getSize() + 1 + i;
ChallengeGroupUserExp challengeGroupUserExp = challengeGroupUserExps.getContent().get(i);
var rankingModel = ChallengeGroupModel.Ranking.builder()
.user(UserModel.from(challengeGroupUserExp.getUser()))
.user(UserModel.Main.from(challengeGroupUserExp.getUser()))
.accumulatedPoint(challengeGroupUserExp.getTotalExp())
.rank(rank)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ public class ChallengeReviewModel {
public record ChallengeReviewWithUserInfo(
Long challengeId,
String challengeTitle,
UserModel user,
UserModel.Main user,
String content,
Integer rating
) {

public static ChallengeReviewWithUserInfo from(ChallengeReview challengeReview) {
var userModel = UserModel.from(challengeReview.getUserChallenge().getUser());
var userModel = UserModel.Main.from(challengeReview.getUserChallenge().getUser());
return ChallengeReviewWithUserInfo.builder()
.challengeId(challengeReview.getUserChallenge().getChallenge().getId())
.challengeTitle(
Expand All @@ -36,13 +36,13 @@ public record ChallengeReviewWithChallenge(
Long challengeId,
String challengeTitle,
Integer challengeDifficulty,
UserModel user,
UserModel.Main user,
String content,
Integer rating
) {

public static ChallengeReviewWithChallenge from(ChallengeReview challengeReview) {
var userModel = UserModel.from(challengeReview.getUserChallenge().getUser());
var userModel = UserModel.Main.from(challengeReview.getUserChallenge().getUser());
return ChallengeReviewWithChallenge.builder()
.challengeId(challengeReview.getUserChallenge().getChallenge().getId())
.challengeTitle(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.haedal.zzansuni.domain.challengegroup.userchallenge;

import java.time.LocalDate;

public interface DayCountType {
LocalDate getDate();
Integer getCount();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.haedal.zzansuni.domain.challengegroup.userchallenge;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

Expand All @@ -21,4 +24,6 @@ public interface UserChallengeReader {
Page<UserChallenge> getCurrentChallengePageByUserId(Long userId, Pageable pageable);

Page<UserChallenge> getCompletedChallengePageByUserId(Long userId, Pageable pageable);

List<DayCountType> countAllByUserIdAndDate(Long userId, LocalDate startDate, LocalDate endDate);
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,75 @@
package org.haedal.zzansuni.domain.user;

import lombok.Builder;
import lombok.Getter;

@Builder
public record UserModel(
Long id,
String email,
String nickname,
String profileImageUrl,
Integer exp
) {
public static UserModel from(User user) {
return UserModel.builder()
.id(user.getId())
.email(user.getEmail())
.nickname(user.getNickname())
.profileImageUrl(user.getProfileImageUrl())
.exp(user.getExp())
.build();

import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


public class UserModel{
@Builder
public record Main(
Long id,
String email,
String nickname,
String profileImageUrl,
Integer exp
) {
public static Main from(User user) {
return Main.builder()
.id(user.getId())
.email(user.getEmail())
.nickname(user.getNickname())
.profileImageUrl(user.getProfileImageUrl())
.exp(user.getExp())
.build();
}
}
}

@Builder
public record Strick(
List<DayCount> dayCounts
) {
/** 여기서 count 0인걸 포함하는 기능을 쓰는게 맞는지 */
public static Strick from(Map<LocalDate, Integer> strickCounts, LocalDate startDate, LocalDate endDate) {
List<DayCount> resultList = startDate.datesUntil(endDate.plusDays(1))
// 날짜가 존재하면 map(date)로 count를 가져오고, 없으면 0을 저장한다.
.map(date -> new DayCount(date, strickCounts.getOrDefault(date, 0)))
.collect(Collectors.toList());
return new Strick(resultList);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (dayCounts == null) {
sb.append("null");
} else {
for (int i = 0; i < dayCounts.size(); i++) {
sb.append(dayCounts.get(i).toString());
if (i < dayCounts.size() - 1)
sb.append("\n");
}
}
return sb.toString();
}

}
@Builder
public record DayCount(
LocalDate date,
Integer count
) {

@Override
public String toString() {
return "DayCount{" +
"date=" + date +
", count=" + count + '}';
}
}


}
Loading

0 comments on commit d354c6f

Please sign in to comment.