using System.Linq; using EntitlementDAL.DTO.User; using EntitlementDAL.Interfaces; using EntitlementDAL.Query.User; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using static GB5Shared.GB5Constant.Constant; namespace EntitlementDAL.Implementations; public class EntitlementUserDAL : IEntitlementUserDAL { private readonly IQueryExecutor _QueryExecutor; public EntitlementUserDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task SaveUserAsync(EntitlementUserDTO userDto, LoginDTO login, CancellationToken ct) { string sql = (int)login.DatabaseType switch { DBTYPE.SQL => EntitlementUserQB.SAVE_USER, DBTYPE.POSTGRESQL => EntitlementUserQB.SAVE_USER_PG, _ => throw new NotSupportedException($"Unsupported database type: {login.DatabaseType}") }; await _QueryExecutor.ExecuteAsync(login, sql, userDto, cancellationToken: ct).ConfigureAwait(false); } public async Task GetUserByIdAsync(int userId, LoginDTO login, CancellationToken ct) { var rows = await _QueryExecutor.QueryAsync( login, EntitlementUserQB.GET_USER_BY_ID, new { UserId = userId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } public async Task GetUserByClientIdAsync(int clientId, LoginDTO login, CancellationToken ct) { var rows = await _QueryExecutor.QueryAsync( login, EntitlementUserQB.GET_USER_BY_CLIENT_ID, new { ClientId = clientId }, cancellationToken: ct).ConfigureAwait(false); return rows.FirstOrDefault(); } }