diff --git a/src/main/kotlin/routes/LibraryRoutes.kt b/src/main/kotlin/routes/LibraryRoutes.kt index 622e10d..8322d09 100644 --- a/src/main/kotlin/routes/LibraryRoutes.kt +++ b/src/main/kotlin/routes/LibraryRoutes.kt @@ -1,17 +1,32 @@ package codes.kalar.routes +import codes.kalar.exception.DbElementInsertionException +import codes.kalar.exception.DbElementNotFoundException import codes.kalar.model.Library +import codes.kalar.model.NewLibrary +import codes.kalar.service.LibraryService +import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* import java.sql.Connection +import java.sql.SQLException fun Application.configureLibraryRoutes(dbConnection: Connection) { + val libraryService = LibraryService(dbConnection) routing { get("/libraries") { - call.respondText("Libraries are neat!") + try { + val id = call.parameters["id"]?.toLong() ?: throw IllegalArgumentException("query parameter required") + val library = libraryService.read(id) + call.respond(HttpStatusCode.OK, library.toString()) + } catch (cause: DbElementNotFoundException) { + call.respond(HttpStatusCode.BadRequest, cause.message ?: "Unable to find Library.") + } catch (cause: IllegalArgumentException) { + call.respond(HttpStatusCode.BadRequest, cause.message ?: "Missing 'id' parameter.") + } } get("/libraries/{libraryId}/items/{itemId}") { @@ -19,8 +34,13 @@ fun Application.configureLibraryRoutes(dbConnection: Connection) { } post("/libraries") { - val library = call.receive() - call.respondText("${library.name} is posted") + val library = call.receive() + try { + val id = libraryService.create(library) + call.respondText("${library.name} is posted with the ID: $id") + } catch (cause: DbElementInsertionException) { + call.respond(HttpStatusCode.BadRequest, cause.message ?: "Unable to insert Library.") + } } patch("/libraries") {