@@ -23,6 +23,7 @@ import io.ktor.server.application.call
2323import io.ktor.server.request.receive
2424import io.ktor.server.response.header
2525import io.ktor.server.response.respond
26+ import io.ktor.server.routing.Route
2627import io.ktor.server.routing.delete
2728import io.ktor.server.routing.get
2829import io.ktor.server.routing.post
@@ -37,54 +38,66 @@ import java.time.Instant
3738 */
3839fun 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