Skip to content

Commit 74b5595

Browse files
committed
This should fix the json encoding issues
1 parent 1212dba commit 74b5595

4 files changed

Lines changed: 95 additions & 14 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.dreamexposure.discal.core.`object`.new.model.discal.v2
2+
3+
data class EventListV2Model(
4+
val events: List<EventV2Model>,
5+
val message: String,
6+
)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.dreamexposure.discal.server.endpoints.v2.event.list
2+
3+
4+
import com.fasterxml.jackson.databind.ObjectMapper
5+
import discord4j.common.util.Snowflake
6+
import kotlinx.coroutines.reactor.mono
7+
import kotlinx.serialization.encodeToString
8+
import org.dreamexposure.discal.core.annotations.SecurityRequirement
9+
import org.dreamexposure.discal.core.business.CalendarService
10+
import org.dreamexposure.discal.core.logger.LOGGER
11+
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventListV2Model
12+
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventV2Model
13+
import org.dreamexposure.discal.core.utils.GlobalVal
14+
import org.dreamexposure.discal.server.utils.Authentication
15+
import org.dreamexposure.discal.server.utils.responseMessage
16+
import org.json.JSONException
17+
import org.json.JSONObject
18+
import org.springframework.http.server.reactive.ServerHttpResponse
19+
import org.springframework.web.bind.annotation.PostMapping
20+
import org.springframework.web.bind.annotation.RequestBody
21+
import org.springframework.web.bind.annotation.RequestMapping
22+
import org.springframework.web.bind.annotation.RestController
23+
import org.springframework.web.server.ServerWebExchange
24+
import reactor.core.publisher.Mono
25+
import java.time.Instant
26+
27+
@RestController
28+
@RequestMapping("/v2/events/list")
29+
class ListEventMonthEndpoint(
30+
private val authentication: Authentication,
31+
private val calendarService: CalendarService,
32+
private val objectMapper: ObjectMapper
33+
) {
34+
@PostMapping("/date", produces = ["application/json"])
35+
@SecurityRequirement(disableSecurity = true, scopes = [])
36+
fun listByMonth(swe: ServerWebExchange, response: ServerHttpResponse, @RequestBody rBody: String): Mono<String> {
37+
return authentication.authenticate(swe).flatMap { authState ->
38+
if (!authState.success) {
39+
response.rawStatusCode = authState.status
40+
return@flatMap Mono.just(GlobalVal.JSON_FORMAT.encodeToString(authState))
41+
}
42+
43+
//Handle request
44+
val body = JSONObject(rBody)
45+
val guildId = Snowflake.of(body.getString("guild_id"))
46+
val calendarNumber = body.getInt("calendar_number")
47+
val start = Instant.ofEpochMilli(body.getLong("epoch_start"))
48+
val end = Instant.ofEpochMilli(body.getLong("epoch_end"))
49+
50+
mono { calendarService.getCalendar(guildId, calendarNumber) }.flatMap { calendar ->
51+
mono { calendarService.getEventsInTimeRange(guildId, calendarNumber, start, end) }.map { events ->
52+
events.map { EventV2Model(it, calendar) }
53+
}
54+
}
55+
.map { EventListV2Model(it, "Success") }
56+
.map { objectMapper.writeValueAsString(it) }
57+
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_SUCCESS }
58+
.switchIfEmpty(responseMessage("Calendar not found")
59+
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_NOT_FOUND }
60+
)
61+
}.onErrorResume(JSONException::class.java) {
62+
LOGGER.trace("[API-v2] JSON error. Bad request?", it)
63+
64+
response.rawStatusCode = GlobalVal.STATUS_BAD_REQUEST
65+
return@onErrorResume responseMessage("Bad Request")
66+
}.onErrorResume {
67+
LOGGER.error(GlobalVal.DEFAULT, "[API-v2] list events by date error", it)
68+
69+
response.rawStatusCode = GlobalVal.STATUS_INTERNAL_ERROR
70+
return@onErrorResume responseMessage("Internal Server Error")
71+
}
72+
}
73+
}

server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/calendar/ListEventMonthEndpoint.kt renamed to server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/event/list/ListEventMonthEndpoint.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
package org.dreamexposure.discal.server.endpoints.v2.calendar
1+
package org.dreamexposure.discal.server.endpoints.v2.event.list
22

