Skip to content

Commit d043965

Browse files
committed
fix: closedAt 변환 시 ZonedDateTime 사용으로 UTC 변환 정확도 개선 (#79)
1 parent 058603d commit d043965

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/main/java/com/moa/moa_server/domain/vote/service/VoteService.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@
3333
import com.moa.moa_server.domain.vote.util.VoteValidator;
3434
import jakarta.annotation.Nullable;
3535
import lombok.RequiredArgsConstructor;
36+
import org.springframework.beans.factory.annotation.Value;
3637
import org.springframework.dao.DataIntegrityViolationException;
3738
import org.springframework.stereotype.Service;
3839
import org.springframework.transaction.annotation.Transactional;
3940

41+
import java.time.LocalDateTime;
42+
import java.time.ZoneId;
43+
import java.time.ZoneOffset;
44+
import java.time.ZonedDateTime;
4045
import java.util.List;
4146
import java.util.Optional;
4247
import java.util.stream.Stream;
@@ -45,6 +50,9 @@
4550
@RequiredArgsConstructor
4651
public class VoteService {
4752

53+
@Value("${spring.profiles.active:}")
54+
private String activeProfile;
55+
4856
private static final int DEFAULT_PAGE_SIZE = 10;
4957
private static final int DEFAULT_UNAUTHENTICATED_PAGE_SIZE = 3;
5058

@@ -82,22 +90,27 @@ public Long createVote(Long userId, VoteCreateRequest request) {
8290
VoteValidator.validateContent(request.content());
8391
VoteValidator.validateImageUrl(request.imageUrl());
8492
String imageUrl = request.imageUrl().isBlank() ? null : request.imageUrl().trim();
85-
VoteValidator.validateClosedAt(request.closedAt());
93+
94+
ZonedDateTime koreaTime = request.closedAt().atZone(ZoneId.of("Asia/Seoul"));
95+
LocalDateTime utcTime = koreaTime.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
96+
VoteValidator.validateClosedAt(utcTime);
8697

8798
// Vote 생성 및 저장
8899
Vote vote = Vote.createUserVote(
89100
user,
90101
group,
91102
request.content(),
92103
imageUrl,
93-
request.closedAt().minusHours(9),
104+
request.closedAt(),
94105
request.anonymous(),
95106
adminVote
96107
);
97108
voteRepository.save(vote);
98109

99-
// AI 서버로 검열 요청
100-
voteModerationService.requestModeration(vote.getId(), vote.getContent());
110+
// AI 서버로 검열 요청 (로컬 환경 제외)
111+
if (!"local".equals(activeProfile)) {
112+
voteModerationService.requestModeration(vote.getId(), vote.getContent());
113+
}
101114

102115
return vote.getId();
103116
}

src/main/java/com/moa/moa_server/domain/vote/util/VoteValidator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.moa.moa_server.domain.vote.handler.VoteException;
55

66
import java.time.LocalDateTime;
7+
import java.time.ZoneOffset;
78

89
public class VoteValidator {
910

@@ -23,7 +24,7 @@ public static void validateImageUrl(String imageUrl) {
2324
}
2425

2526
public static void validateClosedAt(LocalDateTime closedAt) {
26-
if (closedAt == null || !closedAt.isAfter(LocalDateTime.now())) {
27+
if (closedAt == null || !closedAt.isAfter(LocalDateTime.now(ZoneOffset.UTC))) {
2728
throw new VoteException(VoteErrorCode.INVALID_TIME); }
2829
}
2930
}

0 commit comments

Comments
 (0)