📄 src/Infrastructure/Database/ServiceCollectionExtensions.cs
using System;
using Jellyfin.Database.Implementations;
using Jellyfin.Database.Implementations.Locking;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Slopper.Domain;
using Slopper.Infrastructure.Database.Jellyfin;

namespace Slopper.Infrastructure.Database;

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddJellyfinDatabase(this IServiceCollection services)
    {
        services.AddSingleton<IJellyfinDatabaseProvider, JellyfinDatabaseProvider>();
        services.AddSingleton<IEntityFrameworkCoreLockingBehavior, EntityFrameworkCoreLockingBehavior>();
        services.AddDbContext<JellyfinDbContext>(
            (sp, options) => options.UseSqlite(sp.GetRequiredService<IConfiguration>().GetConnectionString("jellyfin"))
        );
        services.TryAddSingleton(Random.Shared);
        services.AddTransient<IMediaRepository, MediaRepository>();
        return services;
    }
}