< Summary

Information
Class: Orchestrator.Infrastructure.Factories.FirebaseServiceFactory
Assembly: Orchestrator
File(s): /home/runner/work/KicktippAi/KicktippAi/src/Orchestrator/Infrastructure/Factories/FirebaseServiceFactory.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 25
Coverable lines: 25
Total lines: 76
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_FirestoreDb()100%210%
CreatePredictionRepository()100%210%
CreateKpiRepository()100%210%
CreateContextRepository()100%210%
InitializeFirestoreDb()0%2040%

File(s)

/home/runner/work/KicktippAi/KicktippAi/src/Orchestrator/Infrastructure/Factories/FirebaseServiceFactory.cs

#LineLine coverage
 1using EHonda.KicktippAi.Core;
 2using FirebaseAdapter;
 3using Google.Cloud.Firestore;
 4using Microsoft.Extensions.Logging;
 5
 6namespace Orchestrator.Infrastructure.Factories;
 7
 8/// <summary>
 9/// Default implementation of <see cref="IFirebaseServiceFactory"/>.
 10/// </summary>
 11/// <remarks>
 12/// Initializes <see cref="FirestoreDb"/> from environment variables on construction.
 13/// Throws if required environment variables are not set.
 14/// </remarks>
 15public sealed class FirebaseServiceFactory : IFirebaseServiceFactory
 16{
 17    private readonly ILoggerFactory _loggerFactory;
 18    private readonly Lazy<FirestoreDb> _firestoreDb;
 19
 020    public FirebaseServiceFactory(ILoggerFactory loggerFactory)
 21    {
 022        _loggerFactory = loggerFactory;
 023        _firestoreDb = new Lazy<FirestoreDb>(InitializeFirestoreDb);
 024    }
 25
 26    /// <inheritdoc />
 027    public FirestoreDb FirestoreDb => _firestoreDb.Value;
 28
 29    /// <inheritdoc />
 30    public IPredictionRepository CreatePredictionRepository()
 31    {
 032        var logger = _loggerFactory.CreateLogger<FirebasePredictionRepository>();
 033        return new FirebasePredictionRepository(FirestoreDb, logger);
 34    }
 35
 36    /// <inheritdoc />
 37    public IKpiRepository CreateKpiRepository()
 38    {
 039        var logger = _loggerFactory.CreateLogger<FirebaseKpiRepository>();
 040        return new FirebaseKpiRepository(FirestoreDb, logger);
 41    }
 42
 43    /// <inheritdoc />
 44    public IContextRepository CreateContextRepository()
 45    {
 046        var logger = _loggerFactory.CreateLogger<FirebaseContextRepository>();
 047        return new FirebaseContextRepository(FirestoreDb, logger);
 48    }
 49
 50    private FirestoreDb InitializeFirestoreDb()
 51    {
 052        var projectId = Environment.GetEnvironmentVariable("FIREBASE_PROJECT_ID");
 053        var serviceAccountJson = Environment.GetEnvironmentVariable("FIREBASE_SERVICE_ACCOUNT_JSON");
 54
 055        if (string.IsNullOrWhiteSpace(projectId))
 56        {
 057            throw new InvalidOperationException("FIREBASE_PROJECT_ID environment variable is required");
 58        }
 59
 060        if (string.IsNullOrWhiteSpace(serviceAccountJson))
 61        {
 062            throw new InvalidOperationException("FIREBASE_SERVICE_ACCOUNT_JSON environment variable is required");
 63        }
 64
 065        var logger = _loggerFactory.CreateLogger<FirebaseServiceFactory>();
 066        logger.LogInformation("Initializing Firebase Firestore for project: {ProjectId}", projectId);
 67
 068        var firestoreDbBuilder = new FirestoreDbBuilder
 069        {
 070            ProjectId = projectId,
 071            JsonCredentials = serviceAccountJson
 072        };
 73
 074        return firestoreDbBuilder.Build();
 75    }
 76}