Add custom query for random outfits

This commit is contained in:
Alex Gryczewski 2023-09-12 11:15:43 -04:00
parent b74bdad322
commit 4a9ccfd25e
2 changed files with 16 additions and 7 deletions

View File

@ -14,29 +14,36 @@ import io.salmonllama.fashionscapeapi.repository.OutfitRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@RestController @RestController
@RequestMapping("/api/v1") @RequestMapping("/api/v1/outfit")
public class OutfitController { public class OutfitController {
@Autowired @Autowired
private OutfitRepository outfitRepository; private OutfitRepository outfitRepository;
@GetMapping("/outfits") @GetMapping()
public List<Outfit> getAllOutfits() { public List<Outfit> getAllOutfits() {
return outfitRepository.findAll(); return outfitRepository.findAll();
} }
@GetMapping("/outfits/{id}") @GetMapping("/{id}")
public ResponseEntity<Outfit> getOutfitById(@PathVariable(value = "id") String outfitId) throws ResourceNotFoundException { public ResponseEntity<Outfit> getOutfitById(@PathVariable(value = "id") String outfitId) throws ResourceNotFoundException {
Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId)); Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId));
return ResponseEntity.ok().body(outfit); return ResponseEntity.ok().body(outfit);
} }
@PostMapping("/outfits") @GetMapping("/random")
public ResponseEntity<Outfit> getRandomOutfit() {
Outfit outfit = outfitRepository.findRandomOutfit();
return ResponseEntity.ok(outfit);
}
@PostMapping()
public Outfit createOutfit(@Valid @RequestBody Outfit outfit) { public Outfit createOutfit(@Valid @RequestBody Outfit outfit) {
return outfitRepository.save(outfit); return outfitRepository.save(outfit);
} }
@PutMapping("/outfits/{id}") @PutMapping("/{id}")
public ResponseEntity<Outfit> updateOutfit(@PathVariable(value = "id") String outfitId, @Valid @RequestBody Outfit outfitDetails) throws ResourceNotFoundException { public ResponseEntity<Outfit> updateOutfit(@PathVariable(value = "id") String outfitId, @Valid @RequestBody Outfit outfitDetails) throws ResourceNotFoundException {
Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId)); Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId));
@ -58,7 +65,7 @@ public class OutfitController {
return ResponseEntity.ok(updatedOutfit); return ResponseEntity.ok(updatedOutfit);
} }
@DeleteMapping("/outfits/{id}") @DeleteMapping("/{id}")
public Map<String, Boolean> deleteOutfit(@PathVariable(value = "id") String outfitId) throws ResourceNotFoundException { public Map<String, Boolean> deleteOutfit(@PathVariable(value = "id") String outfitId) throws ResourceNotFoundException {
Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId)); Outfit outfit = outfitRepository.findById(outfitId).orElseThrow(() -> new ResourceNotFoundException("Outfit not found for id :: " + outfitId));

View File

@ -1,11 +1,13 @@
package io.salmonllama.fashionscapeapi.repository; package io.salmonllama.fashionscapeapi.repository;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import io.salmonllama.fashionscapeapi.model.Outfit; import io.salmonllama.fashionscapeapi.model.Outfit;
@Repository @Repository
public interface OutfitRepository extends JpaRepository<Outfit, String> { public interface OutfitRepository extends JpaRepository<Outfit, String> {
@Query(value = "SELECT o FROM outfit o ORDER BY random() LIMIT 1", nativeQuery = true)
public Outfit findRandomOutfit();
} }