Skip to content

Commit 293b702

Browse files
refactor: ♻️ validation 고도화 (#72) (#73)
1 parent 2dff696 commit 293b702

File tree

7 files changed

+73
-12
lines changed

7 files changed

+73
-12
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ dependencies {
5858
//mail
5959
implementation 'org.springframework.boot:spring-boot-starter-mail'
6060

61+
//validation
62+
implementation 'org.springframework.boot:spring-boot-starter-validation'
63+
6164

6265
testImplementation 'org.springframework.boot:spring-boot-starter-test'
6366
testImplementation 'org.springframework.security:spring-security-test'

src/main/java/com/goormdari/domain/calendar/application/CalendarService.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.goormdari.domain.calendar.dto.response.CheckGoalProgressResponse;
55
import com.goormdari.domain.user.domain.User;
66
import com.goormdari.domain.user.domain.repository.UserRepository;
7+
import com.goormdari.domain.validation.annotation.ExistUser;
78
import jakarta.persistence.EntityNotFoundException;
89
import lombok.RequiredArgsConstructor;
910
import org.springframework.stereotype.Service;
@@ -20,10 +21,8 @@ public class CalendarService {
2021
private final UserRepository userRepository;
2122

2223

23-
public CheckGoalProgressResponse searchCheckGoalProgress(String username, YearMonth date) {
24-
System.out.println("username = " + username);
25-
User user = userRepository.findByUsername(username)
26-
.orElseThrow(() -> new EntityNotFoundException("User not found"));
24+
public CheckGoalProgressResponse searchCheckGoalProgress(@ExistUser final String username, final YearMonth date) {
25+
User user = userRepository.findByUsername(username).get();
2726

2827
CheckGoalProgressResponse checkGoalProgressResponse = calendarRepository.findByIdAndDate(user.getId(), date);
2928

src/main/java/com/goormdari/domain/calendar/domain/repository/CalendarQueryDslRepositoryImpl.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,36 +42,40 @@ public CheckGoalProgressResponse findByIdAndDate(Long userId, YearMonth date) {
4242
throw new EntityNotFoundException("User not found");
4343
}
4444

45+
4546
List<Calendar> calendarList = queryFactory
4647
.selectFrom(calendar)
4748
.where(
4849
calendar.userId.eq(userId),
4950
calendar.date.between(startDate, endDate)
5051
)
5152
.fetch();
52-
53+
5354

5455

5556
String goal = userInfo.getGoal();
5657

58+
5759
int dDay = calculateDDay(userInfo.getDeadLine());
5860

61+
5962
List<CheckGoalProgressResponse.DayAchive> dayAchiveList = calendarList.stream()
6063
.map(entry -> new CheckGoalProgressResponse.DayAchive(
6164
entry.getDate(),
6265
entry.getSuccess_count()
6366
))
6467
.collect(Collectors.toList());
6568

66-
Double routineCompletionRate = calculateRoutineCompletionRate(userId, date);
69+
70+
// Double routineCompletionRate = calculateRoutineCompletionRate(userId, date);
71+
6772

6873
return new CheckGoalProgressResponse(
6974
userInfo.getNickname(),
7075
userInfo.getProfileUrl(),
7176
goal,
7277
dDay,
73-
dayAchiveList,
74-
routineCompletionRate
78+
dayAchiveList
7579
);
7680
}
7781

src/main/java/com/goormdari/domain/calendar/dto/response/CheckGoalProgressResponse.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ public record CheckGoalProgressResponse(
1212
String profileUrl,
1313
String goal,
1414
int dDay,
15-
List<DayAchive> dayAchiveList,
16-
Double routineCompletionRate
15+
List<DayAchive> dayAchiveList
1716
) {
1817
public record DayAchive(
1918
LocalDate date,
@@ -22,12 +21,11 @@ public record DayAchive(
2221
}
2322

2423
@QueryProjection
25-
public CheckGoalProgressResponse(String nickname, String profileUrl, String goal, int dDay, List<DayAchive> dayAchiveList, Double routineCompletionRate) {
24+
public CheckGoalProgressResponse(String nickname, String profileUrl, String goal, int dDay, List<DayAchive> dayAchiveList) {
2625
this.nickname = nickname;
2726
this.profileUrl = profileUrl;
2827
this.goal = goal;
2928
this.dDay = dDay;
3029
this.dayAchiveList = dayAchiveList;
31-
this.routineCompletionRate = routineCompletionRate;
3230
}
3331
}

src/main/java/com/goormdari/domain/user/domain/repository/UserRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ public interface UserRepository extends JpaRepository<User, Long> {
1717

1818
@Query("SELECT u FROM User u WHERE u.team.id = :teamId")
1919
List<User> findByTeamId(Long teamId);
20+
21+
boolean existsByUsername(String username);
2022
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.goormdari.domain.validation.annotation;
2+
3+
import com.goormdari.domain.validation.validator.UserExistValidator;
4+
import jakarta.validation.Constraint;
5+
import jakarta.validation.Payload;
6+
7+
import java.lang.annotation.*;
8+
9+
@Documented
10+
@Constraint(validatedBy = UserExistValidator.class)
11+
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
12+
@Retention(RetentionPolicy.RUNTIME)
13+
public @interface ExistUser {
14+
15+
String message() default "해당하는 유저가 존재하지 않습니다.";
16+
Class<?>[] groups() default {};
17+
Class<? extends Payload>[] payload() default {};
18+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.goormdari.domain.validation.validator;
2+
3+
import com.goormdari.domain.user.domain.User;
4+
import com.goormdari.domain.user.domain.repository.UserRepository;
5+
import com.goormdari.domain.validation.annotation.ExistUser;
6+
import jakarta.validation.ConstraintValidator;
7+
import jakarta.validation.ConstraintValidatorContext;
8+
import lombok.RequiredArgsConstructor;
9+
import org.springframework.stereotype.Component;
10+
11+
import java.util.List;
12+
13+
@Component
14+
@RequiredArgsConstructor
15+
public class UserExistValidator implements ConstraintValidator<ExistUser, String> {
16+
17+
private final UserRepository userRepository;
18+
19+
20+
@Override
21+
public void initialize(ExistUser constraintAnnotation) {
22+
ConstraintValidator.super.initialize(constraintAnnotation);
23+
}
24+
25+
@Override
26+
public boolean isValid(String username, ConstraintValidatorContext context) {
27+
28+
boolean isValid = userRepository.existsByUsername(username);
29+
30+
if (!isValid) {
31+
context.disableDefaultConstraintViolation();
32+
context.buildConstraintViolationWithTemplate("User not found").addConstraintViolation();
33+
}
34+
35+
return isValid;
36+
}
37+
}

0 commit comments

Comments
 (0)