< Summary - Syki

Information
Class: Syki.Back.Features.Adm.GetUsers.GetUsersService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Adm/GetUsers/GetUsersService.cs
Tag: 4_16869239191
Line coverage
88%
Covered lines: 15
Uncovered lines: 2
Coverable lines: 17
Total lines: 54
Line coverage: 88.2%
Branch coverage
75%
Covered branches: 3
Total branches: 4
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Get()75%4484.61%
<Get()100%11100%

File(s)

/home/runner/work/syki/syki/Back/Features/Adm/GetUsers/GetUsersService.cs

#LineLine coverage
 1using Dapper;
 2using Npgsql;
 3using Syki.Back.Hubs;
 4
 5namespace Syki.Back.Features.Adm.GetUsers;
 6
 27public class GetUsersService(DatabaseSettings dbSettings, HybridCache cache) : IAdmService
 8{
 9    public async Task<List<UserOut>> Get()
 10    {
 211        using var connection = new NpgsqlConnection(dbSettings.ConnectionString);
 12
 13        const string sql = @"
 14            SELECT
 15                u.id,
 16                u.name AS name,
 17                u.email,
 18                u.institution_id,
 19                i.name AS institution,
 20                STRING_AGG(r.name, ',') AS role
 21            FROM
 22                syki.users u
 23            INNER JOIN
 24                syki.institutions i ON i.id = u.institution_id
 25            INNER JOIN
 26                syki.user_roles ur ON ur.user_id = u.id
 27            INNER JOIN
 28                syki.roles r ON r.id = ur.role_id
 29            GROUP BY
 30                u.id, i.name
 31        ";
 32
 233        var users = await cache.GetOrCreateAsync(
 234            key: "users",
 235            state: (connection, sql),
 236            factory: async (state, _) =>
 237            {
 238                var data = await state.connection.QueryAsync<UserOut>(state.sql);
 239                return data.ToList();
 240            }
 241        );
 42
 152043        foreach (var user in users)
 44        {
 75845            if (SykiHubUsersStore.Users.TryGetValue(user.Id, out var connections))
 46            {
 047                user.Online = true;
 048                user.Connections = connections.Count;
 49            }
 50        }
 51
 252        return users;
 253    }
 54}