feat(queens): verdrängte Königin bekommt ihren Endstatus automatisch
Backend E2E / e2e (push) Successful in 5m24s
Backend Image / build-and-push (push) Successful in 5m3s
Frontend Image / build-and-push (push) Failing after 14m46s

Entscheidung Inhaber: Zieht eine neue Königin ein, wird die bisherige
„Ersetzt“; Vereinigen und Auflösen eines Volks setzen dessen Königin auf
„Ersetzt“, ein Winterverlust auf „Eingegangen“. Nur aus einem verfügbaren
Status (ACTIVE, RESERVE, MATED, UNMATED), über updateStatusIn in derselben
Transaktion mit Archivdatum und Audit (QueensService.retireIn). Ein von
Hand gesetzter Endstatus eines Volks fragt weiter über den Aufräum-
Vorschlag nach.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick.RosenloecherandClaude Opus 5.5 committed 2026-10-19 17:03:22 +02:00
1 parent f9e03a1695
commit 81927d629a
10 files changed
+205 -4

No files matched your search

@@ -26,6 +26,7 @@ import { lockRowsForShare, lockRowsForUpdate } from '../prisma/row-lock';
import { colonyTransitionEvents, lockColony } from './colony-events';
import { berlinToday, dayToDate } from '../common/dates';
import { PermissionResolverService } from '../auth/permissions/permission-resolver.service';
import { QueensService } from '../queens/queens.service';
import {
assertNoActiveRestriction,
RestrictionCheck,
@@ -81,6 +82,7 @@ export class ColoniesService {
private readonly webhooks: WebhooksService,
private readonly events: DomainEventsService,
private readonly permissions: PermissionResolverService,
private readonly queens: QueensService,
) {}
async findAll(filter: ColonyFilter = {}): Promise<Colony[]> {
@@ -526,6 +528,14 @@ export class ColoniesService {
merged.id,
dayToDate(today),
);
if (releasedQueenId) {
await this.queens.retireIn(
tx,
releasedQueenId,
'REPLACED',
actingUserId,
);
}
const mergedAway = await tx.colony.update({
where: { id: merged.id },
data: { status: 'MERGED', deactivatedAt: new Date() },
@@ -576,6 +586,14 @@ export class ColoniesService {
this.assertActive(before);
const today = berlinToday();
const releasedQueenId = await releaseQueenIn(tx, id, dayToDate(today));
if (releasedQueenId) {
await this.queens.retireIn(
tx,
releasedQueenId,
'REPLACED',
actingUserId,
);
}
const updated = await tx.colony.update({
where: { id },
data: { status: 'DISSOLVED', deactivatedAt: new Date() },