list_task_lists returns two different ID formats: dashed UUIDs (e.g. "caed660e-109f-4e2a-b055-2c2722bf6fb7") and compact 32-char hex (e.g. "5c2cafcb33f044069ac324ac3fd84a16"). Mixing formats makes equality checks, logging, and lookups error-prone. Fix: pick one canonical format (recommend dashed UUID) and normalize on write + migrate existing records. Ensure all ID-returning tools emit the same f ClaudeDo-Task: fa8b69e0-6f8d-41d7-9a41-88db1360544d
53 lines
2.2 KiB
C#
53 lines
2.2 KiB
C#
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace ClaudeDo.Data.Migrations
|
|
{
|
|
/// <inheritdoc />
|
|
public partial class NormalizeListIdFormat : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
// SQLite: PRAGMA foreign_keys must run outside a transaction.
|
|
migrationBuilder.Sql("PRAGMA foreign_keys = OFF;", suppressTransaction: true);
|
|
|
|
// Normalize tasks.list_id: 32-char compact hex → 36-char dashed UUID
|
|
migrationBuilder.Sql("""
|
|
UPDATE tasks
|
|
SET list_id = substr(list_id,1,8)||'-'||substr(list_id,9,4)||'-'||substr(list_id,13,4)||'-'||substr(list_id,17,4)||'-'||substr(list_id,21,12)
|
|
WHERE length(list_id) = 32;
|
|
""");
|
|
|
|
// Normalize list_config.list_id (also the PK of that table)
|
|
migrationBuilder.Sql("""
|
|
UPDATE list_config
|
|
SET list_id = substr(list_id,1,8)||'-'||substr(list_id,9,4)||'-'||substr(list_id,13,4)||'-'||substr(list_id,17,4)||'-'||substr(list_id,21,12)
|
|
WHERE length(list_id) = 32;
|
|
""");
|
|
|
|
// Normalize lists.id (PK — must come last)
|
|
migrationBuilder.Sql("""
|
|
UPDATE lists
|
|
SET id = substr(id,1,8)||'-'||substr(id,9,4)||'-'||substr(id,13,4)||'-'||substr(id,17,4)||'-'||substr(id,21,12)
|
|
WHERE length(id) = 32;
|
|
""");
|
|
|
|
migrationBuilder.Sql("PRAGMA foreign_keys = ON;", suppressTransaction: true);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.Sql("PRAGMA foreign_keys = OFF;", suppressTransaction: true);
|
|
|
|
migrationBuilder.Sql("UPDATE tasks SET list_id = replace(list_id,'-','') WHERE length(list_id) = 36;");
|
|
migrationBuilder.Sql("UPDATE list_config SET list_id = replace(list_id,'-','') WHERE length(list_id) = 36;");
|
|
migrationBuilder.Sql("UPDATE lists SET id = replace(id,'-','') WHERE length(id) = 36;");
|
|
|
|
migrationBuilder.Sql("PRAGMA foreign_keys = ON;", suppressTransaction: true);
|
|
}
|
|
}
|
|
}
|