class VideoController constructor(application: Application, private val videoRepository: VideoRepository) { @Location("/cameras/{cameraId}/videos") data class ListVideos(val cameraId: String) @Location("/videos/{videoId}") data class GetVideo(val videoId: String) init { application.routing { get { if (!isValidUUID(it.cameraId)) { call.respond(HttpStatusCode.BadRequest, "Camera Id is invalid") } call.respond(list(UUID.fromString(it.cameraId))) } get { if (!isValidUUID(it.videoId)) { call.respond(HttpStatusCode.BadRequest, "Camera Id is invalid") } get(UUID.fromString(it.videoId))?.let { video -> call.respond(video) }.orElse { call.respond(HttpStatusCode.NotFound) } } } } fun list(cameraId: UUID): List = videoRepository.listByParent(cameraId) fun get(videoId: UUID): VideoChunk? = videoRepository.get(videoId) }