From 1fb46fa9c8eb1facf85ae78164dadce5feaca407 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Thu, 23 May 2024 13:59:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[fix]:Main=20Papago=20=EB=B2=88=EC=97=AD=20?= =?UTF-8?q?main=EC=97=90=20=EC=A0=81=EA=B5=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sync/controller/SyncMainController.java | 13 ++- .../api/sync/service/SyncService.java | 14 +-- .../dto/request/SyncInfoRequestDto.java | 8 +- .../response/SyncAssociateInfoResponse.java | 86 +++++++++++++++++++ .../dto/response/SyncInfoResponse.java | 83 ++++++++++++++++++ .../domain/chat/entity/ChatContent.java | 2 + .../backendH/domain/chat/entity/Room.java | 3 +- .../chat/repository/RoomRepository.java | 3 + .../backendH/global/common/ChatReq.java | 7 ++ .../common/HealthCheckApiController.java | 32 ++++++- .../backendH/infra/config/MongoDbConfig.java | 30 +++++++ .../backendH/infra/utils/TranslateUtil.java | 27 ++++-- 12 files changed, 284 insertions(+), 24 deletions(-) create mode 100644 Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncAssociateInfoResponse.java create mode 100644 Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncInfoResponse.java create mode 100644 Main/src/main/java/com/kusitms29/backendH/global/common/ChatReq.java create mode 100644 Main/src/main/java/com/kusitms29/backendH/infra/config/MongoDbConfig.java diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java index 41375efc..e385479b 100644 --- a/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java @@ -2,12 +2,15 @@ import com.kusitms29.backendH.api.sync.service.SyncService; import com.kusitms29.backendH.api.sync.service.dto.request.SyncInfoRequestDto; +import com.kusitms29.backendH.api.sync.service.dto.response.SyncAssociateInfoResponse; import com.kusitms29.backendH.api.sync.service.dto.response.SyncAssociateInfoResponseDto; +import com.kusitms29.backendH.api.sync.service.dto.response.SyncInfoResponse; import com.kusitms29.backendH.api.sync.service.dto.response.SyncInfoResponseDto; import com.kusitms29.backendH.domain.user.ip.IpService; import com.kusitms29.backendH.global.common.SuccessResponse; import com.kusitms29.backendH.infra.config.auth.UserId; import com.kusitms29.backendH.infra.external.clova.map.GeoLocationService; +import com.kusitms29.backendH.infra.utils.TranslateUtil; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; @@ -25,6 +28,7 @@ public class SyncMainController { private final SyncService syncManageService; private final IpService ipService; private final GeoLocationService geoLocationService; + private final TranslateUtil translateUtil; @GetMapping("/recommend") public ResponseEntity> recommendSync(@UserId Long userId, HttpServletRequest request) throws NoSuchAlgorithmException, InvalidKeyException, IOException { String clientIp = ipService.getClientIpAddress(request); @@ -34,17 +38,20 @@ public ResponseEntity> recommendSync(@UserId Long userId, Htt } @PostMapping("/friend") public ResponseEntity> friendSync(@UserId Long userId, @RequestBody SyncInfoRequestDto syncInfoRequestDto) { - List syncInfoResponseDtos = syncManageService.friendSync(userId, syncInfoRequestDto); + List syncInfoResponseDtos = syncManageService.friendSync(userId, syncInfoRequestDto); + if (syncInfoRequestDto.language().equals("영어"))syncInfoResponseDtos=syncInfoResponseDtos.stream().map(syncInfoResponseDto -> translateUtil.translateObject(syncInfoResponseDto)).toList(); return SuccessResponse.ok(syncInfoResponseDtos); } @PostMapping("/search") public ResponseEntity> searchSync(@UserId Long userId, @RequestBody SyncInfoRequestDto syncInfoRequestDto) { - List syncInfoResponseDtos = syncManageService.searchSync(userId, syncInfoRequestDto); + List syncInfoResponseDtos = syncManageService.searchSync(userId, syncInfoRequestDto); + if (syncInfoRequestDto.language().equals("영어"))syncInfoResponseDtos=syncInfoResponseDtos.stream().map(syncInfoResponseDto -> translateUtil.translateObject(syncInfoResponseDto)).toList(); return SuccessResponse.ok(syncInfoResponseDtos); } @PostMapping("/associate") public ResponseEntity> associateSync(@UserId Long userId, @RequestBody SyncInfoRequestDto syncInfoRequestDto) { - List syncInfoResponseDtos = syncManageService.associateSync(userId, syncInfoRequestDto); + List syncInfoResponseDtos = syncManageService.associateSync(userId, syncInfoRequestDto); + if (syncInfoRequestDto.language().equals("영어"))syncInfoResponseDtos=syncInfoResponseDtos.stream().map(syncInfoResponseDto -> translateUtil.translateObject(syncInfoResponseDto)).toList(); return SuccessResponse.ok(syncInfoResponseDtos); } } diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/SyncService.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/SyncService.java index 5d2998f7..c6dfbb2f 100644 --- a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/SyncService.java +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/SyncService.java @@ -74,12 +74,12 @@ public List recommendSync(Long userId, String clientIp){ favoriteSyncManager.existsByUserIdAndSyncId(userId, sync.getId()) )).toList(); } - public List friendSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ + public List friendSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ List syncList = syncReader.findAllBySyncTypeAndType(FROM_FRIEND, getEnumTypeFromStringType(syncInfoRequestDto.type())); - List syncInfoResponseDtos = syncList.stream() + List syncInfoResponseDtos = syncList.stream() //음 이거보다 위에서 if문써서 하는게 더 가독성 있는듯 // .filter(sync -> type == null || sync.getType().name().equals(type)) - .map( sync -> SyncInfoResponseDto.of( + .map( sync -> SyncInfoResponse.of( sync.getId(), sync.getSyncType(), sync.getType(), @@ -93,9 +93,9 @@ public List friendSync(Long userId, SyncInfoRequestDto sync )).toList(); return listUtils.getListByTake(syncInfoResponseDtos, syncInfoRequestDto.take()); } - public List associateSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ + public List associateSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ List syncList = syncReader.findAllByAssociateIsExist(getEnumFROMStringSyncType(syncInfoRequestDto.syncType()), getEnumTypeFromStringType(syncInfoRequestDto.type())); - List syncAssociateInfoResponseDtos = syncList.stream().map( sync -> SyncAssociateInfoResponseDto.of( + List syncAssociateInfoResponseDtos = syncList.stream().map( sync -> SyncAssociateInfoResponse.of( sync.getId(), sync.getSyncType(), sync.getType(), @@ -110,10 +110,10 @@ public List associateSync(Long userId, SyncInfoReq )).toList(); return listUtils.getListByTake(syncAssociateInfoResponseDtos, syncInfoRequestDto.take()); } - public List searchSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ + public List searchSync(Long userId, SyncInfoRequestDto syncInfoRequestDto){ List syncList = syncReader.findAllBySyncTypeAndType(getEnumFROMStringSyncType(syncInfoRequestDto.syncType()), getEnumTypeFromStringType(syncInfoRequestDto.type())); - List syncInfoResponseDtos = syncList.stream().map( sync -> SyncInfoResponseDto.of( + List syncInfoResponseDtos = syncList.stream().map( sync -> SyncInfoResponse.of( sync.getId(), sync.getSyncType(), sync.getType(), diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/request/SyncInfoRequestDto.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/request/SyncInfoRequestDto.java index c44f875f..34960bed 100644 --- a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/request/SyncInfoRequestDto.java +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/request/SyncInfoRequestDto.java @@ -3,11 +3,15 @@ public record SyncInfoRequestDto( int take, String syncType, - String type + String type, + String language ) { public SyncInfoRequestDto { if (take < 0) { take = 0; } + if (language == null || language.isBlank()) { + language = "한국어"; + } } -} +} \ No newline at end of file diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncAssociateInfoResponse.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncAssociateInfoResponse.java new file mode 100644 index 00000000..cccbe430 --- /dev/null +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncAssociateInfoResponse.java @@ -0,0 +1,86 @@ +package com.kusitms29.backendH.api.sync.service.dto.response; + +import com.kusitms29.backendH.domain.category.entity.Type; +import com.kusitms29.backendH.domain.sync.entity.SyncType; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DecimalStyle; +import java.util.Locale; + +@Getter +@Builder +public class SyncAssociateInfoResponse { + private Long syncId; + private String syncType; + private String type; + private String image; + private int userCnt; + private int totalCnt; + private String syncName; + private String location; + private String date; + private String associate; + private Boolean isMarked; + private static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("M/d(EEE) a h시") + .withLocale(Locale.KOREAN) + .withDecimalStyle(DecimalStyle.of(Locale.KOREAN)); + + public SyncAssociateInfoResponse(){ + + } + public SyncAssociateInfoResponse( + Long syncId, + String syncType, + String type, + String image, + int userCnt, + int totalCnt, + String syncName, + String location, + String date, + String associate, + Boolean isMarked) { + this.syncId = syncId; + this.syncType = syncType; + this.type = type; + this.image = image; + this.userCnt = userCnt; + this.totalCnt = totalCnt; + this.syncName = syncName; + this.location = location; + this.date = date; + this.associate = associate; + this.isMarked = isMarked; + } + public static SyncAssociateInfoResponse of( + Long syncId, + SyncType syncType, + Type type, + String image, + int userCnt, + int totalCnt, + String syncName, + String location, + LocalDateTime date, + String associate, + Boolean isMarked) { + String dateString = date != null ? date.format(DATE_TIME_FORMATTER) : null; + return new SyncAssociateInfoResponse( + syncId, + syncType.getStringSyncType(), + type.getStringType(), + image, + userCnt, + totalCnt, + syncName, + location, + dateString, + associate, + isMarked + ); + } +} diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncInfoResponse.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncInfoResponse.java new file mode 100644 index 00000000..683ef86d --- /dev/null +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/service/dto/response/SyncInfoResponse.java @@ -0,0 +1,83 @@ +package com.kusitms29.backendH.api.sync.service.dto.response; + +import com.kusitms29.backendH.domain.category.entity.Type; +import com.kusitms29.backendH.domain.sync.entity.SyncType; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DecimalStyle; +import java.util.Locale; +@Getter +@Builder +public class SyncInfoResponse { + private Long syncId; + private String syncType; + private String type; + private String image; + private int userCnt; + private int totalCnt; + private String syncName; + private String location; + private String date; + private Boolean isMarked; + + private static final DateTimeFormatter DATE_TIME_FORMATTER = + DateTimeFormatter.ofPattern("M/d(EEE) a h시") + .withLocale(Locale.KOREAN) + .withDecimalStyle(DecimalStyle.of(Locale.KOREAN)); + + public SyncInfoResponse(){ + + } + public SyncInfoResponse( + Long syncId, + String syncType, + String type, + String image, + int userCnt, + int totalCnt, + String syncName, + String location, + String date, + Boolean isMarked) { + this.syncId = syncId; + this.syncType = syncType; + this.type = type; + this.image = image; + this.userCnt = userCnt; + this.totalCnt = totalCnt; + this.syncName = syncName; + this.location = location; + this.date = date; + this.isMarked = isMarked; + } + + public static SyncInfoResponse of( + Long syncId, + SyncType syncType, + Type type, + String image, + int userCnt, + int totalCnt, + String syncName, + String location, + LocalDateTime date, + Boolean isMarked) { + String dateString = date != null ? date.format(DATE_TIME_FORMATTER) : null; + return new SyncInfoResponse( + syncId, + syncType.getStringSyncType(), + type.getStringType(), + image, + userCnt, + totalCnt, + syncName, + location, + dateString, + isMarked + ); + } + +} \ No newline at end of file diff --git a/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/ChatContent.java b/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/ChatContent.java index 080ce0a6..2100b1ee 100644 --- a/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/ChatContent.java +++ b/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/ChatContent.java @@ -18,6 +18,8 @@ public static ChatContent createChatContent(String userName, String content, Roo .content(content) .time(LocalDateTime.now()) .build(); + if(room==null) + return chatContent; room.addChatContent(chatContent); return chatContent; } diff --git a/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/Room.java b/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/Room.java index 811ccbc5..9db5e851 100644 --- a/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/Room.java +++ b/Main/src/main/java/com/kusitms29/backendH/domain/chat/entity/Room.java @@ -39,10 +39,11 @@ public static Room createRoom(List users, List contents, } return room; } - public static Room createNewRoom(String roomName) { + public static Room chat(String roomName,ChatContent chatContent) { Room room = Room.builder() .roomName(roomName) .build(); + room.addChatContent(chatContent); return room; } public void addChatContent(ChatContent content) { diff --git a/Main/src/main/java/com/kusitms29/backendH/domain/chat/repository/RoomRepository.java b/Main/src/main/java/com/kusitms29/backendH/domain/chat/repository/RoomRepository.java index 8f1731f5..344ad404 100644 --- a/Main/src/main/java/com/kusitms29/backendH/domain/chat/repository/RoomRepository.java +++ b/Main/src/main/java/com/kusitms29/backendH/domain/chat/repository/RoomRepository.java @@ -3,5 +3,8 @@ import com.kusitms29.backendH.domain.chat.entity.Room; import org.springframework.data.mongodb.repository.MongoRepository; +import java.util.Optional; + public interface RoomRepository extends MongoRepository { + Optional findByRoomName(String roomName); } diff --git a/Main/src/main/java/com/kusitms29/backendH/global/common/ChatReq.java b/Main/src/main/java/com/kusitms29/backendH/global/common/ChatReq.java new file mode 100644 index 00000000..58f30f01 --- /dev/null +++ b/Main/src/main/java/com/kusitms29/backendH/global/common/ChatReq.java @@ -0,0 +1,7 @@ +package com.kusitms29.backendH.global.common; + +public record ChatReq( + String roomName, + String content +) { +} diff --git a/Main/src/main/java/com/kusitms29/backendH/global/common/HealthCheckApiController.java b/Main/src/main/java/com/kusitms29/backendH/global/common/HealthCheckApiController.java index 4eab610c..59ada7b5 100644 --- a/Main/src/main/java/com/kusitms29/backendH/global/common/HealthCheckApiController.java +++ b/Main/src/main/java/com/kusitms29/backendH/global/common/HealthCheckApiController.java @@ -3,24 +3,37 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.kusitms29.backendH.domain.chat.entity.ChatContent; +import com.kusitms29.backendH.domain.chat.entity.ChatUser; +import com.kusitms29.backendH.domain.chat.entity.Room; +import com.kusitms29.backendH.domain.chat.repository.RoomRepository; +import com.kusitms29.backendH.domain.user.entity.User; +import com.kusitms29.backendH.domain.user.service.UserReader; import com.kusitms29.backendH.infra.config.auth.UserId; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.http.*; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; @RestController @RequiredArgsConstructor @RequestMapping("/api") public class HealthCheckApiController { + private final MongoTemplate mongoTemplate; + private final RoomRepository roomRepository; + private final UserReader userReader; private static final String GOOGLE_AUTH_ENDPOINT = "https://accounts.google.com/o/oauth2/v2/auth"; private static final String GOOGLE_TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token"; private static final String KAKAO_AUTH_ENDPOINT = "https://kauth.kakao.com/oauth/authorize"; @@ -137,5 +150,16 @@ public ResponseEntity kakaoOauthCallback(@RequestParam(name = "code") St public Long MeetUpServer(@UserId Long userId) { return userId; } + @PostMapping("/chat") + public void chat(@UserId Long userId, @RequestBody ChatReq chatReq){ + User user = userReader.findByUserId(userId); + Query query = new Query(); + query.addCriteria(Criteria.where("roomName").is(chatReq.roomName())); + Room room = mongoTemplate.findOne(query, Room.class); + ChatContent chatContent = ChatContent.createChatContent(user.getUserName(), chatReq.content(), room); +// room.addChatContent(chatContent); + roomRepository.save(room); + + } } \ No newline at end of file diff --git a/Main/src/main/java/com/kusitms29/backendH/infra/config/MongoDbConfig.java b/Main/src/main/java/com/kusitms29/backendH/infra/config/MongoDbConfig.java new file mode 100644 index 00000000..6ad072b2 --- /dev/null +++ b/Main/src/main/java/com/kusitms29/backendH/infra/config/MongoDbConfig.java @@ -0,0 +1,30 @@ +package com.kusitms29.backendH.infra.config; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.data.mongodb.config.EnableMongoAuditing; +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.mapping.MongoMappingContext; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +@RequiredArgsConstructor +@EnableMongoAuditing +@EnableMongoRepositories(basePackages = "com.kusitms29.backendH.domain") +@Configuration +public class MongoDbConfig { + private final MongoMappingContext mongoMappingContext; + + @Bean + public MappingMongoConverter mappingMongoConverter(MongoDatabaseFactory mongoDatabaseFactory, + MongoMappingContext mongoMappingContext) { + DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDatabaseFactory); + MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext); + converter.setTypeMapper(new DefaultMongoTypeMapper(null)); + return converter; + } +} diff --git a/Main/src/main/java/com/kusitms29/backendH/infra/utils/TranslateUtil.java b/Main/src/main/java/com/kusitms29/backendH/infra/utils/TranslateUtil.java index 1cdf3165..11c99110 100644 --- a/Main/src/main/java/com/kusitms29/backendH/infra/utils/TranslateUtil.java +++ b/Main/src/main/java/com/kusitms29/backendH/infra/utils/TranslateUtil.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Service; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; @Service @RequiredArgsConstructor @@ -14,7 +15,17 @@ public class TranslateUtil { private final PapagoService papagoService; public T translateObject(T object) { + if (object == null) { + return null; + } T translatedObject = createNewInstance(object); + if (translatedObject != null) { + translateFields(object, translatedObject); + } + return translatedObject; + } + + private void translateFields(T object, T translatedObject) { Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { Class fieldType = field.getType(); @@ -22,15 +33,15 @@ public T translateObject(T object) { field.setAccessible(true); try { String value = (String) field.get(object); - if (value != null) { + if (value != null && !value.isEmpty()) { TextTranslationRequest requestDto = new TextTranslationRequest(); requestDto.setSource("ko"); requestDto.setTarget("en"); - requestDto.setText(value); + requestDto.setText(value.trim()); TextTranslationResponse translationResponse = papagoService.translateText(requestDto); field.set(translatedObject, translationResponse.getMessage().getResult().getTranslatedText()); } else { - field.set(translatedObject, null); + field.set(translatedObject, value); } } catch (IllegalAccessException e) { // log.error("Error while translating object", e); @@ -45,7 +56,6 @@ public T translateObject(T object) { } } } - return translatedObject; } @SuppressWarnings("unchecked") @@ -53,9 +63,12 @@ private T createNewInstance(T object) { try { Class clazz = (Class) object.getClass(); return clazz.getDeclaredConstructor().newInstance(); - } catch (Exception e) { - // log.error("Error while creating new instance", e); - throw new RuntimeException("Failed to create new instance", e); + } catch (NoSuchMethodException e) { + // 기본 생성자가 없는 경우 처리 + return null; + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + // 객체 생성 실패 시 처리 + throw new RuntimeException("Failed to create new instance of " + object.getClass().getName(), e); } } } \ No newline at end of file From acae9d8ff6f8bd12ecce2573c97a8cd32207a427 Mon Sep 17 00:00:00 2001 From: Bae Hyeonseo Date: Thu, 23 May 2024 14:03:28 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[fix]:Main=20Papago=20=EB=B2=88=EC=97=AD=20?= =?UTF-8?q?main=EC=97=90=20=EC=A0=81=EA=B5=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backendH/api/sync/controller/SyncMainController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java b/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java index e385479b..b0ad5471 100644 --- a/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java +++ b/Main/src/main/java/com/kusitms29/backendH/api/sync/controller/SyncMainController.java @@ -30,10 +30,11 @@ public class SyncMainController { private final GeoLocationService geoLocationService; private final TranslateUtil translateUtil; @GetMapping("/recommend") - public ResponseEntity> recommendSync(@UserId Long userId, HttpServletRequest request) throws NoSuchAlgorithmException, InvalidKeyException, IOException { + public ResponseEntity> recommendSync(@UserId Long userId,@RequestParam(name = "language", defaultValue = "한국어") String language, HttpServletRequest request) throws NoSuchAlgorithmException, InvalidKeyException, IOException { String clientIp = ipService.getClientIpAddress(request); // GeoLocation geoLocation = geoLocationService.getGeoLocation(clientIp); List syncInfoResponseDtos = syncManageService.recommendSync(userId, clientIp); + if (language.equals("영어"))syncInfoResponseDtos=syncInfoResponseDtos.stream().map(syncInfoResponseDto -> translateUtil.translateObject(syncInfoResponseDto)).toList(); return SuccessResponse.ok(syncInfoResponseDtos); } @PostMapping("/friend")