laatzen/LaaProductionWeb/LaaProduction.Personalization/Repositories/RolesRepository.cs
2024-03-06 12:48:08 +01:00

82 lines
3.3 KiB
C#

namespace LaaProduction.Personalization.Repositories
{
using LaaProduction.Personalization.Models;
using LaaProduction.Personalization.Repositories.Interfaces;
using LaaProduction.SQL.Interfaces;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
internal class RolesRepository : IRolesRepository
{
private readonly ISQLConnection sqlConnection;
public RolesRepository(ISQLConnection sqlConnection)
=> this.sqlConnection = sqlConnection;
public IEnumerable<Role> All()
=> this.sqlConnection
.CreateCommand(@"
SELECT [Recht]
, [MitarbeiterNr]
FROM [MitarbeiterRechte]")
.ExecuteReader(x => new Role
{
Name = x.GetString(),
EmployeeId = (short)x.GetInt()
});
public IEnumerable<string> All(short employeeId)
=> this.sqlConnection
.CreateCommand($@"
SELECT DISTINCT [Recht]
FROM [MitarbeiterRechte]
WHERE [MitarbeiterNr] = @{nameof(employeeId)}")
.SetParameter(nameof(employeeId), employeeId)
.ExecuteReader(x => x.GetString());
public void Delete(short employeeId)
=> this.sqlConnection
.CreateCommand($@"
DELETE FROM [MitarbeiterRechte]
WHERE [MitarbeiterNr] = @{nameof(employeeId)}")
.SetParameter(nameof(employeeId), employeeId)
.ExecuteNonQuery();
public void Insert(short employeeId, IEnumerable<string> roles)
=> this.sqlConnection
.CreateCommand($@"
INSERT INTO [MitarbeiterRechte] ([MitarbeiterNr], [Recht])
VALUES {string.Join(", ", roles.Select((x, i) => $"(@{nameof(employeeId)}, '{new SqlParameter(i.ToString(), x).SqlValue}')"))}")
.SetParameter(nameof(employeeId), employeeId)
.ExecuteNonQuery();
public void Insert(string role, IEnumerable<short> employees)
=> this.sqlConnection
.CreateCommand($@"
INSERT INTO [MitarbeiterRechte] ([MitarbeiterNr], [Recht])
VALUES {string.Join(", ", employees.Select((x, i) => $"('{new SqlParameter(i.ToString(), x).SqlValue}', @{nameof(role)})"))}")
.SetParameter(nameof(role), role)
.ExecuteNonQuery();
public void Delete(string role)
=> this.sqlConnection
.CreateCommand($@"
DELETE FROM [MitarbeiterRechte]
WHERE [Recht] = @{nameof(role)}")
.SetParameter(nameof(role), role)
.ExecuteNonQuery();
public IEnumerable<KeyValuePair<int, int>> UsersRolesCount()
=> this.sqlConnection
.CreateCommand($@"
SELECT DISTINCT
[MitarbeiterNr]
, COUNT([Recht])
FROM [MitarbeiterRechte]
GROUP BY [MitarbeiterNr]")
.ExecuteReader(x => new KeyValuePair<int, int>(x.GetInt(), x.GetInt()));
}
}