📄 MatDenDagen/Infrastructure/Storage/Database/QuestionnaireContext.cs
using MatDenDagen.Models;
using Microsoft.EntityFrameworkCore;

namespace MatDenDagen.Infrastructure.Storage.Database;

public sealed class QuestionnaireContext(DbContextOptions<QuestionnaireContext> options) : DbContext(options)
{
    public required DbSet<Question> Questions { get; init; }
    public required DbSet<Submission> Submissions { get; init; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        var questionBuilder = modelBuilder.Entity<Question>();
        questionBuilder.HasKey(q => q.Id);
        questionBuilder.Property(q => q.Text);

        var submissionBuilder = modelBuilder.Entity<Submission>();
        submissionBuilder.HasKey(s => s.Id);
        submissionBuilder.HasMany(s => s.Answers).WithOne();
        submissionBuilder.HasMany(s => s.Uploads).WithOne();

        var answerBuilder = modelBuilder.Entity<Answer>();
        answerBuilder.HasKey(a => a.Id);
        answerBuilder.Property(a => a.Text);
        answerBuilder.HasOne<Question>().WithMany().HasForeignKey(a => a.QuestionId);

        var uploadBuilder = modelBuilder.Entity<Upload>();
        uploadBuilder.HasKey(u => u.Id);
        uploadBuilder.Property(u => u.Name);
    }
}