From 8108c9c45efd00c302a055169a8822f223e24bc7 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Wed, 28 Oct 2020 22:33:26 +0900 Subject: [PATCH 01/14] =?UTF-8?q?=ED=91=B8=EC=89=AC=20=EC=95=8C=EB=9E=8C?= =?UTF-8?q?=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=B4=88=EA=B8=B0=20=ED=99=98?= =?UTF-8?q?=EA=B2=B0=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++- pom.xml | 6 ++++ .../com/flab/makedel/service/PushService.java | 32 +++++++++++++++++++ ...ry-firebase-adminsdk-8jura-1d0b64450e.json | 12 +++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/flab/makedel/service/PushService.java create mode 100644 src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json diff --git a/.gitignore b/.gitignore index 357cdbe..ac9f42a 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,6 @@ build/ ### VS Code ### .vscode/ -application.properties \ No newline at end of file +application.properties + +firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json \ No newline at end of file diff --git a/pom.xml b/pom.xml index e031007..6ecde20 100644 --- a/pom.xml +++ b/pom.xml @@ -87,6 +87,12 @@ spring-boot-starter-validation + + com.google.firebase + firebase-admin + 6.8.1 + + diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java new file mode 100644 index 0000000..3b9f678 --- /dev/null +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -0,0 +1,32 @@ +package com.flab.makedel.service; + +import com.google.auth.oauth2.GoogleCredentials; +import com.google.firebase.FirebaseApp; +import com.google.firebase.FirebaseOptions; +import java.io.IOException; +import javax.annotation.PostConstruct; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; + +@Service +public class PushService { + + @Value("${firebase.config.path}") + private String FIREBASE_CONFIG_PATH; + + @PostConstruct + public void init() throws IOException { + FirebaseOptions options = new FirebaseOptions.Builder() + .setCredentials(GoogleCredentials + .fromStream(new ClassPathResource(FIREBASE_CONFIG_PATH).getInputStream())) + .build(); + if (FirebaseApp.getApps().isEmpty()) { + FirebaseApp.initializeApp(options); + } + } + + public void addRiderFCMToken() { + } + +} diff --git a/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json b/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json new file mode 100644 index 0000000..f06db46 --- /dev/null +++ b/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "make-delivery", + "private_key_id": "1d0b64450ea608823a564e0b3b9536852a69efef", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC6WlUsUKkqWnPn\nFlTZm/sVQxXmzk2fOv+ti7xDjrsuSFYslPGOWyNduljJf3/2CMY/p44p9cBv9g8w\nmgv/iWTSeRyAYjQEeMC+tJd5q2ZQuwnfrWDgcJ3FD5qNnV6sxRukk6Ul/q/GTt2t\nzGF6Ey3S7SgCUGgm7Cn4aZ470xewXh8jBq6bDMHSK880XEsfxbweuYBUDn2xaIFv\nfoUTRHnZZ1S3sm2KrKZdxRkV6HF0B+eKmIJDMnT+FOwp4WKflA83euS4aNvLfXjJ\neOReNrJr5mRAcrZvVAhfkfzuyvg9lOa+Cn5AxmPAa+hRkf2wBgpQ8Rf+A2vC0BFq\nYIzNcehzAgMBAAECggEAGjGRUEckMrpVGUcdH8XvfyJsr9e8DGTSxGuO8mCxHxp2\n1mcMebSGHj9lCdRHQbzOVOsx2I8Hq2pxjHooCT/1hn9p31fZCkSI3yVrjI69inJy\nkFitSc7lNj+bu0ptS36chJUQ58F1UTwLp8lsbX1y+aIbzLt4RaROFUc568cfniAB\n1I/ubUx7UymPEOOjLKXDpjfAlDDucXszJOMp+sUffxfFUWNC6xHkjpEQHfDPSjYg\nvVKCcfX6/6pAgmgQ9tV68r/9nO0RfnPGA4oRv6MRAn4kl6e4JazJj99KdMkHHOyc\n8toF/WJ7JW2NKUCjDPdCSZQUwTv8U8EtHF1iiGsh8QKBgQDqijnLuMxGwEIaSGw0\nlXySHiexxYtHoQfgzROcHO//SBOVne5EaF8dNft5GdcOxtHjZrkL5OEVWA7TrBjZ\nexAi0x251ZJjPxMYVwJuJ3LYvAQRalo06ezI7no85OKN1ikXl6Rk1VRR2t0EjK5K\nEN+fkHVezUrh0HYMENORKeGUYwKBgQDLZ2QfIamnjI4PzVgjUNl4mAQJE1FS473/\n4ifMzszNtdwAGQz+y6Op7Q3TnBdkGkM4+u94sJMgb3NUfH0uYKVaG0brp/ap4WLm\n7zYWMnswO9m75z9ir5+QIGhYzzJTrp0br4IE48wPDixCYwNKdJ4bi29oW6QXvFAv\n1eFUWeVwsQKBgQDaI3mhytzjqQlSHK3XMnnMBRPyOcNS+ai0IsjsV9W33zen3l2v\nbkuYhY7AkZH+AllQYUgWkefuzBnuMZBjJhxZ53UsVEF04UNHThXKkhI1FpnKANqp\ngDBkqbkzTcaRGPDbKoUR64AjKaaLBrVL2enDJL6lT9cns5U3n6bGyuct9QKBgQCV\nKue0JP3EUEHGuPMQQzSZSfJ7rV0QitBGHdbOTkLIAbyrnbN4EGOgNKbVLz3APbpa\nyTxhqCzdtp4/sWQkZOAeqq5iGDW+8/mSHo/ty2uoPdw5/ybu+pjsG7gqmRjxYbb6\nHMYfS+fUirJOpUo+ijOBQ8qaH8rBVWsBCbtMHvkyoQKBgQCVD6hd0uRb1CkagX8T\nl6RB6S3r1UnIM2YVWgTqsULITA440pXVQTjJhdR6xpdYbnVp6ktEKKhk1DPBjmPu\nnq0AnmgTZMBo2NmVjYg+rg02GYrPAvPigLZeNUungi/0y5uRJU9Egde9VVIk+ntb\nC5jGYo27iHAv5R4IBkqelZ8C2g==\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-8jura@make-delivery.iam.gserviceaccount.com", + "client_id": "103944181015939772706", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-8jura%40make-delivery.iam.gserviceaccount.com" +} From f91e91e6d22b97b232159b32b446ff069959b7d7 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Thu, 29 Oct 2020 00:06:42 +0900 Subject: [PATCH 02/14] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=8D=94=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/flab/makedel/dao/CartItemDAO.java | 4 +--- .../java/com/flab/makedel/service/PushService.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/flab/makedel/dao/CartItemDAO.java b/src/main/java/com/flab/makedel/dao/CartItemDAO.java index 9433be5..d50c881 100644 --- a/src/main/java/com/flab/makedel/dao/CartItemDAO.java +++ b/src/main/java/com/flab/makedel/dao/CartItemDAO.java @@ -17,9 +17,7 @@ exec 후에 오류가 나지 않은 부분은 실행된다. exec 이전에 command queue에 적재하는 도중 실패하는 경우 (command 문법오류,메모리 부족오류등, 다른 클라이언트에서 command날려 atomic보장이 안되는 경우) 에는 exec하면 전부 discard된다. - (실험해보니 multi 후 트랜잭션중 다른 스레드에서 command를 날리면 discard된다. - 오히려 다른스레드에서 그 키에 command 날린 것만 반영이 되고 원래트랜잭션은 discard된다. 아마도 - 원래 트랜잭션은 어차피 처리가 안되고 discard되니 다른 스레드에서 날린 command는 유효하게 처리하는거같다.) + (실험해보니 multi 후 트랜잭션중 다른 스레드에서 command를 날리면 discard된다.) (레디스 2.6.5이후로 트랜잭션시작 후 오류가 있으면 exec될 때 전부 discard된다.) 트랜잭션 명령어들은 exec되기 위해 큐에서 기다리는데 discard를 이용해 실행을 하지 않을 수 있다. 트랜잭션의 locking은 watch를 이용한 optimistic locking이다. watch로 어떠한 키를 감시하고 diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 3b9f678..2f1b3e2 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -5,16 +5,25 @@ import com.google.firebase.FirebaseOptions; import java.io.IOException; import javax.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.SessionCallback; import org.springframework.stereotype.Service; @Service +@RequiredArgsConstructor public class PushService { @Value("${firebase.config.path}") private String FIREBASE_CONFIG_PATH; + @Value("${fcm.rider.expire.second}") + private long riderExpireSecond; + + private final RedisTemplate redisTemplate; + @PostConstruct public void init() throws IOException { FirebaseOptions options = new FirebaseOptions.Builder() @@ -27,6 +36,10 @@ public void init() throws IOException { } public void addRiderFCMToken() { + redisTemplate.execute((SessionCallback) redisOperation -> { + redisOperation.watch(); + redisOperation.multi(); + }) } } From 62529393b4d477d10fd8431d2597345b0a24ad46 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Mon, 2 Nov 2020 15:50:53 +0900 Subject: [PATCH 03/14] =?UTF-8?q?Async=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=8A=A4=EB=A0=88=EB=93=9C=20=ED=92=80=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../makedel/config/SpringAsyncConfig.java | 41 +++++++++++++++++++ .../com/flab/makedel/service/PushService.java | 9 ++-- 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/flab/makedel/config/SpringAsyncConfig.java diff --git a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java new file mode 100644 index 0000000..dbd6064 --- /dev/null +++ b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java @@ -0,0 +1,41 @@ +package com.flab.makedel.config; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor.AbortPolicy; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +/* + 스프링의 @Async를 사용할 때 비동기처리를 새로운 스레드 풀에서 해주기 위한 설정입니다. + 이 설정이 없다면 SimpleAsyncTaskExecutor를 사용하는데 이는 새로운 비동기 작업을 + 스레드 풀에서 처리하는 것이 아니라 새로운 스레드를 매번 생성하여 작업을 수행시킵니다. + 또한 스레드 관리를 직접 할 수 없어 위험할 수 있습니다. + 따라서 밑에 설정에서 스레드 풀을 빈으로 설정해서 @Async 로직이 수행될 때 + 이 스레드 풀을 이용하도록 설정해줍니다. + */ + +@Configuration +@EnableAsync +public class SpringAsyncConfig { + + private static final int CORE_POOL_SIZE = 3; + private static final int MAX_POOL_SIZE = 100; + private static final int QUEUE_CAPACITY = 3; + private static final String NAME_PREFIX = "springAsyncTask-"; + + @Bean(name = "springAsyncTask") + public Executor threadPoolTaskExecutor() { + ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); + taskExecutor.setCorePoolSize(CORE_POOL_SIZE); + taskExecutor.setMaxPoolSize(MAX_POOL_SIZE); + taskExecutor.setQueueCapacity(QUEUE_CAPACITY); + taskExecutor.setThreadNamePrefix(NAME_PREFIX); + taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setRejectedExecutionHandler(new AbortPolicy()); + return taskExecutor; + } + +} diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 2f1b3e2..baf5ca9 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -1,5 +1,6 @@ package com.flab.makedel.service; +import com.flab.makedel.dao.DeliveryDAO; import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions; @@ -22,7 +23,7 @@ public class PushService { @Value("${fcm.rider.expire.second}") private long riderExpireSecond; - private final RedisTemplate redisTemplate; + private final DeliveryDAO deliveryDAO; @PostConstruct public void init() throws IOException { @@ -35,11 +36,7 @@ public void init() throws IOException { } } - public void addRiderFCMToken() { - redisTemplate.execute((SessionCallback) redisOperation -> { - redisOperation.watch(); - redisOperation.multi(); - }) + public void sendMessageToStandbyRidersInSameArea(String address) { } } From 63e9b35a1a21f54d23ca25f179f8811edd6e1883 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Mon, 2 Nov 2020 18:15:10 +0900 Subject: [PATCH 04/14] =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=8A=B9=EC=9D=B8?= =?UTF-8?q?=20=EC=8B=9C=20=EB=8C=80=EA=B8=B0=EC=A4=91=EC=9D=B8=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=8D=94=EB=93=A4=EC=97=90=EA=B2=8C=20=ED=91=B8?= =?UTF-8?q?=EC=89=AC=20=EC=95=8C=EB=9E=8C=20=EC=A0=84=EC=86=A1=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../makedel/controller/RiderController.java | 7 ++++- .../makedel/controller/StoreController.java | 3 ++- .../com/flab/makedel/dto/PushMessageDTO.java | 21 +++++++++++++++ .../com/flab/makedel/service/PushService.java | 27 ++++++++++++++++--- .../flab/makedel/service/StoreService.java | 18 ++++++++++++- 5 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/flab/makedel/dto/PushMessageDTO.java diff --git a/src/main/java/com/flab/makedel/controller/RiderController.java b/src/main/java/com/flab/makedel/controller/RiderController.java index 5e485fe..ab809b2 100644 --- a/src/main/java/com/flab/makedel/controller/RiderController.java +++ b/src/main/java/com/flab/makedel/controller/RiderController.java @@ -2,8 +2,13 @@ import com.flab.makedel.annotation.LoginCheck; import com.flab.makedel.annotation.LoginCheck.UserLevel; +import com.flab.makedel.dto.PushMessageDTO; import com.flab.makedel.dto.RiderDTO; +import com.flab.makedel.service.PushService; import com.flab.makedel.service.RiderService; +import com.google.firebase.messaging.FirebaseMessagingException; +import java.io.IOException; +import java.time.LocalDateTime; import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; @@ -45,5 +50,5 @@ public void acceptStandbyOrder(@PathVariable long orderId, public void finishDeliveringOrder(@PathVariable long orderId, RiderDTO rider) { riderService.finishDeliveringOrder(orderId, rider); } - + } diff --git a/src/main/java/com/flab/makedel/controller/StoreController.java b/src/main/java/com/flab/makedel/controller/StoreController.java index 864eee0..ad66d71 100644 --- a/src/main/java/com/flab/makedel/controller/StoreController.java +++ b/src/main/java/com/flab/makedel/controller/StoreController.java @@ -7,6 +7,7 @@ import com.flab.makedel.annotation.LoginCheck.UserLevel; import com.flab.makedel.dto.StoreDTO; import com.flab.makedel.service.StoreService; +import com.google.firebase.messaging.FirebaseMessagingException; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -82,7 +83,7 @@ public ResponseEntity openMyStore(@PathVariable long storeId, @PostMapping("/{storeId}/orders/{orderId}/approve") @LoginCheck(userLevel = UserLevel.OWNER) public void approveOrder(@PathVariable long orderId, @PathVariable long storeId, - @CurrentUserId String ownerId) { + @CurrentUserId String ownerId) throws FirebaseMessagingException { storeService.validateMyStore(storeId, ownerId); storeService.approveOrder(orderId); } diff --git a/src/main/java/com/flab/makedel/dto/PushMessageDTO.java b/src/main/java/com/flab/makedel/dto/PushMessageDTO.java new file mode 100644 index 0000000..13e2496 --- /dev/null +++ b/src/main/java/com/flab/makedel/dto/PushMessageDTO.java @@ -0,0 +1,21 @@ +package com.flab.makedel.dto; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class PushMessageDTO { + + private final String title; + + private final String content; + + private final OrderReceiptDTO orderReceipt; + + private final String createdAt; + + public static final String RIDER_MESSAGE_TITLE = "배차 요청"; + public static final String RIDER_MESSAGE_CONTENT = "근처 가게에서 주문이 승인된 후 배차 요청이 도착했습니다. 승인하시겠습니까?"; + +} diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index baf5ca9..5bf3461 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -1,12 +1,21 @@ package com.flab.makedel.service; import com.flab.makedel.dao.DeliveryDAO; +import com.flab.makedel.dto.PushMessageDTO; import com.google.auth.oauth2.GoogleCredentials; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions; +import com.google.firebase.messaging.BatchResponse; +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.FirebaseMessagingException; +import com.google.firebase.messaging.Message; import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.PostConstruct; import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.core.RedisTemplate; @@ -15,14 +24,12 @@ @Service @RequiredArgsConstructor +@Log4j2 public class PushService { @Value("${firebase.config.path}") private String FIREBASE_CONFIG_PATH; - @Value("${fcm.rider.expire.second}") - private long riderExpireSecond; - private final DeliveryDAO deliveryDAO; @PostConstruct @@ -36,7 +43,19 @@ public void init() throws IOException { } } - public void sendMessageToStandbyRidersInSameArea(String address) { + public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) + throws FirebaseMessagingException { + Set tokenSet = deliveryDAO.selectStandbyRiderTokenList(address); + List messages = tokenSet.stream().map(token -> Message.builder() + .putData("title", pushMessage.getTitle()) + .putData("content", pushMessage.getContent()) + .putData("orderReceipt", pushMessage.getOrderReceipt().toString()) + .putData("createdAt", pushMessage.getCreatedAt()) + .setToken(token) + .build()) + .collect(Collectors.toList()); + + BatchResponse response = FirebaseMessaging.getInstance().sendAll(messages); } } diff --git a/src/main/java/com/flab/makedel/service/StoreService.java b/src/main/java/com/flab/makedel/service/StoreService.java index 391b2d1..6f22f8a 100644 --- a/src/main/java/com/flab/makedel/service/StoreService.java +++ b/src/main/java/com/flab/makedel/service/StoreService.java @@ -3,9 +3,12 @@ import com.flab.makedel.dto.OrderDTO.OrderStatus; import com.flab.makedel.dto.OrderDetailDTO; import com.flab.makedel.dto.OrderReceiptDTO; +import com.flab.makedel.dto.PushMessageDTO; import com.flab.makedel.dto.StoreDTO; import com.flab.makedel.mapper.OrderMapper; import com.flab.makedel.mapper.StoreMapper; +import com.google.firebase.messaging.FirebaseMessagingException; +import java.time.LocalDateTime; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -20,6 +23,7 @@ public class StoreService { private final StoreMapper storeMapper; private final OrderMapper orderMapper; private final DeliveryService deliveryService; + private final PushService pushService; public void insertStore(StoreDTO store) { storeMapper.insertStore(store); @@ -65,10 +69,22 @@ public void validateMyStore(long storeId, String ownerId) throws HttpClientError } @Transactional - public void approveOrder(long orderId) { + public void approveOrder(long orderId) throws FirebaseMessagingException { orderMapper.approveOrder(orderId, OrderStatus.APPROVED_ORDER); OrderReceiptDTO orderReceipt = orderMapper.selectOrderReceipt(orderId); deliveryService.registerStandbyOrderWhenOrderApprove(orderId, orderReceipt); + pushService.sendMessageToStandbyRidersInSameArea(orderReceipt.getStoreInfo().getAddress(), + getPushMessage(orderReceipt)); + } + + private PushMessageDTO getPushMessage(OrderReceiptDTO orderReceipt) { + return PushMessageDTO.builder() + .title(PushMessageDTO.RIDER_MESSAGE_TITLE) + .content(PushMessageDTO.RIDER_MESSAGE_TITLE) + .createdAt(LocalDateTime.now().toString()) + .orderReceipt(orderReceipt) + .build(); + } } From 4451c96cdfa68cd6f296b4d5b5876521779ae077 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Mon, 2 Nov 2020 18:18:57 +0900 Subject: [PATCH 05/14] =?UTF-8?q?git=20ignore=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ac9f42a..8d814c1 100644 --- a/.gitignore +++ b/.gitignore @@ -33,5 +33,5 @@ build/ .vscode/ application.properties - +firebase firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json \ No newline at end of file From dd0fcdef8a3f72e9e2455b8d0e8e5b5d3659e969 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Mon, 2 Nov 2020 18:21:18 +0900 Subject: [PATCH 06/14] =?UTF-8?q?=EC=BA=90=EC=8B=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-delivery-firebase-adminsdk-8jura-1d0b64450e.json | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json diff --git a/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json b/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json deleted file mode 100644 index f06db46..0000000 --- a/src/main/resources/firebase/make-delivery-firebase-adminsdk-8jura-1d0b64450e.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "make-delivery", - "private_key_id": "1d0b64450ea608823a564e0b3b9536852a69efef", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC6WlUsUKkqWnPn\nFlTZm/sVQxXmzk2fOv+ti7xDjrsuSFYslPGOWyNduljJf3/2CMY/p44p9cBv9g8w\nmgv/iWTSeRyAYjQEeMC+tJd5q2ZQuwnfrWDgcJ3FD5qNnV6sxRukk6Ul/q/GTt2t\nzGF6Ey3S7SgCUGgm7Cn4aZ470xewXh8jBq6bDMHSK880XEsfxbweuYBUDn2xaIFv\nfoUTRHnZZ1S3sm2KrKZdxRkV6HF0B+eKmIJDMnT+FOwp4WKflA83euS4aNvLfXjJ\neOReNrJr5mRAcrZvVAhfkfzuyvg9lOa+Cn5AxmPAa+hRkf2wBgpQ8Rf+A2vC0BFq\nYIzNcehzAgMBAAECggEAGjGRUEckMrpVGUcdH8XvfyJsr9e8DGTSxGuO8mCxHxp2\n1mcMebSGHj9lCdRHQbzOVOsx2I8Hq2pxjHooCT/1hn9p31fZCkSI3yVrjI69inJy\nkFitSc7lNj+bu0ptS36chJUQ58F1UTwLp8lsbX1y+aIbzLt4RaROFUc568cfniAB\n1I/ubUx7UymPEOOjLKXDpjfAlDDucXszJOMp+sUffxfFUWNC6xHkjpEQHfDPSjYg\nvVKCcfX6/6pAgmgQ9tV68r/9nO0RfnPGA4oRv6MRAn4kl6e4JazJj99KdMkHHOyc\n8toF/WJ7JW2NKUCjDPdCSZQUwTv8U8EtHF1iiGsh8QKBgQDqijnLuMxGwEIaSGw0\nlXySHiexxYtHoQfgzROcHO//SBOVne5EaF8dNft5GdcOxtHjZrkL5OEVWA7TrBjZ\nexAi0x251ZJjPxMYVwJuJ3LYvAQRalo06ezI7no85OKN1ikXl6Rk1VRR2t0EjK5K\nEN+fkHVezUrh0HYMENORKeGUYwKBgQDLZ2QfIamnjI4PzVgjUNl4mAQJE1FS473/\n4ifMzszNtdwAGQz+y6Op7Q3TnBdkGkM4+u94sJMgb3NUfH0uYKVaG0brp/ap4WLm\n7zYWMnswO9m75z9ir5+QIGhYzzJTrp0br4IE48wPDixCYwNKdJ4bi29oW6QXvFAv\n1eFUWeVwsQKBgQDaI3mhytzjqQlSHK3XMnnMBRPyOcNS+ai0IsjsV9W33zen3l2v\nbkuYhY7AkZH+AllQYUgWkefuzBnuMZBjJhxZ53UsVEF04UNHThXKkhI1FpnKANqp\ngDBkqbkzTcaRGPDbKoUR64AjKaaLBrVL2enDJL6lT9cns5U3n6bGyuct9QKBgQCV\nKue0JP3EUEHGuPMQQzSZSfJ7rV0QitBGHdbOTkLIAbyrnbN4EGOgNKbVLz3APbpa\nyTxhqCzdtp4/sWQkZOAeqq5iGDW+8/mSHo/ty2uoPdw5/ybu+pjsG7gqmRjxYbb6\nHMYfS+fUirJOpUo+ijOBQ8qaH8rBVWsBCbtMHvkyoQKBgQCVD6hd0uRb1CkagX8T\nl6RB6S3r1UnIM2YVWgTqsULITA440pXVQTjJhdR6xpdYbnVp6ktEKKhk1DPBjmPu\nnq0AnmgTZMBo2NmVjYg+rg02GYrPAvPigLZeNUungi/0y5uRJU9Egde9VVIk+ntb\nC5jGYo27iHAv5R4IBkqelZ8C2g==\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-8jura@make-delivery.iam.gserviceaccount.com", - "client_id": "103944181015939772706", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-8jura%40make-delivery.iam.gserviceaccount.com" -} From f45050af26a2bed81689bd6e266698b980616b96 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Tue, 3 Nov 2020 02:44:29 +0900 Subject: [PATCH 07/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flab/makedel/config/SpringAsyncConfig.java | 2 +- .../java/com/flab/makedel/service/PushService.java | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java index dbd6064..b7323b3 100644 --- a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java +++ b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java @@ -33,7 +33,7 @@ public Executor threadPoolTaskExecutor() { taskExecutor.setMaxPoolSize(MAX_POOL_SIZE); taskExecutor.setQueueCapacity(QUEUE_CAPACITY); taskExecutor.setThreadNamePrefix(NAME_PREFIX); - taskExecutor.setWaitForTasksToCompleteOnShutdown(true); + taskExecutor.setWaitForTasksToCompleteOnShutdown(false); taskExecutor.setRejectedExecutionHandler(new AbortPolicy()); return taskExecutor; } diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 5bf3461..a598adc 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -23,20 +23,24 @@ import org.springframework.stereotype.Service; @Service -@RequiredArgsConstructor @Log4j2 public class PushService { @Value("${firebase.config.path}") - private String FIREBASE_CONFIG_PATH; - + private final String firebaseConfigPath; private final DeliveryDAO deliveryDAO; + public PushService(@Value("${firebase.config.path}") String firebaseConfigPath, + DeliveryDAO deliveryDAO) { + this.firebaseConfigPath = firebaseConfigPath; + this.deliveryDAO = deliveryDAO; + } + @PostConstruct public void init() throws IOException { FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(GoogleCredentials - .fromStream(new ClassPathResource(FIREBASE_CONFIG_PATH).getInputStream())) + .fromStream(new ClassPathResource(firebaseConfigPath).getInputStream())) .build(); if (FirebaseApp.getApps().isEmpty()) { FirebaseApp.initializeApp(options); @@ -55,7 +59,7 @@ public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO .build()) .collect(Collectors.toList()); - BatchResponse response = FirebaseMessaging.getInstance().sendAll(messages); + FirebaseMessaging.getInstance().sendAll(messages); } } From 631569abe327fa33c353f099a529657ace645316 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Tue, 3 Nov 2020 17:06:54 +0900 Subject: [PATCH 08/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/flab/makedel/config/SpringAsyncConfig.java | 3 +++ src/main/java/com/flab/makedel/service/PushService.java | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java index b7323b3..6736e24 100644 --- a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java +++ b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java @@ -24,6 +24,7 @@ public class SpringAsyncConfig { private static final int CORE_POOL_SIZE = 3; private static final int MAX_POOL_SIZE = 100; private static final int QUEUE_CAPACITY = 3; + private static final int KEEP_ALIVE_SECONDS = 30; private static final String NAME_PREFIX = "springAsyncTask-"; @Bean(name = "springAsyncTask") @@ -34,6 +35,8 @@ public Executor threadPoolTaskExecutor() { taskExecutor.setQueueCapacity(QUEUE_CAPACITY); taskExecutor.setThreadNamePrefix(NAME_PREFIX); taskExecutor.setWaitForTasksToCompleteOnShutdown(false); + taskExecutor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS); + taskExecutor.setAllowCoreThreadTimeOut(true); taskExecutor.setRejectedExecutionHandler(new AbortPolicy()); return taskExecutor; } diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index a598adc..0f34480 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -26,7 +26,6 @@ @Log4j2 public class PushService { - @Value("${firebase.config.path}") private final String firebaseConfigPath; private final DeliveryDAO deliveryDAO; From 6e14c40a2606525d5d015d84448d56c197c32ff1 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Tue, 3 Nov 2020 17:22:07 +0900 Subject: [PATCH 09/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flab/makedel/controller/StoreController.java | 3 ++- src/main/java/com/flab/makedel/service/PushService.java | 9 ++++++--- src/main/java/com/flab/makedel/service/StoreService.java | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/flab/makedel/controller/StoreController.java b/src/main/java/com/flab/makedel/controller/StoreController.java index ad66d71..53d253c 100644 --- a/src/main/java/com/flab/makedel/controller/StoreController.java +++ b/src/main/java/com/flab/makedel/controller/StoreController.java @@ -8,6 +8,7 @@ import com.flab.makedel.dto.StoreDTO; import com.flab.makedel.service.StoreService; import com.google.firebase.messaging.FirebaseMessagingException; +import java.io.IOException; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; @@ -83,7 +84,7 @@ public ResponseEntity openMyStore(@PathVariable long storeId, @PostMapping("/{storeId}/orders/{orderId}/approve") @LoginCheck(userLevel = UserLevel.OWNER) public void approveOrder(@PathVariable long orderId, @PathVariable long storeId, - @CurrentUserId String ownerId) throws FirebaseMessagingException { + @CurrentUserId String ownerId) throws IOException { storeService.validateMyStore(storeId, ownerId); storeService.approveOrder(orderId); } diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 0f34480..b7d62c4 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -47,7 +47,7 @@ public void init() throws IOException { } public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) - throws FirebaseMessagingException { + throws IOException { Set tokenSet = deliveryDAO.selectStandbyRiderTokenList(address); List messages = tokenSet.stream().map(token -> Message.builder() .putData("title", pushMessage.getTitle()) @@ -57,8 +57,11 @@ public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO .setToken(token) .build()) .collect(Collectors.toList()); - - FirebaseMessaging.getInstance().sendAll(messages); + try { + FirebaseMessaging.getInstance().sendAll(messages); + } catch (FirebaseMessagingException e) { + throw new IOException(e); + } } } diff --git a/src/main/java/com/flab/makedel/service/StoreService.java b/src/main/java/com/flab/makedel/service/StoreService.java index 6f22f8a..8d137f9 100644 --- a/src/main/java/com/flab/makedel/service/StoreService.java +++ b/src/main/java/com/flab/makedel/service/StoreService.java @@ -8,6 +8,7 @@ import com.flab.makedel.mapper.OrderMapper; import com.flab.makedel.mapper.StoreMapper; import com.google.firebase.messaging.FirebaseMessagingException; +import java.io.IOException; import java.time.LocalDateTime; import java.util.List; import lombok.RequiredArgsConstructor; @@ -69,7 +70,7 @@ public void validateMyStore(long storeId, String ownerId) throws HttpClientError } @Transactional - public void approveOrder(long orderId) throws FirebaseMessagingException { + public void approveOrder(long orderId) throws IOException { orderMapper.approveOrder(orderId, OrderStatus.APPROVED_ORDER); OrderReceiptDTO orderReceipt = orderMapper.selectOrderReceipt(orderId); deliveryService.registerStandbyOrderWhenOrderApprove(orderId, orderReceipt); From c6280deffc2590ba2fcd6b3d1219d32e2c8973d9 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Tue, 3 Nov 2020 21:50:56 +0900 Subject: [PATCH 10/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/flab/makedel/config/SpringAsyncConfig.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java index 6736e24..0b4ee54 100644 --- a/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java +++ b/src/main/java/com/flab/makedel/config/SpringAsyncConfig.java @@ -21,10 +21,10 @@ @EnableAsync public class SpringAsyncConfig { - private static final int CORE_POOL_SIZE = 3; - private static final int MAX_POOL_SIZE = 100; - private static final int QUEUE_CAPACITY = 3; - private static final int KEEP_ALIVE_SECONDS = 30; + private static final int CORE_POOL_SIZE = 5; + private static final int MAX_POOL_SIZE = 500; + private static final int QUEUE_CAPACITY = 0; + private static final int KEEP_ALIVE_SECONDS = 60; private static final String NAME_PREFIX = "springAsyncTask-"; @Bean(name = "springAsyncTask") From 1c5b24782bfc67cdf0100810680723756733cd11 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Wed, 4 Nov 2020 22:04:14 +0900 Subject: [PATCH 11/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flab/makedel/controller/StoreController.java | 2 +- src/main/java/com/flab/makedel/service/PushService.java | 9 ++------- src/main/java/com/flab/makedel/service/StoreService.java | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/flab/makedel/controller/StoreController.java b/src/main/java/com/flab/makedel/controller/StoreController.java index 53d253c..1276cf4 100644 --- a/src/main/java/com/flab/makedel/controller/StoreController.java +++ b/src/main/java/com/flab/makedel/controller/StoreController.java @@ -84,7 +84,7 @@ public ResponseEntity openMyStore(@PathVariable long storeId, @PostMapping("/{storeId}/orders/{orderId}/approve") @LoginCheck(userLevel = UserLevel.OWNER) public void approveOrder(@PathVariable long orderId, @PathVariable long storeId, - @CurrentUserId String ownerId) throws IOException { + @CurrentUserId String ownerId) { storeService.validateMyStore(storeId, ownerId); storeService.approveOrder(orderId); } diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index b7d62c4..373d6ba 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -46,8 +46,7 @@ public void init() throws IOException { } } - public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) - throws IOException { + public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) { Set tokenSet = deliveryDAO.selectStandbyRiderTokenList(address); List messages = tokenSet.stream().map(token -> Message.builder() .putData("title", pushMessage.getTitle()) @@ -57,11 +56,7 @@ public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO .setToken(token) .build()) .collect(Collectors.toList()); - try { - FirebaseMessaging.getInstance().sendAll(messages); - } catch (FirebaseMessagingException e) { - throw new IOException(e); - } + FirebaseMessaging.getInstance().sendAllAsync(messages); } } diff --git a/src/main/java/com/flab/makedel/service/StoreService.java b/src/main/java/com/flab/makedel/service/StoreService.java index 8d137f9..20052d1 100644 --- a/src/main/java/com/flab/makedel/service/StoreService.java +++ b/src/main/java/com/flab/makedel/service/StoreService.java @@ -70,7 +70,7 @@ public void validateMyStore(long storeId, String ownerId) throws HttpClientError } @Transactional - public void approveOrder(long orderId) throws IOException { + public void approveOrder(long orderId) { orderMapper.approveOrder(orderId, OrderStatus.APPROVED_ORDER); OrderReceiptDTO orderReceipt = orderMapper.selectOrderReceipt(orderId); deliveryService.registerStandbyOrderWhenOrderApprove(orderId, orderReceipt); From 3ece9d5c3990be79468a5e7d9533cbb5113a5695 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Thu, 5 Nov 2020 10:59:54 +0900 Subject: [PATCH 12/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/flab/makedel/service/PushService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 373d6ba..146e005 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -20,6 +20,7 @@ import org.springframework.core.io.ClassPathResource; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SessionCallback; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service @@ -56,6 +57,7 @@ public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO .setToken(token) .build()) .collect(Collectors.toList()); + FirebaseMessaging.getInstance().sendAllAsync(messages); } From a1d31045024268ed93665804b7df4c31a98bd14f Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Thu, 5 Nov 2020 11:55:37 +0900 Subject: [PATCH 13/14] =?UTF-8?q?[#47]=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/flab/makedel/service/PushService.java | 13 ++---------- .../flab/makedel/service/RiderService.java | 20 +++++++++++++++++++ .../flab/makedel/service/StoreService.java | 4 ++-- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index 146e005..f5e0a04 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -47,18 +47,9 @@ public void init() throws IOException { } } - public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) { - Set tokenSet = deliveryDAO.selectStandbyRiderTokenList(address); - List messages = tokenSet.stream().map(token -> Message.builder() - .putData("title", pushMessage.getTitle()) - .putData("content", pushMessage.getContent()) - .putData("orderReceipt", pushMessage.getOrderReceipt().toString()) - .putData("createdAt", pushMessage.getCreatedAt()) - .setToken(token) - .build()) - .collect(Collectors.toList()); - + public void sendMessages(List messages) { FirebaseMessaging.getInstance().sendAllAsync(messages); } + } diff --git a/src/main/java/com/flab/makedel/service/RiderService.java b/src/main/java/com/flab/makedel/service/RiderService.java index dba3cc6..9a55b74 100644 --- a/src/main/java/com/flab/makedel/service/RiderService.java +++ b/src/main/java/com/flab/makedel/service/RiderService.java @@ -2,9 +2,14 @@ import com.flab.makedel.dao.DeliveryDAO; import com.flab.makedel.dto.OrderDTO.OrderStatus; +import com.flab.makedel.dto.PushMessageDTO; import com.flab.makedel.dto.RiderDTO; import com.flab.makedel.mapper.OrderMapper; +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.Message; +import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -15,6 +20,7 @@ public class RiderService { private final DeliveryDAO deliveryDAO; private final OrderMapper orderMapper; + private final PushService pushService; public void registerStandbyRiderWhenStartWork(RiderDTO rider) { deliveryDAO.insertStandbyRiderWhenStartWork(rider); @@ -36,4 +42,18 @@ public void finishDeliveringOrder(long orderId, RiderDTO rider) { deliveryDAO.insertStandbyRiderWhenStartWork(rider); } + public void sendMessageToStandbyRidersInSameArea(String address, PushMessageDTO pushMessage) { + Set tokenSet = deliveryDAO.selectStandbyRiderTokenList(address); + List messages = tokenSet.stream().map(token -> Message.builder() + .putData("title", pushMessage.getTitle()) + .putData("content", pushMessage.getContent()) + .putData("orderReceipt", pushMessage.getOrderReceipt().toString()) + .putData("createdAt", pushMessage.getCreatedAt()) + .setToken(token) + .build()) + .collect(Collectors.toList()); + + pushService.sendMessages(messages); + } + } diff --git a/src/main/java/com/flab/makedel/service/StoreService.java b/src/main/java/com/flab/makedel/service/StoreService.java index 20052d1..f3d2332 100644 --- a/src/main/java/com/flab/makedel/service/StoreService.java +++ b/src/main/java/com/flab/makedel/service/StoreService.java @@ -24,7 +24,7 @@ public class StoreService { private final StoreMapper storeMapper; private final OrderMapper orderMapper; private final DeliveryService deliveryService; - private final PushService pushService; + private final RiderService riderService; public void insertStore(StoreDTO store) { storeMapper.insertStore(store); @@ -74,7 +74,7 @@ public void approveOrder(long orderId) { orderMapper.approveOrder(orderId, OrderStatus.APPROVED_ORDER); OrderReceiptDTO orderReceipt = orderMapper.selectOrderReceipt(orderId); deliveryService.registerStandbyOrderWhenOrderApprove(orderId, orderReceipt); - pushService.sendMessageToStandbyRidersInSameArea(orderReceipt.getStoreInfo().getAddress(), + riderService.sendMessageToStandbyRidersInSameArea(orderReceipt.getStoreInfo().getAddress(), getPushMessage(orderReceipt)); } From 71c41a2f599595bd9902129d99b6c6ebdf0a6ca6 Mon Sep 17 00:00:00 2001 From: tjdrnr0557 Date: Fri, 6 Nov 2020 16:11:05 +0900 Subject: [PATCH 14/14] =?UTF-8?q?=EC=96=B4=ED=94=8C=EB=A6=AC=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EB=A0=88=EB=B2=A8=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=B9=84=EB=8F=99=EA=B8=B0=EB=A5=BC=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=ED=91=B8=EC=89=AC=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=A0=84=EC=86=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/flab/makedel/service/PushService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/flab/makedel/service/PushService.java b/src/main/java/com/flab/makedel/service/PushService.java index f5e0a04..0afd629 100644 --- a/src/main/java/com/flab/makedel/service/PushService.java +++ b/src/main/java/com/flab/makedel/service/PushService.java @@ -47,6 +47,7 @@ public void init() throws IOException { } } + @Async("springAsyncTask") public void sendMessages(List messages) { FirebaseMessaging.getInstance().sendAllAsync(messages); }