GerbilStatus: Active→Breeding, add Pet; Deceased/GivenAway are now DERIVED. GerbilStatusService.Derive(): central precedence: DateOfDeath→Deceased (1), ReceiverContactId→GivenAway (2), age>7y→Deceased presumed (3), user choice (4). All write paths (gerbil CRUD, contracts, importers) call GerbilStatusService.Apply(). Startup sweep flips >7y gerbils to Deceased at next app restart. Migration StatusModel: Active→Breeding rename + backfill derived statuses. 10 new tests; 200/200 green; has-pending=No. Enum string values: Breeding (was Active), Pet (new), Deceased, GivenAway, ForSale. FE contract: status field values updated (see Done-Report).
41 lines
1.6 KiB
C#
41 lines
1.6 KiB
C#
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace GerbilManagerWebAPI.Migrations
|
|
{
|
|
/// <inheritdoc />
|
|
public partial class StatusModel : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
// 1) Rename string value 'Active' → 'Breeding'.
|
|
migrationBuilder.Sql(@"UPDATE ""Gerbils"" SET ""Status"" = 'Breeding' WHERE ""Status"" = 'Active';");
|
|
|
|
// 2) DateOfDeath set → Deceased (always takes precedence).
|
|
migrationBuilder.Sql(@"UPDATE ""Gerbils"" SET ""Status"" = 'Deceased' WHERE ""DateOfDeath"" IS NOT NULL;");
|
|
|
|
// 3) ReceiverContactId OR SaleContractAnimal → GivenAway (if not already Deceased).
|
|
migrationBuilder.Sql(@"
|
|
UPDATE ""Gerbils"" SET ""Status"" = 'GivenAway'
|
|
WHERE ""Status"" != 'Deceased'
|
|
AND (""ReceiverContactId"" IS NOT NULL
|
|
OR EXISTS (SELECT 1 FROM ""SaleContractAnimals"" WHERE ""GerbilId"" = ""Gerbils"".""Id""));");
|
|
|
|
// 4) Age > 7 years (presumed dead) → Deceased, but NOT overriding GivenAway.
|
|
migrationBuilder.Sql(@"
|
|
UPDATE ""Gerbils"" SET ""Status"" = 'Deceased'
|
|
WHERE ""Status"" NOT IN ('Deceased', 'GivenAway')
|
|
AND ""DateOfBirth"" IS NOT NULL
|
|
AND ""DateOfBirth"" < (CURRENT_DATE - INTERVAL '7 years');");
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.Sql(@"UPDATE ""Gerbils"" SET ""Status"" = 'Active' WHERE ""Status"" = 'Breeding';");
|
|
}
|
|
}
|
|
}
|