< Summary

Information
Class: LOCKnet.Data.Repositories.SettingsRepository
Assembly: LOCKnet.Data
File(s): /home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.Data/Repositories/SettingsRepository.cs
Line coverage
100%
Covered lines: 36
Uncovered lines: 0
Coverable lines: 36
Total lines: 70
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor(...)100%11100%
Set(...)100%11100%
Get(...)100%11100%
GetAll()100%22100%
Remove(...)100%11100%

File(s)

/home/runner/work/LOCKnet/LOCKnet/src/LOCKnet.Data/Repositories/SettingsRepository.cs

#LineLine coverage
 1using LOCKnet.Core.DataAbstractions;
 2using Microsoft.Data.Sqlite;
 3
 4namespace LOCKnet.Data.Repositories;
 5
 6/// <summary>
 7/// SQLite-Implementierung von <see cref="ISettingsRepository"/>.
 8/// </summary>
 9public class SettingsRepository : RepositoryBase, ISettingsRepository
 10{
 11  /// <summary>Initialisiert eine neue Instanz von <see cref="SettingsRepository"/>.</summary>
 12  /// <param name="connectionString">Der vollständige SQLite-Connection-String.</param>
 3613  public SettingsRepository(string connectionString) : base(connectionString) { }
 14
 15  /// <summary>Initialisiert eine neue Instanz von <see cref="SettingsRepository"/>.</summary>
 16  /// <param name="connectionFactory">Factory fuer Storage-spezifische SQLite-Verbindungen.</param>
 5117  public SettingsRepository(ISqliteConnectionFactory connectionFactory) : base(connectionFactory) { }
 18
 19  #region ISettingsRepository
 20
 21  /// <inheritdoc/>
 22  public void Set(string key, string value)
 3223  {
 3224    using var conn = GetConnection();
 3225    using var cmd = conn.CreateCommand();
 3226    cmd.CommandText = @"
 3227            INSERT INTO Settings (Key, Value) VALUES ($key, $value)
 3228            ON CONFLICT(Key) DO UPDATE SET Value = $value, UpdatedAt = CURRENT_TIMESTAMP;";
 3229    cmd.Parameters.AddWithValue("$key", key);
 3230    cmd.Parameters.AddWithValue("$value", value);
 3231    cmd.ExecuteNonQuery();
 6432  }
 33
 34  /// <inheritdoc/>
 35  public string? Get(string key)
 636  {
 637    using var conn = GetConnection();
 638    using var cmd = conn.CreateCommand();
 639    cmd.CommandText = "SELECT Value FROM Settings WHERE Key = $key";
 640    cmd.Parameters.AddWithValue("$key", key);
 641    return cmd.ExecuteScalar() as string;
 642  }
 43
 44  /// <inheritdoc/>
 45  public IReadOnlyDictionary<string, string> GetAll()
 546  {
 547    var dict = new Dictionary<string, string>();
 548    using var conn = GetConnection();
 549    using var cmd = conn.CreateCommand();
 550    cmd.CommandText = "SELECT Key, Value FROM Settings";
 51
 552    using var reader = cmd.ExecuteReader();
 1253    while (reader.Read())
 754      dict[reader.GetString(0)] = reader.GetString(1);
 55
 556    return dict;
 557  }
 58
 59  /// <inheritdoc/>
 60  public void Remove(string key)
 361  {
 362    using var conn = GetConnection();
 363    using var cmd = conn.CreateCommand();
 364    cmd.CommandText = "DELETE FROM Settings WHERE Key = $key;";
 365    cmd.Parameters.AddWithValue("$key", key);
 366    cmd.ExecuteNonQuery();
 667  }
 68
 69  #endregion
 70}