Adds various team endpoints

This commit is contained in:
2026-05-12 10:10:55 -05:00
parent 46a78bfc08
commit fd754a7ee7
13 changed files with 182 additions and 11 deletions

View File

@@ -1,21 +1,55 @@
package net.halfbinary.scavengerhuntapi.service
import net.halfbinary.scavengerhuntapi.error.exception.NotFoundException
import net.halfbinary.scavengerhuntapi.model.HuntId
import net.halfbinary.scavengerhuntapi.model.TeamId
import net.halfbinary.scavengerhuntapi.model.converter.toDomain
import net.halfbinary.scavengerhuntapi.model.converter.toRecord
import net.halfbinary.scavengerhuntapi.model.domain.Team
import net.halfbinary.scavengerhuntapi.model.domain.TeamHunt
import net.halfbinary.scavengerhuntapi.model.record.HunterTeamRecord
import net.halfbinary.scavengerhuntapi.model.record.TeamHuntRecord
import net.halfbinary.scavengerhuntapi.model.record.TeamRecord
import net.halfbinary.scavengerhuntapi.model.request.TeamRequest
import net.halfbinary.scavengerhuntapi.model.response.TeamResponse
import net.halfbinary.scavengerhuntapi.repository.HunterRepository
import net.halfbinary.scavengerhuntapi.repository.HunterTeamRepository
import net.halfbinary.scavengerhuntapi.repository.TeamHuntRepository
import net.halfbinary.scavengerhuntapi.repository.TeamRepository
import org.springframework.stereotype.Service
import java.util.UUID
@Service
class TeamService {
class TeamService(
private val teamRepository: TeamRepository,
private val teamHuntRepository: TeamHuntRepository,
private val hunterRepository: HunterRepository,
private val hunterTeamRepository: HunterTeamRepository,
) {
fun getListOfTeamsForHunt(huntId: HuntId): List<Team> {
TODO()
return getTeamsForHunt(huntId)
}
fun createTeam(name: String): Team {
TODO()
return teamRepository.save(TeamRequest(name).toDomain().toRecord()).toDomain()
}
fun addTeamToHunt(huntId: HuntId, teamId: TeamId) {
TODO()
teamHuntRepository.save(TeamHunt(teamId = teamId, huntId = huntId).toRecord()).toDomain()
}
fun getTeamFromHunt(huntId: HuntId, teamId: TeamId): Team {
return getTeamsForHunt(huntId)
.filter { it.id == teamId }
.elementAt(0)
}
fun joinTeam(teamId: TeamId, email: String) {
val hunter = hunterRepository.findByEmail(email) ?: throw NotFoundException("No hunter with email $email found")
hunterTeamRepository.save(HunterTeamRecord(UUID.randomUUID(), hunter.id, teamId))
}
private fun getTeamsForHunt(huntId: HuntId): List<Team> {
return teamHuntRepository.findTeamsByHuntId(huntId).map { it.toDomain() }
}
}