using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Novelly.Api.Projects; namespace Novelly.Api.Agent; public class AgentConversation { public Guid Id { get; init; } = Guid.NewGuid(); public Guid ProjectId { get; init; } public Project? Project { get; init; } public string Title { get; init; } = "New conversation"; public DateTimeOffset CreatedAt { get; init; } = DateTimeOffset.UtcNow; public DateTimeOffset UpdatedAt { get; set; } = DateTimeOffset.UtcNow; public List Messages { get; init; } = []; } public class AgentMessage { public Guid Id { get; init; } = Guid.NewGuid(); public Guid ConversationId { get; init; } public AgentConversation? Conversation { get; init; } public AgentRole Role { get; init; } public int Sequence { get; init; } public string Content { get; init; } = string.Empty; public string? ToolCallsJson { get; init; } public DateTimeOffset CreatedAt { get; init; } = DateTimeOffset.UtcNow; } public class AgentConversationEntityTypeConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder entity) { entity.Property(c => c.Title).IsRequired().HasMaxLength(200); entity.HasMany(c => c.Messages).WithOne(m => m.Conversation!) .HasForeignKey(m => m.ConversationId).OnDelete(DeleteBehavior.Cascade); } } public class AgentMessageEntityTypeConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder entity) { entity.Property(m => m.Role).HasConversion().HasMaxLength(16); entity.HasIndex(m => new { m.ConversationId, m.Sequence }).IsUnique(); } }