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 All() => this.sqlConnection .CreateCommand(@" SELECT [Recht] , [MitarbeiterNr] FROM [MitarbeiterRechte]") .ExecuteReader(x => new Role { Name = x.GetValue(0), EmployeeId = (Int16)x.GetValue(1) }); public IEnumerable All(Int16 employeeId) => this.sqlConnection .CreateCommand($@" SELECT DISTINCT [Recht] FROM [MitarbeiterRechte] WHERE [MitarbeiterNr] = @{nameof(employeeId)}") .SetParameter(nameof(employeeId), employeeId) .ExecuteReader(x => x.GetValue(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 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 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> UsersRolesCount() => this.sqlConnection .CreateCommand($@" SELECT DISTINCT [MitarbeiterNr] , COUNT([Recht]) FROM [MitarbeiterRechte] GROUP BY [MitarbeiterNr]") .ExecuteReader(x => new KeyValuePair(x.GetValue(0), x.GetValue(1))); } }