@@ -25,6 +25,7 @@ import io.ktor.server.application.call
2525import io.ktor.server.request.receive
2626import io.ktor.server.response.header
2727import io.ktor.server.response.respond
28+ import io.ktor.server.routing.Route
2829import io.ktor.server.routing.delete
2930import io.ktor.server.routing.get
3031import io.ktor.server.routing.patch
@@ -40,60 +41,72 @@ import java.time.Instant
4041 */
4142fun Application.medicalTechnologyAPI (apiPath : String , port : Int , provider : ManagerProvider ) {
4243 routing {
43- post(" $apiPath /medical-technologies" ) {
44- val medicalTechnology = call.receive<MedicalTechnologyEntry >().toMedicalTechnology()
45- MedicalTechnologyService .CreateMedicalTechnology (
46- medicalTechnology,
44+ createMedicalTechnologyRoute(apiPath, port, provider)
45+ getMedicalTechnologyRoute(apiPath, provider)
46+ deleteMedicalTechnologyRoute(apiPath, provider)
47+ mapMedicalTechnologyRoute(apiPath, provider)
48+ }
49+ }
50+
51+ private fun Route.createMedicalTechnologyRoute (apiPath : String , port : Int , provider : ManagerProvider ) =
52+ post(" $apiPath /medical-technologies" ) {
53+ val medicalTechnology = call.receive<MedicalTechnologyEntry >().toMedicalTechnology()
54+ MedicalTechnologyService .CreateMedicalTechnology (
55+ medicalTechnology,
56+ MedicalTechnologyController (
57+ provider.medicalTechnologyDigitalTwinManager,
58+ provider.medicalTechnologyDatabaseManager
59+ )
60+ ).execute()?.apply {
61+ call.response.header(
62+ HttpHeaders .Location ,
63+ " http://localhost:$port$apiPath /medical-technologies/${medicalTechnology.id.value} "
64+ )
65+ call.respond(HttpStatusCode .Created )
66+ } ? : call.respond(HttpStatusCode .Conflict )
67+ }
68+
69+ private fun Route.getMedicalTechnologyRoute (apiPath : String , provider : ManagerProvider ) =
70+ get(" $apiPath /medical-technologies/{technologyId}" ) {
71+ MedicalTechnologyService .GetMedicalTechnology (
72+ MedicalTechnologyID (call.parameters[" technologyId" ].orEmpty()),
73+ MedicalTechnologyController (
74+ provider.medicalTechnologyDigitalTwinManager,
75+ provider.medicalTechnologyDatabaseManager
76+ ),
77+ call.request.queryParameters[" dateTime" ]?.let { rawDateTime -> Instant .parse(rawDateTime) }
78+ ).execute()?.apply { call.respond(this .toMedicalTechnologyApiDto()) }
79+ ? : call.respond(HttpStatusCode .NotFound )
80+ }
81+
82+ private fun Route.deleteMedicalTechnologyRoute (apiPath : String , provider : ManagerProvider ) =
83+ delete(" $apiPath /medical-technologies/{technologyId}" ) {
84+ call.respond(
85+ MedicalTechnologyService .DeleteMedicalTechnology (
86+ MedicalTechnologyID (call.parameters[" technologyId" ].orEmpty()),
4787 MedicalTechnologyController (
4888 provider.medicalTechnologyDigitalTwinManager,
4989 provider.medicalTechnologyDatabaseManager
50- )
51- ).execute()?. apply {
52- call.response.header(
53- HttpHeaders . Location ,
54- " http://localhost: $port$apiPath /medical-technologies/ ${medicalTechnology.id.value} "
55- )
56- call.respond( HttpStatusCode . Created )
57- } ? : call.respond( HttpStatusCode . Conflict )
58- }
59- get( " $apiPath /medical-technologies/{technologyId} " ) {
60- MedicalTechnologyService .GetMedicalTechnology (
90+ ),
91+ ).execute(). let { result ->
92+ if (result) HttpStatusCode . NoContent else HttpStatusCode . NotFound
93+ }
94+ )
95+ }
96+
97+ private fun Route. mapMedicalTechnologyRoute ( apiPath : String , provider : ManagerProvider ) =
98+ patch( " $apiPath /medical-technologies/{technologyId} " ) {
99+ call.respond(
100+ MedicalTechnologyService .MapMedicalTechnologyToRoom (
61101 MedicalTechnologyID (call.parameters[" technologyId" ].orEmpty()),
102+ call.receive<MedicalTechnologyPatch >().roomId?.let { roomId -> RoomID (roomId.trim()) },
103+ RoomController (provider.roomDigitalTwinManager, provider.roomDatabaseManager),
62104 MedicalTechnologyController (
63105 provider.medicalTechnologyDigitalTwinManager,
64106 provider.medicalTechnologyDatabaseManager
65- ),
66- call.request.queryParameters[" dateTime" ]?.let { rawDateTime -> Instant .parse(rawDateTime) }
67- ).execute()?.apply { call.respond(this .toMedicalTechnologyApiDto()) }
68- ? : call.respond(HttpStatusCode .NotFound )
69- }
70- delete(" $apiPath /medical-technologies/{technologyId}" ) {
71- call.respond(
72- MedicalTechnologyService .DeleteMedicalTechnology (
73- MedicalTechnologyID (call.parameters[" technologyId" ].orEmpty()),
74- MedicalTechnologyController (
75- provider.medicalTechnologyDigitalTwinManager,
76- provider.medicalTechnologyDatabaseManager
77- ),
78- ).execute().let { result ->
79- if (result) HttpStatusCode .NoContent else HttpStatusCode .NotFound
80- }
81- )
82- }
83- patch(" $apiPath /medical-technologies/{technologyId}" ) {
84- call.respond(
85- MedicalTechnologyService .MapMedicalTechnologyToRoom (
86- MedicalTechnologyID (call.parameters[" technologyId" ].orEmpty()),
87- call.receive<MedicalTechnologyPatch >().roomId?.let { roomId -> RoomID (roomId.trim()) },
88- RoomController (provider.roomDigitalTwinManager, provider.roomDatabaseManager),
89- MedicalTechnologyController (
90- provider.medicalTechnologyDigitalTwinManager,
91- provider.medicalTechnologyDatabaseManager
92- )
93- ).execute().let { result ->
94- if (result) HttpStatusCode .NoContent else HttpStatusCode .NotFound
95- }
96- )
97- }
107+ )
108+ ).execute().let { result ->
109+ if (result) HttpStatusCode .NoContent else HttpStatusCode .NotFound
110+ }
111+ )
98112 }
99- }
0 commit comments