Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Taskdeck.Domain.Agents;
using Taskdeck.Domain.Entities;

Expand Down Expand Up @@ -55,10 +56,43 @@ public TaskdeckDbContext(DbContextOptions<TaskdeckDbContext> options) : base(opt
public DbSet<TomorrowNote> TomorrowNotes => Set<TomorrowNote>();
public DbSet<McpToolHash> McpToolHashes => Set<McpToolHash>();

/// <summary>
/// SQLite stores DateTime as TEXT without timezone info. EF Core materializes
/// these as DateTimeKind.Unspecified, which causes incorrect comparisons with
/// DateTime.UtcNow. Apply UTC normalization globally via conventions so every
/// DateTime property is materialized with DateTimeKind.Utc.
/// See: https://github.com/Chris0Jeky/Taskdeck/issues/1191
/// </summary>
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties<DateTime>()
.HaveConversion<UtcDateTimeConverter>();
configurationBuilder.Properties<DateTime?>()
.HaveConversion<NullableUtcDateTimeConverter>();
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.ApplyConfigurationsFromAssembly(typeof(TaskdeckDbContext).Assembly);
}

private sealed class UtcDateTimeConverter : ValueConverter<DateTime, DateTime>
{
public UtcDateTimeConverter() : base(
v => v,
v => DateTime.SpecifyKind(v, DateTimeKind.Utc))
{
}
}

private sealed class NullableUtcDateTimeConverter : ValueConverter<DateTime?, DateTime?>
{
public NullableUtcDateTimeConverter() : base(
v => v,
v => v.HasValue ? DateTime.SpecifyKind(v.Value, DateTimeKind.Utc) : v)
{
}
}
}
Loading