namespace LaaProduction.Personalization.Repositories { using LaaProduction.Personalization.Repositories.Interfaces; using LaaProductionSQL.Interfaces; using System.Collections.Generic; using System.Linq; internal class FunctionsRepository : IFunctionsRepository { private readonly ISQLConnection sqlConnection; public FunctionsRepository(ISQLConnection sqlConnection) => this.sqlConnection = sqlConnection; public IEnumerable All() => this.sqlConnection .CreateCommand($@" SELECT DISTINCT [SF].[Function] FROM [SoftwareFunctions] AS [SF]") .ExecuteReader(x => x.GetString()); public IEnumerable All(short appId) => this.sqlConnection .CreateCommand($@" SELECT [SF].[Function] FROM [SoftwareFunctions] AS [SF] WHERE [SF].[AppId] = @{nameof(appId)}") .SetParameter(nameof(appId), appId) .ExecuteReader(x => x.GetString()); public void Delete(short employeeId) => this.sqlConnection .CreateCommand($@" DELETE FROM [UsersFunctions] WHERE [UserId] = @{nameof(employeeId)}") .SetParameter(nameof(employeeId), employeeId) .ExecuteNonQuery(); public IEnumerable EmployeeAll(short employeeId) => this.sqlConnection .CreateCommand($@" SELECT [SF].[Function] FROM [UsersFunctions] AS [UF] JOIN [SoftwareFunctions] AS [SF] ON [SF].[Id] = [UF].[SoftwareFunctionId] WHERE [UF].[UserId] = @{nameof(employeeId)}") .SetParameter(nameof(employeeId), employeeId) .ExecuteReader(x => x.GetString()); public void Insert(short employeeId, IEnumerable functions) => this.sqlConnection .CreateCommand($@" INSERT INTO [UsersFunctions] ( [UserId] , [SoftwareFunctionId]) SELECT @{nameof(employeeId)} , [Id] FROM [SoftwareFunctions] WHERE [Function] IN ({string.Join(", ", functions.Select(x => $"'{x}'"))})") .SetParameter(nameof(employeeId), employeeId) .ExecuteNonQuery(); } }