From 89a577e91abbfcd2865e770088661eac4aeb4dd7 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 8 Jul 2024 05:16:59 +0200 Subject: [PATCH] fix: Finish DB Model to API model transformation inside transaction --- .../repository/AnnouncementRepository.kt | 28 +++++++++++++++---- .../services/AnnouncementService.kt | 27 ++++-------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/main/kotlin/app/revanced/api/configuration/repository/AnnouncementRepository.kt b/src/main/kotlin/app/revanced/api/configuration/repository/AnnouncementRepository.kt index c095669..992b06f 100644 --- a/src/main/kotlin/app/revanced/api/configuration/repository/AnnouncementRepository.kt +++ b/src/main/kotlin/app/revanced/api/configuration/repository/AnnouncementRepository.kt @@ -1,6 +1,8 @@ package app.revanced.api.configuration.repository import app.revanced.api.configuration.schema.APIAnnouncement +import app.revanced.api.configuration.schema.APIResponseAnnouncement +import app.revanced.api.configuration.schema.APIResponseAnnouncementId import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.awaitAll import kotlinx.coroutines.runBlocking @@ -41,11 +43,11 @@ internal class AnnouncementRepository { } suspend fun all() = transaction { - Announcement.all() + Announcement.all().map { it.toApi() } } suspend fun all(channel: String) = transaction { - Announcement.find { Announcements.channel eq channel } + Announcement.find { Announcements.channel eq channel }.map { it.toApi() } } suspend fun delete(id: Int) = transaction { @@ -66,13 +68,13 @@ internal class AnnouncementRepository { } } - fun latest() = latestAnnouncement + fun latest() = latestAnnouncement?.toApi() - fun latest(channel: String) = latestAnnouncementByChannel[channel] + fun latest(channel: String) = latestAnnouncementByChannel[channel]?.toApi() - fun latestId() = latest()?.id?.value + fun latestId() = latest()?.id?.toApi() - fun latestId(channel: String) = latest(channel)?.id?.value + fun latestId(channel: String) = latest(channel)?.id?.toApi() suspend fun archive( id: Int, @@ -172,4 +174,18 @@ internal class AnnouncementRepository { var url by Attachments.url var announcement by Announcement referencedOn Attachments.announcement } + + private fun Announcement.toApi() = APIResponseAnnouncement( + id.value, + author, + title, + content, + attachments.map { it.url }, + channel, + createdAt, + archivedAt, + level, + ) + + private fun Int.toApi() = APIResponseAnnouncementId(this) } diff --git a/src/main/kotlin/app/revanced/api/configuration/services/AnnouncementService.kt b/src/main/kotlin/app/revanced/api/configuration/services/AnnouncementService.kt index ae4cf7e..909cff8 100644 --- a/src/main/kotlin/app/revanced/api/configuration/services/AnnouncementService.kt +++ b/src/main/kotlin/app/revanced/api/configuration/services/AnnouncementService.kt @@ -2,21 +2,20 @@ package app.revanced.api.configuration.services import app.revanced.api.configuration.repository.AnnouncementRepository import app.revanced.api.configuration.schema.APIAnnouncement -import app.revanced.api.configuration.schema.APIResponseAnnouncement import app.revanced.api.configuration.schema.APIResponseAnnouncementId import kotlinx.datetime.LocalDateTime internal class AnnouncementService( private val announcementRepository: AnnouncementRepository, ) { - fun latestId(channel: String): APIResponseAnnouncementId? = announcementRepository.latestId(channel)?.toApi() - fun latestId(): APIResponseAnnouncementId? = announcementRepository.latestId()?.toApi() + fun latestId(channel: String): APIResponseAnnouncementId? = announcementRepository.latestId(channel) + fun latestId(): APIResponseAnnouncementId? = announcementRepository.latestId() - fun latest(channel: String) = announcementRepository.latest(channel)?.toApi() - fun latest() = announcementRepository.latest()?.toApi() + fun latest(channel: String) = announcementRepository.latest(channel) + fun latest() = announcementRepository.latest() - suspend fun all(channel: String) = announcementRepository.all(channel).map { it.toApi() } - suspend fun all() = announcementRepository.all().map { it.toApi() } + suspend fun all(channel: String) = announcementRepository.all(channel) + suspend fun all() = announcementRepository.all() suspend fun new(new: APIAnnouncement) { announcementRepository.new(new) @@ -33,18 +32,4 @@ internal class AnnouncementService( suspend fun delete(id: Int) { announcementRepository.delete(id) } - - private fun AnnouncementRepository.Announcement.toApi() = APIResponseAnnouncement( - id.value, - author, - title, - content, - attachments.map { it.url }, - channel, - createdAt, - archivedAt, - level, - ) - - private fun Int.toApi() = APIResponseAnnouncementId(this) }