📄 src/Api/Program.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.AspNetCore;
using Slopper.Api;
using Slopper.Domain;
using Slopper.Infrastructure.Ai;
using Slopper.Infrastructure.Database;
using Slopper.Infrastructure.Ffmpeg;
using Winton.Extensions.Configuration.Consul;

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddConsul(
    "slopper",
    options =>
    {
        options.ConsulConfigurationOptions = options => options.Address = new(builder.Configuration["Consul:Address"]!);
        options.ReloadOnChange = true;
    }
);

builder.ConfigureOpenTelemetry();

builder.Services.AddOpenApi();

builder.Services.AddClipSelector().AddClipGenerator();

builder.Services.AddJellyfinDatabase().AddSlopperDatabase().AddFfmpegServices().AddAi();

builder
    .Services.AddClipGenerationJobOptions()
    .AddQuartz(quartz => quartz.AddClipGenerationJob().AddClipGenerationJobTrigger())
    .AddQuartzServer();

using var app = builder.Build();

app.MapOpenApi();

app.MapApi();

app.UseDefaultFiles();
app.UseStaticFiles();

app.Run();