From a1190a35bd5b74eb628eba80721816b1c2506553 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Mon, 20 Apr 2026 09:59:12 +0200 Subject: [PATCH] feat(data): add IsStarred, IsMyDay, Notes to TaskEntity --- .../Configuration/TaskEntityConfiguration.cs | 3 ++ src/ClaudeDo.Data/Models/TaskEntity.cs | 3 ++ .../UiSchema/TaskEntityFlagsTests.cs | 49 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 tests/ClaudeDo.Worker.Tests/UiSchema/TaskEntityFlagsTests.cs diff --git a/src/ClaudeDo.Data/Configuration/TaskEntityConfiguration.cs b/src/ClaudeDo.Data/Configuration/TaskEntityConfiguration.cs index 5774c2a..a2d4cbf 100644 --- a/src/ClaudeDo.Data/Configuration/TaskEntityConfiguration.cs +++ b/src/ClaudeDo.Data/Configuration/TaskEntityConfiguration.cs @@ -48,6 +48,9 @@ public class TaskEntityConfiguration : IEntityTypeConfiguration builder.Property(t => t.Model).HasColumnName("model"); builder.Property(t => t.SystemPrompt).HasColumnName("system_prompt"); builder.Property(t => t.AgentPath).HasColumnName("agent_path"); + builder.Property(t => t.IsStarred).HasColumnName("is_starred").HasDefaultValue(false); + builder.Property(t => t.IsMyDay).HasColumnName("is_my_day").HasDefaultValue(false); + builder.Property(t => t.Notes).HasColumnName("notes"); builder.HasOne(t => t.List) .WithMany(l => l.Tasks) diff --git a/src/ClaudeDo.Data/Models/TaskEntity.cs b/src/ClaudeDo.Data/Models/TaskEntity.cs index 8decb96..9041dbe 100644 --- a/src/ClaudeDo.Data/Models/TaskEntity.cs +++ b/src/ClaudeDo.Data/Models/TaskEntity.cs @@ -26,6 +26,9 @@ public sealed class TaskEntity public string? Model { get; set; } public string? SystemPrompt { get; set; } public string? AgentPath { get; set; } + public bool IsStarred { get; set; } + public bool IsMyDay { get; set; } + public string? Notes { get; set; } // Navigation properties public ListEntity List { get; set; } = null!; diff --git a/tests/ClaudeDo.Worker.Tests/UiSchema/TaskEntityFlagsTests.cs b/tests/ClaudeDo.Worker.Tests/UiSchema/TaskEntityFlagsTests.cs new file mode 100644 index 0000000..d59b1e8 --- /dev/null +++ b/tests/ClaudeDo.Worker.Tests/UiSchema/TaskEntityFlagsTests.cs @@ -0,0 +1,49 @@ +using ClaudeDo.Data; +using ClaudeDo.Data.Models; +using Microsoft.EntityFrameworkCore; +using Xunit; +using TaskStatus = ClaudeDo.Data.Models.TaskStatus; + +namespace ClaudeDo.Worker.Tests.UiSchema; + +public class TaskEntityFlagsTests : IDisposable +{ + private readonly string _dbPath = Path.Combine(Path.GetTempPath(), $"claudedo-flags-{Guid.NewGuid():N}.db"); + + private ClaudeDoDbContext NewContext() + { + var opts = new DbContextOptionsBuilder() + .UseSqlite($"Data Source={_dbPath}") + .Options; + var ctx = new ClaudeDoDbContext(opts); + ctx.Database.EnsureCreated(); + return ctx; + } + + [Fact] + public async Task Persists_IsStarred_IsMyDay_And_Notes() + { + await using var ctx = NewContext(); + var list = new ListEntity { Id = "l1", Name = "L", CreatedAt = DateTime.UtcNow }; + ctx.Lists.Add(list); + ctx.Tasks.Add(new TaskEntity + { + Id = "t1", ListId = "l1", Title = "T", CreatedAt = DateTime.UtcNow, + IsStarred = true, IsMyDay = true, Notes = "hello" + }); + await ctx.SaveChangesAsync(); + + await using var ctx2 = NewContext(); + var loaded = await ctx2.Tasks.SingleAsync(); + Assert.True(loaded.IsStarred); + Assert.True(loaded.IsMyDay); + Assert.Equal("hello", loaded.Notes); + } + + public void Dispose() + { + try { if (File.Exists(_dbPath)) File.Delete(_dbPath); } catch { } + try { if (File.Exists(_dbPath + "-wal")) File.Delete(_dbPath + "-wal"); } catch { } + try { if (File.Exists(_dbPath + "-shm")) File.Delete(_dbPath + "-shm"); } catch { } + } +}