Allowing continue

This commit is contained in:
Brage Skjønborg 2026-01-31 12:52:35 +01:00
parent 8a042a3fd3
commit c39366960f
4 changed files with 56 additions and 6 deletions

View File

@ -1,11 +1,13 @@
package no.iktdev.mediaprocessing.coordinator.controller package no.iktdev.mediaprocessing.coordinator.controller
import no.iktdev.mediaprocessing.coordinator.dto.translate.ApiResponse
import no.iktdev.mediaprocessing.coordinator.services.SequenceAggregatorService import no.iktdev.mediaprocessing.coordinator.services.SequenceAggregatorService
import no.iktdev.mediaprocessing.shared.common.dto.SequenceSummary import no.iktdev.mediaprocessing.shared.common.dto.SequenceSummary
import org.springframework.web.bind.annotation.GetMapping import no.iktdev.mediaprocessing.shared.database.stores.EventStore
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.RequestParam import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.*
import java.util.*
@RestController @RestController
@RequestMapping("/sequences") @RequestMapping("/sequences")
@ -24,4 +26,32 @@ class SequenceController(
): List<SequenceSummary> { ): List<SequenceSummary> {
return aggregator.getRecentSequences(limit) return aggregator.getRecentSequences(limit)
} }
@PostMapping("/{referenceId}/continue")
fun continueSequence(
@PathVariable referenceId: UUID
): ResponseEntity<ApiResponse> {
return try {
val id = EventStore.createManuallyContinueEvent(referenceId)
ResponseEntity.ok(
ApiResponse(
ok = true,
message = "Sequence continued, event $id created!"
)
)
} catch (ex: Exception) {
ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(
ApiResponse(
ok = false,
message = ex.message ?: "Unknown error"
)
)
}
}
} }

View File

@ -0,0 +1,6 @@
package no.iktdev.mediaprocessing.coordinator.dto.translate
data class ApiResponse(
val ok: Boolean,
val message: String
)

View File

@ -52,7 +52,7 @@ class EventService {
} }
fun createForcedTaskResetAuditEvent(referenceId: UUID, taskId: UUID): UUID? { fun createForcedTaskResetAuditEvent(referenceId: UUID, taskId: UUID): UUID? {
return EventStore.createTaskResetAudioEvent(referenceId, taskId) return EventStore.createTaskResetAuditEvent(referenceId, taskId)
} }
fun getEffectiveHistory(referenceId: UUID): List<PersistedEvent> { fun getEffectiveHistory(referenceId: UUID): List<PersistedEvent> {

View File

@ -12,6 +12,7 @@ import no.iktdev.mediaprocessing.shared.common.dto.Paginated
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.CompletedEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.CompletedEvent
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.DeletedTaskResultEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.DeletedTaskResultEvent
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ForcedTaskResetAuditEvent import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ForcedTaskResetAuditEvent
import no.iktdev.mediaprocessing.shared.common.event_task_contract.events.ManualAllowCompletionEvent
import no.iktdev.mediaprocessing.shared.common.getName import no.iktdev.mediaprocessing.shared.common.getName
import no.iktdev.mediaprocessing.shared.database.likeAny import no.iktdev.mediaprocessing.shared.database.likeAny
import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery import no.iktdev.mediaprocessing.shared.database.queries.pagedQuery
@ -126,13 +127,26 @@ object EventStore: EventStore {
return null return null
} }
fun createTaskResetAudioEvent(referenceId: UUID, taskId: UUID): UUID { fun createTaskResetAuditEvent(referenceId: UUID, taskId: UUID): UUID {
val auditEvent = ForcedTaskResetAuditEvent(taskId) val auditEvent = ForcedTaskResetAuditEvent(taskId)
.usingReferenceId(referenceId) .usingReferenceId(referenceId)
persist(auditEvent) persist(auditEvent)
return auditEvent.eventId return auditEvent.eventId
} }
fun createManuallyContinueEvent(referenceId: UUID): UUID? {
return try {
val continueEvent = ManualAllowCompletionEvent().apply {
usingReferenceId(referenceId)
}
persist(continueEvent)
return continueEvent.eventId
} catch (e: Exception) {
e.printStackTrace()
null
}
}
fun eventsLast(minutes: Long = 1): Long { fun eventsLast(minutes: Long = 1): Long {
val cutoff = Instant.now().minus(minutes, ChronoUnit.MINUTES) val cutoff = Instant.now().minus(minutes, ChronoUnit.MINUTES)
return withTransaction { return withTransaction {