@@ -11,8 +11,12 @@ package infrastructure.api
1111import application.controller.RoomController
1212import application.presenter.api.deserializer.ApiDeserializer.toRoom
1313import application.presenter.api.model.RoomApiDto
14+ import application.presenter.api.serializer.ApiSerializer.toRoomApiDto
1415import application.service.Service
16+ import entity.zone.RoomID
1517import infrastructure.provider.ManagerProvider
18+ import io.ktor.http.HttpHeaders
19+ import io.ktor.http.HttpStatusCode
1620import io.ktor.serialization.kotlinx.json.json
1721import io.ktor.server.application.Application
1822import io.ktor.server.application.call
@@ -21,6 +25,8 @@ import io.ktor.server.engine.embeddedServer
2125import io.ktor.server.netty.Netty
2226import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
2327import io.ktor.server.request.receive
28+ import io.ktor.server.response.header
29+ import io.ktor.server.response.respond
2430import io.ktor.server.response.respondText
2531import io.ktor.server.routing.delete
2632import 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