
dev.forcetower.breaker.operation.MessagesOperation.kt Maven / Gradle / Ivy
package dev.forcetower.breaker.operation
import dev.forcetower.breaker.model.Message
import dev.forcetower.breaker.model.MessagesDataPage
import dev.forcetower.breaker.model.Semester
import dev.forcetower.breaker.result.Outcome
import dev.forcetower.breaker.service.TechNoAPI
import retrofit2.HttpException
class MessagesOperation(
private val profileId: Long,
private val until: String = ""
) : Operation {
override suspend fun execute(service: TechNoAPI): Outcome {
return try {
val messages = service.messages(profileId, until)
val mapped = messages.items.map {
Message(it.id, it.message, it.sender.name, it.timestamp, it.profileType)
}
val regex = Regex("ate=(\\d+-\\d+)")
val next = messages.nextPage?.link?.href?.let { ref ->
val groups = regex.find(ref)?.groups
val size = groups?.size ?: 0
if (size > 1) {
groups?.get(1)?.value
} else {
null
}
}
Outcome.success(MessagesDataPage(mapped, next))
} catch (error: HttpException) {
Outcome.error(error, error.code())
} catch (error: Throwable) {
Outcome.error(error, 500)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy