Skip to content

Commit 5bac204

Browse files
refactor: split api in route extension function
1 parent 406047b commit 5bac204

File tree

1 file changed

+56
-43
lines changed

1 file changed

+56
-43
lines changed

src/main/kotlin/infrastructure/api/RoomApi.kt

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.ktor.server.application.call
2323
import io.ktor.server.request.receive
2424
import io.ktor.server.response.header
2525
import io.ktor.server.response.respond
26+
import io.ktor.server.routing.Route
2627
import io.ktor.server.routing.delete
2728
import io.ktor.server.routing.get
2829
import io.ktor.server.routing.post
@@ -37,54 +38,66 @@ import java.time.Instant
3738
*/
3839
fun Application.roomAPI(apiPath: String, port: Int, provider: ManagerProvider) {
3940
routing {
40-
post("$apiPath/rooms") {
41-
val room = call.receive<RoomEntry>().toRoom()
42-
RoomService.CreateRoom(
43-
room,
44-
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
45-
).execute().apply {
46-
when (this) {
47-
null -> call.respond(HttpStatusCode.Conflict)
48-
else -> {
49-
call.response.header(
50-
HttpHeaders.Location,
51-
"http://localhost:$port$apiPath/rooms/${room.id.value}"
52-
)
53-
call.respond(HttpStatusCode.Created)
54-
}
41+
createRoom(apiPath, port, provider)
42+
getAllRooms(apiPath, port, provider)
43+
getRoom(apiPath, provider)
44+
deleteRoom(apiPath, provider)
45+
}
46+
}
47+
48+
private fun Route.createRoom(apiPath: String, port: Int, provider: ManagerProvider) =
49+
post("$apiPath/rooms") {
50+
val room = call.receive<RoomEntry>().toRoom()
51+
RoomService.CreateRoom(
52+
room,
53+
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
54+
).execute().apply {
55+
when (this) {
56+
null -> call.respond(HttpStatusCode.Conflict)
57+
else -> {
58+
call.response.header(
59+
HttpHeaders.Location,
60+
"http://localhost:$port$apiPath/rooms/${room.id.value}"
61+
)
62+
call.respond(HttpStatusCode.Created)
5563
}
5664
}
5765
}
58-
get("$apiPath/rooms") {
59-
val entries = RoomService.GetAllRoomEntry(
60-
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
61-
).execute().map { entry ->
62-
ApiResponses.ResponseEntry(entry, "http://localhost:$port$apiPath/rooms/${entry.id}")
66+
}
67+
68+
private fun Route.getAllRooms(apiPath: String, port: Int, provider: ManagerProvider) =
69+
get("$apiPath/rooms") {
70+
val entries = RoomService.GetAllRoomEntry(
71+
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
72+
).execute().map { entry ->
73+
ApiResponses.ResponseEntry(entry, "http://localhost:$port$apiPath/rooms/${entry.id}")
74+
}
75+
call.response.status(if (entries.isNotEmpty()) HttpStatusCode.OK else HttpStatusCode.NoContent)
76+
call.respond(ApiResponses.ResponseEntryList(entries))
77+
}
78+
79+
private fun Route.getRoom(apiPath: String, provider: ManagerProvider) =
80+
get("$apiPath/rooms/{roomId}") {
81+
RoomService.GetRoom(
82+
RoomID(call.parameters["roomId"].orEmpty()),
83+
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager),
84+
call.request.queryParameters["dateTime"]?.let { rawDateTime -> Instant.parse(rawDateTime) }
85+
).execute().apply {
86+
when (this) {
87+
null -> call.respond(HttpStatusCode.NotFound)
88+
else -> call.respond(this.toRoomApiDto())
6389
}
64-
call.response.status(if (entries.isNotEmpty()) HttpStatusCode.OK else HttpStatusCode.NoContent)
65-
call.respond(ApiResponses.ResponseEntryList(entries))
6690
}
67-
get("$apiPath/rooms/{roomId}") {
68-
RoomService.GetRoom(
91+
}
92+
93+
private fun Route.deleteRoom(apiPath: String, provider: ManagerProvider) =
94+
delete("$apiPath/rooms/{roomId}") {
95+
call.respond(
96+
RoomService.DeleteRoom(
6997
RoomID(call.parameters["roomId"].orEmpty()),
70-
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager),
71-
call.request.queryParameters["dateTime"]?.let { rawDateTime -> Instant.parse(rawDateTime) }
72-
).execute().apply {
73-
when (this) {
74-
null -> call.respond(HttpStatusCode.NotFound)
75-
else -> call.respond(this.toRoomApiDto())
76-
}
98+
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
99+
).execute().let { result ->
100+
if (result) HttpStatusCode.NoContent else HttpStatusCode.NotFound
77101
}
78-
}
79-
delete("$apiPath/rooms/{roomId}") {
80-
call.respond(
81-
RoomService.DeleteRoom(
82-
RoomID(call.parameters["roomId"].orEmpty()),
83-
RoomController(provider.roomDigitalTwinManager, provider.roomDatabaseManager)
84-
).execute().let { result ->
85-
if (result) HttpStatusCode.NoContent else HttpStatusCode.NotFound
86-
}
87-
)
88-
}
102+
)
89103
}
90-
}

0 commit comments

Comments
 (0)