feat: Вместо всех событий теперь можно получить события за определённый промежуток времени (/events)
This commit is contained in:
@@ -5,7 +5,13 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "com.nano"
|
group = "com.nano"
|
||||||
version = "0.0.2"
|
version = "0.0.3"
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
mainClass = "com.nano.ApplicationKt"
|
mainClass = "com.nano.ApplicationKt"
|
||||||
@@ -35,3 +41,20 @@ dependencies {
|
|||||||
testImplementation("io.ktor:ktor-server-test-host")
|
testImplementation("io.ktor:ktor-server-test-host")
|
||||||
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.1.10")
|
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.1.10")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ktor {
|
||||||
|
fatJar {
|
||||||
|
archiveFileName.set("webdav-service-fat.jar")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<Jar> {
|
||||||
|
manifest {
|
||||||
|
attributes(
|
||||||
|
mapOf(
|
||||||
|
"Main-Class" to application.mainClass.get(),
|
||||||
|
"Implementation-Version" to version
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
14
openapi.yaml
14
openapi.yaml
@@ -9,7 +9,7 @@ servers:
|
|||||||
paths:
|
paths:
|
||||||
/calendar/{calendarId}/events:
|
/calendar/{calendarId}/events:
|
||||||
get:
|
get:
|
||||||
description: "Получение всех событий"
|
description: "Получение всех событий с возможностью фильтрации по дате"
|
||||||
parameters:
|
parameters:
|
||||||
- name: "Authorization"
|
- name: "Authorization"
|
||||||
in: "header"
|
in: "header"
|
||||||
@@ -21,6 +21,18 @@ paths:
|
|||||||
required: true
|
required: true
|
||||||
schema:
|
schema:
|
||||||
type: "string"
|
type: "string"
|
||||||
|
- name: "startDate"
|
||||||
|
in: "query"
|
||||||
|
required: false
|
||||||
|
description: "Начальная дата для фильтрации событий (ISO формат: YYYY-MM-DDTHH:mm:ss)"
|
||||||
|
schema:
|
||||||
|
type: "string"
|
||||||
|
- name: "endDate"
|
||||||
|
in: "query"
|
||||||
|
required: false
|
||||||
|
description: "Конечная дата для фильтрации событий (ISO формат: YYYY-MM-DDTHH:mm:ss)"
|
||||||
|
schema:
|
||||||
|
type: "string"
|
||||||
responses:
|
responses:
|
||||||
"400":
|
"400":
|
||||||
description: "Bad Request"
|
description: "Bad Request"
|
||||||
|
|||||||
@@ -67,30 +67,56 @@ fun Application.configureRouting() {
|
|||||||
ApiResponse<String>(success = false, message = "Не найден параметр calendarId")
|
ApiResponse<String>(success = false, message = "Не найден параметр calendarId")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Получаем параметры фильтрации по датам (если они указаны)
|
||||||
|
val startDateParam = call.request.queryParameters["startDate"]
|
||||||
|
val endDateParam = call.request.queryParameters["endDate"]
|
||||||
|
|
||||||
|
var startDate: LocalDateTime? = null
|
||||||
|
var endDate: LocalDateTime? = null
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (startDateParam != null) {
|
||||||
|
startDate = LocalDateTime.parse(startDateParam)
|
||||||
|
}
|
||||||
|
if (endDateParam != null) {
|
||||||
|
endDate = LocalDateTime.parse(endDateParam)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
return@get call.respond(
|
||||||
|
HttpStatusCode.BadRequest,
|
||||||
|
ApiResponse<String>(success = false, message = "Некорректный формат даты. Используйте формат ISO: YYYY-MM-DDTHH:mm:ss")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val dav = Dav(username, password, calendarId)
|
val dav = Dav(username, password, calendarId)
|
||||||
val eventManager = dav.getEventManager()
|
val eventManager = dav.getEventManager()
|
||||||
|
|
||||||
eventManager.getAllEvents().fold(
|
// Получаем события с учетом фильтрации по датам
|
||||||
onSuccess = { events ->
|
val events = when {
|
||||||
val eventResponses = events.map { event ->
|
startDate != null && endDate != null -> {
|
||||||
EventResponse(
|
eventManager.getEventsByDateRange(startDate, endDate)
|
||||||
uid = event.uid,
|
}
|
||||||
summary = event.summary,
|
else -> {
|
||||||
description = event.description,
|
eventManager.getAllEvents().getOrElse {
|
||||||
startDateTime = event.startDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
|
return@get call.respond(
|
||||||
endDateTime = event.endDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
|
HttpStatusCode.InternalServerError,
|
||||||
location = event.location
|
ApiResponse<String>(success = false, message = it.message)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
call.respond(ApiResponse(success = true, data = eventResponses))
|
|
||||||
},
|
|
||||||
onFailure = { error ->
|
|
||||||
call.respond(
|
|
||||||
HttpStatusCode.InternalServerError,
|
|
||||||
ApiResponse<String>(success = false, message = error.message)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
|
|
||||||
|
val eventResponses = events.map { event ->
|
||||||
|
EventResponse(
|
||||||
|
uid = event.uid,
|
||||||
|
summary = event.summary,
|
||||||
|
description = event.description,
|
||||||
|
startDateTime = event.startDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
|
||||||
|
endDateTime = event.endDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME),
|
||||||
|
location = event.location
|
||||||
|
)
|
||||||
|
}
|
||||||
|
call.respond(ApiResponse(success = true, data = eventResponses))
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
call.respond(
|
call.respond(
|
||||||
HttpStatusCode.InternalServerError,
|
HttpStatusCode.InternalServerError,
|
||||||
|
|||||||
Reference in New Issue
Block a user