82 lines
3.3 KiB
C#
82 lines
3.3 KiB
C#
namespace LaaProduction.Personalization.Repositories
|
|
{
|
|
using LaaPackages.SqlClient;
|
|
using LaaProduction.Personalization.Models;
|
|
using LaaProduction.Personalization.Repositories.Interfaces;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
public class RolesRepository : IRolesRepository
|
|
{
|
|
private readonly SqlConnection sqlConnection;
|
|
|
|
public RolesRepository(SqlConnection sqlConnection)
|
|
=> this.sqlConnection = sqlConnection;
|
|
|
|
public IEnumerable<Role> All()
|
|
=> this.sqlConnection
|
|
.CreateCommand(@"
|
|
SELECT [Recht]
|
|
, [MitarbeiterNr]
|
|
FROM [MitarbeiterRechte]")
|
|
.ExecuteReader(x => new Role
|
|
{
|
|
Name = x.GetValue<String>(0),
|
|
EmployeeId = (Int16)x.GetValue<Int32>(1)
|
|
});
|
|
|
|
public IEnumerable<String> All(Int16 employeeId)
|
|
=> this.sqlConnection
|
|
.CreateCommand($@"
|
|
SELECT DISTINCT [Recht]
|
|
FROM [MitarbeiterRechte]
|
|
WHERE [MitarbeiterNr] = @{nameof(employeeId)}")
|
|
.SetParameter(nameof(employeeId), employeeId)
|
|
.ExecuteReader(x => x.GetValue<String>(0));
|
|
|
|
public void Delete(Int16 employeeId)
|
|
=> this.sqlConnection
|
|
.CreateCommand($@"
|
|
DELETE FROM [MitarbeiterRechte]
|
|
WHERE [MitarbeiterNr] = @{nameof(employeeId)}")
|
|
.SetParameter(nameof(employeeId), employeeId)
|
|
.ExecuteNonQuery();
|
|
|
|
public void Insert(Int16 employeeId, IEnumerable<String> roles)
|
|
=> this.sqlConnection
|
|
.CreateCommand($@"
|
|
INSERT INTO [MitarbeiterRechte] ([MitarbeiterNr], [Recht])
|
|
VALUES {String.Join(", ", roles.Select((x, i) => $"(@{nameof(employeeId)}, '{new System.Data.SqlClient.SqlParameter(i.ToString(), x).SqlValue}')"))}")
|
|
.SetParameter(nameof(employeeId), employeeId)
|
|
.ExecuteNonQuery();
|
|
|
|
public void Insert(String role, IEnumerable<Int16> employees)
|
|
=> this.sqlConnection
|
|
.CreateCommand($@"
|
|
INSERT INTO [MitarbeiterRechte] ([MitarbeiterNr], [Recht])
|
|
VALUES {String.Join(", ", employees.Select((x, i) => $"('{new System.Data.SqlClient.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<Int32, Int32>> UsersRolesCount()
|
|
=> this.sqlConnection
|
|
.CreateCommand($@"
|
|
SELECT DISTINCT
|
|
[MitarbeiterNr]
|
|
, COUNT([Recht])
|
|
FROM [MitarbeiterRechte]
|
|
GROUP BY [MitarbeiterNr]")
|
|
.ExecuteReader(x => new KeyValuePair<Int32, Int32>(x.GetValue<Int32>(0), x.GetValue<Int32>(1)));
|
|
}
|
|
}
|