From 6c9ccf68b606134f71184d5052a4682be2259622 Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Tue, 28 Apr 2026 08:47:43 +0200 Subject: [PATCH] feat(data): add PrimeScheduleEntity + configuration Co-Authored-By: Claude Opus 4.7 (1M context) --- src/ClaudeDo.Data/ClaudeDoDbContext.cs | 1 + .../PrimeScheduleEntityConfiguration.cs | 25 +++++++++++++++++++ .../Models/PrimeScheduleEntity.cs | 14 +++++++++++ 3 files changed, 40 insertions(+) create mode 100644 src/ClaudeDo.Data/Configuration/PrimeScheduleEntityConfiguration.cs create mode 100644 src/ClaudeDo.Data/Models/PrimeScheduleEntity.cs diff --git a/src/ClaudeDo.Data/ClaudeDoDbContext.cs b/src/ClaudeDo.Data/ClaudeDoDbContext.cs index 591f15c..c96a7a7 100644 --- a/src/ClaudeDo.Data/ClaudeDoDbContext.cs +++ b/src/ClaudeDo.Data/ClaudeDoDbContext.cs @@ -18,6 +18,7 @@ public class ClaudeDoDbContext : DbContext public DbSet TaskRuns => Set(); public DbSet Subtasks => Set(); public DbSet AppSettings => Set(); + public DbSet PrimeSchedules => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { diff --git a/src/ClaudeDo.Data/Configuration/PrimeScheduleEntityConfiguration.cs b/src/ClaudeDo.Data/Configuration/PrimeScheduleEntityConfiguration.cs new file mode 100644 index 0000000..2689e97 --- /dev/null +++ b/src/ClaudeDo.Data/Configuration/PrimeScheduleEntityConfiguration.cs @@ -0,0 +1,25 @@ +using ClaudeDo.Data.Models; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace ClaudeDo.Data.Configuration; + +public class PrimeScheduleEntityConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable("prime_schedules"); + + builder.HasKey(s => s.Id); + builder.Property(s => s.Id).HasColumnName("id").ValueGeneratedNever(); + + builder.Property(s => s.StartDate).HasColumnName("start_date").IsRequired(); + builder.Property(s => s.EndDate).HasColumnName("end_date").IsRequired(); + builder.Property(s => s.TimeOfDay).HasColumnName("time_of_day").IsRequired(); + builder.Property(s => s.WorkdaysOnly).HasColumnName("workdays_only").IsRequired().HasDefaultValue(true); + builder.Property(s => s.Enabled).HasColumnName("enabled").IsRequired().HasDefaultValue(true); + builder.Property(s => s.LastRunAt).HasColumnName("last_run_at"); + builder.Property(s => s.PromptOverride).HasColumnName("prompt_override"); + builder.Property(s => s.CreatedAt).HasColumnName("created_at").IsRequired(); + } +} diff --git a/src/ClaudeDo.Data/Models/PrimeScheduleEntity.cs b/src/ClaudeDo.Data/Models/PrimeScheduleEntity.cs new file mode 100644 index 0000000..5e97b13 --- /dev/null +++ b/src/ClaudeDo.Data/Models/PrimeScheduleEntity.cs @@ -0,0 +1,14 @@ +namespace ClaudeDo.Data.Models; + +public sealed class PrimeScheduleEntity +{ + public Guid Id { get; set; } = Guid.NewGuid(); + public DateOnly StartDate { get; set; } + public DateOnly EndDate { get; set; } + public TimeSpan TimeOfDay { get; set; } + public bool WorkdaysOnly { get; set; } = true; + public bool Enabled { get; set; } = true; + public DateTimeOffset? LastRunAt { get; set; } + public string? PromptOverride { get; set; } + public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow; +}