using cwebplusApp.Shared.Models; using Microsoft.JSInterop; using System; using System.Collections.Generic; using System.Threading.Tasks; using TG.Blazor.IndexedDB; namespace cwebplusApp.Shared.Services { public sealed class ReportRepositoryService { private const string FoundReportRepository_Store_Name = "FoundReportRepositoryItems"; private const string MissingReportRepository_Store_Name = "MissingReportRepositoryItems"; private readonly IJSRuntime jsRuntime; private bool initialized; private readonly IndexedDBManager dbManager; public ReportRepositoryService(IJSRuntime jsRuntime, IndexedDBManager _dbManager) { this.jsRuntime = jsRuntime; this.dbManager = _dbManager; } public async Task SaveReport(ReportRepositoryItem reportRepositoryItem) { if (reportRepositoryItem is FoundReportRepositoryItem fItem) { await SaveFoundReport(fItem); } else if (reportRepositoryItem is MissingReportRepositoryItem mItem) { await SaveMissingReport(mItem); } } public async ValueTask> GetFoundReports() { return await this.dbManager.GetRecords(FoundReportRepository_Store_Name); } public async ValueTask> GetPendingFoundReports() { var indexSearch = new StoreIndexQuery { Storename = FoundReportRepository_Store_Name, IndexName = "status", QueryValue = ReportRepositoryItem.State.PENDING }; return new List(await this.dbManager.GetAllRecordsByIndex(indexSearch)); } public async ValueTask> GetTransmittedFoundReports() { var indexSearch = new StoreIndexQuery { Storename = FoundReportRepository_Store_Name, IndexName = "status", QueryValue = ReportRepositoryItem.State.TRANSMITTED }; return new List(await this.dbManager.GetAllRecordsByIndex(indexSearch)); } public async ValueTask> GetMissingReports() { return await this.dbManager.GetRecords(MissingReportRepository_Store_Name); } public async ValueTask> GetPendingMissingReports() { var indexSearch = new StoreIndexQuery { Storename = MissingReportRepository_Store_Name, IndexName = "status", QueryValue = ReportRepositoryItem.State.PENDING }; return new List(await this.dbManager.GetAllRecordsByIndex(indexSearch)); } public async ValueTask> GetTransmittedMissingReports() { var indexSearch = new StoreIndexQuery { Storename = MissingReportRepository_Store_Name, IndexName = "status", QueryValue = ReportRepositoryItem.State.TRANSMITTED }; return new List(await this.dbManager.GetAllRecordsByIndex(indexSearch)); } public async ValueTask GetNbrOfPendingReports() { IList foundReportRepositoryItems = await GetPendingFoundReports(); List missingReportRepositoryItems = await GetPendingMissingReports(); return foundReportRepositoryItems.Count + missingReportRepositoryItems.Count; } public async Task SaveFoundReport(FoundReportRepositoryItem foundReportRepositoryItem) { var newRecord = new StoreRecord { Storename = FoundReportRepository_Store_Name, Data = foundReportRepositoryItem }; if (foundReportRepositoryItem.ID == 0) { foundReportRepositoryItem.ID = GetCurrentTimeInMillis(); await this.dbManager.AddRecord(newRecord); } else { await this.dbManager.UpdateRecord(newRecord); } } public async Task SaveMissingReport(MissingReportRepositoryItem missingReportRepositoryItem) { var newRecord = new StoreRecord { Storename = MissingReportRepository_Store_Name, Data = missingReportRepositoryItem }; if (missingReportRepositoryItem.ID == 0) { missingReportRepositoryItem.ID = GetCurrentTimeInMillis(); await this.dbManager.AddRecord(newRecord); } else { await this.dbManager.UpdateRecord(newRecord); } } public async Task DeleteReport(ReportRepositoryItem reportRepositoryItem) { if (reportRepositoryItem is FoundReportRepositoryItem) { await this.dbManager.DeleteRecord(FoundReportRepository_Store_Name, reportRepositoryItem.ID); } else { await this.dbManager.DeleteRecord(MissingReportRepository_Store_Name, reportRepositoryItem.ID); } } public static long GetCurrentTimeInMillis() { return DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; } public static string GetCurrentDateTimeFromMillis(long millis) { TimeSpan time = TimeSpan.FromMilliseconds(millis); DateTime date = new DateTime() + time; return date.ToString("dd.MM.yyyy HH:mm:ss"); } } }