From ef7c785146e9b7461c3c2f2487e09f32070be532 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:04:14 +0000 Subject: [PATCH 1/9] test(cohort): pin target binding incident behavior Add red tests for terminal missing cohort targets, no-create materialization, and filling an unbound existing mapping. --- .../CohortMembershipSyncServiceTest.kt | 9 +++--- .../application/CohortTargetingServiceTest.kt | 31 +++++++++++++++---- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncServiceTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncServiceTest.kt index 7df0d5de6..96b94c472 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncServiceTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncServiceTest.kt @@ -60,17 +60,18 @@ class CohortMembershipSyncServiceTest { } @Test - fun `ADD without a cohort target enqueues materialize-target, throws retryable and never creates a target`() { + fun `ADD without a cohort target fails terminally and does not enqueue materialization`() { givenCohort(id = 10L, system = "BREVO", label = "Members") every { externalIds.find("USER", 1L, "BREVO") } returns mapping("USER", 1L, "BREVO", "777") every { targetIds.find(any()) } returns null assertThatThrownBy { service.sync(userId = 1L, cohortId = 10L, intent = SyncCohortMembershipIntent.ADD) - }.isInstanceOf(CohortMembershipNotReadyException::class.java) + }.isInstanceOf(NonRetryableJobException::class.java) + .hasMessageContaining("cohort 10 has no BREVO target") - verify { - jobs.enqueue(CohortJobs.MaterializeCohortTarget, CohortJobs.MaterializeCohortTargetPayload(10L)) + verify(exactly = 0) { + jobs.enqueue(CohortJobs.MaterializeCohortTarget, any()) } verify(exactly = 0) { brevoPort.addMember(any(), any()) } verify(exactly = 0) { brevoPort.createCohort(any(), any()) } diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingServiceTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingServiceTest.kt index 944a6f4a6..61121a693 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingServiceTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingServiceTest.kt @@ -7,6 +7,7 @@ import net.blueshell.api.platform.integration.cohort.port.out.CohortPort import net.blueshell.api.platform.integration.cohort.port.out.CohortPortRegistry import net.blueshell.api.shared.enums.TargetSystem import net.blueshell.api.shared.job.CohortJobs +import net.blueshell.api.shared.job.NonRetryableJobException import net.blueshell.api.shared.job.TrackedJobDispatcher import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows @@ -77,7 +78,7 @@ class CohortTargetingServiceTest { } @Test - fun `materialize creates the target with the cohort folder and records it`() { + fun `materialize without an existing target fails terminally and never creates a provider target`() { val cohort = mock { on { id } doReturn 7L on { system } doReturn "BREVO" @@ -87,13 +88,13 @@ class CohortTargetingServiceTest { whenever(cohortRepo.findById(7L)).thenReturn(Optional.of(cohort)) whenever(targetIds.find(cohort)).thenReturn(null) whenever(registry.require(TargetSystem.BREVO)).thenReturn(port) - whenever(port.createCohort("Members", "Committees")).thenReturn("999") - val ref = service.materialize(7L) + assertThrows { + service.materialize(7L) + } - verify(port).createCohort("Members", "Committees") - verify(targetIds).record(cohort, "999") - assert(ref.externalId == "999") + verify(port, never()).createCohort(any(), any()) + verify(targetIds, never()).record(any(), any()) } @Test @@ -109,6 +110,24 @@ class CohortTargetingServiceTest { verify(targetIds, never()).record(any(), any()) } + @Test + fun `linkExisting fills an existing unbound mapping`() { + val subject = mock() + val cohort = mock { + on { id } doReturn 7L + on { externalId } doReturn null + } + whenever(subjectRepo.findById(1L)).thenReturn(Optional.of(subject)) + whenever(cohortRepo.findBySubjectIdAndSystem(1L, "BREVO")).thenReturn(cohort) + + val row = service.linkExisting(1L, TargetSystem.BREVO, "list-123") + + verify(cohortRepo, never()).save(any()) + verify(targetIds).record(cohort, "list-123") + assert(row.cohort == cohort) + assert(row.externalId == "list-123") + } + @Test fun `switch enqueues delete-previous and reconcile when asked`() { val cohort = mock { on { system } doReturn "BREVO"; on { subjectId } doReturn 1L } From e2357571de7bf4808317176cc3831e35fdf88d40 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:05:48 +0000 Subject: [PATCH 2/9] fix(cohort): stop lazy target creation on membership sync Make missing cohort targets terminal, keep stale materialize jobs no-create, and allow existing unbound cohort mappings to be linked. --- .../CohortMembershipSyncService.kt | 15 ++++--- .../application/CohortTargetingService.kt | 41 ++++++++----------- .../shared/job/NonRetryableJobException.kt | 2 +- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncService.kt index 8fb423955..8e14d2404 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortMembershipSyncService.kt @@ -10,7 +10,6 @@ import net.blueshell.api.platform.integration.cohort.port.out.CohortPortRegistry import net.blueshell.api.platform.integration.sync.application.ExternalIdMappingService import net.blueshell.api.platform.integration.sync.application.ExternalIdMappingService.Companion.USER_AGGREGATE import net.blueshell.api.shared.enums.TargetSystem -import net.blueshell.api.shared.job.CohortJobs import net.blueshell.api.shared.job.ContactJobs import net.blueshell.api.shared.job.NonRetryableJobException import net.blueshell.api.shared.job.TrackedJobDispatcher @@ -33,9 +32,8 @@ import java.time.LocalDateTime * - `ADD` with no user external id enqueues `SyncContact` and throws * a retryable exception so the retry picks up after the contact * has materialised externally. - * - `ADD` with no cohort target id enqueues `cohort.materialize-target` - * and throws a retryable exception — it never creates the target - * itself, so two racing ADDs cannot create two remote targets. + * - `ADD` with no cohort target id fails terminally. An operator must + * explicitly create or link a target before retrying the membership push. * - `REMOVE` with no external state on either side is a no-op — * there is nothing to converge to. */ @@ -87,10 +85,7 @@ class CohortMembershipSyncService( } val externalCohortId = targetIds.find(cohort) if (externalCohortId == null) { - jobs.enqueue(CohortJobs.MaterializeCohortTarget, CohortJobs.MaterializeCohortTargetPayload(cohortId)) - throw CohortMembershipNotReadyException( - "cohort $cohortId has no $system target — enqueued materialize-target, will retry", - ) + throw CohortTargetNotLinkedException(cohortId, system) } outsideTransaction.executeWithoutResult { port.addMember(externalUserId, externalCohortId) } @@ -131,3 +126,7 @@ class CohortMembershipSyncService( * the prerequisite job has had a chance to complete. */ class CohortMembershipNotReadyException(message: String) : RuntimeException(message) + +class CohortTargetNotLinkedException(cohortId: Long, system: String) : NonRetryableJobException( + "cohort $cohortId has no $system target — create or link an external target, then retry the membership job", +) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingService.kt index 99328843e..e433fedb2 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortTargetingService.kt @@ -47,8 +47,19 @@ class CohortTargetingService( override fun linkExisting(subjectId: Long, system: TargetSystem, externalId: String): CohortMappingRow = writeTransaction.execute { val subject = requireSubject(subjectId) - requireNoExistingMapping(subjectId, system) - val cohort = cohortRepo.save(newCohort(system, subject.label, folder = null, subjectId = subjectId)) + val existing = cohortRepo.findBySubjectIdAndSystem(subjectId, system.name) + val cohort = if (existing == null) { + cohortRepo.save(newCohort(system, subject.label, folder = null, subjectId = subjectId)) + } else { + val currentExternalId = targetIds.find(existing) + if (currentExternalId != null) { + throw ResponseStatusException( + HttpStatus.CONFLICT, + "Subject $subjectId already has a $system target", + ) + } + existing + } targetIds.record(cohort, externalId) CohortMappingRow(cohort, externalId) }!! @@ -115,28 +126,10 @@ class CohortTargetingService( }!! prep.existingExternalId?.let { return CohortTargetRef(cohortId, it) } - // Pass the folder — the old lazy ADD path created the list with no - // folder while admin creation passed it. - val created = outsideTransaction.execute { registry.require(prep.system).createCohort(prep.label, prep.folder) }!! - - return writeTransaction.execute { - val cohort = cohortRepo.findById(cohortId).orElseThrow { - NonRetryableJobException("Cohort $cohortId not found") - } - targetIds.find(cohort)?.let { return@execute CohortTargetRef(cohortId, it) } - try { - targetIds.record(cohort, created) - } catch (e: Exception) { - // The remote target exists but could not be recorded. Fail - // terminally carrying its id so an operator links it, rather - // than letting retries create a second remote target. - throw NonRetryableJobException( - "Created ${prep.system} target '$created' for cohort $cohortId but could not record it; link it manually", - e, - ) - } - CohortTargetRef(cohortId, created) - }!! + throw NonRetryableJobException( + "Cohort $cohortId has no ${prep.system} target; materialize-target no longer creates targets. " + + "Create or link an external target manually.", + ) } override fun deleteTarget(system: TargetSystem, externalTargetId: String) { diff --git a/services/api/src/main/kotlin/net/blueshell/api/shared/job/NonRetryableJobException.kt b/services/api/src/main/kotlin/net/blueshell/api/shared/job/NonRetryableJobException.kt index 8703140ea..f0ddc9aca 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/shared/job/NonRetryableJobException.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/shared/job/NonRetryableJobException.kt @@ -2,7 +2,7 @@ package net.blueshell.api.shared.job import jakarta.validation.ConstraintViolationException -class NonRetryableJobException( +open class NonRetryableJobException( message: String, cause: Throwable? = null ) : RuntimeException(message, cause) { From 4ab46aff5809bb2fba7f2bf84ab3a5a756cd51a4 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:09:18 +0000 Subject: [PATCH 3/9] test(cohort): reproduce ledger external-id collisions Add red ordering tests for claim-before-stamp ledger transitions and a MariaDB integration test for the reconcile duplicate-key and soft-delete precision cases. --- .../application/CohortLedgerAutoflushIT.kt | 123 ++++++++++++++++++ .../repository/CohortMemberRepository.kt | 10 ++ .../application/ledger/CohortLedgerTest.kt | 75 +++++++++++ 3 files changed, 208 insertions(+) create mode 100644 services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt diff --git a/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt b/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt new file mode 100644 index 000000000..79ef364d6 --- /dev/null +++ b/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt @@ -0,0 +1,123 @@ +package net.blueshell.api.platform.integration.cohort.application + +import net.blueshell.api.platform.integration.cohort.persistence.Cohort +import net.blueshell.api.platform.integration.cohort.persistence.CohortKind +import net.blueshell.api.platform.integration.cohort.persistence.CohortMember +import net.blueshell.api.platform.integration.cohort.persistence.CohortMemberState +import net.blueshell.api.platform.integration.cohort.persistence.CohortSubject +import net.blueshell.api.platform.integration.cohort.persistence.CohortSubjectType +import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortMemberRepository +import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortRepository +import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortSubjectRepository +import net.blueshell.api.platform.integration.cohort.persistence.state +import net.blueshell.api.platform.integration.mock.MockCohortPort +import net.blueshell.api.platform.integration.sync.persistence.ExternalIdMapping +import net.blueshell.api.platform.integration.sync.persistence.repository.ExternalIdMappingRepository +import net.blueshell.api.shared.enums.Role +import net.blueshell.api.shared.enums.TargetSystem +import net.blueshell.api.testsupport.UserTestSupport +import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.assertThatCode +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import java.time.LocalDateTime + +class CohortLedgerAutoflushIT : UserTestSupport() { + + @Autowired + private lateinit var cohorts: CohortRepository + + @Autowired + private lateinit var subjects: CohortSubjectRepository + + @Autowired + private lateinit var members: CohortMemberRepository + + @Autowired + private lateinit var externalIds: ExternalIdMappingRepository + + @Autowired + private lateinit var remediation: CohortRemediationService + + @Autowired + private lateinit var mockCohortPort: MockCohortPort + + @BeforeEach + fun resetCohortPort() { + mockCohortPort.clear() + } + + @Test + fun `confirming desired row with matching stranger does not violate external unique key`() { + val user = createUserWithRole(Role.MEMBER) + val subject = newSubject() + val cohort = newCohort(subject, externalId = "list-99") + members.saveAndFlush(CohortMember(cohort = cohort, userId = user.id!!, subject = subject)) + members.saveAndFlush( + CohortMember( + cohort = cohort, + userId = null, + subject = subject, + externalUserId = "ext-1", + verifiedAt = LocalDateTime.parse("2026-01-01T12:00:00"), + label = "old stranger", + ), + ) + externalIds.saveAndFlush(ExternalIdMapping("USER", user.id!!, TargetSystem.BREVO.name, "ext-1")) + mockCohortPort.seedMember("ext-1", "list-99", "Ada Remote") + + assertThatCode { remediation.verifyCohort(cohort.id!!) }.doesNotThrowAnyException() + + val desired = members.findByCohortIdAndUserId(cohort.id!!, user.id!!)!! + assertThat(desired.externalUserId).isEqualTo("ext-1") + assertThat(desired.label).isEqualTo("Ada Remote") + assertThat(desired.state).isEqualTo(CohortMemberState.VERIFIED) + assertThat(members.findByCohortIdAndExternalUserIdAndUserIdIsNull(cohort.id!!, "ext-1")).isNull() + } + + @Test + fun `rapid same-key delete re-add delete uses distinct soft-delete timestamps`() { + val subject = newSubject() + val cohort = newCohort(subject, externalId = "list-fast") + val first = members.saveAndFlush( + CohortMember( + cohort = cohort, + userId = null, + subject = subject, + externalUserId = "ext-fast", + verifiedAt = LocalDateTime.parse("2026-01-01T12:00:00"), + ), + ) + + assertThatCode { + members.delete(first) + members.flush() + val second = members.saveAndFlush( + CohortMember( + cohort = cohort, + userId = null, + subject = subject, + externalUserId = "ext-fast", + verifiedAt = LocalDateTime.parse("2026-01-01T12:00:01"), + ), + ) + members.delete(second) + members.flush() + }.doesNotThrowAnyException() + } + + private fun newSubject(): CohortSubject = + subjects.saveAndFlush(CohortSubject(type = CohortSubjectType.CUSTOM, label = "Members")) + + private fun newCohort(subject: CohortSubject, externalId: String): Cohort = + cohorts.saveAndFlush( + Cohort( + system = TargetSystem.BREVO.name, + kind = CohortKind.LIST, + label = "Members", + subjectId = subject.id, + externalId = externalId, + ), + ) +} diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/repository/CohortMemberRepository.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/repository/CohortMemberRepository.kt index 962b0a8af..cfe1e9c6d 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/repository/CohortMemberRepository.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/repository/CohortMemberRepository.kt @@ -30,10 +30,20 @@ interface CohortMemberRepository : BaseRepository { externalUserId: String, ): CohortMember? + fun findAllByCohortIdAndExternalUserIdInAndUserIdIsNull( + cohortId: Long, + externalUserIds: Collection, + ): List + // ── All rows (desired + stranger) ───────────────────────────────────────── /** All active rows — use sparingly; prefer desired-only or stranger-only. */ fun findAllByCohortId(cohortId: Long): List + fun findByCohortIdAndExternalUserIdAndUserIdIsNotNull( + cohortId: Long, + externalUserId: String, + ): CohortMember? + fun findAllBySubjectId(subjectId: Long): List } diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt index 68a20b092..1ae6d998c 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt @@ -3,6 +3,7 @@ package net.blueshell.api.platform.integration.cohort.application.ledger import io.mockk.every import io.mockk.mockk import io.mockk.verify +import io.mockk.verifySequence import io.mockk.slot import net.blueshell.api.platform.integration.cohort.persistence.Cohort import net.blueshell.api.platform.integration.cohort.persistence.CohortMember @@ -31,6 +32,7 @@ class CohortLedgerTest { fun `markPushed stamps syncedAt and external id on the desired row`() { val row = member(userId = 1L) every { members.findByCohortIdAndUserId(99L, 1L) } returns row + every { members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) } returns emptyList() val stamped = ledger.markPushed(99L, 1L, "ext-1", now) @@ -41,6 +43,28 @@ class CohortLedgerTest { verify { members.save(row) } } + @Test + fun `markPushed claims a matching stranger before stamping the desired row`() { + val row = member(userId = 1L) + val stranger = member(userId = null).apply { + externalUserId = "ext-1" + verifiedAt = now.minusHours(1) + } + every { members.findByCohortIdAndUserId(99L, 1L) } returns row + every { members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) } returns listOf(stranger) + + val stamped = ledger.markPushed(99L, 1L, "ext-1", now) + + assertThat(stamped).isTrue() + verifySequence { + members.findByCohortIdAndUserId(99L, 1L) + members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) + members.delete(stranger) + members.flush() + members.save(row) + } + } + @Test fun `markPushed reports false when the desired row is gone`() { every { members.findByCohortIdAndUserId(99L, 1L) } returns null @@ -52,6 +76,7 @@ class CohortLedgerTest { @Test fun `markVerified sets verifiedAt and backfills syncedAt when absent`() { val row = member(userId = 1L) + every { members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) } returns emptyList() ledger.markVerified(row, "ext-1", "Ada", now) @@ -65,6 +90,7 @@ class CohortLedgerTest { fun `markVerified keeps an earlier syncedAt`() { val pushedAt = now.minusHours(1) val row = member(userId = 1L).apply { syncedAt = pushedAt } + every { members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) } returns emptyList() ledger.markVerified(row, "ext-1", null, now) @@ -72,6 +98,25 @@ class CohortLedgerTest { assertThat(row.verifiedAt).isEqualTo(now) } + @Test + fun `markVerified claims a matching stranger before stamping the desired row`() { + val row = member(userId = 1L) + val stranger = member(userId = null).apply { + externalUserId = "ext-1" + verifiedAt = now.minusHours(1) + } + every { members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) } returns listOf(stranger) + + ledger.markVerified(row, "ext-1", "Ada", now) + + verifySequence { + members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) + members.delete(stranger) + members.flush() + members.save(row) + } + } + @Test fun `markDrifted clears both stamps`() { val row = member(userId = 1L).apply { @@ -105,9 +150,28 @@ class CohortLedgerTest { verify { members.delete(stranger) } } + @Test + fun `foldStrangerIntoDesired soft deletes and flushes the stranger before saving desired`() { + val stranger = member(userId = null).apply { + externalUserId = "ext-7" + verifiedAt = now + label = "Linked" + } + val desired = member(userId = 7L) + + ledger.foldStrangerIntoDesired(desired, stranger) + + verifySequence { + members.delete(stranger) + members.flush() + members.save(desired) + } + } + @Test fun `upsertStranger inserts a STRANGER row`() { every { members.findByCohortIdAndExternalUserIdAndUserIdIsNull(99L, "ext-9") } returns null + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-9") } returns null val saved = slot() every { members.save(capture(saved)) } answers { firstArg() } @@ -117,6 +181,17 @@ class CohortLedgerTest { assertThat(saved.captured.externalUserId).isEqualTo("ext-9") } + @Test + fun `upsertStranger refuses to insert when a desired row already owns the external id`() { + val desired = member(userId = 9L).apply { externalUserId = "ext-9" } + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNull(99L, "ext-9") } returns null + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-9") } returns desired + + ledger.upsertStranger(cohort, subject, "ext-9", "Desired", now) + + verify(exactly = 0) { members.save(any()) } + } + @Test fun `upsertStranger rejects a blank external id`() { assertThatThrownBy { ledger.upsertStranger(cohort, subject, " ", null, now) } From 4f1ad4dac1ccc50ce8cda7f656801be76e97ebd1 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:12:03 +0000 Subject: [PATCH 4/9] fix(cohort): claim external ids before ledger stamps Collapse matching stranger rows before desired rows receive external ids, use microsecond soft-delete timestamps, and recompute reconciliation mappings inside the write transaction. --- .../application/CohortRemediationService.kt | 53 ++++++++++------- .../cohort/application/ledger/CohortLedger.kt | 58 +++++++++++++++++-- .../cohort/persistence/CohortMember.kt | 2 +- .../CohortRemediationServiceTest.kt | 5 +- 4 files changed, 89 insertions(+), 29 deletions(-) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt index 5c10d4b43..d372053e8 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt @@ -1,6 +1,7 @@ package net.blueshell.api.platform.integration.cohort.application import net.blueshell.api.platform.integration.cohort.application.ledger.CohortLedger +import net.blueshell.api.platform.integration.cohort.application.ledger.CohortLedger.DesiredConfirmation import net.blueshell.api.platform.integration.cohort.persistence.CohortMemberState import net.blueshell.api.platform.integration.cohort.persistence.state import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortMemberRepository @@ -103,14 +104,7 @@ class CohortRemediationService( val system = TargetSystem.valueOf(cohort.system) val externalCohortId = targetIds.require(cohort) - val desiredUserIds = memberRepo.findAllByCohortIdAndUserIdIsNotNull(cohortId) - .mapNotNull { it.userId } - .toSet() - val extIdByUserId = externalIds - .findBatch(USER_AGGREGATE, desiredUserIds, system.name) - .associate { it.aggregateId to it.externalId } - - return ReconcilePlan(cohortId, subjectId, system, externalCohortId, extIdByUserId) + return ReconcilePlan(cohortId, subjectId, system, externalCohortId) } private fun applySnapshot(plan: ReconcilePlan, remote: List) { @@ -123,39 +117,54 @@ class CohortRemediationService( val remoteByExtId = remote.associateBy { it.externalUserId } val now = LocalDateTime.now() val desiredRows = memberRepo.findAllByCohortIdAndUserIdIsNotNull(plan.cohortId) + val externalIdByUserId = loadCurrentExternalIds(desiredRows, plan.system) - val confirmed = confirmPresentDesiredRows(plan, desiredRows, remoteByExtId, now) - demoteVanishedDesiredRows(plan, desiredRows, remoteByExtId.keys) - enqueueFollowUpsForMissing(plan, desiredRows, remoteByExtId.keys) + val confirmed = confirmPresentDesiredRows(plan, desiredRows, externalIdByUserId, remoteByExtId, now) + demoteVanishedDesiredRows(plan, desiredRows, externalIdByUserId, remoteByExtId.keys) + enqueueFollowUpsForMissing(plan, desiredRows, externalIdByUserId, remoteByExtId.keys) reconcileStrangers(cohort, subject, remoteByExtId, confirmed, now) } + private fun loadCurrentExternalIds( + desiredRows: List, + system: TargetSystem, + ): Map { + val desiredUserIds = desiredRows.mapNotNull { it.userId }.toSet() + return externalIds + .findBatch(USER_AGGREGATE, desiredUserIds, system.name) + .filter { !it.externalId.isNullOrBlank() } + .groupBy { it.externalId } + .filterValues { it.size == 1 } + .values + .flatten() + .associate { it.aggregateId to it.externalId!! } + } + /** Desired rows present in the snapshot: confirm and collapse any matching stranger. */ private fun confirmPresentDesiredRows( plan: ReconcilePlan, desiredRows: List, + externalIdByUserId: Map, remoteByExtId: Map, now: LocalDateTime, ): Set { - val confirmed = mutableSetOf() - desiredRows.forEach { row -> - val extId = plan.externalIdByUserId[row.userId] ?: return@forEach - val remoteMember = remoteByExtId[extId] ?: return@forEach - ledger.markVerified(row, extId, remoteMember.label, now) - ledger.removeStranger(plan.cohortId, extId) - confirmed += extId + val confirmations = desiredRows.mapNotNull { row -> + val extId = externalIdByUserId[row.userId] ?: return@mapNotNull null + val remoteMember = remoteByExtId[extId] ?: return@mapNotNull null + DesiredConfirmation(row, extId, remoteMember.label) } - return confirmed + return ledger.markVerified(confirmations, now) } /** Desired rows that claimed sync/verify but are now absent: demote so they re-bucket as missing. */ private fun demoteVanishedDesiredRows( plan: ReconcilePlan, desiredRows: List, + externalIdByUserId: Map, remoteExtIds: Set, ) { desiredRows.forEach { row -> - val extId = plan.externalIdByUserId[row.userId] + val extId = externalIdByUserId[row.userId] val absent = extId == null || extId !in remoteExtIds if (absent && (row.state == CohortMemberState.SYNCED || row.state == CohortMemberState.VERIFIED)) { ledger.markDrifted(row) @@ -167,10 +176,11 @@ class CohortRemediationService( private fun enqueueFollowUpsForMissing( plan: ReconcilePlan, desiredRows: List, + externalIdByUserId: Map, remoteExtIds: Set, ) { desiredRows.forEach { row -> - val extId = plan.externalIdByUserId[row.userId] + val extId = externalIdByUserId[row.userId] if (extId == null) { jobs.enqueue(ContactJobs.SyncContact, ContactJobs.SyncContactPayload(row.userId!!)) } else if (extId !in remoteExtIds) { @@ -216,6 +226,5 @@ class CohortRemediationService( val subjectId: Long, val system: TargetSystem, val externalCohortId: String, - val externalIdByUserId: Map, ) } diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt index 39cd15524..1c2dcab10 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt @@ -25,6 +25,7 @@ class CohortLedger(private val members: CohortMemberRepository) { */ fun markPushed(cohortId: Long, userId: Long, externalUserId: String, at: LocalDateTime): Boolean { val row = members.findByCohortIdAndUserId(cohortId, userId) ?: return false + claimMatchingStrangers(cohortId, setOf(externalUserId)) row.externalUserId = externalUserId row.syncedAt = at members.save(row) @@ -37,6 +38,7 @@ class CohortLedger(private val members: CohortMemberRepository) { * pushed), and records the external id + label. */ fun markVerified(row: CohortMember, externalUserId: String, label: String?, at: LocalDateTime) { + claimMatchingStrangers(row.cohort.id!!, setOf(externalUserId)) row.externalUserId = externalUserId if (row.syncedAt == null) row.syncedAt = at row.verifiedAt = at @@ -44,6 +46,32 @@ class CohortLedger(private val members: CohortMemberRepository) { members.save(row) } + /** + * Batch reconcile confirmation. Matching strangers are claimed and flushed + * once before any desired row receives an external id, avoiding live-key + * overlap on `uk_cohort_member_external`. + */ + fun markVerified(confirmations: Collection, at: LocalDateTime): Set { + val safeConfirmations = confirmations + .groupBy { it.externalUserId } + .filterValues { it.size == 1 } + .values + .flatten() + safeConfirmations + .groupBy { it.row.cohort.id!! } + .forEach { (cohortId, rows) -> + claimMatchingStrangers(cohortId, rows.map { it.externalUserId }.toSet()) + } + safeConfirmations.forEach { confirmation -> + confirmation.row.externalUserId = confirmation.externalUserId + if (confirmation.row.syncedAt == null) confirmation.row.syncedAt = at + confirmation.row.verifiedAt = at + confirmation.row.label = confirmation.label + } + members.saveAll(safeConfirmations.map { it.row }) + return safeConfirmations.map { it.externalUserId }.toSet() + } + /** * Reconcile found a previously-pushed desired row absent remotely. * Clears both stamps so it re-buckets as not-synced; the caller @@ -71,6 +99,8 @@ class CohortLedger(private val members: CohortMemberRepository) { existing.verifiedAt = at existing.label = label members.save(existing) + } else if (members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(cohort.id!!, externalUserId) != null) { + return } else { members.save( CohortMember( @@ -102,11 +132,29 @@ class CohortLedger(private val members: CohortMemberRepository) { * present, so it counts as synced + verified) and drop the stranger. */ fun foldStrangerIntoDesired(desired: CohortMember, stranger: CohortMember) { - desired.externalUserId = stranger.externalUserId - desired.syncedAt = stranger.verifiedAt - desired.verifiedAt = stranger.verifiedAt - desired.label = stranger.label - members.save(desired) + val externalUserId = stranger.externalUserId + val verifiedAt = stranger.verifiedAt + val label = stranger.label members.delete(stranger) + members.flush() + desired.externalUserId = externalUserId + desired.syncedAt = verifiedAt + desired.verifiedAt = verifiedAt + desired.label = label + members.save(desired) } + + private fun claimMatchingStrangers(cohortId: Long, externalUserIds: Set) { + if (externalUserIds.isEmpty()) return + val strangers = members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(cohortId, externalUserIds) + if (strangers.isEmpty()) return + strangers.forEach { members.delete(it) } + members.flush() + } + + data class DesiredConfirmation( + val row: CohortMember, + val externalUserId: String, + val label: String?, + ) } diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/CohortMember.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/CohortMember.kt index ea5b9c217..f87cfcaae 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/CohortMember.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/CohortMember.kt @@ -52,7 +52,7 @@ import java.time.LocalDateTime Index(name = "idx_cohort_member_verified", columnList = "cohort_id,verified_at"), ], ) -@SQLDelete(sql = "UPDATE cohort_member SET deleted_at = NOW(), version = version + 1 WHERE id = ? AND version = ?") +@SQLDelete(sql = "UPDATE cohort_member SET deleted_at = NOW(6), version = version + 1 WHERE id = ? AND version = ?") @SQLRestriction("deleted_at = '9999-12-31 23:59:59'") class CohortMember( @ManyToOne(fetch = FetchType.LAZY, optional = false) diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt index 233111dd9..1db28d229 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt @@ -100,8 +100,11 @@ class CohortRemediationServiceTest { missingWithExternalId, missingWithoutExternalId, ) - every { members.findByCohortIdAndExternalUserIdAndUserIdIsNull(99L, "ext-1") } returns matchingStranger + every { + members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) + } returns listOf(matchingStranger) every { members.findByCohortIdAndExternalUserIdAndUserIdIsNull(99L, "ext-extra") } returns null + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-extra") } returns null every { members.findAllByCohortIdAndUserIdIsNull(99L) } returns listOf(staleStranger) every { members.save(any()) } answers { firstArg() } From 171faf0ad4f0b1dca3b91b4a5e11902e12545a5e Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:13:21 +0000 Subject: [PATCH 5/9] test(cohort): pin bound cohort repair action Add a red remediation contract and unit test for re-enqueueing unsynced desired ADDs after an operator binds an external target. --- .../application/CohortRemediationService.kt | 5 +++ .../cohort/port/in/CohortRemediation.kt | 9 ++++ .../CohortRemediationServiceTest.kt | 45 +++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt index d372053e8..e75d1dd2c 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt @@ -8,6 +8,7 @@ import net.blueshell.api.platform.integration.cohort.persistence.repository.Coho import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortRepository import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortSubjectRepository import net.blueshell.api.platform.integration.cohort.port.`in`.CohortRemediation +import net.blueshell.api.platform.integration.cohort.port.`in`.CohortRepairResult import net.blueshell.api.platform.integration.cohort.port.`in`.SyncCohortMembershipIntent import net.blueshell.api.platform.integration.cohort.port.out.CohortPortRegistry import net.blueshell.api.platform.integration.cohort.port.out.MemberRef @@ -92,6 +93,10 @@ class CohortRemediationService( writeTransaction.executeWithoutResult { applySnapshot(plan, remote) } } + override fun repairMissingAdds(cohortId: Long): CohortRepairResult { + TODO("repair missing cohort ADDs") + } + private fun loadPlan(cohortId: Long): ReconcilePlan { val cohort = cohortRepo.findById(cohortId).orElseThrow { NonRetryableJobException("Cohort $cohortId not found") diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortRemediation.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortRemediation.kt index 9e301a6bb..392832bf0 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortRemediation.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortRemediation.kt @@ -37,4 +37,13 @@ interface CohortRemediation { * Called by [net.blueshell.api.platform.integration.cohort.adapter.job.ReconcileListJobHandler]. */ fun verifyCohort(cohortId: Long) + + /** + * Operator-triggered repair for a bound cohort after a target has been + * linked manually. Re-enqueues ADD jobs for desired rows that are not + * currently synced so no-op rule evaluation does not strand them. + */ + fun repairMissingAdds(cohortId: Long): CohortRepairResult } + +data class CohortRepairResult(val cohortId: Long, val enqueuedAdds: Int) diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt index 1db28d229..c3a5d53e0 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt @@ -197,6 +197,51 @@ class CohortRemediationServiceTest { verify { members.delete(stranger) } } + @Test + fun `repairMissingAdds requires a bound cohort and re-enqueues unsynced desired rows`() { + val subject = subject(7L) + val cohort = cohort(99L, subject.id!!).apply { externalId = "list-99" } + val unsynced = member(cohort, subject, userId = 1L) + val drifted = member( + cohort, + subject, + userId = 2L, + externalUserId = "ext-2", + syncedAt = null, + verifiedAt = null, + ) + val alreadySynced = member( + cohort, + subject, + userId = 3L, + externalUserId = "ext-3", + syncedAt = LocalDateTime.parse("2026-01-01T12:00:00"), + ) + every { cohorts.findById(99L) } returns Optional.of(cohort) + every { targetIds.require(cohort) } returns "list-99" + every { members.findAllByCohortIdAndUserIdIsNotNull(99L) } returns listOf(unsynced, drifted, alreadySynced) + + val result = service.repairMissingAdds(99L) + + assertThat(result.enqueuedAdds).isEqualTo(2) + verify { + jobs.enqueue( + CohortJobs.SyncCohortMembership, + CohortJobs.SyncCohortMembershipPayload(1L, 99L, SyncCohortMembershipIntent.ADD), + ) + jobs.enqueue( + CohortJobs.SyncCohortMembership, + CohortJobs.SyncCohortMembershipPayload(2L, 99L, SyncCohortMembershipIntent.ADD), + ) + } + verify(exactly = 0) { + jobs.enqueue( + CohortJobs.SyncCohortMembership, + CohortJobs.SyncCohortMembershipPayload(3L, 99L, SyncCohortMembershipIntent.ADD), + ) + } + } + private fun subject(id: Long): CohortSubject = CohortSubject(CohortSubjectType.CUSTOM, "Members").apply { this.id = id } From 6f232004e63e62b0143259a835302f30989a3639 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:14:10 +0000 Subject: [PATCH 6/9] fix(cohort): add bound cohort add repair action Expose an admin repair action that requires a bound cohort and re-enqueues ADD jobs for desired rows stranded by no-op rule evaluation. --- .../cohort/adapter/web/CohortController.kt | 14 ++++++++++++++ .../application/CohortRemediationService.kt | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt index ec238be4c..ed1f05d57 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt @@ -8,9 +8,12 @@ import net.blueshell.api.platform.integration.cohort.application.CohortQueryServ import net.blueshell.api.platform.integration.cohort.application.CohortSummary import net.blueshell.api.platform.integration.cohort.persistence.CohortFactKind import net.blueshell.api.platform.integration.cohort.persistence.CohortKind +import net.blueshell.api.platform.integration.cohort.port.`in`.CohortRemediation +import net.blueshell.api.platform.integration.cohort.port.`in`.CohortRepairResult import org.springframework.security.access.prepost.PreAuthorize import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable +import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import java.time.Instant @@ -30,6 +33,7 @@ import java.time.Instant @PreAuthorize("hasAuthority('ADMIN')") class CohortController( private val cohortQueries: CohortQueryService, + private val remediation: CohortRemediation, ) { @GetMapping fun findCohorts(): List = @@ -38,6 +42,10 @@ class CohortController( @GetMapping("/{id}") fun findCohortById(@PathVariable id: Long): CohortDetailResponse = cohortQueries.detail(id).toResponse() + + @PostMapping("/{id}/repair-missing-adds") + fun repairMissingAdds(@PathVariable id: Long): CohortRepairResponse = + remediation.repairMissingAdds(id).toResponse() } @Schema(name = "CohortSummary") @@ -90,6 +98,9 @@ data class CohortRuleResponse( val enabled: Boolean, ) +@Schema(name = "CohortRepair") +data class CohortRepairResponse(val cohortId: Long, val enqueuedAdds: Int) + private fun CohortSummary.toResponse(): CohortSummaryResponse = CohortSummaryResponse( id = cohort.id!!, @@ -130,3 +141,6 @@ private fun CohortMemberRow.toResponse(): CohortMemberRowResponse = isUserDeleted = isUserDeleted, joinedAt = member.createdAt, ) + +private fun CohortRepairResult.toResponse(): CohortRepairResponse = + CohortRepairResponse(cohortId = cohortId, enqueuedAdds = enqueuedAdds) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt index e75d1dd2c..6f71c8334 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt @@ -94,7 +94,21 @@ class CohortRemediationService( } override fun repairMissingAdds(cohortId: Long): CohortRepairResult { - TODO("repair missing cohort ADDs") + return writeTransaction.execute { + val cohort = cohortRepo.findById(cohortId).orElseThrow { + NonRetryableJobException("Cohort $cohortId not found") + } + targetIds.require(cohort) + val rows = memberRepo.findAllByCohortIdAndUserIdIsNotNull(cohortId) + .filter { it.syncedAt == null } + rows.forEach { row -> + jobs.enqueue( + CohortJobs.SyncCohortMembership, + CohortJobs.SyncCohortMembershipPayload(row.userId!!, cohortId, SyncCohortMembershipIntent.ADD), + ) + } + CohortRepairResult(cohortId, rows.size) + }!! } private fun loadPlan(cohortId: Long): ReconcilePlan { From b9bff523ec9c607863d416659c04c3c0f2455c51 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:15:42 +0000 Subject: [PATCH 7/9] fix(cohort): update target materialization docs Remove stale lazy-create wording now that materialize-target is no-create compatibility behavior and target creation is explicit. --- .../job/MaterializeCohortTargetJobHandler.kt | 6 +++--- .../cohort/application/CommitteeCohortResolver.kt | 4 ++-- .../application/ContributionPeriodCohortResolver.kt | 3 ++- .../integration/cohort/persistence/Cohort.kt | 12 +++++------- .../cohort/port/in/CohortMembershipSync.kt | 10 +++++----- .../integration/cohort/port/in/CohortTargeting.kt | 13 ++++++------- .../integration/cohort/port/out/CohortPort.kt | 5 +++-- .../net/blueshell/api/shared/job/CohortJobs.kt | 7 +++---- 8 files changed, 29 insertions(+), 31 deletions(-) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/job/MaterializeCohortTargetJobHandler.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/job/MaterializeCohortTargetJobHandler.kt index bfbfea3a5..9c52dc762 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/job/MaterializeCohortTargetJobHandler.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/job/MaterializeCohortTargetJobHandler.kt @@ -7,9 +7,9 @@ import org.springframework.stereotype.Component import tools.jackson.databind.ObjectMapper /** - * Driving adapter: invokes [CohortTargeting.materialize]. Creates one - * cohort's external target when it has none yet, so a per-member ADD that - * found no target id can retry once it exists. Deduplicated per cohort. + * Driving adapter for stale `cohort.materialize-target` rows. The use case + * now returns an existing target id or fails terminally; it never creates a + * provider target. */ @Component class MaterializeCohortTargetJobHandler( diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CommitteeCohortResolver.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CommitteeCohortResolver.kt index 0faf6c2ad..7bc1fb991 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CommitteeCohortResolver.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CommitteeCohortResolver.kt @@ -15,8 +15,8 @@ import org.springframework.transaction.annotation.Transactional * BREVO list cohort under it. V69 backfilled these for existing committees; * this resolver only does work for committees created post-V69, when the * first `CommitteeMembershipChanged` event arrives. It is a thin spec builder - * over [CohortProvisioningService]; the Brevo list itself is created lazily by - * the `cohort.materialize-target` job on the first ADD. + * over [CohortProvisioningService]; operators must explicitly create or link + * the Brevo list before membership ADD jobs can push. */ @Service class CommitteeCohortResolver( diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ContributionPeriodCohortResolver.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ContributionPeriodCohortResolver.kt index 394548a56..f91d4f062 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ContributionPeriodCohortResolver.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ContributionPeriodCohortResolver.kt @@ -15,7 +15,8 @@ import org.springframework.transaction.annotation.Transactional * `MEMBER_IN_PERIOD`, `ACTIVE_IN_PERIOD` — each with one BREVO list cohort. * V67 backfilled these for existing periods; this resolver only does work for * periods created after cutover. A thin spec builder over - * [CohortProvisioningService]; Brevo lists are created lazily on first ADD. + * [CohortProvisioningService]; operators must explicitly create or link the + * Brevo lists before membership ADD jobs can push. */ @Service class ContributionPeriodCohortResolver( diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/Cohort.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/Cohort.kt index 7ecee28fb..78d631dbf 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/Cohort.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/persistence/Cohort.kt @@ -14,10 +14,8 @@ import org.hibernate.annotations.SQLRestriction * A named group on one external system: a defined population of users * sharing one or more facts. Brevo lists, Discord roles and Google * groups all map to one row here. The native-side id lives in - * [externalId] (owned by `CohortTargetIds`), which is `null` until the - * cohort has been materialised externally by the `cohort.materialize-target` - * job. During the compatibility window `CohortTargetIds` also falls back to - * the legacy `external_id_mapping` row with `aggregate_type='COHORT'`. + * [externalId] (owned by `CohortTargetIds`), which is `null` until an + * operator creates or links the external target. * * `system` is stored as a plain string holding a `TargetSystem.name()`; * the persistence layer cannot depend on the `sync.port` package per the @@ -50,8 +48,8 @@ class Cohort( * Optional folder name used to group cohorts in the admin UI. Mirrors * the folder concept on Brevo (and later Discord category / Google * group org-unit) — the column carries the canonical display name and - * the per-target adapter is responsible for translating that into the - * vendor's folder id when materialising the external counterpart. + * explicit target creation is responsible for translating that into the + * vendor's folder id. * `null` means the cohort sits at the top level / "Other" group. */ @Column(name = "folder", nullable = true, length = 64) @@ -68,7 +66,7 @@ class Cohort( /** * Native id of this cohort's target on [system] (e.g. a Brevo list id). - * `null` until materialised. Written only through `CohortTargetIds`; + * `null` until explicitly created or linked. Written only through `CohortTargetIds`; * `1024` matches the widened `external_id_mapping.external_id` (V61). */ @Column(name = "external_id", nullable = true, length = 1024) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortMembershipSync.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortMembershipSync.kt index 24bd14b8d..399d9917e 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortMembershipSync.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortMembershipSync.kt @@ -7,11 +7,11 @@ package net.blueshell.api.platform.integration.cohort.port.`in` * `cohort/application/` owns the business logic. * * Use case shape: a single deterministic `sync(...)` call. The - * implementation decides whether to lazily create the external - * cohort, whether to enqueue a prerequisite sync and retry, and - * how `REMOVE` interacts with missing external state. Callers do - * not branch on these — they hand off the (userId, cohortId, - * intent) triple and let the application layer route it. + * implementation decides whether to enqueue a prerequisite user sync + * and retry, whether a missing cohort target is terminal, and how + * `REMOVE` interacts with missing external state. Callers do not branch + * on these — they hand off the (userId, cohortId, intent) triple and + * let the application layer route it. */ interface CohortMembershipSync { fun sync(userId: Long, cohortId: Long, intent: SyncCohortMembershipIntent) diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortTargeting.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortTargeting.kt index d06c140b3..0135bd32c 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortTargeting.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/in/CohortTargeting.kt @@ -19,7 +19,8 @@ interface CohortTargeting { /** * Maps the subject's [system] cohort to an existing external target by * id. Fails with 409 when the subject already has an active mapping for - * [system]. No external call — the id is trusted. + * [system] with a target id; an existing unbound row is filled in place. + * No external call — the id is trusted. */ fun linkExisting(subjectId: Long, system: TargetSystem, externalId: String): CohortMappingRow @@ -47,12 +48,10 @@ interface CohortTargeting { ): CohortMappingRow /** - * Materialises [cohortId]'s external target: re-checks the id, and only when - * still missing creates it through the - * [net.blueshell.api.platform.integration.cohort.port.out.CohortPort] - * (passing the cohort's folder) and records it. Driven by the - * `cohort.materialize-target` job, which is deduplicated per cohort so only - * one create runs. Idempotent: returns the existing id when already set. + * Resolves [cohortId]'s external target for stale queued + * `cohort.materialize-target` jobs. Idempotent: returns the existing id + * when already set; fails terminally when missing. This path never creates + * provider targets. */ fun materialize(cohortId: Long): CohortTargetRef diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/out/CohortPort.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/out/CohortPort.kt index 7864f5fa6..154c96697 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/out/CohortPort.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/port/out/CohortPort.kt @@ -8,8 +8,9 @@ import net.blueshell.api.shared.enums.TargetSystem * `cohort/adapter//`. * * The contract is operation-based rather than state-replace: callers - * add or remove a single `(user, cohort)` pair by external id, and - * the cohort's external counterpart is created lazily on first use. + * add or remove a single `(user, cohort)` pair by external id. External + * target creation is explicit operator-driven provisioning; membership + * sync requires the cohort target id to already be linked. * All ids are passed as `String` so Discord snowflakes and Google * group emails fit alongside Brevo's numeric list ids without forcing * every adapter to coerce to `Long`. diff --git a/services/api/src/main/kotlin/net/blueshell/api/shared/job/CohortJobs.kt b/services/api/src/main/kotlin/net/blueshell/api/shared/job/CohortJobs.kt index 5a7f4af5a..6fcb11771 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/shared/job/CohortJobs.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/shared/job/CohortJobs.kt @@ -96,10 +96,9 @@ object CohortJobs { } /** - * Creates one cohort's external target when it has none yet, and records - * the new id. Enqueued by a per-member ADD that found no target id, so the - * ADD can retry once the target exists. Deduplicated by cohort id, so only - * one create runs per cohort however many ADDs raced. + * Stale compatibility job for cohorts that already have a target id. + * It returns the existing id or fails terminally when missing; target + * creation is now explicit operator action only. */ object MaterializeCohortTarget : JobDefinition { override val type: String = "cohort.materialize-target" From 70a8c99a0025fa52072c8dd6acfc80086ce1e17f Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 20:27:59 +0000 Subject: [PATCH 8/9] fix(cohort): guard desired external id ownership --- .../application/CohortLedgerAutoflushIT.kt | 20 ++++++++ .../cohort/adapter/web/CohortController.kt | 9 ++-- .../application/CohortRemediationService.kt | 18 +++++++- .../cohort/application/ledger/CohortLedger.kt | 30 +++++++++++- .../CohortRemediationServiceTest.kt | 4 ++ .../application/ledger/CohortLedgerTest.kt | 46 +++++++++++++++++++ 6 files changed, 119 insertions(+), 8 deletions(-) diff --git a/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt b/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt index 79ef364d6..562ba2008 100644 --- a/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt +++ b/services/api/src/integrationTest/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortLedgerAutoflushIT.kt @@ -105,6 +105,26 @@ class CohortLedgerAutoflushIT : UserTestSupport() { members.delete(second) members.flush() }.doesNotThrowAnyException() + + val deletedAtValues = entityManager.createNativeQuery( + """ + SELECT DATE_FORMAT(deleted_at, '%Y-%m-%d %H:%i:%s.%f') + FROM cohort_member + WHERE cohort_id = :cohortId + AND external_user_id = :externalUserId + AND deleted_at <> '9999-12-31 23:59:59' + ORDER BY id + """.trimIndent(), + ) + .setParameter("cohortId", cohort.id!!) + .setParameter("externalUserId", "ext-fast") + .resultList + .map { it.toString() } + + assertThat(deletedAtValues) + .hasSize(2) + .allMatch { it.matches(Regex(""".*\.\d{6}$""")) } + assertThat(deletedAtValues.toSet()).hasSize(2) } private fun newSubject(): CohortSubject = diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt index ed1f05d57..556b567ac 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/adapter/web/CohortController.kt @@ -19,13 +19,12 @@ import org.springframework.web.bind.annotation.RestController import java.time.Instant /** - * Read-only admin endpoints for cohort listings + the per-cohort - * detail view (members + rules). Used today by the admin cohort - * dashboard and the `CohortPicker.vue` component in the JobManager - * trigger modal. + * Admin endpoints for cohort listings, per-cohort detail, and targeted + * repair actions. Used today by the admin cohort dashboard and the + * `CohortPicker.vue` component in the JobManager trigger modal. * * Full CRUD lands in a later PR; for now this is the picker- and - * dashboard-side read. + * dashboard-side read plus operational repair. */ @RestController @RequestMapping("/management/cohorts") diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt index 6f71c8334..70ef97fa1 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationService.kt @@ -20,6 +20,7 @@ import net.blueshell.api.shared.job.ContactJobs import net.blueshell.api.shared.job.CohortJobs import net.blueshell.api.shared.job.NonRetryableJobException import net.blueshell.api.shared.job.TrackedJobDispatcher +import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import org.springframework.transaction.PlatformTransactionManager import org.springframework.transaction.TransactionDefinition @@ -136,7 +137,7 @@ class CohortRemediationService( val remoteByExtId = remote.associateBy { it.externalUserId } val now = LocalDateTime.now() val desiredRows = memberRepo.findAllByCohortIdAndUserIdIsNotNull(plan.cohortId) - val externalIdByUserId = loadCurrentExternalIds(desiredRows, plan.system) + val externalIdByUserId = loadCurrentExternalIds(plan.cohortId, desiredRows, plan.system) val confirmed = confirmPresentDesiredRows(plan, desiredRows, externalIdByUserId, remoteByExtId, now) demoteVanishedDesiredRows(plan, desiredRows, externalIdByUserId, remoteByExtId.keys) @@ -145,6 +146,7 @@ class CohortRemediationService( } private fun loadCurrentExternalIds( + cohortId: Long, desiredRows: List, system: TargetSystem, ): Map { @@ -153,6 +155,16 @@ class CohortRemediationService( .findBatch(USER_AGGREGATE, desiredUserIds, system.name) .filter { !it.externalId.isNullOrBlank() } .groupBy { it.externalId } + .also { grouped -> + grouped.filterValues { it.size > 1 }.forEach { (externalId, mappings) -> + log.warn( + "Ignoring duplicate external id mapping for cohort {} and external id {} across user ids {}", + cohortId, + externalId, + mappings.map { it.aggregateId }, + ) + } + } .filterValues { it.size == 1 } .values .flatten() @@ -246,4 +258,8 @@ class CohortRemediationService( val system: TargetSystem, val externalCohortId: String, ) + + companion object { + private val log = LoggerFactory.getLogger(CohortRemediationService::class.java) + } } diff --git a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt index 1c2dcab10..a2192c80f 100644 --- a/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt +++ b/services/api/src/main/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedger.kt @@ -4,6 +4,7 @@ import net.blueshell.api.platform.integration.cohort.persistence.Cohort import net.blueshell.api.platform.integration.cohort.persistence.CohortMember import net.blueshell.api.platform.integration.cohort.persistence.CohortSubject import net.blueshell.api.platform.integration.cohort.persistence.repository.CohortMemberRepository +import net.blueshell.api.shared.job.NonRetryableJobException import org.springframework.stereotype.Component import java.time.LocalDateTime @@ -25,7 +26,7 @@ class CohortLedger(private val members: CohortMemberRepository) { */ fun markPushed(cohortId: Long, userId: Long, externalUserId: String, at: LocalDateTime): Boolean { val row = members.findByCohortIdAndUserId(cohortId, userId) ?: return false - claimMatchingStrangers(cohortId, setOf(externalUserId)) + claimExternalIdForDesired(row, externalUserId) row.externalUserId = externalUserId row.syncedAt = at members.save(row) @@ -38,7 +39,7 @@ class CohortLedger(private val members: CohortMemberRepository) { * pushed), and records the external id + label. */ fun markVerified(row: CohortMember, externalUserId: String, label: String?, at: LocalDateTime) { - claimMatchingStrangers(row.cohort.id!!, setOf(externalUserId)) + claimExternalIdForDesired(row, externalUserId) row.externalUserId = externalUserId if (row.syncedAt == null) row.syncedAt = at row.verifiedAt = at @@ -60,6 +61,7 @@ class CohortLedger(private val members: CohortMemberRepository) { safeConfirmations .groupBy { it.row.cohort.id!! } .forEach { (cohortId, rows) -> + rows.forEach { guardDesiredExternalOwner(it.row, it.externalUserId) } claimMatchingStrangers(cohortId, rows.map { it.externalUserId }.toSet()) } safeConfirmations.forEach { confirmation -> @@ -135,6 +137,7 @@ class CohortLedger(private val members: CohortMemberRepository) { val externalUserId = stranger.externalUserId val verifiedAt = stranger.verifiedAt val label = stranger.label + guardDesiredExternalOwner(desired, externalUserId) members.delete(stranger) members.flush() desired.externalUserId = externalUserId @@ -144,6 +147,19 @@ class CohortLedger(private val members: CohortMemberRepository) { members.save(desired) } + private fun claimExternalIdForDesired(row: CohortMember, externalUserId: String) { + guardDesiredExternalOwner(row, externalUserId) + claimMatchingStrangers(row.cohort.id!!, setOf(externalUserId)) + } + + private fun guardDesiredExternalOwner(row: CohortMember, externalUserId: String?) { + if (externalUserId.isNullOrBlank()) return + val cohortId = row.cohort.id!! + val owner = members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(cohortId, externalUserId) ?: return + if (owner.userId == row.userId || (owner.id != null && owner.id == row.id)) return + throw ExternalIdAlreadyOwnedException(cohortId, externalUserId, owner.userId, row.userId) + } + private fun claimMatchingStrangers(cohortId: Long, externalUserIds: Set) { if (externalUserIds.isEmpty()) return val strangers = members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(cohortId, externalUserIds) @@ -158,3 +174,13 @@ class CohortLedger(private val members: CohortMemberRepository) { val label: String?, ) } + +class ExternalIdAlreadyOwnedException( + cohortId: Long, + externalUserId: String, + ownerUserId: Long?, + requestedUserId: Long?, +) : NonRetryableJobException( + "Cannot assign external user id '$externalUserId' in cohort $cohortId to user $requestedUserId; " + + "it is already owned by user $ownerUserId in the same cohort.", +) diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt index c3a5d53e0..c89474d87 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/CohortRemediationServiceTest.kt @@ -52,6 +52,10 @@ class CohortRemediationServiceTest { transactionManager = ImmediateTransactionManager(), ) + init { + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(any(), any()) } returns null + } + @Test fun `verifyCohort fetches remote members outside a transaction and applies ledger changes`() { val subject = subject(7L) diff --git a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt index 1ae6d998c..0174b57c0 100644 --- a/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt +++ b/services/api/src/test/kotlin/net/blueshell/api/platform/integration/cohort/application/ledger/CohortLedgerTest.kt @@ -23,6 +23,7 @@ class CohortLedgerTest { init { every { members.save(any()) } answers { firstArg() } + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(any(), any()) } returns null } private val cohort: Cohort = mockk { every { id } returns 99L } private val subject: CohortSubject = mockk() @@ -58,6 +59,7 @@ class CohortLedgerTest { assertThat(stamped).isTrue() verifySequence { members.findByCohortIdAndUserId(99L, 1L) + members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-1") members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) members.delete(stranger) members.flush() @@ -65,6 +67,24 @@ class CohortLedgerTest { } } + @Test + fun `markPushed refuses external id owned by another desired row`() { + val row = member(userId = 1L) + val owner = member(userId = 2L).apply { externalUserId = "ext-1" } + every { members.findByCohortIdAndUserId(99L, 1L) } returns row + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-1") } returns owner + + assertThatThrownBy { ledger.markPushed(99L, 1L, "ext-1", now) } + .isInstanceOf(ExternalIdAlreadyOwnedException::class.java) + .hasMessageContaining("cohort 99") + .hasMessageContaining("ext-1") + .hasMessageContaining("user 2") + + assertThat(row.externalUserId).isNull() + assertThat(row.syncedAt).isNull() + verify(exactly = 0) { members.save(any()) } + } + @Test fun `markPushed reports false when the desired row is gone`() { every { members.findByCohortIdAndUserId(99L, 1L) } returns null @@ -110,6 +130,7 @@ class CohortLedgerTest { ledger.markVerified(row, "ext-1", "Ada", now) verifySequence { + members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-1") members.findAllByCohortIdAndExternalUserIdInAndUserIdIsNull(99L, setOf("ext-1")) members.delete(stranger) members.flush() @@ -162,12 +183,37 @@ class CohortLedgerTest { ledger.foldStrangerIntoDesired(desired, stranger) verifySequence { + members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-7") members.delete(stranger) members.flush() members.save(desired) } } + @Test + fun `foldStrangerIntoDesired refuses external id owned by another desired row`() { + val stranger = member(userId = null).apply { + externalUserId = "ext-7" + verifiedAt = now + label = "Linked" + } + val desired = member(userId = 7L) + val owner = member(userId = 8L).apply { externalUserId = "ext-7" } + every { members.findByCohortIdAndExternalUserIdAndUserIdIsNotNull(99L, "ext-7") } returns owner + + assertThatThrownBy { ledger.foldStrangerIntoDesired(desired, stranger) } + .isInstanceOf(ExternalIdAlreadyOwnedException::class.java) + .hasMessageContaining("cohort 99") + .hasMessageContaining("ext-7") + .hasMessageContaining("user 8") + + assertThat(desired.externalUserId).isNull() + assertThat(desired.syncedAt).isNull() + assertThat(desired.verifiedAt).isNull() + verify(exactly = 0) { members.delete(stranger) } + verify(exactly = 0) { members.save(any()) } + } + @Test fun `upsertStranger inserts a STRANGER row`() { every { members.findByCohortIdAndExternalUserIdAndUserIdIsNull(99L, "ext-9") } returns null From c67fc0fd10fd3190a8523edbb90e27751d856bc0 Mon Sep 17 00:00:00 2001 From: Agents Agent Date: Mon, 29 Jun 2026 21:30:48 +0000 Subject: [PATCH 9/9] chore(api): regenerate OpenAPI spec and Blueshell client for repair endpoint --- services/api/openapi.json | 2 +- .../src/services/api/blueshell/index.ts | 4 +- .../src/services/api/blueshell/sdk.gen.ts | 8 +++- .../src/services/api/blueshell/types.gen.ts | 48 +++++++++++++++++++ 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/services/api/openapi.json b/services/api/openapi.json index 096098228..4b2f8761c 100644 --- a/services/api/openapi.json +++ b/services/api/openapi.json @@ -1 +1 @@ -{"components":{"schemas":{"Actor":{"properties":{"role":{"$ref":"#/components/schemas/Role"},"type":{"enum":["USER","SYSTEM"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","type"],"type":"object"},"AddBoardMemberRequest":{"properties":{"endDate":{"format":"date","type":"string"},"role":{"minLength":1,"type":"string"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","startDate","userId"],"type":"object"},"AddressResponse":{"properties":{"city":{"type":"string"},"country":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"houseNumber":{"type":"string"},"id":{"format":"int64","type":"integer"},"street":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"},"zipCode":{"type":"string"}},"required":["createdAt","id","updatedAt","version"],"type":"object"},"AnswerRequest":{"properties":{"optionSelections":{"items":{"type":"boolean"},"type":"array"},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":"string"}},"required":["questionId"],"type":"object"},"AnswerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"optionSelections":{"items":{"type":"boolean"},"type":"array"},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questionId","updatedAt","version"],"type":"object"},"ApiError":{"description":"Problem Details for HTTP APIs including validation errors.","properties":{"detail":{"description":"Human-readable explanation specific to this occurrence.","example":"Validation failed for request.","type":"string"},"errors":{"description":"List of field/object validation errors (present when binding/validation fails).","items":{"$ref":"#/components/schemas/FieldValidationError"},"type":"array"},"instance":{"description":"A URI reference that identifies the specific occurrence.","example":"/api/v1/users","format":"uri","type":"string"},"status":{"description":"HTTP status code.","example":400,"format":"int32","type":"integer"},"title":{"description":"Short, human-readable summary of the problem.","example":"Bad Request","type":"string"},"traceId":{"description":"Trace or correlation id if available (Spring may add this via problem detail handlers).","example":"a8c0c4e5f1c24a7e","type":"string"},"type":{"description":"Problem type URI (RFC 7807).","example":"about:blank","type":"string"}}},"BlogResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"html":{"type":"string"},"id":{"format":"int64","type":"integer"},"publishedAt":{"format":"date-time","type":"string"},"title":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","html","id","publishedAt","title","updatedAt","url","version"],"type":"object"},"BoardCreateMembershipRequest":{"properties":{"endDate":{"format":"date","type":"string"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["incasso","memberType","userId"],"type":"object"},"BoardMemberResponse":{"properties":{"boardId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"role":{"type":"string"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["boardId","createdAt","role","startDate","updatedAt","userId","version"],"type":"object"},"BoardResponse":{"properties":{"candidate":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/BoardMemberResponse"},"type":"array"},"name":{"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["candidate","createdAt","id","members","name","startDate","updatedAt","version"],"type":"object"},"CohortDetail":{"properties":{"externalId":{"type":"string"},"folder":{"type":"string"},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CohortMemberRow"},"type":"array"},"rules":{"items":{"$ref":"#/components/schemas/CohortRule"},"type":"array"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","members","rules","system"],"type":"object"},"CohortFactKind":{"enum":["ROLE","COMMITTEE","CONTRIBUTION_PAID","MEMBER_IN_PERIOD","NEWSLETTER","ACTIVE_IN_PERIOD"],"type":"string"},"CohortKind":{"enum":["LIST","ROLE","GROUP"],"type":"string"},"CohortMapping":{"properties":{"cohortId":{"format":"int64","type":"integer"},"externalId":{"type":"string"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"system":{"description":"External system this mapping targets","enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["cohortId","kind","label","system"],"type":"object"},"CohortMemberRow":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"userEmail":{"type":"string"},"userFullName":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["cohortMemberId","isUserDeleted","joinedAt","userId"],"type":"object"},"CohortRule":{"properties":{"enabled":{"type":"boolean"},"factKey":{"type":"string"},"factKind":{"$ref":"#/components/schemas/CohortFactKind"},"id":{"format":"int64","type":"integer"}},"required":["enabled","factKey","factKind","id"],"type":"object"},"CohortSubjectCategory":{"enum":["COMMITTEES","PERIODS","MEMBERS","OTHER"],"type":"string"},"CohortSubjectDetail":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"description":{"type":"string"},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappings":{"items":{"$ref":"#/components/schemas/CohortMapping"},"type":"array"},"members":{"items":{"$ref":"#/components/schemas/CohortSubjectMember"},"type":"array"},"rules":{"items":{"$ref":"#/components/schemas/CohortSubjectRule"},"type":"array"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappings","members","rules","type"],"type":"object"},"CohortSubjectMember":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"userEmail":{"type":"string"},"userFullName":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["cohortMemberId","isUserDeleted","joinedAt","userId"],"type":"object"},"CohortSubjectRule":{"properties":{"enabled":{"type":"boolean"},"factKey":{"type":"string"},"factKind":{"$ref":"#/components/schemas/CohortFactKind"},"id":{"format":"int64","type":"integer"}},"required":["enabled","factKey","factKind","id"],"type":"object"},"CohortSubjectSummary":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappingCount":{"format":"int32","type":"integer"},"memberCount":{"format":"int32","type":"integer"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappingCount","memberCount","type"],"type":"object"},"CohortSubjectType":{"enum":["COMMITTEE_MEMBERS","PERIOD_PAYERS","PERIOD_MEMBERS","PERIOD_ACTIVE_MEMBERS","NEWSLETTER_SUBSCRIBERS","CUSTOM"],"type":"string"},"CohortSummary":{"properties":{"externalId":{"type":"string"},"folder":{"type":"string"},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","system"],"type":"object"},"CommitteeDetailResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberResponse"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","members","name","updatedAt","version"],"type":"object"},"CommitteeMemberRequest":{"properties":{"role":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","userId"],"type":"object"},"CommitteeMemberResponse":{"properties":{"committeeId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"role":{"minLength":1,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["committeeId","createdAt","role","updatedAt","userId","version"],"type":"object"},"CommitteeResponse":{},"ContributionPeriodResponse":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"id":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","createdAt","endDate","fullYearFee","halfYearFee","id","startDate","updatedAt","version"],"type":"object"},"ContributionReminderResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"remindedAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","createdAt","updatedAt","userId","version"],"type":"object"},"ContributionResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"remindedAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","createdAt","updatedAt","userId","version"],"type":"object"},"CreateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","userId","zipCode"],"type":"object"},"CreateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"minLength":1,"type":"string"}},"required":["html","publishedAt","title"],"type":"object"},"CreateBoardRequest":{"properties":{"candidate":{"minLength":1,"type":"string"},"endDate":{"format":"date","type":"string"},"name":{"maxLength":100,"minLength":1,"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"}},"required":["candidate","name","startDate"],"type":"object"},"CreateCommitteeRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"}},"required":["description","members","name"],"type":"object"},"CreateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"startDate":{"format":"date","type":"string"}},"required":["alumniFee","endDate","fullYearFee","halfYearFee","startDate"],"type":"object"},"CreateContributionReminderRequest":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateContributionRequest":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerRequest"},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyRequest"},"signUpLimit":{"format":"int32","minimum":1,"type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title"],"type":"object"},"CreateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":"array"},"guest":{"$ref":"#/components/schemas/CreateGuestRequest"},"userId":{"format":"int64","type":"integer"}},"type":"object"},"CreateGuestRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"phoneNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["discord","email","name"],"type":"object"},"CreateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality","userId"],"type":"object"},"CreateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"}},"required":["description","name"],"type":"object"},"CreateTargetRequest":{"properties":{"folderHint":{"type":"string"},"label":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["label","system"],"type":"object"},"CreateTelemetryRequest":{"properties":{"platform":{"$ref":"#/components/schemas/PlatformType"},"url":{"minLength":1,"type":"string"}},"required":["platform","url"],"type":"object"},"CreateUserRequest":{"properties":{"consentPrivacy":{"type":"boolean"},"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"firstName":{"minLength":1,"type":"string"},"fullName":{"type":"string"},"initials":{"minLength":1,"type":"string"},"lastName":{"minLength":1,"type":"string"},"memberProfile":{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},"newsletter":{"type":"boolean"},"password":{"type":"string"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":"boolean"},"prefix":{"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["discord","email","firstName","initials","lastName","newsletter","phoneNumber","username"],"type":"object"},"CsrfToken":{"properties":{"headerName":{"type":"string"},"parameterName":{"type":"string"},"token":{"type":"string"}},"type":"object"},"DriftReport":{"properties":{"cohortId":{"format":"int64","type":"integer"},"externalCohortId":{"type":"string"},"extras":{"items":{"$ref":"#/components/schemas/ExtraRow"},"type":"array"},"lastReconciledAt":{"format":"date-time","type":"string"},"missing":{"items":{"$ref":"#/components/schemas/MissingRow"},"type":"array"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["cohortId","extras","missing","system"],"type":"object"},"Email":{"properties":{"attempts":{"format":"int32","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"deliveredAt":{"format":"date-time","type":"string"},"deliveryStatus":{"enum":["PENDING","SENT","DELIVERED","OPENED","BOUNCED","FAILED"],"type":"string"},"emailType":{"type":"string"},"errorReason":{"type":"string"},"errorType":{"type":"string"},"id":{"format":"int64","type":"integer"},"jobExecutionId":{"format":"int64","type":"integer"},"messageId":{"type":"string"},"openedAt":{"format":"date-time","type":"string"},"recipientEmail":{"type":"string"},"recipientName":{"type":"string"},"sentAt":{"format":"date-time","type":"string"},"subject":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"type":"object"},"EmailStats":{"properties":{"bouncedCount":{"format":"int64","type":"integer"},"deliveredCount":{"format":"int64","type":"integer"},"failedCount":{"format":"int64","type":"integer"},"openedCount":{"format":"int64","type":"integer"},"pendingCount":{"format":"int64","type":"integer"},"sentCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["bouncedCount","deliveredCount","failedCount","openedCount","pendingCount","sentCount","totalCount"],"type":"object"},"EnqueueJobRequest":{"properties":{"jobType":{"minLength":1,"type":"string"},"payload":{"additionalProperties":{},"description":"Job payload fields keyed by name; shape depends on the job type","type":"object"}},"required":["jobType"],"type":"object"},"EventBannerRequest":{"properties":{"fileId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["fileId"],"type":"object"},"EventBannerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"fileId":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","eventId","fileId","updatedAt","version"],"type":"object"},"EventResponse":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerResponse"},"committeeId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"signUp":{"type":"boolean"},"signUpCount":{"format":"int64","type":"integer"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyResponse"},"signUpLimit":{"format":"int32","type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","createdAt","description","endTime","id","membersOnly","signUp","signUpCount","startTime","title","updatedAt","version"],"type":"object"},"EventSignUpResponse":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerResponse"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"guest":{"$ref":"#/components/schemas/GuestResponse"},"id":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/UserSummaryResponse"},"version":{"format":"int64","type":"integer"}},"required":["answers","createdAt","eventId","id","updatedAt","version"],"type":"object"},"ExtraRow":{"properties":{"email":{"type":"string"},"externalUserId":{"type":"string"},"fullName":{"type":"string"},"kind":{"enum":["KNOWN_LOCAL_USER","UNKNOWN_EXTERNAL"],"type":"string"},"label":{"type":"string"},"softDeleted":{"type":"boolean"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","kind"],"type":"object"},"FieldValidationError":{"description":"Details about a single field/object validation error.","properties":{"code":{"description":"Validation code / constraint key.","example":"Email","type":"string"},"field":{"description":"Field that failed validation (null for global errors).","example":"email","type":"string"},"message":{"description":"Human-readable validation message.","example":"must be a well-formed email address","type":"string"},"objectName":{"description":"Object (target) name that failed validation.","example":"createUserRequest","type":"string"}}},"FileResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"mediaType":{"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"path":{"type":"string"},"size":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/FileType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","mediaType","name","path","type","updatedAt","version"],"type":"object"},"FileType":{"enum":["DOCUMENT","PROFILE_PICTURE","EVENT_BANNER","EVENT_PICTURE","SPONSOR_PICTURE"],"type":"string"},"GuestResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"phoneNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","discord","email","id","name","updatedAt","version"],"type":"object"},"JobExecution":{"properties":{"actor":{"$ref":"#/components/schemas/Actor"},"attempts":{"format":"int32","type":"integer"},"category":{"$ref":"#/components/schemas/JobExecutionCategory"},"createdAt":{"format":"date-time","type":"string"},"dedupKey":{"type":"string"},"errorMessage":{"type":"string"},"errorReason":{"type":"string"},"errorType":{"type":"string"},"finishedAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"initiatedByDisplay":{"type":"string"},"initiatedByFullName":{"type":"string"},"initiatedByRole":{"$ref":"#/components/schemas/Role"},"initiatedByType":{"enum":["USER","SYSTEM"],"type":"string"},"initiatedByUserId":{"format":"int64","type":"integer"},"initiatedByUsername":{"type":"string"},"jobType":{"minLength":1,"type":"string"},"nextAttemptAt":{"format":"date-time","type":"string"},"payload":{"additionalProperties":{},"type":"object"},"queuedAt":{"format":"date-time","type":"string"},"relatedEntities":{"items":{"$ref":"#/components/schemas/JobExecutionRelatedEntity"},"type":"array"},"stackTrace":{"type":"string"},"startedAt":{"format":"date-time","type":"string"},"status":{"$ref":"#/components/schemas/JobExecutionStatus"},"targetSystem":{"enum":["BREVO"],"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["attempts","jobType","relatedEntities","status"],"type":"object"},"JobExecutionCategory":{"enum":["calendar","contact","cohort","email","other"],"type":"string"},"JobExecutionRelatedEntity":{"properties":{"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"type":{"type":"string"}},"required":["label","type"],"type":"object"},"JobExecutionStatus":{"enum":["QUEUED","RUNNING","SUCCESS","FAILED","DEAD"],"type":"string"},"JobPayloadField":{"properties":{"enumValues":{"items":{"type":"string"},"type":"array"},"kind":{"$ref":"#/components/schemas/JobPayloadFieldKind"},"name":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"required":["kind","name","required","type"],"type":"object"},"JobPayloadFieldKind":{"enum":["PRIMITIVE","ENUM","OBJECT"],"type":"string"},"JobStatsDTO":{"properties":{"avgSuccessDurationSeconds":{"format":"double","type":"number"},"deadCount":{"format":"int64","type":"integer"},"deadSinceStartup":{"format":"double","type":"number"},"failedCount":{"format":"int64","type":"integer"},"failedSinceStartup":{"format":"double","type":"number"},"queuedCount":{"format":"int64","type":"integer"},"recoveriesSinceStartup":{"format":"double","type":"number"},"runningCount":{"format":"int64","type":"integer"},"successCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["avgSuccessDurationSeconds","deadCount","deadSinceStartup","failedCount","failedSinceStartup","queuedCount","recoveriesSinceStartup","runningCount","successCount","totalCount"],"type":"object"},"JobTypeDescriptor":{"properties":{"payloadFields":{"items":{"$ref":"#/components/schemas/JobPayloadField"},"type":"array"},"type":{"type":"string"}},"required":["payloadFields","type"],"type":"object"},"JwtRequest":{"properties":{"password":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","username"],"type":"object"},"LinkExistingTargetRequest":{"properties":{"externalId":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["externalId","system"],"type":"object"},"LinkUserRequest":{"properties":{"externalUserId":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LinkedUser":{"properties":{"externalUserId":{"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LoginResponse":{"properties":{"addressId":{"format":"int64","type":"integer"},"expiration":{"format":"int64","type":"integer"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"minItems":1,"type":"array"},"token":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"username":{"minLength":1,"type":"string"}},"required":["expiration","roles","token","userId","username"],"type":"object"},"MemberActivationRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","token","username"],"type":"object"},"MemberProfileResponse":{"properties":{"bhv":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"id":{"format":"int64","type":"integer"},"nationality":{"type":"string"},"studentNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["bhv","createdAt","ehbo","id","updatedAt","userId","version"]},"MemberType":{"enum":["ALUMNI","HONORARY","REGULAR","NONE"],"type":"string"},"MembershipResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"id":{"format":"int64","type":"integer"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","incasso","memberType","startDate","updatedAt","userId","version"],"type":"object"},"MissingRow":{"properties":{"hasExternalMapping":{"type":"boolean"},"userId":{"format":"int64","type":"integer"}},"required":["hasExternalMapping","userId"],"type":"object"},"PageMetadata":{"properties":{"number":{"format":"int64","type":"integer"},"size":{"format":"int64","type":"integer"},"totalElements":{"format":"int64","type":"integer"},"totalPages":{"format":"int64","type":"integer"}},"type":"object"},"PagedModelEmail":{"properties":{"content":{"items":{"$ref":"#/components/schemas/Email"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelEventResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/EventResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelJobExecution":{"properties":{"content":{"items":{"$ref":"#/components/schemas/JobExecution"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelUserDetailResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/UserDetailResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PasswordResetRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"}},"required":["password","token"],"type":"object"},"PlatformType":{"enum":["FACEBOOK","LINKEDIN","TWITTER","INSTAGRAM"],"type":"string"},"QuestionRequest":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":"array"},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":"boolean"},"type":{"$ref":"#/components/schemas/QuestionType"}},"required":["idx","label","type"],"type":"object"},"QuestionResponse":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":"boolean"},"surveyId":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/QuestionType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","idx","label","surveyId","type","updatedAt","version"],"type":"object"},"QuestionType":{"enum":["OPEN","RADIO","CHECKBOX","DESCRIPTION"],"type":"string"},"RedirectResponse":{"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"Role":{"enum":["ANONYMOUS","VEGAN","GUEST","COMPANY","MEMBER","COMMITTEE","BOARD","TREASURER","ADMIN","SYSTEM"],"type":"string"},"ServiceEntry":{"properties":{"description":{"type":"string"},"iconUrl":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["description","iconUrl","id","name","url"],"type":"object"},"SponsorResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","name","updatedAt","version"],"type":"object"},"SurveyRequest":{"properties":{"questions":{"items":{"$ref":"#/components/schemas/QuestionRequest"},"minItems":1,"type":"array"}},"required":["questions"],"type":"object"},"SurveyResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"questions":{"items":{"$ref":"#/components/schemas/QuestionResponse"},"minItems":1,"type":"array"},"responseCount":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questions","responseCount","updatedAt","version"],"type":"object"},"SwitchTargetRequest":{"properties":{"deletePrevious":{"type":"boolean"},"externalId":{"minLength":1,"type":"string"},"reconcileNow":{"type":"boolean"}},"required":["deletePrevious","externalId","reconcileNow"],"type":"object"},"TelemetryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"platform":{"$ref":"#/components/schemas/PlatformType"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","platform","updatedAt","url","version"],"type":"object"},"UpdateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","version","zipCode"],"type":"object"},"UpdateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["html","publishedAt","title","version"],"type":"object"},"UpdateBoardRequest":{"properties":{"candidate":{"minLength":1,"type":"string"},"endDate":{"format":"date","type":"string"},"name":{"maxLength":100,"minLength":1,"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["candidate","name","startDate","version"],"type":"object"},"UpdateCommitteeRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","members","name","version"],"type":"object"},"UpdateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","endDate","fullYearFee","halfYearFee","startDate","version"],"type":"object"},"UpdateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerRequest"},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"removeExistingSignUps":{"type":"boolean"},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyRequest"},"signUpLimit":{"format":"int32","minimum":1,"type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title","version"],"type":"object"},"UpdateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":"array"},"guest":{"$ref":"#/components/schemas/CreateGuestRequest"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"type":"object"},"UpdateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality","version"],"type":"object"},"UpdateMembershipRequest":{"properties":{"endDate":{"format":"date","type":"string"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["userId","version"],"type":"object"},"UpdateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","name","version"],"type":"object"},"UpdateUserRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"memberProfile":{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},"newsletter":{"type":"boolean"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":"boolean"},"version":{"format":"int64","type":"integer"}},"required":["discord","newsletter","phoneNumber","version"],"type":"object"},"UpsertMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality"],"type":"object"},"UserActivationRequest":{"properties":{"token":{"minLength":1,"type":"string"}},"required":["token"],"type":"object"},"UserDetailResponse":{"properties":{"addressId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"enabled":{"type":"boolean"},"firstName":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"initials":{"type":"string"},"lastName":{"type":"string"},"newsletter":{"type":"boolean"},"phoneNumber":{"type":"string"},"photoConsent":{"type":"boolean"},"prefix":{"type":"string"},"restoreUntilAt":{"format":"date-time","type":"string"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"username":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","enabled","firstName","fullName","id","initials","lastName","newsletter","photoConsent","roles","updatedAt","username","version"],"type":"object"},"UserSummaryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"phoneNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","fullName","id","updatedAt","version"],"type":"object"}}},"info":{"title":"OpenAPI definition","version":"v0"},"openapi":"3.1.0","paths":{"/addresses":{"get":{"operationId":"findAllAddresses","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AddressResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"post":{"operationId":"createAddress","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAddressRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/addresses/{id}":{"delete":{"operationId":"deleteAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"get":{"operationId":"findAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"put":{"operationId":"updateAddress","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/auth":{"post":{"operationId":"authenticate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/auth/logout":{"post":{"operationId":"logout","responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/blogs":{"get":{"operationId":"findBlogs","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlogResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"createBlog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlogRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/blogs/{id}":{"delete":{"operationId":"deleteById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"get":{"operationId":"findBlogById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"updateBlog","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlogRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/boards":{"get":{"operationId":"findAllBoards","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BoardResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"post":{"operationId":"createBoard","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBoardRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members":{"post":{"operationId":"addMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBoardMemberRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardMemberResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members/{userId}":{"delete":{"operationId":"removeMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{id}":{"delete":{"operationId":"deleteBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"get":{"operationId":"findBoardById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"put":{"operationId":"updateBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBoardRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/committeeMembers/committees":{"get":{"operationId":"findCommitteesByUserId","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees":{"get":{"operationId":"findCommittees","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"post":{"operationId":"createCommittee","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{committeeId}":{"get":{"operationId":"findCommitteeById","parameters":[{"in":"path","name":"committeeId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{id}":{"delete":{"operationId":"deleteCommitteeById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"put":{"operationId":"updateCommittee","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/contributionPeriods":{"get":{"operationId":"findContributionPeriods","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionPeriodResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"post":{"operationId":"createContributionPeriod","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionPeriodRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/current":{"get":{"operationId":"findCurrentContributionPeriod","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{contributionPeriodId}/users/{userId}/contributions":{"delete":{"operationId":"deleteContribution","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionPeriods/{id}":{"delete":{"operationId":"deleteContributionPeriodById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"put":{"operationId":"updateContributionPeriod","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContributionPeriodRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{periodId}/contributions":{"get":{"operationId":"findContributionsByPeriodId","parameters":[{"in":"path","name":"periodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionReminders":{"get":{"operationId":"findContributionReminders","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]},"post":{"operationId":"sendContributionReminder","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionReminderRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionReminderResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributionReminders/batch":{"post":{"operationId":"sendContributionReminderBatch","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateContributionReminderRequest"},"type":"array"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributions":{"get":{"operationId":"findContributions","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]},"post":{"operationId":"createContribution","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/csrf":{"get":{"operationId":"csrf","parameters":[{"in":"query","name":"csrfToken","required":true,"schema":{"$ref":"#/components/schemas/CsrfToken"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Security"]}},"/events":{"get":{"operationId":"findEvents","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"titleContains","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"post":{"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/banners":{"post":{"operationId":"uploadEventBanner","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/signups":{"get":{"operationId":"findEventSignUps","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"userId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"eventId","required":false,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/byAccessToken":{"get":{"operationId":"findEventSignUpsByAccessToken","parameters":[{"in":"header","name":"X-Guest-Access-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/{id}":{"delete":{"operationId":"deleteEventSignup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{eventId}":{"delete":{"operationId":"deleteEventById","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{eventId}/banners":{"get":{"operationId":"downloadEventBanner","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"format":"binary","type":"string"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/{eventId}/signups":{"get":{"operationId":"findEventSignUpsByEventId","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"post":{"operationId":"createEventSignup","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventSignUpRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"put":{"operationId":"updateEventSignUp","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventSignUpRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{id}":{"get":{"operationId":"findEventById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"put":{"operationId":"updateEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{id}/approve":{"put":{"operationId":"approveEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/health":{"get":{"operationId":"healthCheck","responses":{"200":{"content":{"application/json":{"schema":{"type":"boolean"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Health"]}},"/management/cohort-subjects":{"get":{"operationId":"findCohortSubjects","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSubjectSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}":{"get":{"operationId":"findCohortSubjectById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortSubjectDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/drift":{"get":{"operationId":"getDrift","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"system","required":true,"schema":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriftReport"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/drift/link-user":{"post":{"operationId":"linkUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedUser"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/existing":{"post":{"operationId":"linkExistingTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkExistingTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/new":{"post":{"operationId":"createTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/{cohortId}":{"put":{"operationId":"switchTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"cohortId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohorts":{"get":{"operationId":"findCohorts","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/cohorts/{id}":{"get":{"operationId":"findCohortById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/emails":{"get":{"operationId":"list_1","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["createdAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"deliveryStatus","required":false,"schema":{"enum":["PENDING","SENT","DELIVERED","OPENED","BOUNCED","FAILED"],"type":"string"}},{"in":"query","name":"emailType","required":false,"schema":{"type":"string"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEmail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/stats":{"get":{"operationId":"getStats_1","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailStats"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/{id}/retry":{"post":{"operationId":"retry_1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/jobs":{"get":{"operationId":"list","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["updatedAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"status","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionStatus"}},{"in":"query","name":"category","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionCategory"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}},{"in":"query","name":"initiatedByType","required":false,"schema":{"enum":["USER","SYSTEM"],"type":"string"}},{"in":"query","name":"jobType","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelJobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/enqueue":{"post":{"operationId":"enqueue","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueueJobRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/stats":{"get":{"operationId":"getStats","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatsDTO"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/types":{"get":{"operationId":"jobTypes","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JobTypeDescriptor"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/{id}/retry":{"post":{"operationId":"retry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/me/services":{"get":{"operationId":"myServices","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ServiceEntry"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["My Services"]}},"/memberProfiles":{"post":{"operationId":"createMemberProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberProfileRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/memberships":{"get":{"operationId":"findMemberships","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MembershipResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"post":{"operationId":"createMembership","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}":{"get":{"operationId":"findMembershipById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"put":{"operationId":"updateMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/oauth2/forward-auth":{"get":{"operationId":"forwardAuth","responses":{"200":{"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Forward Auth"]}},"/recovery/member/activate":{"post":{"operationId":"memberActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password":{"post":{"operationId":"setPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password/reset/{username}":{"post":{"operationId":"resetPassword","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate":{"post":{"operationId":"userActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate/resend/{username}":{"post":{"operationId":"resendUserActivation","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/users/{userId}/resend/recovery":{"post":{"operationId":"resendMemberActivationEmail","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/sponsors":{"get":{"operationId":"findSponsors","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SponsorResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"post":{"operationId":"createSponsor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSponsorRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/sponsors/{id}":{"delete":{"operationId":"deleteSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"get":{"operationId":"findSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"put":{"operationId":"updateSponsor","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSponsorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/telemetry":{"post":{"operationId":"createTelemetry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTelemetryRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/telemetry/{id}":{"get":{"operationId":"findTelemetryById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/users":{"get":{"operationId":"findUsers","parameters":[{"in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}},{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"post":{"operationId":"createUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/deleted":{"get":{"operationId":"findDeletedUsers","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{id}":{"put":{"operationId":"updateUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}":{"delete":{"operationId":"deleteUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"get":{"operationId":"findUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/memberProfiles":{"get":{"operationId":"findMemberProfileByUserId","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]},"put":{"operationId":"updateMemberProfile","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberProfileRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/users/{userId}/memberships":{"post":{"operationId":"boardCreateMembership","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardCreateMembershipRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/users/{userId}/restore":{"put":{"operationId":"restoreDeletedUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/roles":{"put":{"operationId":"toggleUserRole","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"role","required":true,"schema":{"$ref":"#/components/schemas/Role"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}}},"servers":[{"description":"Generated server url","url":"http://localhost:8080"}],"tags":[{"description":"Admin cohort listings + detail","name":"Cohorts"},{"description":"API for managing outbound emails","name":"Email Management"},{"description":"Admin: logical subjects + their per-system mappings","name":"Cohort Subjects"},{"description":"API for managing job executions","name":"Job Management"}]} +{"components":{"schemas":{"Actor":{"properties":{"role":{"$ref":"#/components/schemas/Role"},"type":{"enum":["USER","SYSTEM"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","type"],"type":"object"},"AddBoardMemberRequest":{"properties":{"endDate":{"format":"date","type":"string"},"role":{"minLength":1,"type":"string"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","startDate","userId"],"type":"object"},"AddressResponse":{"properties":{"city":{"type":"string"},"country":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"houseNumber":{"type":"string"},"id":{"format":"int64","type":"integer"},"street":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"},"zipCode":{"type":"string"}},"required":["createdAt","id","updatedAt","version"],"type":"object"},"AnswerRequest":{"properties":{"optionSelections":{"items":{"type":"boolean"},"type":"array"},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":"string"}},"required":["questionId"],"type":"object"},"AnswerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"optionSelections":{"items":{"type":"boolean"},"type":"array"},"questionId":{"format":"int64","type":"integer"},"textResponse":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questionId","updatedAt","version"],"type":"object"},"ApiError":{"description":"Problem Details for HTTP APIs including validation errors.","properties":{"detail":{"description":"Human-readable explanation specific to this occurrence.","example":"Validation failed for request.","type":"string"},"errors":{"description":"List of field/object validation errors (present when binding/validation fails).","items":{"$ref":"#/components/schemas/FieldValidationError"},"type":"array"},"instance":{"description":"A URI reference that identifies the specific occurrence.","example":"/api/v1/users","format":"uri","type":"string"},"status":{"description":"HTTP status code.","example":400,"format":"int32","type":"integer"},"title":{"description":"Short, human-readable summary of the problem.","example":"Bad Request","type":"string"},"traceId":{"description":"Trace or correlation id if available (Spring may add this via problem detail handlers).","example":"a8c0c4e5f1c24a7e","type":"string"},"type":{"description":"Problem type URI (RFC 7807).","example":"about:blank","type":"string"}}},"BlogResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"html":{"type":"string"},"id":{"format":"int64","type":"integer"},"publishedAt":{"format":"date-time","type":"string"},"title":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","html","id","publishedAt","title","updatedAt","url","version"],"type":"object"},"BoardCreateMembershipRequest":{"properties":{"endDate":{"format":"date","type":"string"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["incasso","memberType","userId"],"type":"object"},"BoardMemberResponse":{"properties":{"boardId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"role":{"type":"string"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["boardId","createdAt","role","startDate","updatedAt","userId","version"],"type":"object"},"BoardResponse":{"properties":{"candidate":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/BoardMemberResponse"},"type":"array"},"name":{"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["candidate","createdAt","id","members","name","startDate","updatedAt","version"],"type":"object"},"CohortDetail":{"properties":{"externalId":{"type":"string"},"folder":{"type":"string"},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CohortMemberRow"},"type":"array"},"rules":{"items":{"$ref":"#/components/schemas/CohortRule"},"type":"array"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","members","rules","system"],"type":"object"},"CohortFactKind":{"enum":["ROLE","COMMITTEE","CONTRIBUTION_PAID","MEMBER_IN_PERIOD","NEWSLETTER","ACTIVE_IN_PERIOD"],"type":"string"},"CohortKind":{"enum":["LIST","ROLE","GROUP"],"type":"string"},"CohortMapping":{"properties":{"cohortId":{"format":"int64","type":"integer"},"externalId":{"type":"string"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"system":{"description":"External system this mapping targets","enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["cohortId","kind","label","system"],"type":"object"},"CohortMemberRow":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"userEmail":{"type":"string"},"userFullName":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["cohortMemberId","isUserDeleted","joinedAt","userId"],"type":"object"},"CohortRepair":{"properties":{"cohortId":{"format":"int64","type":"integer"},"enqueuedAdds":{"format":"int32","type":"integer"}},"required":["cohortId","enqueuedAdds"],"type":"object"},"CohortRule":{"properties":{"enabled":{"type":"boolean"},"factKey":{"type":"string"},"factKind":{"$ref":"#/components/schemas/CohortFactKind"},"id":{"format":"int64","type":"integer"}},"required":["enabled","factKey","factKind","id"],"type":"object"},"CohortSubjectCategory":{"enum":["COMMITTEES","PERIODS","MEMBERS","OTHER"],"type":"string"},"CohortSubjectDetail":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"description":{"type":"string"},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappings":{"items":{"$ref":"#/components/schemas/CohortMapping"},"type":"array"},"members":{"items":{"$ref":"#/components/schemas/CohortSubjectMember"},"type":"array"},"rules":{"items":{"$ref":"#/components/schemas/CohortSubjectRule"},"type":"array"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappings","members","rules","type"],"type":"object"},"CohortSubjectMember":{"properties":{"cohortMemberId":{"format":"int64","type":"integer"},"isUserDeleted":{"type":"boolean"},"joinedAt":{"format":"date-time","type":"string"},"userEmail":{"type":"string"},"userFullName":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["cohortMemberId","isUserDeleted","joinedAt","userId"],"type":"object"},"CohortSubjectRule":{"properties":{"enabled":{"type":"boolean"},"factKey":{"type":"string"},"factKind":{"$ref":"#/components/schemas/CohortFactKind"},"id":{"format":"int64","type":"integer"}},"required":["enabled","factKey","factKind","id"],"type":"object"},"CohortSubjectSummary":{"properties":{"category":{"$ref":"#/components/schemas/CohortSubjectCategory"},"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"mappingCount":{"format":"int32","type":"integer"},"memberCount":{"format":"int32","type":"integer"},"type":{"$ref":"#/components/schemas/CohortSubjectType"}},"required":["category","id","label","mappingCount","memberCount","type"],"type":"object"},"CohortSubjectType":{"enum":["COMMITTEE_MEMBERS","PERIOD_PAYERS","PERIOD_MEMBERS","PERIOD_ACTIVE_MEMBERS","NEWSLETTER_SUBSCRIBERS","CUSTOM"],"type":"string"},"CohortSummary":{"properties":{"externalId":{"type":"string"},"folder":{"type":"string"},"id":{"format":"int64","type":"integer"},"kind":{"$ref":"#/components/schemas/CohortKind"},"label":{"type":"string"},"memberCount":{"format":"int32","type":"integer"},"system":{"type":"string"}},"required":["id","kind","label","memberCount","system"],"type":"object"},"CommitteeDetailResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"id":{"format":"int64","type":"integer"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberResponse"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","members","name","updatedAt","version"],"type":"object"},"CommitteeMemberRequest":{"properties":{"role":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["role","userId"],"type":"object"},"CommitteeMemberResponse":{"properties":{"committeeId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"role":{"minLength":1,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["committeeId","createdAt","role","updatedAt","userId","version"],"type":"object"},"CommitteeResponse":{},"ContributionPeriodResponse":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"id":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","createdAt","endDate","fullYearFee","halfYearFee","id","startDate","updatedAt","version"],"type":"object"},"ContributionReminderResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"remindedAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","createdAt","updatedAt","userId","version"],"type":"object"},"ContributionResponse":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"remindedAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","createdAt","updatedAt","userId","version"],"type":"object"},"CreateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","userId","zipCode"],"type":"object"},"CreateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"minLength":1,"type":"string"}},"required":["html","publishedAt","title"],"type":"object"},"CreateBoardRequest":{"properties":{"candidate":{"minLength":1,"type":"string"},"endDate":{"format":"date","type":"string"},"name":{"maxLength":100,"minLength":1,"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"}},"required":["candidate","name","startDate"],"type":"object"},"CreateCommitteeRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"}},"required":["description","members","name"],"type":"object"},"CreateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"startDate":{"format":"date","type":"string"}},"required":["alumniFee","endDate","fullYearFee","halfYearFee","startDate"],"type":"object"},"CreateContributionReminderRequest":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateContributionRequest":{"properties":{"contributionPeriodId":{"format":"int64","type":"integer"},"userId":{"format":"int64","type":"integer"}},"required":["contributionPeriodId","userId"],"type":"object"},"CreateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerRequest"},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyRequest"},"signUpLimit":{"format":"int32","minimum":1,"type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title"],"type":"object"},"CreateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":"array"},"guest":{"$ref":"#/components/schemas/CreateGuestRequest"},"userId":{"format":"int64","type":"integer"}},"type":"object"},"CreateGuestRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"phoneNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["discord","email","name"],"type":"object"},"CreateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality","userId"],"type":"object"},"CreateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"}},"required":["description","name"],"type":"object"},"CreateTargetRequest":{"properties":{"folderHint":{"type":"string"},"label":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["label","system"],"type":"object"},"CreateTelemetryRequest":{"properties":{"platform":{"$ref":"#/components/schemas/PlatformType"},"url":{"minLength":1,"type":"string"}},"required":["platform","url"],"type":"object"},"CreateUserRequest":{"properties":{"consentPrivacy":{"type":"boolean"},"discord":{"minLength":1,"type":"string"},"email":{"minLength":1,"type":"string"},"firstName":{"minLength":1,"type":"string"},"fullName":{"type":"string"},"initials":{"minLength":1,"type":"string"},"lastName":{"minLength":1,"type":"string"},"memberProfile":{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},"newsletter":{"type":"boolean"},"password":{"type":"string"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":"boolean"},"prefix":{"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["discord","email","firstName","initials","lastName","newsletter","phoneNumber","username"],"type":"object"},"CsrfToken":{"properties":{"headerName":{"type":"string"},"parameterName":{"type":"string"},"token":{"type":"string"}},"type":"object"},"DriftReport":{"properties":{"cohortId":{"format":"int64","type":"integer"},"externalCohortId":{"type":"string"},"extras":{"items":{"$ref":"#/components/schemas/ExtraRow"},"type":"array"},"lastReconciledAt":{"format":"date-time","type":"string"},"missing":{"items":{"$ref":"#/components/schemas/MissingRow"},"type":"array"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["cohortId","extras","missing","system"],"type":"object"},"Email":{"properties":{"attempts":{"format":"int32","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"deliveredAt":{"format":"date-time","type":"string"},"deliveryStatus":{"enum":["PENDING","SENT","DELIVERED","OPENED","BOUNCED","FAILED"],"type":"string"},"emailType":{"type":"string"},"errorReason":{"type":"string"},"errorType":{"type":"string"},"id":{"format":"int64","type":"integer"},"jobExecutionId":{"format":"int64","type":"integer"},"messageId":{"type":"string"},"openedAt":{"format":"date-time","type":"string"},"recipientEmail":{"type":"string"},"recipientName":{"type":"string"},"sentAt":{"format":"date-time","type":"string"},"subject":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"type":"object"},"EmailStats":{"properties":{"bouncedCount":{"format":"int64","type":"integer"},"deliveredCount":{"format":"int64","type":"integer"},"failedCount":{"format":"int64","type":"integer"},"openedCount":{"format":"int64","type":"integer"},"pendingCount":{"format":"int64","type":"integer"},"sentCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["bouncedCount","deliveredCount","failedCount","openedCount","pendingCount","sentCount","totalCount"],"type":"object"},"EnqueueJobRequest":{"properties":{"jobType":{"minLength":1,"type":"string"},"payload":{"additionalProperties":{},"description":"Job payload fields keyed by name; shape depends on the job type","type":"object"}},"required":["jobType"],"type":"object"},"EventBannerRequest":{"properties":{"fileId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["fileId"],"type":"object"},"EventBannerResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"fileId":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","eventId","fileId","updatedAt","version"],"type":"object"},"EventResponse":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerResponse"},"committeeId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"signUp":{"type":"boolean"},"signUpCount":{"format":"int64","type":"integer"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyResponse"},"signUpLimit":{"format":"int32","type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","createdAt","description","endTime","id","membersOnly","signUp","signUpCount","startTime","title","updatedAt","version"],"type":"object"},"EventSignUpResponse":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerResponse"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"eventId":{"format":"int64","type":"integer"},"guest":{"$ref":"#/components/schemas/GuestResponse"},"id":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"user":{"$ref":"#/components/schemas/UserSummaryResponse"},"version":{"format":"int64","type":"integer"}},"required":["answers","createdAt","eventId","id","updatedAt","version"],"type":"object"},"ExtraRow":{"properties":{"email":{"type":"string"},"externalUserId":{"type":"string"},"fullName":{"type":"string"},"kind":{"enum":["KNOWN_LOCAL_USER","UNKNOWN_EXTERNAL"],"type":"string"},"label":{"type":"string"},"softDeleted":{"type":"boolean"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","kind"],"type":"object"},"FieldValidationError":{"description":"Details about a single field/object validation error.","properties":{"code":{"description":"Validation code / constraint key.","example":"Email","type":"string"},"field":{"description":"Field that failed validation (null for global errors).","example":"email","type":"string"},"message":{"description":"Human-readable validation message.","example":"must be a well-formed email address","type":"string"},"objectName":{"description":"Object (target) name that failed validation.","example":"createUserRequest","type":"string"}}},"FileResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"mediaType":{"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"path":{"type":"string"},"size":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/FileType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","mediaType","name","path","type","updatedAt","version"],"type":"object"},"FileType":{"enum":["DOCUMENT","PROFILE_PICTURE","EVENT_BANNER","EVENT_PICTURE","SPONSOR_PICTURE"],"type":"string"},"GuestResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"phoneNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","discord","email","id","name","updatedAt","version"],"type":"object"},"JobExecution":{"properties":{"actor":{"$ref":"#/components/schemas/Actor"},"attempts":{"format":"int32","type":"integer"},"category":{"$ref":"#/components/schemas/JobExecutionCategory"},"createdAt":{"format":"date-time","type":"string"},"dedupKey":{"type":"string"},"errorMessage":{"type":"string"},"errorReason":{"type":"string"},"errorType":{"type":"string"},"finishedAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"initiatedByDisplay":{"type":"string"},"initiatedByFullName":{"type":"string"},"initiatedByRole":{"$ref":"#/components/schemas/Role"},"initiatedByType":{"enum":["USER","SYSTEM"],"type":"string"},"initiatedByUserId":{"format":"int64","type":"integer"},"initiatedByUsername":{"type":"string"},"jobType":{"minLength":1,"type":"string"},"nextAttemptAt":{"format":"date-time","type":"string"},"payload":{"additionalProperties":{},"type":"object"},"queuedAt":{"format":"date-time","type":"string"},"relatedEntities":{"items":{"$ref":"#/components/schemas/JobExecutionRelatedEntity"},"type":"array"},"stackTrace":{"type":"string"},"startedAt":{"format":"date-time","type":"string"},"status":{"$ref":"#/components/schemas/JobExecutionStatus"},"targetSystem":{"enum":["BREVO"],"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["attempts","jobType","relatedEntities","status"],"type":"object"},"JobExecutionCategory":{"enum":["calendar","contact","cohort","email","other"],"type":"string"},"JobExecutionRelatedEntity":{"properties":{"id":{"format":"int64","type":"integer"},"label":{"type":"string"},"type":{"type":"string"}},"required":["label","type"],"type":"object"},"JobExecutionStatus":{"enum":["QUEUED","RUNNING","SUCCESS","FAILED","DEAD"],"type":"string"},"JobPayloadField":{"properties":{"enumValues":{"items":{"type":"string"},"type":"array"},"kind":{"$ref":"#/components/schemas/JobPayloadFieldKind"},"name":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"required":["kind","name","required","type"],"type":"object"},"JobPayloadFieldKind":{"enum":["PRIMITIVE","ENUM","OBJECT"],"type":"string"},"JobStatsDTO":{"properties":{"avgSuccessDurationSeconds":{"format":"double","type":"number"},"deadCount":{"format":"int64","type":"integer"},"deadSinceStartup":{"format":"double","type":"number"},"failedCount":{"format":"int64","type":"integer"},"failedSinceStartup":{"format":"double","type":"number"},"queuedCount":{"format":"int64","type":"integer"},"recoveriesSinceStartup":{"format":"double","type":"number"},"runningCount":{"format":"int64","type":"integer"},"successCount":{"format":"int64","type":"integer"},"totalCount":{"format":"int64","type":"integer"}},"required":["avgSuccessDurationSeconds","deadCount","deadSinceStartup","failedCount","failedSinceStartup","queuedCount","recoveriesSinceStartup","runningCount","successCount","totalCount"],"type":"object"},"JobTypeDescriptor":{"properties":{"payloadFields":{"items":{"$ref":"#/components/schemas/JobPayloadField"},"type":"array"},"type":{"type":"string"}},"required":["payloadFields","type"],"type":"object"},"JwtRequest":{"properties":{"password":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","username"],"type":"object"},"LinkExistingTargetRequest":{"properties":{"externalId":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}},"required":["externalId","system"],"type":"object"},"LinkUserRequest":{"properties":{"externalUserId":{"minLength":1,"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LinkedUser":{"properties":{"externalUserId":{"type":"string"},"system":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"},"userId":{"format":"int64","type":"integer"}},"required":["externalUserId","system","userId"],"type":"object"},"LoginResponse":{"properties":{"addressId":{"format":"int64","type":"integer"},"expiration":{"format":"int64","type":"integer"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"minItems":1,"type":"array"},"token":{"minLength":1,"type":"string"},"userId":{"format":"int64","type":"integer"},"username":{"minLength":1,"type":"string"}},"required":["expiration","roles","token","userId","username"],"type":"object"},"MemberActivationRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"},"username":{"minLength":1,"type":"string"}},"required":["password","token","username"],"type":"object"},"MemberProfileResponse":{"properties":{"bhv":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"id":{"format":"int64","type":"integer"},"nationality":{"type":"string"},"studentNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["bhv","createdAt","ehbo","id","updatedAt","userId","version"]},"MemberType":{"enum":["ALUMNI","HONORARY","REGULAR","NONE"],"type":"string"},"MembershipResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"endDate":{"format":"date","type":"string"},"id":{"format":"int64","type":"integer"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","incasso","memberType","startDate","updatedAt","userId","version"],"type":"object"},"MissingRow":{"properties":{"hasExternalMapping":{"type":"boolean"},"userId":{"format":"int64","type":"integer"}},"required":["hasExternalMapping","userId"],"type":"object"},"PageMetadata":{"properties":{"number":{"format":"int64","type":"integer"},"size":{"format":"int64","type":"integer"},"totalElements":{"format":"int64","type":"integer"},"totalPages":{"format":"int64","type":"integer"}},"type":"object"},"PagedModelEmail":{"properties":{"content":{"items":{"$ref":"#/components/schemas/Email"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelEventResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/EventResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelJobExecution":{"properties":{"content":{"items":{"$ref":"#/components/schemas/JobExecution"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PagedModelUserDetailResponse":{"properties":{"content":{"items":{"$ref":"#/components/schemas/UserDetailResponse"},"type":"array"},"page":{"$ref":"#/components/schemas/PageMetadata"}},"type":"object"},"PasswordResetRequest":{"properties":{"password":{"maxLength":100,"minLength":8,"pattern":"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]+$","type":"string"},"token":{"minLength":1,"type":"string"}},"required":["password","token"],"type":"object"},"PlatformType":{"enum":["FACEBOOK","LINKEDIN","TWITTER","INSTAGRAM"],"type":"string"},"QuestionRequest":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":"array"},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":"boolean"},"type":{"$ref":"#/components/schemas/QuestionType"}},"required":["idx","label","type"],"type":"object"},"QuestionResponse":{"properties":{"choiceLabels":{"items":{"type":"string"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"idx":{"format":"int64","type":"integer"},"label":{"maxLength":2055,"minLength":0,"type":"string"},"required":{"type":"boolean"},"surveyId":{"format":"int64","type":"integer"},"type":{"$ref":"#/components/schemas/QuestionType"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","idx","label","surveyId","type","updatedAt","version"],"type":"object"},"QuestionType":{"enum":["OPEN","RADIO","CHECKBOX","DESCRIPTION"],"type":"string"},"RedirectResponse":{"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"Role":{"enum":["ANONYMOUS","VEGAN","GUEST","COMPANY","MEMBER","COMMITTEE","BOARD","TREASURER","ADMIN","SYSTEM"],"type":"string"},"ServiceEntry":{"properties":{"description":{"type":"string"},"iconUrl":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["description","iconUrl","id","name","url"],"type":"object"},"SponsorResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"description":{"type":"string"},"id":{"format":"int64","type":"integer"},"name":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","description","id","name","updatedAt","version"],"type":"object"},"SurveyRequest":{"properties":{"questions":{"items":{"$ref":"#/components/schemas/QuestionRequest"},"minItems":1,"type":"array"}},"required":["questions"],"type":"object"},"SurveyResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"questions":{"items":{"$ref":"#/components/schemas/QuestionResponse"},"minItems":1,"type":"array"},"responseCount":{"format":"int64","type":"integer"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","questions","responseCount","updatedAt","version"],"type":"object"},"SwitchTargetRequest":{"properties":{"deletePrevious":{"type":"boolean"},"externalId":{"minLength":1,"type":"string"},"reconcileNow":{"type":"boolean"}},"required":["deletePrevious","externalId","reconcileNow"],"type":"object"},"TelemetryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"id":{"format":"int64","type":"integer"},"platform":{"$ref":"#/components/schemas/PlatformType"},"updatedAt":{"format":"date-time","type":"string"},"url":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","id","platform","updatedAt","url","version"],"type":"object"},"UpdateAddressRequest":{"properties":{"city":{"minLength":1,"type":"string"},"country":{"minLength":1,"type":"string"},"houseNumber":{"minLength":1,"type":"string"},"street":{"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"},"zipCode":{"minLength":1,"type":"string"}},"required":["city","country","houseNumber","street","version","zipCode"],"type":"object"},"UpdateBlogRequest":{"properties":{"html":{"minLength":1,"type":"string"},"publishedAt":{"format":"date-time","type":"string"},"title":{"minLength":1,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["html","publishedAt","title","version"],"type":"object"},"UpdateBoardRequest":{"properties":{"candidate":{"minLength":1,"type":"string"},"endDate":{"format":"date","type":"string"},"name":{"maxLength":100,"minLength":1,"type":"string"},"pictureId":{"format":"int64","type":"integer"},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["candidate","name","startDate","version"],"type":"object"},"UpdateCommitteeRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"members":{"items":{"$ref":"#/components/schemas/CommitteeMemberRequest"},"minItems":1,"type":"array"},"name":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","members","name","version"],"type":"object"},"UpdateContributionPeriodRequest":{"properties":{"alumniFee":{"format":"double","type":"number"},"contactListId":{"format":"int64","type":"integer"},"endDate":{"format":"date","type":"string"},"fullYearFee":{"format":"double","type":"number"},"halfYearFee":{"format":"double","type":"number"},"startDate":{"format":"date","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["alumniFee","endDate","fullYearFee","halfYearFee","startDate","version"],"type":"object"},"UpdateEventRequest":{"properties":{"approved":{"type":"boolean"},"banner":{"$ref":"#/components/schemas/EventBannerRequest"},"committeeId":{"format":"int64","type":"integer"},"description":{"maxLength":4095,"minLength":0,"type":"string"},"endTime":{"format":"date-time","type":"string"},"location":{"type":"string"},"memberPrice":{"format":"double","type":"number"},"membersOnly":{"type":"boolean"},"publicPrice":{"format":"double","type":"number"},"removeExistingSignUps":{"type":"boolean"},"signUp":{"type":"boolean"},"signUpDeadline":{"format":"date-time","type":"string"},"signUpForm":{"$ref":"#/components/schemas/SurveyRequest"},"signUpLimit":{"format":"int32","minimum":1,"type":"integer"},"startTime":{"format":"date-time","type":"string"},"title":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["approved","committeeId","description","endTime","membersOnly","signUp","startTime","title","version"],"type":"object"},"UpdateEventSignUpRequest":{"properties":{"answers":{"items":{"$ref":"#/components/schemas/AnswerRequest"},"type":"array"},"guest":{"$ref":"#/components/schemas/CreateGuestRequest"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"type":"object"},"UpdateMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality","version"],"type":"object"},"UpdateMembershipRequest":{"properties":{"endDate":{"format":"date","type":"string"},"incasso":{"type":"boolean"},"memberType":{"$ref":"#/components/schemas/MemberType"},"startDate":{"format":"date","type":"string"},"userId":{"format":"int64","type":"integer"},"version":{"format":"int64","type":"integer"}},"required":["userId","version"],"type":"object"},"UpdateSponsorRequest":{"properties":{"description":{"maxLength":4095,"minLength":0,"type":"string"},"name":{"maxLength":255,"minLength":0,"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["description","name","version"],"type":"object"},"UpdateUserRequest":{"properties":{"discord":{"minLength":1,"type":"string"},"memberProfile":{"$ref":"#/components/schemas/UpsertMemberProfileRequest"},"newsletter":{"type":"boolean"},"phoneNumber":{"minLength":1,"type":"string"},"photoConsent":{"type":"boolean"},"version":{"format":"int64","type":"integer"}},"required":["discord","newsletter","phoneNumber","version"],"type":"object"},"UpsertMemberProfileRequest":{"properties":{"bhv":{"type":"boolean"},"dateOfBirth":{"format":"date","type":"string"},"ehbo":{"type":"boolean"},"gender":{"type":"string"},"nationality":{"minLength":1,"type":"string"},"studentNumber":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["bhv","dateOfBirth","ehbo","nationality"],"type":"object"},"UserActivationRequest":{"properties":{"token":{"minLength":1,"type":"string"}},"required":["token"],"type":"object"},"UserDetailResponse":{"properties":{"addressId":{"format":"int64","type":"integer"},"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"enabled":{"type":"boolean"},"firstName":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"initials":{"type":"string"},"lastName":{"type":"string"},"newsletter":{"type":"boolean"},"phoneNumber":{"type":"string"},"photoConsent":{"type":"boolean"},"prefix":{"type":"string"},"restoreUntilAt":{"format":"date-time","type":"string"},"roles":{"items":{"$ref":"#/components/schemas/Role"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"username":{"type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","enabled","firstName","fullName","id","initials","lastName","newsletter","photoConsent","roles","updatedAt","username","version"],"type":"object"},"UserSummaryResponse":{"properties":{"createdAt":{"format":"date-time","type":"string"},"discord":{"type":"string"},"email":{"type":"string"},"fullName":{"type":"string"},"id":{"format":"int64","type":"integer"},"phoneNumber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"version":{"format":"int64","type":"integer"}},"required":["createdAt","email","fullName","id","updatedAt","version"],"type":"object"}}},"info":{"title":"OpenAPI definition","version":"v0"},"openapi":"3.1.0","paths":{"/addresses":{"get":{"operationId":"findAllAddresses","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AddressResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"post":{"operationId":"createAddress","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAddressRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/addresses/{id}":{"delete":{"operationId":"deleteAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"get":{"operationId":"findAddressById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]},"put":{"operationId":"updateAddress","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Addresses"]}},"/auth":{"post":{"operationId":"authenticate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/auth/logout":{"post":{"operationId":"logout","responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Authentication"]}},"/blogs":{"get":{"operationId":"findBlogs","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlogResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"createBlog","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBlogRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/blogs/{id}":{"delete":{"operationId":"deleteById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"get":{"operationId":"findBlogById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]},"post":{"operationId":"updateBlog","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBlogRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Blogs"]}},"/boards":{"get":{"operationId":"findAllBoards","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BoardResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"post":{"operationId":"createBoard","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBoardRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members":{"post":{"operationId":"addMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddBoardMemberRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardMemberResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{boardId}/members/{userId}":{"delete":{"operationId":"removeMember","parameters":[{"in":"path","name":"boardId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/boards/{id}":{"delete":{"operationId":"deleteBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"get":{"operationId":"findBoardById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]},"put":{"operationId":"updateBoard","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBoardRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Boards"]}},"/committeeMembers/committees":{"get":{"operationId":"findCommitteesByUserId","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees":{"get":{"operationId":"findCommittees","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CommitteeResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"post":{"operationId":"createCommittee","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{committeeId}":{"get":{"operationId":"findCommitteeById","parameters":[{"in":"path","name":"committeeId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/committees/{id}":{"delete":{"operationId":"deleteCommitteeById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]},"put":{"operationId":"updateCommittee","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Committees"]}},"/contributionPeriods":{"get":{"operationId":"findContributionPeriods","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionPeriodResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"post":{"operationId":"createContributionPeriod","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionPeriodRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/current":{"get":{"operationId":"findCurrentContributionPeriod","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{contributionPeriodId}/users/{userId}/contributions":{"delete":{"operationId":"deleteContribution","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionPeriods/{id}":{"delete":{"operationId":"deleteContributionPeriodById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]},"put":{"operationId":"updateContributionPeriod","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContributionPeriodRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionPeriodResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionPeriods"]}},"/contributionPeriods/{periodId}/contributions":{"get":{"operationId":"findContributionsByPeriodId","parameters":[{"in":"path","name":"periodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/contributionReminders":{"get":{"operationId":"findContributionReminders","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]},"post":{"operationId":"sendContributionReminder","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionReminderRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionReminderResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributionReminders/batch":{"post":{"operationId":"sendContributionReminderBatch","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CreateContributionReminderRequest"},"type":"array"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionReminderResponse"},"type":"array"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["ContributionReminders"]}},"/contributions":{"get":{"operationId":"findContributions","parameters":[{"in":"query","name":"contributionPeriodId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ContributionResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]},"post":{"operationId":"createContribution","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContributionRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributionResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Contributions"]}},"/csrf":{"get":{"operationId":"csrf","parameters":[{"in":"query","name":"csrfToken","required":true,"schema":{"$ref":"#/components/schemas/CsrfToken"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Security"]}},"/events":{"get":{"operationId":"findEvents","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}},{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"titleContains","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"post":{"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/banners":{"post":{"operationId":"uploadEventBanner","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"file":{"format":"binary","type":"string"}},"required":["file"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/signups":{"get":{"operationId":"findEventSignUps","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date-time","type":"string"}},{"in":"query","name":"userId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"committeeId","required":false,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"eventId","required":false,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/byAccessToken":{"get":{"operationId":"findEventSignUpsByAccessToken","parameters":[{"in":"header","name":"X-Guest-Access-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/signups/{id}":{"delete":{"operationId":"deleteEventSignup","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{eventId}":{"delete":{"operationId":"deleteEventById","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{eventId}/banners":{"get":{"operationId":"downloadEventBanner","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"format":"binary","type":"string"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Files"]}},"/events/{eventId}/signups":{"get":{"operationId":"findEventSignUpsByEventId","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventSignUpResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"post":{"operationId":"createEventSignup","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventSignUpRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]},"put":{"operationId":"updateEventSignUp","parameters":[{"in":"path","name":"eventId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"header","name":"X-Guest-Access-Token","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventSignUpRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventSignUpResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["EventSignUps"]}},"/events/{id}":{"get":{"operationId":"findEventById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]},"put":{"operationId":"updateEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEventRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/events/{id}/approve":{"put":{"operationId":"approveEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"approved","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Events"]}},"/health":{"get":{"operationId":"healthCheck","responses":{"200":{"content":{"application/json":{"schema":{"type":"boolean"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Health"]}},"/management/cohort-subjects":{"get":{"operationId":"findCohortSubjects","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSubjectSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}":{"get":{"operationId":"findCohortSubjectById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortSubjectDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/drift":{"get":{"operationId":"getDrift","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"system","required":true,"schema":{"enum":["BREVO","GOOGLE_CALENDAR"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriftReport"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/drift/link-user":{"post":{"operationId":"linkUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedUser"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/existing":{"post":{"operationId":"linkExistingTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkExistingTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/new":{"post":{"operationId":"createTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohort-subjects/{id}/targets/{cohortId}":{"put":{"operationId":"switchTarget","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"path","name":"cohortId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchTargetRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortMapping"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohort Subjects"]}},"/management/cohorts":{"get":{"operationId":"findCohorts","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CohortSummary"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/cohorts/{id}":{"get":{"operationId":"findCohortById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortDetail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/cohorts/{id}/repair-missing-adds":{"post":{"operationId":"repairMissingAdds","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CohortRepair"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Cohorts"]}},"/management/emails":{"get":{"operationId":"list_1","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["createdAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"deliveryStatus","required":false,"schema":{"enum":["PENDING","SENT","DELIVERED","OPENED","BOUNCED","FAILED"],"type":"string"}},{"in":"query","name":"emailType","required":false,"schema":{"type":"string"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelEmail"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/stats":{"get":{"operationId":"getStats_1","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailStats"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/emails/{id}/retry":{"post":{"operationId":"retry_1","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Email Management"]}},"/management/jobs":{"get":{"operationId":"list","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":50,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"default":["updatedAt,DESC"],"items":{"type":"string"},"type":"array"}},{"in":"query","name":"status","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionStatus"}},{"in":"query","name":"category","required":false,"schema":{"$ref":"#/components/schemas/JobExecutionCategory"}},{"in":"query","name":"search","required":false,"schema":{"type":"string"}},{"in":"query","name":"initiatedByType","required":false,"schema":{"enum":["USER","SYSTEM"],"type":"string"}},{"in":"query","name":"jobType","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelJobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/enqueue":{"post":{"operationId":"enqueue","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnqueueJobRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/stats":{"get":{"operationId":"getStats","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatsDTO"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/types":{"get":{"operationId":"jobTypes","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JobTypeDescriptor"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/management/jobs/{id}/retry":{"post":{"operationId":"retry","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobExecution"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Job Management"]}},"/me/services":{"get":{"operationId":"myServices","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ServiceEntry"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["My Services"]}},"/memberProfiles":{"post":{"operationId":"createMemberProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberProfileRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/memberships":{"get":{"operationId":"findMemberships","parameters":[{"in":"query","name":"from","required":false,"schema":{"format":"date","type":"string"}},{"in":"query","name":"to","required":false,"schema":{"format":"date","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MembershipResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"post":{"operationId":"createMembership","responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/memberships/{id}":{"get":{"operationId":"findMembershipById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]},"put":{"operationId":"updateMembership","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMembershipRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/oauth2/forward-auth":{"get":{"operationId":"forwardAuth","responses":{"200":{"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Forward Auth"]}},"/recovery/member/activate":{"post":{"operationId":"memberActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password":{"post":{"operationId":"setPassword","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/password/reset/{username}":{"post":{"operationId":"resetPassword","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate":{"post":{"operationId":"userActivate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserActivationRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/user/activate/resend/{username}":{"post":{"operationId":"resendUserActivation","parameters":[{"in":"path","name":"username","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/recovery/users/{userId}/resend/recovery":{"post":{"operationId":"resendMemberActivationEmail","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Recovery"]}},"/sponsors":{"get":{"operationId":"findSponsors","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SponsorResponse"},"type":"array"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"post":{"operationId":"createSponsor","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSponsorRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/sponsors/{id}":{"delete":{"operationId":"deleteSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"get":{"operationId":"findSponsorById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]},"put":{"operationId":"updateSponsor","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSponsorRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SponsorResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Sponsors"]}},"/telemetry":{"post":{"operationId":"createTelemetry","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTelemetryRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/telemetry/{id}":{"get":{"operationId":"findTelemetryById","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemetryResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Telemetries"]}},"/users":{"get":{"operationId":"findUsers","parameters":[{"in":"query","name":"username","required":false,"schema":{"type":"string"}},{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}},{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"post":{"operationId":"createUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/deleted":{"get":{"operationId":"findDeletedUsers","parameters":[{"description":"Zero-based page index (0..N)","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"The size of the page to be returned","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}},{"description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","in":"query","name":"sort","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedModelUserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{id}":{"put":{"operationId":"updateUser","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}":{"delete":{"operationId":"deleteUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]},"get":{"operationId":"findUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/memberProfiles":{"get":{"operationId":"findMemberProfileByUserId","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]},"put":{"operationId":"updateMemberProfile","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberProfileRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Member Profiles"]}},"/users/{userId}/memberships":{"post":{"operationId":"boardCreateMembership","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoardCreateMembershipRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Memberships"]}},"/users/{userId}/restore":{"put":{"operationId":"restoreDeletedUserById","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"No Content"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}},"/users/{userId}/roles":{"put":{"operationId":"toggleUserRole","parameters":[{"in":"path","name":"userId","required":true,"schema":{"format":"int64","type":"integer"}},{"in":"query","name":"role","required":true,"schema":{"$ref":"#/components/schemas/Role"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Bad Request\",\n \"status\": 400,\n \"detail\": \"Validation failed for request.\",\n \"instance\": \"/api/users\",\n \"errors\": [\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"email\",\n \"message\": \"must be a well-formed email address\",\n \"code\": \"Email\"\n },\n {\n \"objectName\": \"createUserRequest\",\n \"field\": \"age\",\n \"message\": \"must be greater than or equal to 0\",\n \"code\": \"Min\"\n }\n ],\n \"traceId\": \"a8c0c4e5f1c24a7e\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Validation error"},"401":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Unauthorized\",\n \"status\": 401,\n \"detail\": \"Full authentication is required to access this resource\",\n \"instance\": \"/api/users\",\n \"traceId\": \"401401401401\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Forbidden\",\n \"status\": 403,\n \"detail\": \"Access is denied\",\n \"instance\": \"/api/users\",\n \"traceId\": \"403403403403\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Forbidden (access denied)"},"404":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Not Found\",\n \"status\": 404,\n \"detail\": \"User not found with id: 42\",\n \"instance\": \"/api/users/42\",\n \"traceId\": \"cdef1234abcd5678\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Not Found"},"500":{"content":{"application/json":{"example":"{\n \"type\": \"about:blank\",\n \"title\": \"Internal Server Error\",\n \"status\": 500,\n \"detail\": \"An unexpected error occurred.\",\n \"instance\": \"/api/users\",\n \"traceId\": \"ab12cd34ef56\"\n}\n","schema":{"$ref":"#/components/schemas/ApiError"}}},"description":"Server error"}},"tags":["Users"]}}},"servers":[{"description":"Generated server url","url":"http://localhost:8080"}],"tags":[{"description":"Admin cohort listings + detail","name":"Cohorts"},{"description":"API for managing outbound emails","name":"Email Management"},{"description":"Admin: logical subjects + their per-system mappings","name":"Cohort Subjects"},{"description":"API for managing job executions","name":"Job Management"}]} diff --git a/services/frontend/src/services/api/blueshell/index.ts b/services/frontend/src/services/api/blueshell/index.ts index 9e769ff1c..a4b824034 100644 --- a/services/frontend/src/services/api/blueshell/index.ts +++ b/services/frontend/src/services/api/blueshell/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { addMember, approveEvent, authenticate, boardCreateMembership, createAddress, createBlog, createBoard, createCommittee, createContribution, createContributionPeriod, createEvent, createEventSignup, createMemberProfile, createMembership, createSponsor, createTarget, createTelemetry, createUser, csrf, deleteAddressById, deleteBoard, deleteById, deleteCommitteeById, deleteContribution, deleteContributionPeriodById, deleteEventById, deleteEventSignup, deleteSponsorById, deleteUserById, downloadEventBanner, enqueue, findAddressById, findAllAddresses, findAllBoards, findBlogById, findBlogs, findBoardById, findCohortById, findCohorts, findCohortSubjectById, findCohortSubjects, findCommitteeById, findCommittees, findCommitteesByUserId, findContributionPeriods, findContributionReminders, findContributions, findContributionsByPeriodId, findCurrentContributionPeriod, findDeletedUsers, findEventById, findEvents, findEventSignUps, findEventSignUpsByAccessToken, findEventSignUpsByEventId, findMemberProfileByUserId, findMembershipById, findMemberships, findSponsorById, findSponsors, findTelemetryById, findUserById, findUsers, forwardAuth, getDrift, getStats, getStats1, healthCheck, jobTypes, linkExistingTarget, linkUser, list, list1, logout, memberActivate, myServices, type Options, removeMember, resendMemberActivationEmail, resendUserActivation, resetPassword, restoreDeletedUserById, retry, retry1, sendContributionReminder, sendContributionReminderBatch, setPassword, switchTarget, toggleUserRole, updateAddress, updateBlog, updateBoard, updateCommittee, updateContributionPeriod, updateEvent, updateEventSignUp, updateMemberProfile, updateMembership, updateSponsor, updateUser, uploadEventBanner, userActivate } from './sdk.gen'; -export { type Actor, type AddBoardMemberRequest, type AddMemberData, type AddMemberError, type AddMemberErrors, type AddMemberResponse, type AddMemberResponses, type AddressResponse, type AnswerRequest, type AnswerResponse, type ApiError, type ApproveEventData, type ApproveEventError, type ApproveEventErrors, type ApproveEventResponse, type ApproveEventResponses, type AuthenticateData, type AuthenticateError, type AuthenticateErrors, type AuthenticateResponse, type AuthenticateResponses, type BlogResponse, type BoardCreateMembershipData, type BoardCreateMembershipError, type BoardCreateMembershipErrors, type BoardCreateMembershipRequest, type BoardCreateMembershipResponse, type BoardCreateMembershipResponses, type BoardMemberResponse, type BoardResponse, type ClientOptions, type CohortDetail, CohortFactKind, CohortKind, type CohortMapping, type CohortMemberRow, type CohortRule, CohortSubjectCategory, type CohortSubjectDetail, type CohortSubjectMember, type CohortSubjectRule, type CohortSubjectSummary, CohortSubjectType, type CohortSummary, type CommitteeDetailResponse, type CommitteeMemberRequest, type CommitteeMemberResponse, type CommitteeResponse, type ContributionPeriodResponse, type ContributionReminderResponse, type ContributionResponse, type CreateAddressData, type CreateAddressError, type CreateAddressErrors, type CreateAddressRequest, type CreateAddressResponse, type CreateAddressResponses, type CreateBlogData, type CreateBlogError, type CreateBlogErrors, type CreateBlogRequest, type CreateBlogResponse, type CreateBlogResponses, type CreateBoardData, type CreateBoardError, type CreateBoardErrors, type CreateBoardRequest, type CreateBoardResponse, type CreateBoardResponses, type CreateCommitteeData, type CreateCommitteeError, type CreateCommitteeErrors, type CreateCommitteeRequest, type CreateCommitteeResponse, type CreateCommitteeResponses, type CreateContributionData, type CreateContributionError, type CreateContributionErrors, type CreateContributionPeriodData, type CreateContributionPeriodError, type CreateContributionPeriodErrors, type CreateContributionPeriodRequest, type CreateContributionPeriodResponse, type CreateContributionPeriodResponses, type CreateContributionReminderRequest, type CreateContributionRequest, type CreateContributionResponse, type CreateContributionResponses, type CreateEventData, type CreateEventError, type CreateEventErrors, type CreateEventRequest, type CreateEventResponse, type CreateEventResponses, type CreateEventSignupData, type CreateEventSignupError, type CreateEventSignupErrors, type CreateEventSignUpRequest, type CreateEventSignupResponse, type CreateEventSignupResponses, type CreateGuestRequest, type CreateMemberProfileData, type CreateMemberProfileError, type CreateMemberProfileErrors, type CreateMemberProfileRequest, type CreateMemberProfileResponse, type CreateMemberProfileResponses, type CreateMembershipData, type CreateMembershipError, type CreateMembershipErrors, type CreateMembershipResponse, type CreateMembershipResponses, type CreateSponsorData, type CreateSponsorError, type CreateSponsorErrors, type CreateSponsorRequest, type CreateSponsorResponse, type CreateSponsorResponses, type CreateTargetData, type CreateTargetError, type CreateTargetErrors, type CreateTargetRequest, type CreateTargetResponse, type CreateTargetResponses, type CreateTelemetryData, type CreateTelemetryError, type CreateTelemetryErrors, type CreateTelemetryRequest, type CreateTelemetryResponse, type CreateTelemetryResponses, type CreateUserData, type CreateUserError, type CreateUserErrors, type CreateUserRequest, type CreateUserResponse, type CreateUserResponses, type CsrfData, type CsrfError, type CsrfErrors, type CsrfResponse, type CsrfResponses, type CsrfToken, type DeleteAddressByIdData, type DeleteAddressByIdError, type DeleteAddressByIdErrors, type DeleteAddressByIdResponse, type DeleteAddressByIdResponses, type DeleteBoardData, type DeleteBoardError, type DeleteBoardErrors, type DeleteBoardResponse, type DeleteBoardResponses, type DeleteByIdData, type DeleteByIdError, type DeleteByIdErrors, type DeleteByIdResponse, type DeleteByIdResponses, type DeleteCommitteeByIdData, type DeleteCommitteeByIdError, type DeleteCommitteeByIdErrors, type DeleteCommitteeByIdResponse, type DeleteCommitteeByIdResponses, type DeleteContributionData, type DeleteContributionError, type DeleteContributionErrors, type DeleteContributionPeriodByIdData, type DeleteContributionPeriodByIdError, type DeleteContributionPeriodByIdErrors, type DeleteContributionPeriodByIdResponse, type DeleteContributionPeriodByIdResponses, type DeleteContributionResponse, type DeleteContributionResponses, type DeleteEventByIdData, type DeleteEventByIdError, type DeleteEventByIdErrors, type DeleteEventByIdResponse, type DeleteEventByIdResponses, type DeleteEventSignupData, type DeleteEventSignupError, type DeleteEventSignupErrors, type DeleteEventSignupResponse, type DeleteEventSignupResponses, type DeleteSponsorByIdData, type DeleteSponsorByIdError, type DeleteSponsorByIdErrors, type DeleteSponsorByIdResponse, type DeleteSponsorByIdResponses, type DeleteUserByIdData, type DeleteUserByIdError, type DeleteUserByIdErrors, type DeleteUserByIdResponse, type DeleteUserByIdResponses, type DownloadEventBannerData, type DownloadEventBannerError, type DownloadEventBannerErrors, type DownloadEventBannerResponse, type DownloadEventBannerResponses, type DriftReport, type Email, type EmailStats, type EnqueueData, type EnqueueError, type EnqueueErrors, type EnqueueJobRequest, type EnqueueResponse, type EnqueueResponses, type EventBannerRequest, type EventBannerResponse, type EventResponse, type EventSignUpResponse, type ExtraRow, type FieldValidationError, type FileResponse, FileType, type FindAddressByIdData, type FindAddressByIdError, type FindAddressByIdErrors, type FindAddressByIdResponse, type FindAddressByIdResponses, type FindAllAddressesData, type FindAllAddressesError, type FindAllAddressesErrors, type FindAllAddressesResponse, type FindAllAddressesResponses, type FindAllBoardsData, type FindAllBoardsError, type FindAllBoardsErrors, type FindAllBoardsResponse, type FindAllBoardsResponses, type FindBlogByIdData, type FindBlogByIdError, type FindBlogByIdErrors, type FindBlogByIdResponse, type FindBlogByIdResponses, type FindBlogsData, type FindBlogsError, type FindBlogsErrors, type FindBlogsResponse, type FindBlogsResponses, type FindBoardByIdData, type FindBoardByIdError, type FindBoardByIdErrors, type FindBoardByIdResponse, type FindBoardByIdResponses, type FindCohortByIdData, type FindCohortByIdError, type FindCohortByIdErrors, type FindCohortByIdResponse, type FindCohortByIdResponses, type FindCohortsData, type FindCohortsError, type FindCohortsErrors, type FindCohortsResponse, type FindCohortsResponses, type FindCohortSubjectByIdData, type FindCohortSubjectByIdError, type FindCohortSubjectByIdErrors, type FindCohortSubjectByIdResponse, type FindCohortSubjectByIdResponses, type FindCohortSubjectsData, type FindCohortSubjectsError, type FindCohortSubjectsErrors, type FindCohortSubjectsResponse, type FindCohortSubjectsResponses, type FindCommitteeByIdData, type FindCommitteeByIdError, type FindCommitteeByIdErrors, type FindCommitteeByIdResponse, type FindCommitteeByIdResponses, type FindCommitteesByUserIdData, type FindCommitteesByUserIdError, type FindCommitteesByUserIdErrors, type FindCommitteesByUserIdResponse, type FindCommitteesByUserIdResponses, type FindCommitteesData, type FindCommitteesError, type FindCommitteesErrors, type FindCommitteesResponse, type FindCommitteesResponses, type FindContributionPeriodsData, type FindContributionPeriodsError, type FindContributionPeriodsErrors, type FindContributionPeriodsResponse, type FindContributionPeriodsResponses, type FindContributionRemindersData, type FindContributionRemindersError, type FindContributionRemindersErrors, type FindContributionRemindersResponse, type FindContributionRemindersResponses, type FindContributionsByPeriodIdData, type FindContributionsByPeriodIdError, type FindContributionsByPeriodIdErrors, type FindContributionsByPeriodIdResponse, type FindContributionsByPeriodIdResponses, type FindContributionsData, type FindContributionsError, type FindContributionsErrors, type FindContributionsResponse, type FindContributionsResponses, type FindCurrentContributionPeriodData, type FindCurrentContributionPeriodError, type FindCurrentContributionPeriodErrors, type FindCurrentContributionPeriodResponse, type FindCurrentContributionPeriodResponses, type FindDeletedUsersData, type FindDeletedUsersError, type FindDeletedUsersErrors, type FindDeletedUsersResponse, type FindDeletedUsersResponses, type FindEventByIdData, type FindEventByIdError, type FindEventByIdErrors, type FindEventByIdResponse, type FindEventByIdResponses, type FindEventsData, type FindEventsError, type FindEventsErrors, type FindEventSignUpsByAccessTokenData, type FindEventSignUpsByAccessTokenError, type FindEventSignUpsByAccessTokenErrors, type FindEventSignUpsByAccessTokenResponse, type FindEventSignUpsByAccessTokenResponses, type FindEventSignUpsByEventIdData, type FindEventSignUpsByEventIdError, type FindEventSignUpsByEventIdErrors, type FindEventSignUpsByEventIdResponse, type FindEventSignUpsByEventIdResponses, type FindEventSignUpsData, type FindEventSignUpsError, type FindEventSignUpsErrors, type FindEventSignUpsResponse, type FindEventSignUpsResponses, type FindEventsResponse, type FindEventsResponses, type FindMemberProfileByUserIdData, type FindMemberProfileByUserIdError, type FindMemberProfileByUserIdErrors, type FindMemberProfileByUserIdResponse, type FindMemberProfileByUserIdResponses, type FindMembershipByIdData, type FindMembershipByIdError, type FindMembershipByIdErrors, type FindMembershipByIdResponse, type FindMembershipByIdResponses, type FindMembershipsData, type FindMembershipsError, type FindMembershipsErrors, type FindMembershipsResponse, type FindMembershipsResponses, type FindSponsorByIdData, type FindSponsorByIdError, type FindSponsorByIdErrors, type FindSponsorByIdResponse, type FindSponsorByIdResponses, type FindSponsorsData, type FindSponsorsError, type FindSponsorsErrors, type FindSponsorsResponse, type FindSponsorsResponses, type FindTelemetryByIdData, type FindTelemetryByIdError, type FindTelemetryByIdErrors, type FindTelemetryByIdResponse, type FindTelemetryByIdResponses, type FindUserByIdData, type FindUserByIdError, type FindUserByIdErrors, type FindUserByIdResponse, type FindUserByIdResponses, type FindUsersData, type FindUsersError, type FindUsersErrors, type FindUsersResponse, type FindUsersResponses, type ForwardAuthData, type ForwardAuthError, type ForwardAuthErrors, type ForwardAuthResponses, type GetDriftData, type GetDriftError, type GetDriftErrors, type GetDriftResponse, type GetDriftResponses, type GetStats1Data, type GetStats1Error, type GetStats1Errors, type GetStats1Response, type GetStats1Responses, type GetStatsData, type GetStatsError, type GetStatsErrors, type GetStatsResponse, type GetStatsResponses, type GuestResponse, type HealthCheckData, type HealthCheckError, type HealthCheckErrors, type HealthCheckResponse, type HealthCheckResponses, type JobExecution, JobExecutionCategory, type JobExecutionRelatedEntity, JobExecutionStatus, type JobPayloadField, JobPayloadFieldKind, type JobStatsDto, type JobTypeDescriptor, type JobTypesData, type JobTypesError, type JobTypesErrors, type JobTypesResponse, type JobTypesResponses, type JwtRequest, type LinkedUser, type LinkExistingTargetData, type LinkExistingTargetError, type LinkExistingTargetErrors, type LinkExistingTargetRequest, type LinkExistingTargetResponse, type LinkExistingTargetResponses, type LinkUserData, type LinkUserError, type LinkUserErrors, type LinkUserRequest, type LinkUserResponse, type LinkUserResponses, type List1Data, type List1Error, type List1Errors, type List1Response, type List1Responses, type ListData, type ListError, type ListErrors, type ListResponse, type ListResponses, type LoginResponse, type LogoutData, type LogoutError, type LogoutErrors, type LogoutResponse, type LogoutResponses, type MemberActivateData, type MemberActivateError, type MemberActivateErrors, type MemberActivateResponse, type MemberActivateResponses, type MemberActivationRequest, type MemberProfileResponse, type MembershipResponse, MemberType, type MissingRow, type MyServicesData, type MyServicesError, type MyServicesErrors, type MyServicesResponse, type MyServicesResponses, type PagedModelEmail, type PagedModelEventResponse, type PagedModelJobExecution, type PagedModelUserDetailResponse, type PageMetadata, type PasswordResetRequest, PlatformType, type QuestionRequest, type QuestionResponse, QuestionType, type RedirectResponse, type RemoveMemberData, type RemoveMemberError, type RemoveMemberErrors, type RemoveMemberResponse, type RemoveMemberResponses, type ResendMemberActivationEmailData, type ResendMemberActivationEmailError, type ResendMemberActivationEmailErrors, type ResendMemberActivationEmailResponse, type ResendMemberActivationEmailResponses, type ResendUserActivationData, type ResendUserActivationError, type ResendUserActivationErrors, type ResendUserActivationResponse, type ResendUserActivationResponses, type ResetPasswordData, type ResetPasswordError, type ResetPasswordErrors, type ResetPasswordResponse, type ResetPasswordResponses, type RestoreDeletedUserByIdData, type RestoreDeletedUserByIdError, type RestoreDeletedUserByIdErrors, type RestoreDeletedUserByIdResponse, type RestoreDeletedUserByIdResponses, type Retry1Data, type Retry1Error, type Retry1Errors, type Retry1Response, type Retry1Responses, type RetryData, type RetryError, type RetryErrors, type RetryResponse, type RetryResponses, Role, type SendContributionReminderBatchData, type SendContributionReminderBatchError, type SendContributionReminderBatchErrors, type SendContributionReminderBatchResponse, type SendContributionReminderBatchResponses, type SendContributionReminderData, type SendContributionReminderError, type SendContributionReminderErrors, type SendContributionReminderResponse, type SendContributionReminderResponses, type ServiceEntry, type SetPasswordData, type SetPasswordError, type SetPasswordErrors, type SetPasswordResponse, type SetPasswordResponses, type SponsorResponse, type SurveyRequest, type SurveyResponse, type SwitchTargetData, type SwitchTargetError, type SwitchTargetErrors, type SwitchTargetRequest, type SwitchTargetResponse, type SwitchTargetResponses, type TelemetryResponse, type ToggleUserRoleData, type ToggleUserRoleError, type ToggleUserRoleErrors, type ToggleUserRoleResponse, type ToggleUserRoleResponses, type UpdateAddressData, type UpdateAddressError, type UpdateAddressErrors, type UpdateAddressRequest, type UpdateAddressResponse, type UpdateAddressResponses, type UpdateBlogData, type UpdateBlogError, type UpdateBlogErrors, type UpdateBlogRequest, type UpdateBlogResponse, type UpdateBlogResponses, type UpdateBoardData, type UpdateBoardError, type UpdateBoardErrors, type UpdateBoardRequest, type UpdateBoardResponse, type UpdateBoardResponses, type UpdateCommitteeData, type UpdateCommitteeError, type UpdateCommitteeErrors, type UpdateCommitteeRequest, type UpdateCommitteeResponse, type UpdateCommitteeResponses, type UpdateContributionPeriodData, type UpdateContributionPeriodError, type UpdateContributionPeriodErrors, type UpdateContributionPeriodRequest, type UpdateContributionPeriodResponse, type UpdateContributionPeriodResponses, type UpdateEventData, type UpdateEventError, type UpdateEventErrors, type UpdateEventRequest, type UpdateEventResponse, type UpdateEventResponses, type UpdateEventSignUpData, type UpdateEventSignUpError, type UpdateEventSignUpErrors, type UpdateEventSignUpRequest, type UpdateEventSignUpResponse, type UpdateEventSignUpResponses, type UpdateMemberProfileData, type UpdateMemberProfileError, type UpdateMemberProfileErrors, type UpdateMemberProfileRequest, type UpdateMemberProfileResponse, type UpdateMemberProfileResponses, type UpdateMembershipData, type UpdateMembershipError, type UpdateMembershipErrors, type UpdateMembershipRequest, type UpdateMembershipResponse, type UpdateMembershipResponses, type UpdateSponsorData, type UpdateSponsorError, type UpdateSponsorErrors, type UpdateSponsorRequest, type UpdateSponsorResponse, type UpdateSponsorResponses, type UpdateUserData, type UpdateUserError, type UpdateUserErrors, type UpdateUserRequest, type UpdateUserResponse, type UpdateUserResponses, type UploadEventBannerData, type UploadEventBannerError, type UploadEventBannerErrors, type UploadEventBannerResponse, type UploadEventBannerResponses, type UpsertMemberProfileRequest, type UserActivateData, type UserActivateError, type UserActivateErrors, type UserActivateResponse, type UserActivateResponses, type UserActivationRequest, type UserDetailResponse, type UserSummaryResponse } from './types.gen'; +export { addMember, approveEvent, authenticate, boardCreateMembership, createAddress, createBlog, createBoard, createCommittee, createContribution, createContributionPeriod, createEvent, createEventSignup, createMemberProfile, createMembership, createSponsor, createTarget, createTelemetry, createUser, csrf, deleteAddressById, deleteBoard, deleteById, deleteCommitteeById, deleteContribution, deleteContributionPeriodById, deleteEventById, deleteEventSignup, deleteSponsorById, deleteUserById, downloadEventBanner, enqueue, findAddressById, findAllAddresses, findAllBoards, findBlogById, findBlogs, findBoardById, findCohortById, findCohorts, findCohortSubjectById, findCohortSubjects, findCommitteeById, findCommittees, findCommitteesByUserId, findContributionPeriods, findContributionReminders, findContributions, findContributionsByPeriodId, findCurrentContributionPeriod, findDeletedUsers, findEventById, findEvents, findEventSignUps, findEventSignUpsByAccessToken, findEventSignUpsByEventId, findMemberProfileByUserId, findMembershipById, findMemberships, findSponsorById, findSponsors, findTelemetryById, findUserById, findUsers, forwardAuth, getDrift, getStats, getStats1, healthCheck, jobTypes, linkExistingTarget, linkUser, list, list1, logout, memberActivate, myServices, type Options, removeMember, repairMissingAdds, resendMemberActivationEmail, resendUserActivation, resetPassword, restoreDeletedUserById, retry, retry1, sendContributionReminder, sendContributionReminderBatch, setPassword, switchTarget, toggleUserRole, updateAddress, updateBlog, updateBoard, updateCommittee, updateContributionPeriod, updateEvent, updateEventSignUp, updateMemberProfile, updateMembership, updateSponsor, updateUser, uploadEventBanner, userActivate } from './sdk.gen'; +export { type Actor, type AddBoardMemberRequest, type AddMemberData, type AddMemberError, type AddMemberErrors, type AddMemberResponse, type AddMemberResponses, type AddressResponse, type AnswerRequest, type AnswerResponse, type ApiError, type ApproveEventData, type ApproveEventError, type ApproveEventErrors, type ApproveEventResponse, type ApproveEventResponses, type AuthenticateData, type AuthenticateError, type AuthenticateErrors, type AuthenticateResponse, type AuthenticateResponses, type BlogResponse, type BoardCreateMembershipData, type BoardCreateMembershipError, type BoardCreateMembershipErrors, type BoardCreateMembershipRequest, type BoardCreateMembershipResponse, type BoardCreateMembershipResponses, type BoardMemberResponse, type BoardResponse, type ClientOptions, type CohortDetail, CohortFactKind, CohortKind, type CohortMapping, type CohortMemberRow, type CohortRepair, type CohortRule, CohortSubjectCategory, type CohortSubjectDetail, type CohortSubjectMember, type CohortSubjectRule, type CohortSubjectSummary, CohortSubjectType, type CohortSummary, type CommitteeDetailResponse, type CommitteeMemberRequest, type CommitteeMemberResponse, type CommitteeResponse, type ContributionPeriodResponse, type ContributionReminderResponse, type ContributionResponse, type CreateAddressData, type CreateAddressError, type CreateAddressErrors, type CreateAddressRequest, type CreateAddressResponse, type CreateAddressResponses, type CreateBlogData, type CreateBlogError, type CreateBlogErrors, type CreateBlogRequest, type CreateBlogResponse, type CreateBlogResponses, type CreateBoardData, type CreateBoardError, type CreateBoardErrors, type CreateBoardRequest, type CreateBoardResponse, type CreateBoardResponses, type CreateCommitteeData, type CreateCommitteeError, type CreateCommitteeErrors, type CreateCommitteeRequest, type CreateCommitteeResponse, type CreateCommitteeResponses, type CreateContributionData, type CreateContributionError, type CreateContributionErrors, type CreateContributionPeriodData, type CreateContributionPeriodError, type CreateContributionPeriodErrors, type CreateContributionPeriodRequest, type CreateContributionPeriodResponse, type CreateContributionPeriodResponses, type CreateContributionReminderRequest, type CreateContributionRequest, type CreateContributionResponse, type CreateContributionResponses, type CreateEventData, type CreateEventError, type CreateEventErrors, type CreateEventRequest, type CreateEventResponse, type CreateEventResponses, type CreateEventSignupData, type CreateEventSignupError, type CreateEventSignupErrors, type CreateEventSignUpRequest, type CreateEventSignupResponse, type CreateEventSignupResponses, type CreateGuestRequest, type CreateMemberProfileData, type CreateMemberProfileError, type CreateMemberProfileErrors, type CreateMemberProfileRequest, type CreateMemberProfileResponse, type CreateMemberProfileResponses, type CreateMembershipData, type CreateMembershipError, type CreateMembershipErrors, type CreateMembershipResponse, type CreateMembershipResponses, type CreateSponsorData, type CreateSponsorError, type CreateSponsorErrors, type CreateSponsorRequest, type CreateSponsorResponse, type CreateSponsorResponses, type CreateTargetData, type CreateTargetError, type CreateTargetErrors, type CreateTargetRequest, type CreateTargetResponse, type CreateTargetResponses, type CreateTelemetryData, type CreateTelemetryError, type CreateTelemetryErrors, type CreateTelemetryRequest, type CreateTelemetryResponse, type CreateTelemetryResponses, type CreateUserData, type CreateUserError, type CreateUserErrors, type CreateUserRequest, type CreateUserResponse, type CreateUserResponses, type CsrfData, type CsrfError, type CsrfErrors, type CsrfResponse, type CsrfResponses, type CsrfToken, type DeleteAddressByIdData, type DeleteAddressByIdError, type DeleteAddressByIdErrors, type DeleteAddressByIdResponse, type DeleteAddressByIdResponses, type DeleteBoardData, type DeleteBoardError, type DeleteBoardErrors, type DeleteBoardResponse, type DeleteBoardResponses, type DeleteByIdData, type DeleteByIdError, type DeleteByIdErrors, type DeleteByIdResponse, type DeleteByIdResponses, type DeleteCommitteeByIdData, type DeleteCommitteeByIdError, type DeleteCommitteeByIdErrors, type DeleteCommitteeByIdResponse, type DeleteCommitteeByIdResponses, type DeleteContributionData, type DeleteContributionError, type DeleteContributionErrors, type DeleteContributionPeriodByIdData, type DeleteContributionPeriodByIdError, type DeleteContributionPeriodByIdErrors, type DeleteContributionPeriodByIdResponse, type DeleteContributionPeriodByIdResponses, type DeleteContributionResponse, type DeleteContributionResponses, type DeleteEventByIdData, type DeleteEventByIdError, type DeleteEventByIdErrors, type DeleteEventByIdResponse, type DeleteEventByIdResponses, type DeleteEventSignupData, type DeleteEventSignupError, type DeleteEventSignupErrors, type DeleteEventSignupResponse, type DeleteEventSignupResponses, type DeleteSponsorByIdData, type DeleteSponsorByIdError, type DeleteSponsorByIdErrors, type DeleteSponsorByIdResponse, type DeleteSponsorByIdResponses, type DeleteUserByIdData, type DeleteUserByIdError, type DeleteUserByIdErrors, type DeleteUserByIdResponse, type DeleteUserByIdResponses, type DownloadEventBannerData, type DownloadEventBannerError, type DownloadEventBannerErrors, type DownloadEventBannerResponse, type DownloadEventBannerResponses, type DriftReport, type Email, type EmailStats, type EnqueueData, type EnqueueError, type EnqueueErrors, type EnqueueJobRequest, type EnqueueResponse, type EnqueueResponses, type EventBannerRequest, type EventBannerResponse, type EventResponse, type EventSignUpResponse, type ExtraRow, type FieldValidationError, type FileResponse, FileType, type FindAddressByIdData, type FindAddressByIdError, type FindAddressByIdErrors, type FindAddressByIdResponse, type FindAddressByIdResponses, type FindAllAddressesData, type FindAllAddressesError, type FindAllAddressesErrors, type FindAllAddressesResponse, type FindAllAddressesResponses, type FindAllBoardsData, type FindAllBoardsError, type FindAllBoardsErrors, type FindAllBoardsResponse, type FindAllBoardsResponses, type FindBlogByIdData, type FindBlogByIdError, type FindBlogByIdErrors, type FindBlogByIdResponse, type FindBlogByIdResponses, type FindBlogsData, type FindBlogsError, type FindBlogsErrors, type FindBlogsResponse, type FindBlogsResponses, type FindBoardByIdData, type FindBoardByIdError, type FindBoardByIdErrors, type FindBoardByIdResponse, type FindBoardByIdResponses, type FindCohortByIdData, type FindCohortByIdError, type FindCohortByIdErrors, type FindCohortByIdResponse, type FindCohortByIdResponses, type FindCohortsData, type FindCohortsError, type FindCohortsErrors, type FindCohortsResponse, type FindCohortsResponses, type FindCohortSubjectByIdData, type FindCohortSubjectByIdError, type FindCohortSubjectByIdErrors, type FindCohortSubjectByIdResponse, type FindCohortSubjectByIdResponses, type FindCohortSubjectsData, type FindCohortSubjectsError, type FindCohortSubjectsErrors, type FindCohortSubjectsResponse, type FindCohortSubjectsResponses, type FindCommitteeByIdData, type FindCommitteeByIdError, type FindCommitteeByIdErrors, type FindCommitteeByIdResponse, type FindCommitteeByIdResponses, type FindCommitteesByUserIdData, type FindCommitteesByUserIdError, type FindCommitteesByUserIdErrors, type FindCommitteesByUserIdResponse, type FindCommitteesByUserIdResponses, type FindCommitteesData, type FindCommitteesError, type FindCommitteesErrors, type FindCommitteesResponse, type FindCommitteesResponses, type FindContributionPeriodsData, type FindContributionPeriodsError, type FindContributionPeriodsErrors, type FindContributionPeriodsResponse, type FindContributionPeriodsResponses, type FindContributionRemindersData, type FindContributionRemindersError, type FindContributionRemindersErrors, type FindContributionRemindersResponse, type FindContributionRemindersResponses, type FindContributionsByPeriodIdData, type FindContributionsByPeriodIdError, type FindContributionsByPeriodIdErrors, type FindContributionsByPeriodIdResponse, type FindContributionsByPeriodIdResponses, type FindContributionsData, type FindContributionsError, type FindContributionsErrors, type FindContributionsResponse, type FindContributionsResponses, type FindCurrentContributionPeriodData, type FindCurrentContributionPeriodError, type FindCurrentContributionPeriodErrors, type FindCurrentContributionPeriodResponse, type FindCurrentContributionPeriodResponses, type FindDeletedUsersData, type FindDeletedUsersError, type FindDeletedUsersErrors, type FindDeletedUsersResponse, type FindDeletedUsersResponses, type FindEventByIdData, type FindEventByIdError, type FindEventByIdErrors, type FindEventByIdResponse, type FindEventByIdResponses, type FindEventsData, type FindEventsError, type FindEventsErrors, type FindEventSignUpsByAccessTokenData, type FindEventSignUpsByAccessTokenError, type FindEventSignUpsByAccessTokenErrors, type FindEventSignUpsByAccessTokenResponse, type FindEventSignUpsByAccessTokenResponses, type FindEventSignUpsByEventIdData, type FindEventSignUpsByEventIdError, type FindEventSignUpsByEventIdErrors, type FindEventSignUpsByEventIdResponse, type FindEventSignUpsByEventIdResponses, type FindEventSignUpsData, type FindEventSignUpsError, type FindEventSignUpsErrors, type FindEventSignUpsResponse, type FindEventSignUpsResponses, type FindEventsResponse, type FindEventsResponses, type FindMemberProfileByUserIdData, type FindMemberProfileByUserIdError, type FindMemberProfileByUserIdErrors, type FindMemberProfileByUserIdResponse, type FindMemberProfileByUserIdResponses, type FindMembershipByIdData, type FindMembershipByIdError, type FindMembershipByIdErrors, type FindMembershipByIdResponse, type FindMembershipByIdResponses, type FindMembershipsData, type FindMembershipsError, type FindMembershipsErrors, type FindMembershipsResponse, type FindMembershipsResponses, type FindSponsorByIdData, type FindSponsorByIdError, type FindSponsorByIdErrors, type FindSponsorByIdResponse, type FindSponsorByIdResponses, type FindSponsorsData, type FindSponsorsError, type FindSponsorsErrors, type FindSponsorsResponse, type FindSponsorsResponses, type FindTelemetryByIdData, type FindTelemetryByIdError, type FindTelemetryByIdErrors, type FindTelemetryByIdResponse, type FindTelemetryByIdResponses, type FindUserByIdData, type FindUserByIdError, type FindUserByIdErrors, type FindUserByIdResponse, type FindUserByIdResponses, type FindUsersData, type FindUsersError, type FindUsersErrors, type FindUsersResponse, type FindUsersResponses, type ForwardAuthData, type ForwardAuthError, type ForwardAuthErrors, type ForwardAuthResponses, type GetDriftData, type GetDriftError, type GetDriftErrors, type GetDriftResponse, type GetDriftResponses, type GetStats1Data, type GetStats1Error, type GetStats1Errors, type GetStats1Response, type GetStats1Responses, type GetStatsData, type GetStatsError, type GetStatsErrors, type GetStatsResponse, type GetStatsResponses, type GuestResponse, type HealthCheckData, type HealthCheckError, type HealthCheckErrors, type HealthCheckResponse, type HealthCheckResponses, type JobExecution, JobExecutionCategory, type JobExecutionRelatedEntity, JobExecutionStatus, type JobPayloadField, JobPayloadFieldKind, type JobStatsDto, type JobTypeDescriptor, type JobTypesData, type JobTypesError, type JobTypesErrors, type JobTypesResponse, type JobTypesResponses, type JwtRequest, type LinkedUser, type LinkExistingTargetData, type LinkExistingTargetError, type LinkExistingTargetErrors, type LinkExistingTargetRequest, type LinkExistingTargetResponse, type LinkExistingTargetResponses, type LinkUserData, type LinkUserError, type LinkUserErrors, type LinkUserRequest, type LinkUserResponse, type LinkUserResponses, type List1Data, type List1Error, type List1Errors, type List1Response, type List1Responses, type ListData, type ListError, type ListErrors, type ListResponse, type ListResponses, type LoginResponse, type LogoutData, type LogoutError, type LogoutErrors, type LogoutResponse, type LogoutResponses, type MemberActivateData, type MemberActivateError, type MemberActivateErrors, type MemberActivateResponse, type MemberActivateResponses, type MemberActivationRequest, type MemberProfileResponse, type MembershipResponse, MemberType, type MissingRow, type MyServicesData, type MyServicesError, type MyServicesErrors, type MyServicesResponse, type MyServicesResponses, type PagedModelEmail, type PagedModelEventResponse, type PagedModelJobExecution, type PagedModelUserDetailResponse, type PageMetadata, type PasswordResetRequest, PlatformType, type QuestionRequest, type QuestionResponse, QuestionType, type RedirectResponse, type RemoveMemberData, type RemoveMemberError, type RemoveMemberErrors, type RemoveMemberResponse, type RemoveMemberResponses, type RepairMissingAddsData, type RepairMissingAddsError, type RepairMissingAddsErrors, type RepairMissingAddsResponse, type RepairMissingAddsResponses, type ResendMemberActivationEmailData, type ResendMemberActivationEmailError, type ResendMemberActivationEmailErrors, type ResendMemberActivationEmailResponse, type ResendMemberActivationEmailResponses, type ResendUserActivationData, type ResendUserActivationError, type ResendUserActivationErrors, type ResendUserActivationResponse, type ResendUserActivationResponses, type ResetPasswordData, type ResetPasswordError, type ResetPasswordErrors, type ResetPasswordResponse, type ResetPasswordResponses, type RestoreDeletedUserByIdData, type RestoreDeletedUserByIdError, type RestoreDeletedUserByIdErrors, type RestoreDeletedUserByIdResponse, type RestoreDeletedUserByIdResponses, type Retry1Data, type Retry1Error, type Retry1Errors, type Retry1Response, type Retry1Responses, type RetryData, type RetryError, type RetryErrors, type RetryResponse, type RetryResponses, Role, type SendContributionReminderBatchData, type SendContributionReminderBatchError, type SendContributionReminderBatchErrors, type SendContributionReminderBatchResponse, type SendContributionReminderBatchResponses, type SendContributionReminderData, type SendContributionReminderError, type SendContributionReminderErrors, type SendContributionReminderResponse, type SendContributionReminderResponses, type ServiceEntry, type SetPasswordData, type SetPasswordError, type SetPasswordErrors, type SetPasswordResponse, type SetPasswordResponses, type SponsorResponse, type SurveyRequest, type SurveyResponse, type SwitchTargetData, type SwitchTargetError, type SwitchTargetErrors, type SwitchTargetRequest, type SwitchTargetResponse, type SwitchTargetResponses, type TelemetryResponse, type ToggleUserRoleData, type ToggleUserRoleError, type ToggleUserRoleErrors, type ToggleUserRoleResponse, type ToggleUserRoleResponses, type UpdateAddressData, type UpdateAddressError, type UpdateAddressErrors, type UpdateAddressRequest, type UpdateAddressResponse, type UpdateAddressResponses, type UpdateBlogData, type UpdateBlogError, type UpdateBlogErrors, type UpdateBlogRequest, type UpdateBlogResponse, type UpdateBlogResponses, type UpdateBoardData, type UpdateBoardError, type UpdateBoardErrors, type UpdateBoardRequest, type UpdateBoardResponse, type UpdateBoardResponses, type UpdateCommitteeData, type UpdateCommitteeError, type UpdateCommitteeErrors, type UpdateCommitteeRequest, type UpdateCommitteeResponse, type UpdateCommitteeResponses, type UpdateContributionPeriodData, type UpdateContributionPeriodError, type UpdateContributionPeriodErrors, type UpdateContributionPeriodRequest, type UpdateContributionPeriodResponse, type UpdateContributionPeriodResponses, type UpdateEventData, type UpdateEventError, type UpdateEventErrors, type UpdateEventRequest, type UpdateEventResponse, type UpdateEventResponses, type UpdateEventSignUpData, type UpdateEventSignUpError, type UpdateEventSignUpErrors, type UpdateEventSignUpRequest, type UpdateEventSignUpResponse, type UpdateEventSignUpResponses, type UpdateMemberProfileData, type UpdateMemberProfileError, type UpdateMemberProfileErrors, type UpdateMemberProfileRequest, type UpdateMemberProfileResponse, type UpdateMemberProfileResponses, type UpdateMembershipData, type UpdateMembershipError, type UpdateMembershipErrors, type UpdateMembershipRequest, type UpdateMembershipResponse, type UpdateMembershipResponses, type UpdateSponsorData, type UpdateSponsorError, type UpdateSponsorErrors, type UpdateSponsorRequest, type UpdateSponsorResponse, type UpdateSponsorResponses, type UpdateUserData, type UpdateUserError, type UpdateUserErrors, type UpdateUserRequest, type UpdateUserResponse, type UpdateUserResponses, type UploadEventBannerData, type UploadEventBannerError, type UploadEventBannerErrors, type UploadEventBannerResponse, type UploadEventBannerResponses, type UpsertMemberProfileRequest, type UserActivateData, type UserActivateError, type UserActivateErrors, type UserActivateResponse, type UserActivateResponses, type UserActivationRequest, type UserDetailResponse, type UserSummaryResponse } from './types.gen'; diff --git a/services/frontend/src/services/api/blueshell/sdk.gen.ts b/services/frontend/src/services/api/blueshell/sdk.gen.ts index dbc65df01..c45c526a1 100644 --- a/services/frontend/src/services/api/blueshell/sdk.gen.ts +++ b/services/frontend/src/services/api/blueshell/sdk.gen.ts @@ -2,7 +2,7 @@ import { type Client, formDataBodySerializer, type Options as Options2, type TDataShape } from './client'; import { client } from './client.gen'; -import type { AddMemberData, AddMemberErrors, AddMemberResponses, ApproveEventData, ApproveEventErrors, ApproveEventResponses, AuthenticateData, AuthenticateErrors, AuthenticateResponses, BoardCreateMembershipData, BoardCreateMembershipErrors, BoardCreateMembershipResponses, CreateAddressData, CreateAddressErrors, CreateAddressResponses, CreateBlogData, CreateBlogErrors, CreateBlogResponses, CreateBoardData, CreateBoardErrors, CreateBoardResponses, CreateCommitteeData, CreateCommitteeErrors, CreateCommitteeResponses, CreateContributionData, CreateContributionErrors, CreateContributionPeriodData, CreateContributionPeriodErrors, CreateContributionPeriodResponses, CreateContributionResponses, CreateEventData, CreateEventErrors, CreateEventResponses, CreateEventSignupData, CreateEventSignupErrors, CreateEventSignupResponses, CreateMemberProfileData, CreateMemberProfileErrors, CreateMemberProfileResponses, CreateMembershipData, CreateMembershipErrors, CreateMembershipResponses, CreateSponsorData, CreateSponsorErrors, CreateSponsorResponses, CreateTargetData, CreateTargetErrors, CreateTargetResponses, CreateTelemetryData, CreateTelemetryErrors, CreateTelemetryResponses, CreateUserData, CreateUserErrors, CreateUserResponses, CsrfData, CsrfErrors, CsrfResponses, DeleteAddressByIdData, DeleteAddressByIdErrors, DeleteAddressByIdResponses, DeleteBoardData, DeleteBoardErrors, DeleteBoardResponses, DeleteByIdData, DeleteByIdErrors, DeleteByIdResponses, DeleteCommitteeByIdData, DeleteCommitteeByIdErrors, DeleteCommitteeByIdResponses, DeleteContributionData, DeleteContributionErrors, DeleteContributionPeriodByIdData, DeleteContributionPeriodByIdErrors, DeleteContributionPeriodByIdResponses, DeleteContributionResponses, DeleteEventByIdData, DeleteEventByIdErrors, DeleteEventByIdResponses, DeleteEventSignupData, DeleteEventSignupErrors, DeleteEventSignupResponses, DeleteSponsorByIdData, DeleteSponsorByIdErrors, DeleteSponsorByIdResponses, DeleteUserByIdData, DeleteUserByIdErrors, DeleteUserByIdResponses, DownloadEventBannerData, DownloadEventBannerErrors, DownloadEventBannerResponses, EnqueueData, EnqueueErrors, EnqueueResponses, FindAddressByIdData, FindAddressByIdErrors, FindAddressByIdResponses, FindAllAddressesData, FindAllAddressesErrors, FindAllAddressesResponses, FindAllBoardsData, FindAllBoardsErrors, FindAllBoardsResponses, FindBlogByIdData, FindBlogByIdErrors, FindBlogByIdResponses, FindBlogsData, FindBlogsErrors, FindBlogsResponses, FindBoardByIdData, FindBoardByIdErrors, FindBoardByIdResponses, FindCohortByIdData, FindCohortByIdErrors, FindCohortByIdResponses, FindCohortsData, FindCohortsErrors, FindCohortsResponses, FindCohortSubjectByIdData, FindCohortSubjectByIdErrors, FindCohortSubjectByIdResponses, FindCohortSubjectsData, FindCohortSubjectsErrors, FindCohortSubjectsResponses, FindCommitteeByIdData, FindCommitteeByIdErrors, FindCommitteeByIdResponses, FindCommitteesByUserIdData, FindCommitteesByUserIdErrors, FindCommitteesByUserIdResponses, FindCommitteesData, FindCommitteesErrors, FindCommitteesResponses, FindContributionPeriodsData, FindContributionPeriodsErrors, FindContributionPeriodsResponses, FindContributionRemindersData, FindContributionRemindersErrors, FindContributionRemindersResponses, FindContributionsByPeriodIdData, FindContributionsByPeriodIdErrors, FindContributionsByPeriodIdResponses, FindContributionsData, FindContributionsErrors, FindContributionsResponses, FindCurrentContributionPeriodData, FindCurrentContributionPeriodErrors, FindCurrentContributionPeriodResponses, FindDeletedUsersData, FindDeletedUsersErrors, FindDeletedUsersResponses, FindEventByIdData, FindEventByIdErrors, FindEventByIdResponses, FindEventsData, FindEventsErrors, FindEventSignUpsByAccessTokenData, FindEventSignUpsByAccessTokenErrors, FindEventSignUpsByAccessTokenResponses, FindEventSignUpsByEventIdData, FindEventSignUpsByEventIdErrors, FindEventSignUpsByEventIdResponses, FindEventSignUpsData, FindEventSignUpsErrors, FindEventSignUpsResponses, FindEventsResponses, FindMemberProfileByUserIdData, FindMemberProfileByUserIdErrors, FindMemberProfileByUserIdResponses, FindMembershipByIdData, FindMembershipByIdErrors, FindMembershipByIdResponses, FindMembershipsData, FindMembershipsErrors, FindMembershipsResponses, FindSponsorByIdData, FindSponsorByIdErrors, FindSponsorByIdResponses, FindSponsorsData, FindSponsorsErrors, FindSponsorsResponses, FindTelemetryByIdData, FindTelemetryByIdErrors, FindTelemetryByIdResponses, FindUserByIdData, FindUserByIdErrors, FindUserByIdResponses, FindUsersData, FindUsersErrors, FindUsersResponses, ForwardAuthData, ForwardAuthErrors, ForwardAuthResponses, GetDriftData, GetDriftErrors, GetDriftResponses, GetStats1Data, GetStats1Errors, GetStats1Responses, GetStatsData, GetStatsErrors, GetStatsResponses, HealthCheckData, HealthCheckErrors, HealthCheckResponses, JobTypesData, JobTypesErrors, JobTypesResponses, LinkExistingTargetData, LinkExistingTargetErrors, LinkExistingTargetResponses, LinkUserData, LinkUserErrors, LinkUserResponses, List1Data, List1Errors, List1Responses, ListData, ListErrors, ListResponses, LogoutData, LogoutErrors, LogoutResponses, MemberActivateData, MemberActivateErrors, MemberActivateResponses, MyServicesData, MyServicesErrors, MyServicesResponses, RemoveMemberData, RemoveMemberErrors, RemoveMemberResponses, ResendMemberActivationEmailData, ResendMemberActivationEmailErrors, ResendMemberActivationEmailResponses, ResendUserActivationData, ResendUserActivationErrors, ResendUserActivationResponses, ResetPasswordData, ResetPasswordErrors, ResetPasswordResponses, RestoreDeletedUserByIdData, RestoreDeletedUserByIdErrors, RestoreDeletedUserByIdResponses, Retry1Data, Retry1Errors, Retry1Responses, RetryData, RetryErrors, RetryResponses, SendContributionReminderBatchData, SendContributionReminderBatchErrors, SendContributionReminderBatchResponses, SendContributionReminderData, SendContributionReminderErrors, SendContributionReminderResponses, SetPasswordData, SetPasswordErrors, SetPasswordResponses, SwitchTargetData, SwitchTargetErrors, SwitchTargetResponses, ToggleUserRoleData, ToggleUserRoleErrors, ToggleUserRoleResponses, UpdateAddressData, UpdateAddressErrors, UpdateAddressResponses, UpdateBlogData, UpdateBlogErrors, UpdateBlogResponses, UpdateBoardData, UpdateBoardErrors, UpdateBoardResponses, UpdateCommitteeData, UpdateCommitteeErrors, UpdateCommitteeResponses, UpdateContributionPeriodData, UpdateContributionPeriodErrors, UpdateContributionPeriodResponses, UpdateEventData, UpdateEventErrors, UpdateEventResponses, UpdateEventSignUpData, UpdateEventSignUpErrors, UpdateEventSignUpResponses, UpdateMemberProfileData, UpdateMemberProfileErrors, UpdateMemberProfileResponses, UpdateMembershipData, UpdateMembershipErrors, UpdateMembershipResponses, UpdateSponsorData, UpdateSponsorErrors, UpdateSponsorResponses, UpdateUserData, UpdateUserErrors, UpdateUserResponses, UploadEventBannerData, UploadEventBannerErrors, UploadEventBannerResponses, UserActivateData, UserActivateErrors, UserActivateResponses } from './types.gen'; +import type { AddMemberData, AddMemberErrors, AddMemberResponses, ApproveEventData, ApproveEventErrors, ApproveEventResponses, AuthenticateData, AuthenticateErrors, AuthenticateResponses, BoardCreateMembershipData, BoardCreateMembershipErrors, BoardCreateMembershipResponses, CreateAddressData, CreateAddressErrors, CreateAddressResponses, CreateBlogData, CreateBlogErrors, CreateBlogResponses, CreateBoardData, CreateBoardErrors, CreateBoardResponses, CreateCommitteeData, CreateCommitteeErrors, CreateCommitteeResponses, CreateContributionData, CreateContributionErrors, CreateContributionPeriodData, CreateContributionPeriodErrors, CreateContributionPeriodResponses, CreateContributionResponses, CreateEventData, CreateEventErrors, CreateEventResponses, CreateEventSignupData, CreateEventSignupErrors, CreateEventSignupResponses, CreateMemberProfileData, CreateMemberProfileErrors, CreateMemberProfileResponses, CreateMembershipData, CreateMembershipErrors, CreateMembershipResponses, CreateSponsorData, CreateSponsorErrors, CreateSponsorResponses, CreateTargetData, CreateTargetErrors, CreateTargetResponses, CreateTelemetryData, CreateTelemetryErrors, CreateTelemetryResponses, CreateUserData, CreateUserErrors, CreateUserResponses, CsrfData, CsrfErrors, CsrfResponses, DeleteAddressByIdData, DeleteAddressByIdErrors, DeleteAddressByIdResponses, DeleteBoardData, DeleteBoardErrors, DeleteBoardResponses, DeleteByIdData, DeleteByIdErrors, DeleteByIdResponses, DeleteCommitteeByIdData, DeleteCommitteeByIdErrors, DeleteCommitteeByIdResponses, DeleteContributionData, DeleteContributionErrors, DeleteContributionPeriodByIdData, DeleteContributionPeriodByIdErrors, DeleteContributionPeriodByIdResponses, DeleteContributionResponses, DeleteEventByIdData, DeleteEventByIdErrors, DeleteEventByIdResponses, DeleteEventSignupData, DeleteEventSignupErrors, DeleteEventSignupResponses, DeleteSponsorByIdData, DeleteSponsorByIdErrors, DeleteSponsorByIdResponses, DeleteUserByIdData, DeleteUserByIdErrors, DeleteUserByIdResponses, DownloadEventBannerData, DownloadEventBannerErrors, DownloadEventBannerResponses, EnqueueData, EnqueueErrors, EnqueueResponses, FindAddressByIdData, FindAddressByIdErrors, FindAddressByIdResponses, FindAllAddressesData, FindAllAddressesErrors, FindAllAddressesResponses, FindAllBoardsData, FindAllBoardsErrors, FindAllBoardsResponses, FindBlogByIdData, FindBlogByIdErrors, FindBlogByIdResponses, FindBlogsData, FindBlogsErrors, FindBlogsResponses, FindBoardByIdData, FindBoardByIdErrors, FindBoardByIdResponses, FindCohortByIdData, FindCohortByIdErrors, FindCohortByIdResponses, FindCohortsData, FindCohortsErrors, FindCohortsResponses, FindCohortSubjectByIdData, FindCohortSubjectByIdErrors, FindCohortSubjectByIdResponses, FindCohortSubjectsData, FindCohortSubjectsErrors, FindCohortSubjectsResponses, FindCommitteeByIdData, FindCommitteeByIdErrors, FindCommitteeByIdResponses, FindCommitteesByUserIdData, FindCommitteesByUserIdErrors, FindCommitteesByUserIdResponses, FindCommitteesData, FindCommitteesErrors, FindCommitteesResponses, FindContributionPeriodsData, FindContributionPeriodsErrors, FindContributionPeriodsResponses, FindContributionRemindersData, FindContributionRemindersErrors, FindContributionRemindersResponses, FindContributionsByPeriodIdData, FindContributionsByPeriodIdErrors, FindContributionsByPeriodIdResponses, FindContributionsData, FindContributionsErrors, FindContributionsResponses, FindCurrentContributionPeriodData, FindCurrentContributionPeriodErrors, FindCurrentContributionPeriodResponses, FindDeletedUsersData, FindDeletedUsersErrors, FindDeletedUsersResponses, FindEventByIdData, FindEventByIdErrors, FindEventByIdResponses, FindEventsData, FindEventsErrors, FindEventSignUpsByAccessTokenData, FindEventSignUpsByAccessTokenErrors, FindEventSignUpsByAccessTokenResponses, FindEventSignUpsByEventIdData, FindEventSignUpsByEventIdErrors, FindEventSignUpsByEventIdResponses, FindEventSignUpsData, FindEventSignUpsErrors, FindEventSignUpsResponses, FindEventsResponses, FindMemberProfileByUserIdData, FindMemberProfileByUserIdErrors, FindMemberProfileByUserIdResponses, FindMembershipByIdData, FindMembershipByIdErrors, FindMembershipByIdResponses, FindMembershipsData, FindMembershipsErrors, FindMembershipsResponses, FindSponsorByIdData, FindSponsorByIdErrors, FindSponsorByIdResponses, FindSponsorsData, FindSponsorsErrors, FindSponsorsResponses, FindTelemetryByIdData, FindTelemetryByIdErrors, FindTelemetryByIdResponses, FindUserByIdData, FindUserByIdErrors, FindUserByIdResponses, FindUsersData, FindUsersErrors, FindUsersResponses, ForwardAuthData, ForwardAuthErrors, ForwardAuthResponses, GetDriftData, GetDriftErrors, GetDriftResponses, GetStats1Data, GetStats1Errors, GetStats1Responses, GetStatsData, GetStatsErrors, GetStatsResponses, HealthCheckData, HealthCheckErrors, HealthCheckResponses, JobTypesData, JobTypesErrors, JobTypesResponses, LinkExistingTargetData, LinkExistingTargetErrors, LinkExistingTargetResponses, LinkUserData, LinkUserErrors, LinkUserResponses, List1Data, List1Errors, List1Responses, ListData, ListErrors, ListResponses, LogoutData, LogoutErrors, LogoutResponses, MemberActivateData, MemberActivateErrors, MemberActivateResponses, MyServicesData, MyServicesErrors, MyServicesResponses, RemoveMemberData, RemoveMemberErrors, RemoveMemberResponses, RepairMissingAddsData, RepairMissingAddsErrors, RepairMissingAddsResponses, ResendMemberActivationEmailData, ResendMemberActivationEmailErrors, ResendMemberActivationEmailResponses, ResendUserActivationData, ResendUserActivationErrors, ResendUserActivationResponses, ResetPasswordData, ResetPasswordErrors, ResetPasswordResponses, RestoreDeletedUserByIdData, RestoreDeletedUserByIdErrors, RestoreDeletedUserByIdResponses, Retry1Data, Retry1Errors, Retry1Responses, RetryData, RetryErrors, RetryResponses, SendContributionReminderBatchData, SendContributionReminderBatchErrors, SendContributionReminderBatchResponses, SendContributionReminderData, SendContributionReminderErrors, SendContributionReminderResponses, SetPasswordData, SetPasswordErrors, SetPasswordResponses, SwitchTargetData, SwitchTargetErrors, SwitchTargetResponses, ToggleUserRoleData, ToggleUserRoleErrors, ToggleUserRoleResponses, UpdateAddressData, UpdateAddressErrors, UpdateAddressResponses, UpdateBlogData, UpdateBlogErrors, UpdateBlogResponses, UpdateBoardData, UpdateBoardErrors, UpdateBoardResponses, UpdateCommitteeData, UpdateCommitteeErrors, UpdateCommitteeResponses, UpdateContributionPeriodData, UpdateContributionPeriodErrors, UpdateContributionPeriodResponses, UpdateEventData, UpdateEventErrors, UpdateEventResponses, UpdateEventSignUpData, UpdateEventSignUpErrors, UpdateEventSignUpResponses, UpdateMemberProfileData, UpdateMemberProfileErrors, UpdateMemberProfileResponses, UpdateMembershipData, UpdateMembershipErrors, UpdateMembershipResponses, UpdateSponsorData, UpdateSponsorErrors, UpdateSponsorResponses, UpdateUserData, UpdateUserErrors, UpdateUserResponses, UploadEventBannerData, UploadEventBannerErrors, UploadEventBannerResponses, UserActivateData, UserActivateErrors, UserActivateResponses } from './types.gen'; export type Options = Options2 & { /** @@ -447,6 +447,12 @@ export const findCohortById = (options: Op ...options }); +export const repairMissingAdds = (options: Options) => (options.client ?? client).post({ + responseType: 'json', + url: '/management/cohorts/{id}/repair-missing-adds', + ...options +}); + export const list1 = (options?: Options) => (options?.client ?? client).get({ responseType: 'json', url: '/management/emails', diff --git a/services/frontend/src/services/api/blueshell/types.gen.ts b/services/frontend/src/services/api/blueshell/types.gen.ts index d249906cd..1fb3829ab 100644 --- a/services/frontend/src/services/api/blueshell/types.gen.ts +++ b/services/frontend/src/services/api/blueshell/types.gen.ts @@ -170,6 +170,11 @@ export type CohortMemberRow = { userId: number; }; +export type CohortRepair = { + cohortId: number; + enqueuedAdds: number; +}; + export type CohortRule = { enabled: boolean; factKey: string; @@ -3683,6 +3688,49 @@ export type FindCohortByIdResponses = { export type FindCohortByIdResponse = FindCohortByIdResponses[keyof FindCohortByIdResponses]; +export type RepairMissingAddsData = { + body?: never; + path: { + id: number; + }; + query?: never; + url: '/management/cohorts/{id}/repair-missing-adds'; +}; + +export type RepairMissingAddsErrors = { + /** + * Validation error + */ + 400: ApiError; + /** + * Unauthorized + */ + 401: ApiError; + /** + * Forbidden (access denied) + */ + 403: ApiError; + /** + * Not Found + */ + 404: ApiError; + /** + * Server error + */ + 500: ApiError; +}; + +export type RepairMissingAddsError = RepairMissingAddsErrors[keyof RepairMissingAddsErrors]; + +export type RepairMissingAddsResponses = { + /** + * OK + */ + 200: CohortRepair; +}; + +export type RepairMissingAddsResponse = RepairMissingAddsResponses[keyof RepairMissingAddsResponses]; + export type List1Data = { body?: never; path?: never;