From 4913653d30950d19e1b1ce27929c0da7467a2af8 Mon Sep 17 00:00:00 2001 From: Solhee Hwang <66052043+ssoree912@users.noreply.github.com> Date: Thu, 30 May 2024 01:14:06 +0900 Subject: [PATCH 1/8] Update dev.yml --- .github/workflows/dev.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 36a7355..60e7d6f 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -88,6 +88,9 @@ jobs: sudo docker rm auth fi sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth - sudo docker run -d --restart always -p 8081:8081 --network root_eum_network --name auth ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth + sudo docker run -d --restart always -p 8081:8081 --network root_eum_network --name auth --log-opt max-size=1024m --log-opt max-file=5 ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_REPO }}:auth + sudo docker image prune -f + ps -ef | grep java + sudo docker image prune -f ps -ef | grep java From d3f8d81f4bb1bac7b3855476d5577c0b47db2d0a Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Sat, 1 Jun 2024 10:51:40 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat=20:=EC=95=8C=EB=A6=BC=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ .../auth/config/RedisRepositoryConfig.java | 2 +- .../eum/auth/controller/AuthController.java | 7 +++- .../java/com/eum/auth/domain/user/User.java | 1 + .../com/eum/auth/messageq/FcmProducer.java | 36 +++++++++++++++++++ .../auth/messageq/KafkaProducerConfig.java | 36 +++++++++++++++++++ .../com/eum/auth/service/AuthService.java | 4 +-- .../com/eum/auth/service/DTO/FcmTokenDTO.java | 14 ++++++++ .../java/com/eum/auth/service/FcmService.java | 24 +++++++++++++ src/main/resources/application.yml | 14 +++++--- 10 files changed, 131 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/eum/auth/messageq/FcmProducer.java create mode 100644 src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java create mode 100644 src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java create mode 100644 src/main/java/com/eum/auth/service/FcmService.java diff --git a/build.gradle b/build.gradle index c02cd70..fbf5613 100644 --- a/build.gradle +++ b/build.gradle @@ -73,6 +73,8 @@ dependencies { testImplementation 'org.springframework.security:spring-security-test' testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' + implementation 'org.springframework.kafka:spring-kafka:3.1.0' + } dependencyManagement { imports { diff --git a/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java b/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java index cfbc5a4..19c5cff 100644 --- a/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java +++ b/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java @@ -19,7 +19,7 @@ public class RedisRepositoryConfig { // lettuce @Bean public RedisConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory("redis-eum", 6379); + return new LettuceConnectionFactory("localhost", 6379); } @Bean diff --git a/src/main/java/com/eum/auth/controller/AuthController.java b/src/main/java/com/eum/auth/controller/AuthController.java index 02db44c..d40c387 100644 --- a/src/main/java/com/eum/auth/controller/AuthController.java +++ b/src/main/java/com/eum/auth/controller/AuthController.java @@ -10,7 +10,9 @@ import com.eum.auth.domain.user.SocialType; import com.eum.auth.domain.user.User; import com.eum.auth.service.AuthService; +import com.eum.auth.service.DTO.FcmTokenDTO; import com.eum.auth.service.DTO.KakaoDTO; +import com.eum.auth.service.FcmService; import com.eum.auth.service.KakaoService; import com.eum.auth.service.UsersService; import com.google.firebase.auth.FirebaseAuth; @@ -39,6 +41,7 @@ public class AuthController { private final AuthService authService; private final KakaoService kakaoService; private final UsersService usersService; + private final FcmService fcmService; @Hidden @GetMapping() public String get(){ @@ -62,7 +65,8 @@ public UserResponse.TokenInfo updateToken(@RequestHeader("userId") String userId @PostMapping("/auth/signin/local") public ResponseEntity> signIn(@RequestBody @Validated UsersRequest.SignIn signIn){ - return ResponseEntity.ok(authService.signIn(signIn)); + UserResponse.TokenInfo tokenInfo = authService.signIn(signIn); + return ResponseEntity.ok( APIResponse.of(SuccessCode.SELECT_SUCCESS,tokenInfo)); } @PostMapping("/auth/reissue") @@ -87,6 +91,7 @@ public ResponseEntity logout(@RequestHeader(name = HttpHeaders.AUTHORIZATION) // Extract Bearer token from Authorization header String bearerToken = extractBearerToken(authorizationHeader); authService.logout(bearerToken); + fcmService.deleteFcmToken(getUser.getUserId()); // Pass the Bearer token to the logout method return ResponseEntity.ok( APIResponse.of(SuccessCode.UPDATE_SUCCESS,"로그아웃 되었습니다.")); diff --git a/src/main/java/com/eum/auth/domain/user/User.java b/src/main/java/com/eum/auth/domain/user/User.java index 7a719d5..8e3a502 100644 --- a/src/main/java/com/eum/auth/domain/user/User.java +++ b/src/main/java/com/eum/auth/domain/user/User.java @@ -39,6 +39,7 @@ public void updateRole(Role role) { @Enumerated(EnumType.STRING) private SocialType socialType; + public static User toEntity(String uid, SocialType socialType){ return User.builder().email("") .role(Role.ROLE_TEMPORARY_USER) diff --git a/src/main/java/com/eum/auth/messageq/FcmProducer.java b/src/main/java/com/eum/auth/messageq/FcmProducer.java new file mode 100644 index 0000000..4775da6 --- /dev/null +++ b/src/main/java/com/eum/auth/messageq/FcmProducer.java @@ -0,0 +1,36 @@ +package com.eum.auth.messageq; + +import com.eum.auth.service.DTO.FcmTokenDTO; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; + + +@Service +@Slf4j +@RequiredArgsConstructor +public class FcmProducer { + + private final KafkaTemplate kafkaTemplate; + public static String TOPIC = "eum-fcm-delete"; + + public FcmTokenDTO send( FcmTokenDTO user) { + ObjectMapper mapper = new ObjectMapper(); + String jsonInString = ""; +// 주문 정보 Json 포맷 + try { + jsonInString = mapper.writeValueAsString(user); + } catch(JsonProcessingException ex) { + ex.printStackTrace(); + } + + kafkaTemplate.send(TOPIC, jsonInString); + log.info("producer >> : " + user); + + return user; + } +} diff --git a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java new file mode 100644 index 0000000..247436d --- /dev/null +++ b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java @@ -0,0 +1,36 @@ +package com.eum.auth.messageq; + +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; +import org.springframework.kafka.core.DefaultKafkaProducerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; + +import java.util.HashMap; +import java.util.Map; + + +@EnableKafka +@Configuration +public class KafkaProducerConfig { + + + @Bean + public ProducerFactory producerFactory() { + Map properties = new HashMap<>(); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:29092"); + properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + + return new DefaultKafkaProducerFactory<>(properties); + } + @Bean + public KafkaTemplate kafkaTemplate() { + return new KafkaTemplate<>(producerFactory()); + } +} + + diff --git a/src/main/java/com/eum/auth/service/AuthService.java b/src/main/java/com/eum/auth/service/AuthService.java index bb3faa5..47da374 100644 --- a/src/main/java/com/eum/auth/service/AuthService.java +++ b/src/main/java/com/eum/auth/service/AuthService.java @@ -41,7 +41,7 @@ public class AuthService { * @param signIn * @return */ - public APIResponse signIn(UsersRequest.SignIn signIn) { + public UserResponse.TokenInfo signIn(UsersRequest.SignIn signIn) { User getUser = userRepository.findByEmail(signIn.getTestmail()).orElseThrow(() -> new IllegalArgumentException("잘못된 이메일 정보")); if(!passwordEncoder.matches(signIn.getPassword(),getUser.getPassword())) throw new IllegalArgumentException("잘못된 비밀번호"); CustomUserInfoDto userInfo = modelMapper.map(getUser, CustomUserInfoDto.class); @@ -55,7 +55,7 @@ public APIResponse signIn(UsersRequest.SignIn signIn) { redisTemplate.opsForValue() .set("RT:" + getUser.getUserId(), tokenInfo.getRefreshToken(), tokenInfo.getRefreshTokenExpirationTime(), TimeUnit.MILLISECONDS); - return APIResponse.of(SuccessCode.SELECT_SUCCESS,tokenInfo); + return tokenInfo; } /** diff --git a/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java b/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java new file mode 100644 index 0000000..cdfaf00 --- /dev/null +++ b/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java @@ -0,0 +1,14 @@ +package com.eum.auth.service.DTO; + +import lombok.Data; + +@Data +public class FcmTokenDTO { + private Long userId; +// private String token; + + public FcmTokenDTO(Long userId) { + this.userId = userId; +// this.token = fcmToken.getToken(); + } +} diff --git a/src/main/java/com/eum/auth/service/FcmService.java b/src/main/java/com/eum/auth/service/FcmService.java new file mode 100644 index 0000000..41ec3cb --- /dev/null +++ b/src/main/java/com/eum/auth/service/FcmService.java @@ -0,0 +1,24 @@ +package com.eum.auth.service; + +import com.eum.auth.domain.user.User; +import com.eum.auth.messageq.FcmProducer; +import com.eum.auth.service.DTO.FcmTokenDTO; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class FcmService { + private final FcmProducer fcmProducer; + private final UsersService usersService; + + public void deleteFcmToken( Long userId){ + User user = usersService.findById(userId); + + FcmTokenDTO fcmTokenDTO = new FcmTokenDTO(user.getUserId()); + fcmProducer.send(fcmTokenDTO); + + } + + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index d3ef1e5..54d6ef9 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,3 @@ - server: port: 8081 spring: @@ -24,14 +23,19 @@ spring: dialect: org.hibernate.dialect.MySQLDialect # ?? ?? ?? generate-ddl: true eureka: -# # instance: - # instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: - defaultZone: http://localhost:8761/eureka + # defaultZone: http://host.docker.internal:8761/eureka + defaultZone: http://223.130.146.39:8761/eureka + instance: + instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} kakao : client-id: 1a354a3d4dc989747906944c3c188196 redirect-url: http://localhost:8081/auth-service/api/v2/auth - admin-key: ${admin-key} \ No newline at end of file + admin-key: ${admin-key} + + + + From 114c54767191d2a8d8fd69b10d679f7ea7d5a107 Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Sat, 1 Jun 2024 11:00:40 +0900 Subject: [PATCH 3/8] =?UTF-8?q?chroe=20:=20artifact=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 ++ .github/workflows/dev.yml | 9 --------- .../java/com/eum/auth/config/RedisRepositoryConfig.java | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/.gitattributes b/.gitattributes index dfe0770..c95b27d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,4 @@ # Auto detect text files and perform LF normalization * text=auto +src/main/java/com/eum/auth/client/HaetsalClient.java merge=servers +src/main/java/com/eum/auth/config/RedisRepositoryConfig.java merge=servers \ No newline at end of file diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 60e7d6f..e526db2 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -46,11 +46,6 @@ jobs: - name: Build with Gradle Wrapper run: ./gradlew build -x test - - name: Upload artifact - uses: actions/upload-artifact@v2 - with: - name: cicdsample - path: build/libs/*.jar - name: docker image build run: docker build . --file Dockerfile --tag ${{ secrets.DOCKERHUB_USERNAME }}/eum-dev:auth # DockerHub Login (push 하기 위해) @@ -67,10 +62,6 @@ jobs: needs: build runs-on: ubuntu-latest steps: - - name: Download artifact - uses: actions/download-artifact@v2 - with: - name: cicdsample - name: Login to Docker Hub run: sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} diff --git a/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java b/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java index 19c5cff..cfbc5a4 100644 --- a/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java +++ b/src/main/java/com/eum/auth/config/RedisRepositoryConfig.java @@ -19,7 +19,7 @@ public class RedisRepositoryConfig { // lettuce @Bean public RedisConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory("localhost", 6379); + return new LettuceConnectionFactory("redis-eum", 6379); } @Bean From b680f002a02dab839d67b88800fde21059075107 Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Sat, 1 Jun 2024 11:07:07 +0900 Subject: [PATCH 4/8] =?UTF-8?q?chore=20:=20kafka=20ip=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java index 247436d..36509a1 100644 --- a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java +++ b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java @@ -21,7 +21,7 @@ public class KafkaProducerConfig { @Bean public ProducerFactory producerFactory() { Map properties = new HashMap<>(); - properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:29092"); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "223.130.133.30:29092"); properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); From 1bdfc73e51ea3bca07f8c9c377fbd87c3ff88569 Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Sat, 1 Jun 2024 12:15:15 +0900 Subject: [PATCH 5/8] =?UTF-8?q?chore=20:=20=EC=B9=B4=ED=94=84=EC=B9=B4=20i?= =?UTF-8?q?p=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 2 +- src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java | 2 +- src/main/resources/application.yml | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index c95b27d..cfa3643 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ # Auto detect text files and perform LF normalization * text=auto +src/main/java/com/eum/auth/config/RedisRepositoryConfig.java merge=servers src/main/java/com/eum/auth/client/HaetsalClient.java merge=servers -src/main/java/com/eum/auth/config/RedisRepositoryConfig.java merge=servers \ No newline at end of file diff --git a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java index 36509a1..edeee82 100644 --- a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java +++ b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java @@ -21,7 +21,7 @@ public class KafkaProducerConfig { @Bean public ProducerFactory producerFactory() { Map properties = new HashMap<>(); - properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "223.130.133.30:29092"); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:29092"); properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 54d6ef9..3a41628 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -39,3 +39,4 @@ kakao : + From 778e11a79542add88d7c353f4e15a112441cd74c Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Mon, 3 Jun 2024 09:01:50 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat=20:=20=ED=86=A0=ED=81=B0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/eum/auth/client/HaetsalClient.java | 2 +- .../eum/auth/controller/AuthController.java | 3 ++ .../DTO/request/FcmTokenRequest.java | 9 +++++ .../controller/DTO/request/UsersRequest.java | 4 +++ .../eum/auth/controller/UserController.java | 11 ++++++ .../eum/auth/domain/fcmtoken/FcmToken.java | 27 ++++++++++++++ .../domain/fcmtoken/FcmTokenRepository.java | 10 ++++++ .../java/com/eum/auth/domain/user/User.java | 5 +++ .../eum/auth/messageq/FcmDeletedProducer.java | 35 +++++++++++++++++++ .../com/eum/auth/messageq/FcmProducer.java | 11 +++--- .../com/eum/auth/service/DTO/FcmTokenDTO.java | 27 ++++++++++---- .../java/com/eum/auth/service/FcmService.java | 28 +++++++++++++-- 12 files changed, 157 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/eum/auth/controller/DTO/request/FcmTokenRequest.java create mode 100644 src/main/java/com/eum/auth/domain/fcmtoken/FcmToken.java create mode 100644 src/main/java/com/eum/auth/domain/fcmtoken/FcmTokenRepository.java create mode 100644 src/main/java/com/eum/auth/messageq/FcmDeletedProducer.java diff --git a/src/main/java/com/eum/auth/client/HaetsalClient.java b/src/main/java/com/eum/auth/client/HaetsalClient.java index 3d8c744..0b13d02 100644 --- a/src/main/java/com/eum/auth/client/HaetsalClient.java +++ b/src/main/java/com/eum/auth/client/HaetsalClient.java @@ -7,7 +7,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -@FeignClient(name = "haetsal-service", url = "http://haetsal:8000/haetsal-service/api/v2/profile") +@FeignClient(name = "haetsal-service", url = "http://localhost:8000/haetsal-service/api/v2/profile") public interface HaetsalClient { @PostMapping() ProfileResponseDTO.ProfileResponse createProfile(@RequestBody ProfileRequest.CreateProfile createProfile, @RequestHeader("userId") String userId); diff --git a/src/main/java/com/eum/auth/controller/AuthController.java b/src/main/java/com/eum/auth/controller/AuthController.java index d40c387..403b5d2 100644 --- a/src/main/java/com/eum/auth/controller/AuthController.java +++ b/src/main/java/com/eum/auth/controller/AuthController.java @@ -66,6 +66,8 @@ public UserResponse.TokenInfo updateToken(@RequestHeader("userId") String userId @PostMapping("/auth/signin/local") public ResponseEntity> signIn(@RequestBody @Validated UsersRequest.SignIn signIn){ UserResponse.TokenInfo tokenInfo = authService.signIn(signIn); + log.info(signIn.getFcmToken()); + if(!signIn.getFcmToken().equals("")) fcmService.updateFcmToken(tokenInfo.getUserId(),signIn.getFcmToken()); return ResponseEntity.ok( APIResponse.of(SuccessCode.SELECT_SUCCESS,tokenInfo)); } @@ -120,6 +122,7 @@ public ResponseEntity> getToken(@PathVariabl socialType = SocialType.FIREBASE; } UserResponse.TokenInfo tokenInfo = authService.getToken( uid, socialType); + if(!token.getFcmToken().equals("")) fcmService.updateFcmToken(tokenInfo.getUserId(),token.getFcmToken()); APIResponse response = APIResponse.of(SuccessCode.SELECT_SUCCESS, tokenInfo); // log.info(token.); return ResponseEntity.ok(response); diff --git a/src/main/java/com/eum/auth/controller/DTO/request/FcmTokenRequest.java b/src/main/java/com/eum/auth/controller/DTO/request/FcmTokenRequest.java new file mode 100644 index 0000000..129b8ca --- /dev/null +++ b/src/main/java/com/eum/auth/controller/DTO/request/FcmTokenRequest.java @@ -0,0 +1,9 @@ +package com.eum.auth.controller.DTO.request; + +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter +public class FcmTokenRequest { + private String fcmToken; +} diff --git a/src/main/java/com/eum/auth/controller/DTO/request/UsersRequest.java b/src/main/java/com/eum/auth/controller/DTO/request/UsersRequest.java index b59a397..81a741e 100644 --- a/src/main/java/com/eum/auth/controller/DTO/request/UsersRequest.java +++ b/src/main/java/com/eum/auth/controller/DTO/request/UsersRequest.java @@ -14,6 +14,8 @@ public class UsersRequest { public static class Token{ @NotEmpty private String token; + + private String fcmToken; } //자체 로그인 폼 @Getter @@ -26,6 +28,8 @@ public static class SignIn{ @NotEmpty(message = "비밀번호는 필수 입력값입니다.") private String password; + private String fcmToken; + public UsernamePasswordAuthenticationToken toAuthentication(){ return new UsernamePasswordAuthenticationToken(testmail, password); } diff --git a/src/main/java/com/eum/auth/controller/UserController.java b/src/main/java/com/eum/auth/controller/UserController.java index 72526b2..97ce77f 100644 --- a/src/main/java/com/eum/auth/controller/UserController.java +++ b/src/main/java/com/eum/auth/controller/UserController.java @@ -1,9 +1,13 @@ package com.eum.auth.controller; +import com.eum.auth.common.DTO.APIResponse; +import com.eum.auth.common.DTO.enums.SuccessCode; +import com.eum.auth.controller.DTO.request.FcmTokenRequest; import com.eum.auth.controller.DTO.request.UsersRequest; import com.eum.auth.domain.user.SocialType; import com.eum.auth.domain.user.User; import com.eum.auth.service.AuthService; +import com.eum.auth.service.FcmService; import com.eum.auth.service.KakaoService; import com.eum.auth.service.UsersService; import com.google.firebase.auth.FirebaseAuth; @@ -12,6 +16,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -24,6 +29,7 @@ public class UserController { private final UsersService usersService; private final KakaoService kakaoService; private final AuthService authService; + private final FcmService fcmService; @Hidden @Transactional @PostMapping("/withdrawal") @@ -45,6 +51,11 @@ private String extractBearerToken(String authorizationHeader) { } return null; } + @PostMapping("notification") + public ResponseEntity updateFcm(@RequestBody FcmTokenRequest token, @RequestHeader("userId") String userId){ + if(!token.getFcmToken().equals("")) fcmService.updateFcmToken( Long.valueOf(userId),token.getFcmToken()); + return ResponseEntity.ok(APIResponse.of(SuccessCode.UPDATE_SUCCESS, "fcm 토큰 등록")); + } diff --git a/src/main/java/com/eum/auth/domain/fcmtoken/FcmToken.java b/src/main/java/com/eum/auth/domain/fcmtoken/FcmToken.java new file mode 100644 index 0000000..aa53e06 --- /dev/null +++ b/src/main/java/com/eum/auth/domain/fcmtoken/FcmToken.java @@ -0,0 +1,27 @@ +package com.eum.auth.domain.fcmtoken; + + +import com.eum.auth.common.BaseTimeEntity; +import com.eum.auth.domain.user.User; +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class FcmToken extends BaseTimeEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long fcmTokenId; + + @Column + private String token; + + @OneToOne + @JoinColumn(name = "user_id") + private User user; + +} diff --git a/src/main/java/com/eum/auth/domain/fcmtoken/FcmTokenRepository.java b/src/main/java/com/eum/auth/domain/fcmtoken/FcmTokenRepository.java new file mode 100644 index 0000000..044f425 --- /dev/null +++ b/src/main/java/com/eum/auth/domain/fcmtoken/FcmTokenRepository.java @@ -0,0 +1,10 @@ +package com.eum.auth.domain.fcmtoken; + +import com.eum.auth.domain.user.User; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface FcmTokenRepository extends JpaRepository { + Optional findByUser(User user); +} diff --git a/src/main/java/com/eum/auth/domain/user/User.java b/src/main/java/com/eum/auth/domain/user/User.java index 8e3a502..d278d7e 100644 --- a/src/main/java/com/eum/auth/domain/user/User.java +++ b/src/main/java/com/eum/auth/domain/user/User.java @@ -1,6 +1,7 @@ package com.eum.auth.domain.user; import com.eum.auth.common.BaseTimeEntity; +import com.eum.auth.domain.fcmtoken.FcmToken; import jakarta.persistence.*; import lombok.*; @@ -39,6 +40,10 @@ public void updateRole(Role role) { @Enumerated(EnumType.STRING) private SocialType socialType; + @OneToOne(mappedBy = "user") + private FcmToken fcmToken; + + public static User toEntity(String uid, SocialType socialType){ return User.builder().email("") diff --git a/src/main/java/com/eum/auth/messageq/FcmDeletedProducer.java b/src/main/java/com/eum/auth/messageq/FcmDeletedProducer.java new file mode 100644 index 0000000..b22ceaa --- /dev/null +++ b/src/main/java/com/eum/auth/messageq/FcmDeletedProducer.java @@ -0,0 +1,35 @@ +package com.eum.auth.messageq; + +import com.eum.auth.service.DTO.FcmTokenDTO; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Service; + + +@Service +@Slf4j +@RequiredArgsConstructor +public class FcmDeletedProducer { + + private final KafkaTemplate kafkaTemplate; + public static String TOPIC = "eum-fcm-delete"; + + public FcmTokenDTO.deletedToken send( FcmTokenDTO.deletedToken user) { + ObjectMapper mapper = new ObjectMapper(); + String jsonInString = ""; +// 주문 정보 Json 포맷 + try { + jsonInString = mapper.writeValueAsString(user); + } catch(JsonProcessingException ex) { + ex.printStackTrace(); + } + + kafkaTemplate.send(TOPIC, jsonInString); + log.info("producer >> : " + user); + + return user; + } +} diff --git a/src/main/java/com/eum/auth/messageq/FcmProducer.java b/src/main/java/com/eum/auth/messageq/FcmProducer.java index 4775da6..f580942 100644 --- a/src/main/java/com/eum/auth/messageq/FcmProducer.java +++ b/src/main/java/com/eum/auth/messageq/FcmProducer.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; @@ -16,21 +15,21 @@ public class FcmProducer { private final KafkaTemplate kafkaTemplate; - public static String TOPIC = "eum-fcm-delete"; + public static String TOPIC = "eum-fcm-create"; - public FcmTokenDTO send( FcmTokenDTO user) { + public FcmTokenDTO.FCMDTO send( FcmTokenDTO.FCMDTO fcmdto) { ObjectMapper mapper = new ObjectMapper(); String jsonInString = ""; // 주문 정보 Json 포맷 try { - jsonInString = mapper.writeValueAsString(user); + jsonInString = mapper.writeValueAsString(fcmdto); } catch(JsonProcessingException ex) { ex.printStackTrace(); } kafkaTemplate.send(TOPIC, jsonInString); - log.info("producer >> : " + user); + log.info("create producer >> : " + fcmdto); - return user; + return fcmdto; } } diff --git a/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java b/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java index cdfaf00..a9cb94c 100644 --- a/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java +++ b/src/main/java/com/eum/auth/service/DTO/FcmTokenDTO.java @@ -1,14 +1,29 @@ package com.eum.auth.service.DTO; import lombok.Data; +import lombok.Getter; +import lombok.Setter; -@Data public class FcmTokenDTO { - private Long userId; -// private String token; + @Getter + @Setter + public static class FCMDTO{ + private Long userId; + private String token; - public FcmTokenDTO(Long userId) { - this.userId = userId; -// this.token = fcmToken.getToken(); + public FCMDTO(Long userId, String token) { + this.userId = userId; + this.token = token; + } + } + + @Getter + @Setter + public static class deletedToken{ + private Long userId; + + public deletedToken(Long userId) { + this.userId = userId; + } } } diff --git a/src/main/java/com/eum/auth/service/FcmService.java b/src/main/java/com/eum/auth/service/FcmService.java index 41ec3cb..c78e795 100644 --- a/src/main/java/com/eum/auth/service/FcmService.java +++ b/src/main/java/com/eum/auth/service/FcmService.java @@ -1,6 +1,10 @@ package com.eum.auth.service; +import com.eum.auth.domain.fcmtoken.FcmToken; +import com.eum.auth.domain.fcmtoken.FcmTokenRepository; import com.eum.auth.domain.user.User; +import com.eum.auth.domain.user.UserRepository; +import com.eum.auth.messageq.FcmDeletedProducer; import com.eum.auth.messageq.FcmProducer; import com.eum.auth.service.DTO.FcmTokenDTO; import lombok.RequiredArgsConstructor; @@ -9,14 +13,34 @@ @Service @RequiredArgsConstructor public class FcmService { + private final FcmDeletedProducer fcmDeletedProducer; private final FcmProducer fcmProducer; private final UsersService usersService; + private final FcmTokenRepository fcmTokenRepository; + private final UserRepository userRepository; + + public void updateFcmToken(Long userId,String token){ + User user = userRepository.findById(userId).orElseThrow(()-> new IllegalArgumentException("invalid userId")); + + FcmToken fcmToken = fcmTokenRepository.findByUser(user) + .map(existingToken -> { + existingToken.setToken(token); // 기존 토큰 값을 새로운 토큰 값으로 업데이트 + return fcmTokenRepository.save(existingToken); // 업데이트된 토큰을 저장 + }) + .orElseGet(() -> { + FcmToken newToken = FcmToken.builder().user(user).token(token).build(); + return fcmTokenRepository.save(newToken); // 새로 생성된 토큰을 저장 + }); + + FcmTokenDTO.FCMDTO fcmdto = new FcmTokenDTO.FCMDTO(userId, fcmToken.getToken()); + fcmProducer.send(fcmdto); + } public void deleteFcmToken( Long userId){ User user = usersService.findById(userId); - FcmTokenDTO fcmTokenDTO = new FcmTokenDTO(user.getUserId()); - fcmProducer.send(fcmTokenDTO); + FcmTokenDTO.deletedToken deletedToken = new FcmTokenDTO.deletedToken(user.getUserId()); + fcmDeletedProducer.send(deletedToken); } From 2e9d843cba9505953111a65cb02798db88e70aa6 Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Mon, 3 Jun 2024 09:06:42 +0900 Subject: [PATCH 7/8] =?UTF-8?q?chore=20:=20=EA=B2=BD=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/eum/auth/client/HaetsalClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eum/auth/client/HaetsalClient.java b/src/main/java/com/eum/auth/client/HaetsalClient.java index 0b13d02..3d8c744 100644 --- a/src/main/java/com/eum/auth/client/HaetsalClient.java +++ b/src/main/java/com/eum/auth/client/HaetsalClient.java @@ -7,7 +7,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -@FeignClient(name = "haetsal-service", url = "http://localhost:8000/haetsal-service/api/v2/profile") +@FeignClient(name = "haetsal-service", url = "http://haetsal:8000/haetsal-service/api/v2/profile") public interface HaetsalClient { @PostMapping() ProfileResponseDTO.ProfileResponse createProfile(@RequestBody ProfileRequest.CreateProfile createProfile, @RequestHeader("userId") String userId); From 495b4d08fb31ed39dcb3f702512617513142de1a Mon Sep 17 00:00:00 2001 From: solhee-hwang Date: Mon, 3 Jun 2024 09:24:57 +0900 Subject: [PATCH 8/8] =?UTF-8?q?chore=20:=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java index edeee82..f05402b 100644 --- a/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java +++ b/src/main/java/com/eum/auth/messageq/KafkaProducerConfig.java @@ -21,7 +21,7 @@ public class KafkaProducerConfig { @Bean public ProducerFactory producerFactory() { Map properties = new HashMap<>(); - properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:29092"); + properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:9092"); properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);