Skip to content

Commit

Permalink
MATE-153 : [!BUGFIX] 굿즈거래 채팅 저장 오류 및 MongoDB 시간 설정 오류 해결 (#137)
Browse files Browse the repository at this point in the history
* MATE-153 : [!BUGFIX] 굿즈거래 시스템 메시지 저장 오류 해결

* MATE-153 : [FEAT] LocalDateTime 을 KST Date 타입으로 바꿔주는 컨버터 클래스 구현

* MATE-153 : [CHORE] validator 패키지 위치 변경

* MATE-153 : [FEAT] MongoConfig 클래스 컨버터 설정 추가
  • Loading branch information
hongjeZZ authored Jan 15, 2025
1 parent 03f80d7 commit 14a9a60
Show file tree
Hide file tree
Showing 22 changed files with 87 additions and 21 deletions.
19 changes: 17 additions & 2 deletions src/main/java/com/example/mate/common/config/MongoConfig.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,39 @@
package com.example.mate.common.config;

import com.example.mate.common.util.converter.DateToLocalDateTimeKstConverter;
import com.example.mate.common.util.converter.LocalDateTimeToDateKstConverter;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;

@Configuration
public class MongoConfig {

@Bean
public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory mongoDatabaseFactory,
MongoMappingContext mongoMappingContext) {
public MappingMongoConverter mappingMongoConverter(
MongoDatabaseFactory mongoDatabaseFactory,
MongoMappingContext mongoMappingContext,
LocalDateTimeToDateKstConverter dateKstConverter,
DateToLocalDateTimeKstConverter localDateTimeKstConverter
) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);

// "_class" 타입을 저장하지 않도록 설정
converter.setTypeMapper(new DefaultMongoTypeMapper(null));

// MongoDB KST 변환 컨버터 설정
converter.setCustomConversions(new MongoCustomConversions(
List.of(localDateTimeKstConverter, dateKstConverter)
));

return converter;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.common.config;

import com.example.mate.common.validator.ValidPageableArgumentResolver;
import com.example.mate.common.util.validator.ValidPageableArgumentResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.mate.common.util.converter;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.stereotype.Component;

@Component
@ReadingConverter
public class DateToLocalDateTimeKstConverter implements Converter<Date, LocalDateTime> {

private static final int KST_OFFSET_HOURS = 9;

@Override
public LocalDateTime convert(Date source) {
return convertToKst(source);
}

// KST 로 변환하기 위해 9시간을 빼줌
private LocalDateTime convertToKst(Date date) {
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
return localDateTime.minusHours(KST_OFFSET_HOURS);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.example.mate.common.util.converter;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.WritingConverter;
import org.springframework.stereotype.Component;

@Component
@WritingConverter
public class LocalDateTimeToDateKstConverter implements Converter<LocalDateTime, Date> {

private static final int KST_OFFSET_HOURS = 9;

@Override
public Date convert(LocalDateTime source) {
return convertToKst(source);
}

// KST 로 변환하기 위해 9시간을 더함
private Date convertToKst(LocalDateTime localDateTime) {
return Timestamp.valueOf(localDateTime.plusHours(KST_OFFSET_HOURS));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.mate.common.validator;
package com.example.mate.common.util.validator;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.mate.common.validator;
package com.example.mate.common.util.validator;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.mate.common.validator;
package com.example.mate.common.util.validator;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.mate.common.validator;
package com.example.mate.common.util.validator;

import org.springframework.core.MethodParameter;
import org.springframework.data.domain.PageRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.goodsChat.dto.response.GoodsChatMessageResponse;
import com.example.mate.domain.goodsChat.dto.response.GoodsChatRoomResponse;
import com.example.mate.domain.goodsChat.dto.response.GoodsChatRoomSummaryResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public void sendChatEventMessage(GoodsChatEvent event) {
case ENTER -> message += MEMBER_ENTER_MESSAGE;
case LEAVE -> message += MEMBER_LEAVE_MESSAGE;
}
GoodsChatMessage chatMessage = createChatMessage(member.getId(), chatRoomId, message, event.type());
GoodsChatMessage chatMessage = createChatMessage(chatRoomId, member.getId(), message, event.type());

// 채팅 데이터 저장 & 최신 채팅 내역 업데이트
GoodsChatMessage savedMessage = messageRepository.save(chatMessage);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.goodsPost.dto.request.GoodsPostRequest;
import com.example.mate.domain.goodsPost.dto.response.GoodsPostResponse;
import com.example.mate.domain.goodsPost.dto.response.GoodsPostSummaryResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.goodsPost.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.goodsPost.dto.response.LocationInfo;
import com.example.mate.domain.goodsPost.entity.Category;
import com.example.mate.domain.goodsPost.entity.GoodsPost;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.goodsReview.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.constant.Rating;
import com.example.mate.domain.goodsPost.entity.GoodsPost;
import com.example.mate.domain.goodsReview.entity.GoodsReview;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.mateChat.dto.response.MateChatMessageResponse;
import com.example.mate.domain.mateChat.dto.response.MateChatRoomListResponse;
import com.example.mate.domain.mateChat.dto.response.MateChatRoomResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.constant.Gender;
import com.example.mate.domain.matePost.dto.request.*;
import com.example.mate.domain.matePost.dto.response.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.matePost.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.constant.Gender;
import com.example.mate.domain.matePost.entity.Age;
import com.example.mate.domain.matePost.entity.TransportType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.matePost.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.constant.Gender;
import com.example.mate.domain.matePost.entity.Age;
import com.example.mate.domain.matePost.entity.SortType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.matePost.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.matePost.entity.Status;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.matePost.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.constant.Gender;
import com.example.mate.domain.matePost.entity.Age;
import com.example.mate.domain.matePost.entity.TransportType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.mate.domain.mateReview.dto.request;

import com.example.mate.common.validator.ValidEnum;
import com.example.mate.common.util.validator.ValidEnum;
import com.example.mate.domain.constant.Rating;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.member.dto.response.MemberSummaryResponse;
import com.example.mate.domain.member.service.FollowService;
import io.swagger.v3.oas.annotations.Operation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.common.validator.ValidPageable;
import com.example.mate.common.util.validator.ValidPageable;
import com.example.mate.domain.goodsPost.dto.response.GoodsPostSummaryResponse;
import com.example.mate.domain.matePost.dto.response.MatePostSummaryResponse;
import com.example.mate.domain.member.dto.response.MyGoodsRecordResponse;
Expand Down

0 comments on commit 14a9a60

Please sign in to comment.