using FMDAL.DTO.Meter; using FMDAL.Query.Meter; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using static GB5Shared.GB5Constant.Constant; namespace FMDAL.CustomCode.Meter { public class MeterDAL : IMeterDAL { private readonly IQueryExecutor _QueryExecutor; public MeterDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetSelectListMeter(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string SQL = string.Empty; switch (LoginDTO.DatabaseType) { case DBType.SQL: SQL = MeterQB.GET_SELECTLIST_METER_SQL; break; case DBType.PostGre: SQL = MeterQB.GET_SELECTLIST_METER_PG; break; case DBType.Oracle: SQL = MeterQB.GET_SELECTLIST_METER_ORACLE; break; case DBType.MySQL: SQL = MeterQB.GET_SELECTLIST_METER_MYSQL; break; default: throw new Exception("Unsupported database type"); } var Parameters = new { firstnumber = FirstNumber, maxresult = MaxResult }; var Result = await _QueryExecutor.QueryAsync(LoginDTO, SQL, Parameters); string Json = JsonConvert.SerializeObject(Result); return Json; } catch (Exception) { throw; } } public async Task GetMeter(int meterId, LoginDTO login, CancellationToken ct) { var items = await _QueryExecutor.QueryAsync(login, MeterQB.GET_METER, new { MeterId = meterId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return items.FirstOrDefault(); } public async Task SaveMeter(MeterDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.TenantId = login.ClientId; dto.MeterCreatedOn = DateTime.UtcNow; dto.MeterCreatedById = login.UserId; dto.MeterModifiedOn = DateTime.UtcNow; dto.MeterModifiedById = login.UserId; await _QueryExecutor.ExecuteAsync(login, MeterQB.SAVE_METER, dto, tx, cancellationToken: ct).ConfigureAwait(false); return dto.MeterId; } public async Task UpdateMeter(MeterDTO dto, LoginDTO login, DbTransaction tx, CancellationToken ct) { dto.MeterModifiedOn = DateTime.UtcNow; dto.MeterModifiedById = login.UserId; await _QueryExecutor.ExecuteAsync(login, MeterQB.UPDATE_METER, dto, tx, cancellationToken: ct).ConfigureAwait(false); } public async Task DeleteMeter(int meterId, int modifiedById, LoginDTO login, DbTransaction tx, CancellationToken ct) { await _QueryExecutor.ExecuteAsync(login, MeterQB.DELETE_METER, new { MeterId = meterId, ModifiedById = modifiedById, ModifiedOn = DateTime.UtcNow, TenantId = login.ClientId }, tx, cancellationToken: ct).ConfigureAwait(false); } } }