< Summary

Line coverage
100%
Covered lines: 53
Uncovered lines: 0
Coverable lines: 53
Total lines: 81
Line coverage: 100%
Branch coverage
97%
Covered branches: 39
Total branches: 40
Branch coverage: 97.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)75%4100%
DeleteAsync()100%12100%
SelectAsync()100%14100%
InsertAsync()100%10100%
UpdateAsync()100%10100%
FillParametersWithValues(...)100%6100%

File(s)

/home/rob/github-runner/_work/snacks-bb-g1-weidinger-g1-sinnreich/snacks-bb-g1-weidinger-g1-sinnreich/src/Snacks.DAL/Entities/SnacksDao.cs

#LineLine coverage
 1using Snacks.DAL.Abstractions;
 2using Snacks.DAL.Common;
 3using Snacks.Domain.Abstractions;
 4
 5namespace Snacks.DAL.Entities;
 6
 7public class SnacksDao<T> : ISnacksDao<T> where T : IDomainModels
 8{
 9    protected IAdoTemplate template;
 25610    protected QueryStore? queryStore = QueryStore.Instance;
 11    protected List<QueryStore.JQuery>? queries;
 12
 25613    public SnacksDao(IConnectionFactory connectionFactory)
 25614    {
 25615        this.template = new AdoTemplate(connectionFactory);
 25616        if (queryStore!.Root is not null && queryStore.Root.Entities is not null)
 25617        {
 25618            queries = queryStore.Root.Entities[typeof(T).Name].Queries;
 25619        }
 25620    }
 21
 22    public async Task<bool> DeleteAsync(T input)
 8223    {
 30224        var query = queries?.Find(x => x.Name == "DeleteAsync");
 8225        var parameter = query is null? throw new ArgumentNullException(): query.Parameters;
 7826        if (query is null || query.Statement is null || parameter is null)
 827        { throw new ArgumentNullException(); }
 7428        return 1 == await template.ExecuteAsync(query.Statement, FillParametersWithValues(input, parameter));
 7429    }
 30
 31    public async Task<IEnumerable<T>> SelectAsync(T input)
 20032    {
 39633        var query = queries is null? throw new ArgumentNullException(): queries.Find(x => x.Name == "SelectAsync");
 19834        var parameter = query is null ? throw new ArgumentNullException() : query.Parameters;
 19635        var mapper = queryStore!.Root is null ? throw new ArgumentNullException() : (RowMapper<T>)queryStore.Root.Entiti
 19436        if (query.Statement is null || parameter is null || mapper is null)
 837        { throw new ArgumentNullException(); }
 19038        return await template.QueryAsync(query.Statement, mapper, FillParametersWithValues(input, parameter));
 19039    }
 40
 41    public async Task<bool> InsertAsync(T input)
 3842    {
 11843        var query = queries is null? throw new ArgumentNullException() : queries.Find(x => x.Name == "InsertAsync");
 3644        var par = query is null? throw new ArgumentNullException(): query.Parameters;
 3445        if (query.Statement is null || par is null)
 846        { throw new ArgumentNullException(); }
 3047        return 1 == await template.ExecuteAsync(query.Statement, FillParametersWithValues(input, par));
 2848    }
 49
 50    public async Task<bool> UpdateAsync(T input)
 6051    {
 24052        var query = queries is null? throw new ArgumentNullException(): queries.Find(x => x.Name == "UpdateAsync");
 5853        var par = query is null? throw new ArgumentNullException(): query.Parameters;
 5654        if (query.Statement is null || par is null)
 855        { throw new ArgumentNullException();}
 5256        return 1 == await template.ExecuteAsync(query.Statement, FillParametersWithValues(input, par));
 57
 5258    }
 59
 60    private QueryParameter[] FillParametersWithValues<T>(T input, QueryStore.JParameter[] par)
 34661    {
 34662        var parameters = new List<QueryParameter>();
 63
 368064        foreach (var parameter in par)
 132265        {
 66
 132267            var parameterName = parameter.Name is null? throw new ArgumentNullException(): parameter.Name.TrimStart('@')
 132068            var propertyInfo = typeof(T).GetProperties()
 553869                .FirstOrDefault(p => p.Name.ToLower() == parameterName);
 70
 132071            if (propertyInfo != null)
 132072            {
 132073                var propertyValue = propertyInfo.GetValue(input);
 132074                parameters.Add(new QueryParameter(parameter.Name, propertyValue));
 132075            }
 132076        }
 34477        return parameters.ToArray();
 34478    }
 79
 80
 81}