From daa5f7871c70ade11ccc85043ed66821cd894db9 Mon Sep 17 00:00:00 2001 From: Vladimir <134941915+vladimir212455@users.noreply.github.com> Date: Sun, 30 Nov 2025 12:39:17 +0700 Subject: [PATCH] 1 --- src/main/kotlin/Routing.kt | 42 +++++++++++-------- src/main/kotlin/domain/model/Booking.kt | 6 +++ .../kotlin/domain/usecase/BookingUseCase.kt | 27 ++++++++++++ .../repository/InMemoryBookingRepository.kt | 17 ++++++++ 4 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 src/main/kotlin/domain/model/Booking.kt create mode 100644 src/main/kotlin/domain/usecase/BookingUseCase.kt create mode 100644 src/main/kotlin/repository/InMemoryBookingRepository.kt diff --git a/src/main/kotlin/Routing.kt b/src/main/kotlin/Routing.kt index 45b01a5..cd67aa2 100755 --- a/src/main/kotlin/Routing.kt +++ b/src/main/kotlin/Routing.kt @@ -1,8 +1,11 @@ package com.example + import com.example.dto.ErrorDto import com.example.dto.UserDto import com.example.dto.UserDto.BookingDto +import domain.usecase.AddBookingUseCase +import domain.usecase.GetBookingsUseCase import io.ktor.http.HttpStatusCode import io.ktor.http.content.PartData import io.ktor.http.content.forEachPart @@ -10,6 +13,7 @@ import io.ktor.server.application.* import io.ktor.server.request.receiveMultipart import io.ktor.server.response.* import io.ktor.server.routing.* +import repository.InMemoryBookingRepository val booking = mutableListOf( BookingDto( @@ -23,10 +27,20 @@ val booking = mutableListOf( ) fun Application.configureRouting() { + val repository = InMemoryBookingRepository() + val getBookingsUseCase = GetBookingsUseCase(repository) + val addBookingUseCase = AddBookingUseCase(repository) + routing { get("/user") { - call.respond(UserDto(booking = booking)) + val bookings = getBookingsUseCase() + val userDto = UserDto( + name = "Administrator", + booking = bookings.map { UserDto.BookingDto(it.room, it.time) } + ) + call.respond(userDto) } + post("/book") { var room = "" var time = "" @@ -34,32 +48,26 @@ fun Application.configureRouting() { multipartData.forEachPart { part -> try { - if (part !is PartData.FormItem) return@forEachPart - when (part.name) { - "room" -> { - room = part.value.trim() + if (part is PartData.FormItem) { + when (part.name) { + "room" -> room = part.value + "time" -> time = part.value } - - "time" -> { - time = part.value.trim() - } - - else -> Unit } } finally { part.dispose() } } - if (room.isEmpty() && time.isEmpty()) { + val result = addBookingUseCase(room, time) + if (result.isSuccess) { + call.respond(HttpStatusCode.OK) + } else { call.respond( HttpStatusCode.BadRequest, - ErrorDto(error = "Field is empty") + ErrorDto("Field is empty") ) - } else { - booking.add(BookingDto(room = room, time = time)) - call.respond(HttpStatusCode.OK) } } } -} +} \ No newline at end of file diff --git a/src/main/kotlin/domain/model/Booking.kt b/src/main/kotlin/domain/model/Booking.kt new file mode 100644 index 0000000..8f20b3e --- /dev/null +++ b/src/main/kotlin/domain/model/Booking.kt @@ -0,0 +1,6 @@ +package domain.model + +data class Booking( + val room: String, + val time: String +) \ No newline at end of file diff --git a/src/main/kotlin/domain/usecase/BookingUseCase.kt b/src/main/kotlin/domain/usecase/BookingUseCase.kt new file mode 100644 index 0000000..1dc698d --- /dev/null +++ b/src/main/kotlin/domain/usecase/BookingUseCase.kt @@ -0,0 +1,27 @@ +package domain.usecase +import domain.model.Booking + +interface BookingRepository { + fun getAllBookings(): List + fun addBooking(booking: Booking) +} + +class GetBookingsUseCase( + private val repository: BookingRepository +) { + operator fun invoke(): List { + return repository.getAllBookings() + } +} + +class AddBookingUseCase( + private val repository: BookingRepository +) { + operator fun invoke(room: String, time: String): Result { + if (room.isBlank() || time.isBlank()) { + return Result.failure(IllegalArgumentException("Room and time must not be empty")) + } + repository.addBooking(Booking(room.trim(), time.trim())) + return Result.success(Unit) + } +} \ No newline at end of file diff --git a/src/main/kotlin/repository/InMemoryBookingRepository.kt b/src/main/kotlin/repository/InMemoryBookingRepository.kt new file mode 100644 index 0000000..19b13da --- /dev/null +++ b/src/main/kotlin/repository/InMemoryBookingRepository.kt @@ -0,0 +1,17 @@ +package repository + +import domain.model.Booking +import domain.usecase.BookingRepository + +class InMemoryBookingRepository : BookingRepository { + private val bookings = mutableListOf().apply { + add(Booking("502.6", "10:00 - 18:00")) + add(Booking("504.6", "12:00 - 16:00")) + } + + override fun getAllBookings(): List = bookings.toList() + + override fun addBooking(booking: Booking) { + bookings.add(booking) + } +} \ No newline at end of file