From a357f186b9f2876d02beff1ec4417d63d155715b Mon Sep 17 00:00:00 2001 From: Rohit Date: Fri, 30 Aug 2024 01:02:06 +0530 Subject: [PATCH] feature/user-scheduled-blogs-list --- .../blog/constants/EndpointConstants.java | 3 ++ .../blog/controller/SchedulerController.java | 35 ++++++++++++++ .../SchedulerServiceImplementation.java | 48 +++++++++++++++++++ .../blog/service/SchedulerService.java | 20 ++++++++ 4 files changed, 106 insertions(+) create mode 100644 src/main/java/com/bloggios/blog/controller/SchedulerController.java create mode 100644 src/main/java/com/bloggios/blog/implementation/SchedulerServiceImplementation.java create mode 100644 src/main/java/com/bloggios/blog/service/SchedulerService.java diff --git a/src/main/java/com/bloggios/blog/constants/EndpointConstants.java b/src/main/java/com/bloggios/blog/constants/EndpointConstants.java index 280ee15..d48cc8c 100644 --- a/src/main/java/com/bloggios/blog/constants/EndpointConstants.java +++ b/src/main/java/com/bloggios/blog/constants/EndpointConstants.java @@ -68,4 +68,7 @@ public static class LikeController { public static final String BASE_PATH = "/like"; } + public static class SchedulerController { + public static final String BASE_PATH = "/scheduler"; + } } diff --git a/src/main/java/com/bloggios/blog/controller/SchedulerController.java b/src/main/java/com/bloggios/blog/controller/SchedulerController.java new file mode 100644 index 0000000..8fe2320 --- /dev/null +++ b/src/main/java/com/bloggios/blog/controller/SchedulerController.java @@ -0,0 +1,35 @@ +package com.bloggios.blog.controller; + +import com.bloggios.authenticationconfig.payload.AuthenticatedUser; +import com.bloggios.blog.constants.EndpointConstants; +import com.bloggios.blog.service.SchedulerService; +import com.bloggios.blog.utils.AsyncUtils; +import com.bloggios.elasticsearch.configuration.payload.response.ListResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Owner - Rohit Parihar + * Author - rohit + * Project - blog-provider-application + * Package - com.bloggios.blog.controller + * Created_on - August 30 - 2024 + * Created_at - 00:44 + */ + +@RestController +@RequestMapping(EndpointConstants.SchedulerController.BASE_PATH) +@RequiredArgsConstructor +public class SchedulerController { + + private final SchedulerService schedulerService; + + @GetMapping + public ResponseEntity getUserScheduledBlogs(@AuthenticationPrincipal AuthenticatedUser authenticatedUser) { + return ResponseEntity.ok(AsyncUtils.getAsyncResult(schedulerService.getUserScheduler(authenticatedUser))); + } +} diff --git a/src/main/java/com/bloggios/blog/implementation/SchedulerServiceImplementation.java b/src/main/java/com/bloggios/blog/implementation/SchedulerServiceImplementation.java new file mode 100644 index 0000000..4bf7b6f --- /dev/null +++ b/src/main/java/com/bloggios/blog/implementation/SchedulerServiceImplementation.java @@ -0,0 +1,48 @@ +package com.bloggios.blog.implementation; + +import com.bloggios.authenticationconfig.payload.AuthenticatedUser; +import com.bloggios.blog.constants.BeanConstants; +import com.bloggios.blog.dao.implementation.pgsqlimplementation.SchedulerDataDao; +import com.bloggios.blog.modal.SchedulerData; +import com.bloggios.blog.service.SchedulerService; +import com.bloggios.elasticsearch.configuration.payload.response.ListResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.concurrent.CompletableFuture; + +/** + * Owner - Rohit Parihar + * Author - rohit + * Project - blog-provider-application + * Package - com.bloggios.blog.implementation + * Created_on - August 30 - 2024 + * Created_at - 00:50 + */ + +@Service +@RequiredArgsConstructor +@Slf4j +public class SchedulerServiceImplementation implements SchedulerService { + + private final SchedulerDataDao schedulerDataDao; + + @Override + @Async(BeanConstants.ASYNC_TASK_EXTERNAL_POOL) + public CompletableFuture getUserScheduler(AuthenticatedUser authenticatedUser) { + long startTime = System.currentTimeMillis(); + List byUserId = schedulerDataDao.findByUserId(authenticatedUser.getUserId()); + ListResponse listResponse = ListResponse + .builder() + .page(0) + .size(byUserId.size()) + .object(byUserId) + .totalRecordsCount(byUserId.size()) + .build(); + log.info("Execution time (Add Blog) : {}ms", System.currentTimeMillis() - startTime); + return CompletableFuture.completedFuture(listResponse); + } +} diff --git a/src/main/java/com/bloggios/blog/service/SchedulerService.java b/src/main/java/com/bloggios/blog/service/SchedulerService.java new file mode 100644 index 0000000..5908196 --- /dev/null +++ b/src/main/java/com/bloggios/blog/service/SchedulerService.java @@ -0,0 +1,20 @@ +package com.bloggios.blog.service; + +import com.bloggios.authenticationconfig.payload.AuthenticatedUser; +import com.bloggios.elasticsearch.configuration.payload.response.ListResponse; + +import java.util.concurrent.CompletableFuture; + +/** + * Owner - Rohit Parihar + * Author - rohit + * Project - blog-provider-application + * Package - com.bloggios.blog.service + * Created_on - August 30 - 2024 + * Created_at - 00:49 + */ + +public interface SchedulerService { + + CompletableFuture getUserScheduler(AuthenticatedUser authenticatedUser); +}