Skip to content

Commit 8fe9ae9

Browse files
feat: handle creation deletion and get with present information of a room
1 parent 3821f37 commit 8fe9ae9

File tree

1 file changed

+40
-5
lines changed

1 file changed

+40
-5
lines changed

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

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ package infrastructure.api
1111
import application.controller.RoomController
1212
import application.presenter.api.deserializer.ApiDeserializer.toRoom
1313
import application.presenter.api.model.RoomApiDto
14+
import application.presenter.api.serializer.ApiSerializer.toRoomApiDto
1415
import application.service.Service
16+
import entity.zone.RoomID
1517
import infrastructure.provider.ManagerProvider
18+
import io.ktor.http.HttpHeaders
19+
import io.ktor.http.HttpStatusCode
1620
import io.ktor.serialization.kotlinx.json.json
1721
import io.ktor.server.application.Application
1822
import io.ktor.server.application.call
@@ -21,6 +25,8 @@ import io.ktor.server.engine.embeddedServer
2125
import io.ktor.server.netty.Netty
2226
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
2327
import io.ktor.server.request.receive
28+
import io.ktor.server.response.header
29+
import io.ktor.server.response.respond
2430
import io.ktor.server.response.respondText
2531
import io.ktor.server.routing.delete
2632
import io.ktor.server.routing.get
@@ -37,7 +43,7 @@ class APIController(private val provider: ManagerProvider) {
3743
* Starts the http server to serve the client requests.
3844
*/
3945
fun start() {
40-
embeddedServer(Netty, port = 3000) {
46+
embeddedServer(Netty, port = port) {
4147
dispatcher(this)
4248
install(ContentNegotiation) {
4349
json()
@@ -73,14 +79,42 @@ class APIController(private val provider: ManagerProvider) {
7379
2. creo il digital twin su Azure Digital Twins
7480
*/
7581
val room = call.receive<RoomApiDto>().toRoom()
76-
Service.CreateRoom(room, RoomController(provider.roomDigitalTwinManager))
77-
call.respondText("[${Thread.currentThread().name}] Room POST! \n$room")
82+
Service.CreateRoom(room, RoomController(provider.roomDigitalTwinManager)).execute().apply {
83+
when (this) {
84+
null -> call.respond(HttpStatusCode.Conflict)
85+
else -> {
86+
call.response.header(
87+
HttpHeaders.Location,
88+
"http://localhost:$port$apiPath/rooms/${room.id.value}"
89+
)
90+
call.respond(HttpStatusCode.Created)
91+
}
92+
}
93+
}
94+
}
95+
get("$apiPath/rooms") {
96+
call.respondText("Get Rooms CALLED")
7897
}
7998
get("$apiPath/rooms/{roomId}") {
80-
call.respondText("[${Thread.currentThread().name}] Room GET!")
99+
Service.GetRoom(
100+
RoomID(call.parameters["roomId"].orEmpty()),
101+
RoomController(provider.roomDigitalTwinManager)
102+
).execute().apply {
103+
when (this) {
104+
null -> call.respond(HttpStatusCode.NotFound)
105+
else -> call.respond(this.toRoomApiDto())
106+
}
107+
}
81108
}
82109
delete("$apiPath/rooms/{roomId}") {
83-
call.respondText("[${Thread.currentThread().name}] Room DELETE!")
110+
call.respond(
111+
Service.DeleteRoom(
112+
RoomID(call.parameters["roomId"].orEmpty()),
113+
RoomController(provider.roomDigitalTwinManager)
114+
).execute().let { result ->
115+
if (result) HttpStatusCode.NoContent else HttpStatusCode.NotFound
116+
}
117+
)
84118
}
85119
}
86120
}
@@ -110,6 +144,7 @@ class APIController(private val provider: ManagerProvider) {
110144
}
111145

112146
companion object {
147+
private const val port = 3000
113148
private const val apiVersion = "v1"
114149
private const val apiPath = "/api/$apiVersion"
115150
}

0 commit comments

Comments
 (0)