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