82 lines
3.3 KiB
C#
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()));
|
|
}
|
|
}
|