Implements getting items for a hunt

This commit is contained in:
2026-05-13 16:09:10 -05:00
parent 30c66527b9
commit 9324cf2eb0
3 changed files with 17 additions and 2 deletions

View File

@@ -25,7 +25,7 @@ class ItemController(private val huntService: HuntService) {
@GetMapping @GetMapping
fun getItemsForHunt(@PathVariable huntId: HuntId): ResponseEntity<List<ItemResponse>> { fun getItemsForHunt(@PathVariable huntId: HuntId): ResponseEntity<List<ItemResponse>> {
TODO("List the Items related to the specified Hunt") return ResponseEntity.ok(huntService.getItemsForHunt(huntId).map { it.toResponse() })
} }
@GetMapping("/{itemId}") @GetMapping("/{itemId}")

View File

@@ -1,9 +1,19 @@
package net.halfbinary.scavengerhuntapi.repository package net.halfbinary.scavengerhuntapi.repository
import net.halfbinary.scavengerhuntapi.model.HuntId
import net.halfbinary.scavengerhuntapi.model.ItemId import net.halfbinary.scavengerhuntapi.model.ItemId
import net.halfbinary.scavengerhuntapi.model.record.ItemRecord import net.halfbinary.scavengerhuntapi.model.record.ItemRecord
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
@Repository @Repository
interface ItemRepository : JpaRepository<ItemRecord, ItemId> interface ItemRepository : JpaRepository<ItemRecord, ItemId> {
@Query("""
SELECT i.*
FROM item i
INNER JOIN hunt_item hi ON i.id = hi.item_id
WHERE hi.hunt_id = :huntId
""", nativeQuery = true)
fun findAllByHuntId(huntId: HuntId): List<ItemRecord>
}

View File

@@ -64,6 +64,11 @@ class HuntService(
return huntRepository.save(hunt.toRecord()).toDomain() return huntRepository.save(hunt.toRecord()).toDomain()
} }
fun getItemsForHunt(huntId: HuntId): List<Item> {
huntRepository.findByIdOrNull(huntId) ?: throw NotFoundException("No hunt with id $huntId found")
return itemRepository.findAllByHuntId(huntId).map { it.toDomain() }
}
fun addItemToHunt(huntId: HuntId, item: Item): Item { fun addItemToHunt(huntId: HuntId, item: Item): Item {
huntRepository.findByIdOrNull(huntId) ?: throw NotFoundException("No hunt with id $huntId found") huntRepository.findByIdOrNull(huntId) ?: throw NotFoundException("No hunt with id $huntId found")
val savedItem = itemRepository.save(item.toRecord()).toDomain() val savedItem = itemRepository.save(item.toRecord()).toDomain()