From 6b417a21de95142105840336c931716d0e26e3f1 Mon Sep 17 00:00:00 2001 From: Johnathan James Date: Thu, 3 Oct 2024 10:42:25 -0600 Subject: [PATCH] Adding basis of search functionality. --- .../controllers/SearchAPIController.java | 39 +++++++++++++++++++ .../controllers/dto/SearchRequest.java | 14 +++++++ .../tribeapp/dto/SearchResponseDTO.java | 7 ++++ .../tribeapp/services/SearchService.java | 10 +++++ .../tribeapp/services/SearchServiceImpl.java | 15 +++++++ 5 files changed, 85 insertions(+) create mode 100644 src/main/java/com/savvato/tribeapp/controllers/SearchAPIController.java create mode 100644 src/main/java/com/savvato/tribeapp/controllers/dto/SearchRequest.java create mode 100644 src/main/java/com/savvato/tribeapp/dto/SearchResponseDTO.java create mode 100644 src/main/java/com/savvato/tribeapp/services/SearchService.java create mode 100644 src/main/java/com/savvato/tribeapp/services/SearchServiceImpl.java diff --git a/src/main/java/com/savvato/tribeapp/controllers/SearchAPIController.java b/src/main/java/com/savvato/tribeapp/controllers/SearchAPIController.java new file mode 100644 index 00000000..7da1316a --- /dev/null +++ b/src/main/java/com/savvato/tribeapp/controllers/SearchAPIController.java @@ -0,0 +1,39 @@ +package com.savvato.tribeapp.controllers; + +import com.savvato.tribeapp.dto.SearchResponseDTO; +import com.savvato.tribeapp.services.SearchService; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +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 java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/api/search") +@Tag(name = "search", description = "search for a user that matches the given attributes") +public class SearchAPIController { + + @Autowired SearchService searchService; + +// @GetSearch + @GetMapping + public ResponseEntity search( + @Parameter(description = "list of phrases to match", example = "q=plays chess&q=cooks pasta") @RequestParam("q") + List query, + @Parameter(description = "The user ID", example = "1") @RequestParam("userId") + Long userId) { + Optional opt = searchService.search(userId, query); + if (opt.isPresent()) { + return ResponseEntity.status(HttpStatus.OK).body(opt.get()); + } else { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } +} diff --git a/src/main/java/com/savvato/tribeapp/controllers/dto/SearchRequest.java b/src/main/java/com/savvato/tribeapp/controllers/dto/SearchRequest.java new file mode 100644 index 00000000..4395fdee --- /dev/null +++ b/src/main/java/com/savvato/tribeapp/controllers/dto/SearchRequest.java @@ -0,0 +1,14 @@ +package com.savvato.tribeapp.controllers.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema(description = "A request to connect two users") +public class SearchRequest { + @Schema(example = "1") + public Long requestingUserId; + + @Schema(example = "plays chess, cooks pasta") + public List phrases; +} diff --git a/src/main/java/com/savvato/tribeapp/dto/SearchResponseDTO.java b/src/main/java/com/savvato/tribeapp/dto/SearchResponseDTO.java new file mode 100644 index 00000000..f6c1c0d1 --- /dev/null +++ b/src/main/java/com/savvato/tribeapp/dto/SearchResponseDTO.java @@ -0,0 +1,7 @@ +package com.savvato.tribeapp.dto; + +import lombok.Builder; + +@Builder +public class SearchResponseDTO { +} diff --git a/src/main/java/com/savvato/tribeapp/services/SearchService.java b/src/main/java/com/savvato/tribeapp/services/SearchService.java new file mode 100644 index 00000000..595206c2 --- /dev/null +++ b/src/main/java/com/savvato/tribeapp/services/SearchService.java @@ -0,0 +1,10 @@ +package com.savvato.tribeapp.services; + +import com.savvato.tribeapp.dto.SearchResponseDTO; + +import java.util.List; +import java.util.Optional; + +public interface SearchService { + Optional search(Long requestingUserId, List phrases); +} diff --git a/src/main/java/com/savvato/tribeapp/services/SearchServiceImpl.java b/src/main/java/com/savvato/tribeapp/services/SearchServiceImpl.java new file mode 100644 index 00000000..d5c42988 --- /dev/null +++ b/src/main/java/com/savvato/tribeapp/services/SearchServiceImpl.java @@ -0,0 +1,15 @@ +package com.savvato.tribeapp.services; + +import com.savvato.tribeapp.dto.SearchResponseDTO; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class SearchServiceImpl implements SearchService { + @Override + public Optional search(Long requestingUserId, List phrases) { + return Optional.empty(); + } +}