< Summary

Information
Class: Chronicis.Api.Repositories.ResourceProviderRepository
Assembly: Chronicis.Api
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Api/Repositories/ResourceProviderRepository.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 45
Coverable lines: 45
Total lines: 92
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%
GetAllProvidersAsync()100%210%
GetWorldProvidersAsync()100%210%
SetProviderEnabledAsync()0%2040%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Repositories/ResourceProviderRepository.cs

#LineLine coverage
 1using Chronicis.Api.Data;
 2using Chronicis.Shared.Models;
 3using Microsoft.EntityFrameworkCore;
 4
 5namespace Chronicis.Api.Repositories;
 6
 7/// <summary>
 8/// Repository implementation for managing resource providers and their world associations.
 9/// </summary>
 10public class ResourceProviderRepository : IResourceProviderRepository
 11{
 12    private readonly ChronicisDbContext _context;
 13
 014    public ResourceProviderRepository(ChronicisDbContext context)
 15    {
 016        _context = context;
 017    }
 18
 19    /// <inheritdoc/>
 20    public async Task<List<ResourceProvider>> GetAllProvidersAsync()
 21    {
 022        return await _context.ResourceProviders
 023            .Where(rp => rp.IsActive)
 024            .OrderBy(rp => rp.Name)
 025            .AsNoTracking()
 026            .ToListAsync();
 027    }
 28
 29    /// <inheritdoc/>
 30    public async Task<List<(ResourceProvider Provider, bool IsEnabled)>> GetWorldProvidersAsync(Guid worldId)
 31    {
 32        // Get all active providers
 033        var providers = await _context.ResourceProviders
 034            .Where(rp => rp.IsActive)
 035            .OrderBy(rp => rp.Name)
 036            .AsNoTracking()
 037            .ToListAsync();
 38
 39        // Get enabled providers for this world
 040        var enabledProviderCodes = await _context.WorldResourceProviders
 041            .Where(wrp => wrp.WorldId == worldId && wrp.IsEnabled)
 042            .Select(wrp => wrp.ResourceProviderCode)
 043            .ToListAsync();
 44
 45        // Combine into result
 046        return providers.Select(p => (
 047            Provider: p,
 048            IsEnabled: enabledProviderCodes.Contains(p.Code)
 049        )).ToList();
 050    }
 51
 52    /// <inheritdoc/>
 53    public async Task<bool> SetProviderEnabledAsync(Guid worldId, string providerCode, bool enabled, Guid userId)
 54    {
 55        // Verify provider exists
 056        var providerExists = await _context.ResourceProviders
 057            .AnyAsync(rp => rp.Code == providerCode && rp.IsActive);
 58
 059        if (!providerExists)
 60        {
 061            return false;
 62        }
 63
 64        // Find or create the association
 065        var association = await _context.WorldResourceProviders
 066            .FirstOrDefaultAsync(wrp => wrp.WorldId == worldId && wrp.ResourceProviderCode == providerCode);
 67
 068        if (association == null)
 69        {
 70            // Create new association
 071            association = new WorldResourceProvider
 072            {
 073                WorldId = worldId,
 074                ResourceProviderCode = providerCode,
 075                IsEnabled = enabled,
 076                ModifiedAt = DateTimeOffset.UtcNow,
 077                ModifiedByUserId = userId
 078            };
 079            _context.WorldResourceProviders.Add(association);
 80        }
 81        else
 82        {
 83            // Update existing association
 084            association.IsEnabled = enabled;
 085            association.ModifiedAt = DateTimeOffset.UtcNow;
 086            association.ModifiedByUserId = userId;
 87        }
 88
 089        await _context.SaveChangesAsync();
 090        return true;
 091    }
 92}