Skip to content

Commit 24793f4

Browse files
refactor: split api in route extension function
1 parent f21337f commit 24793f4

File tree

1 file changed

+62
-49
lines changed

1 file changed

+62
-49
lines changed

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

Lines changed: 62 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import io.ktor.server.application.call
2525
import io.ktor.server.request.receive
2626
import io.ktor.server.response.header
2727
import io.ktor.server.response.respond
28+
import io.ktor.server.routing.Route
2829
import io.ktor.server.routing.delete
2930
import io.ktor.server.routing.get
3031
import io.ktor.server.routing.patch
@@ -40,60 +41,72 @@ import java.time.Instant
4041
*/
4142
fun 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

Comments
 (0)