33
import com.fasterxml.jackson.databind.ObjectMapper
44
import discord4j.common.util.Snowflake
55
import kotlinx.coroutines.reactor.mono
6-
import org.dreamexposure.discal.core.logger.LOGGER
6+
import kotlinx.serialization.encodeToString
77
import org.dreamexposure.discal.core.annotations.SecurityRequirement
88
import org.dreamexposure.discal.core.business.CalendarService
9+
import org.dreamexposure.discal.core.logger.LOGGER
10+
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventListV2Model
11+
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventV2Model
912
import org.dreamexposure.discal.core.utils.GlobalVal
1013
import org.dreamexposure.discal.server.utils.Authentication
1114
import org.dreamexposure.discal.server.utils.responseMessage
12-
import org.json.JSONArray
1315
import org.json.JSONException
1416
import org.json.JSONObject
1517
import org.springframework.http.server.reactive.ServerHttpResponse
@@ -20,9 +22,6 @@ import org.springframework.web.bind.annotation.RestController
2022
import org.springframework.web.server.ServerWebExchange
2123
import reactor.core.publisher.Mono
2224
import java.time.Instant
23-
import kotlinx.serialization.encodeToString
24-
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventV2Model
25-
2625

2726
@RestController
2827
@RequestMapping("/v2/events/list")
@@ -50,12 +49,14 @@ class ListEventMonthEndpoint(
5049

5150
mono { calendarService.getCalendar(guildId, calendarNumber) }.flatMap { calendar ->
5251
mono { calendarService.getEventsInMonth(guildId, calendarNumber, start, daysInMonth) }.map { events ->
53-
events.map { objectMapper.writeValueAsString(EventV2Model(it, calendar)) }
52+
events.map { EventV2Model(it, calendar) }
5453
}
55-
}.map(::JSONArray)
56-
.map { JSONObject().put("events", it).put("message", "Success").toString() }
54+
}
55+
.map { EventListV2Model(it, "Success") }
56+
.map { objectMapper.writeValueAsString(it) }
5757
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_SUCCESS }
58-
.switchIfEmpty(responseMessage("Calendar not found")
58+
.switchIfEmpty(
59+
responseMessage("Calendar not found")
5960
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_NOT_FOUND }
6061
)
6162
}.onErrorResume(JSONException::class.java) {

server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/event/list/ListEventRangeEndpoint.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import kotlinx.serialization.encodeToString
77
import org.dreamexposure.discal.core.annotations.SecurityRequirement
88
import org.dreamexposure.discal.core.business.CalendarService
99
import org.dreamexposure.discal.core.logger.LOGGER
10+
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventListV2Model
1011
import org.dreamexposure.discal.core.`object`.new.model.discal.v2.EventV2Model
1112
import org.dreamexposure.discal.core.utils.GlobalVal
1213
import org.dreamexposure.discal.server.utils.Authentication
1314
import org.dreamexposure.discal.server.utils.responseMessage
14-
import org.json.JSONArray
1515
import org.json.JSONException
1616
import org.json.JSONObject
1717
import org.springframework.http.server.reactive.ServerHttpResponse
@@ -48,10 +48,11 @@ class ListEventRangeEndpoint(
4848

4949
mono { calendarService.getCalendar(guildId, calendarNumber) }.flatMap { calendar ->
5050
mono { calendarService.getEventsInTimeRange(guildId, calendarNumber, start, end) }.map { events ->
51-
events.map { objectMapper.writeValueAsString(EventV2Model(it, calendar)) }
51+
events.map { EventV2Model(it, calendar) }
5252
}
53-
}.map(::JSONArray)
54-
.map { JSONObject().put("events", it).put("message", "Success").toString() }
53+
}
54+
.map { EventListV2Model(it, "Success") }
55+
.map { objectMapper.writeValueAsString(it) }
5556
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_SUCCESS }
5657
.switchIfEmpty(responseMessage("Calendar not found")
5758
.doOnNext { response.rawStatusCode = GlobalVal.STATUS_NOT_FOUND }

0 commit comments

Comments
 (0)