From c762b4e74b024a97a2cc14efb495204fa2664136 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli (W11-AI)" Date: Wed, 25 Mar 2026 17:21:26 +0100 Subject: [PATCH] Continuo con fix manuali su correzioni --- .../Production/IProductionBatchRepository.cs | 10 +-- .../Production/IProductionGroupRepository.cs | 20 ++++++ .../Production/IProductionItemRepository.cs | 32 +++++++-- .../Production/IProductionOdlRepository.cs | 46 +++++++------ .../Production/IProductionPlantRepository.cs | 7 ++ .../Production/ProductionBatchRepository.cs | 6 +- .../Production/ProductionGroupRepository.cs | 17 +---- .../Production/ProductionItemRepository.cs | 17 ++--- .../Production/ProductionOdlRepository.cs | 37 ++--------- .../Production/ProductionPlantRepository.cs | 1 + .../Repository/Sales/CustomerRepository.cs | 7 +- .../Repository/Sales/DealerRepository.cs | 6 +- .../Repository/Sales/ICustomerRepository.cs | 7 ++ .../Repository/Sales/IDealerRepository.cs | 7 ++ .../Repository/Sales/IOfferRepository.cs | 65 +++++++++++++++++-- .../Repository/Sales/OfferRepository.cs | 17 +++-- 16 files changed, 193 insertions(+), 109 deletions(-) diff --git a/EgwCoreLib.Lux.Data/Repository/Production/IProductionBatchRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/IProductionBatchRepository.cs index 29eab2b..60e1359 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/IProductionBatchRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/IProductionBatchRepository.cs @@ -1,13 +1,15 @@ namespace EgwCoreLib.Lux.Data.Repository.Production { + /// + /// Interfaccia per la gestione dei batch di produzione. + /// public interface IProductionBatchRepository { - /// - /// Creazione di un Batch con relativo Tag e info x creazione ODL correlati + /// Crea un nuovo batch con relativo tag e informazioni per la creazione degli ODL correlati. /// - /// - /// + /// Il batch da creare. + /// Il batch creato, o null se fallisce. Task CreateAsync(ProductionBatchModel entity); } } diff --git a/EgwCoreLib.Lux.Data/Repository/Production/IProductionGroupRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/IProductionGroupRepository.cs index 15796c4..d2663c7 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/IProductionGroupRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/IProductionGroupRepository.cs @@ -1,11 +1,31 @@ namespace EgwCoreLib.Lux.Data.Repository.Production { + /// + /// Interfaccia per la gestione dei gruppi di produzione. + /// public interface IProductionGroupRepository { + /// + /// Recupera l'elenco dei gruppi di produzione per un ordine specifico. + /// + /// L'identificatore della riga d'ordine. + /// L'elenco dei gruppi di produzione associati all'ordine. Task> GetByOrderRowAsync(int orderRowID); + /// + /// Recupera l'elenco dei gruppi di produzione per stato dell'ordine. + /// + /// Lo stato richiesto della riga d'ordine. + /// L'elenco dei gruppi di produzione con lo stato specificato. Task> GetByOrderStateAsync(OrderStates reqState); + /// + /// Aggiunge o aggiorna un record di Production Group dalla fase Balance. + /// + /// L'UID dell'articolo dell'offerta. + /// Il gruppo di produzione di riferimento. + /// I dati di bilanciamento serializzati in JSON. + /// True se l'operazione ha successo, false altrimenti. Task UpsertBalanceAsync(string uID, string rGroup, string rawBalance); } } diff --git a/EgwCoreLib.Lux.Data/Repository/Production/IProductionItemRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/IProductionItemRepository.cs index a6a555d..d64cb85 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/IProductionItemRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/IProductionItemRepository.cs @@ -1,17 +1,39 @@ namespace EgwCoreLib.Lux.Data.Repository.Production { + /// + /// Interfaccia per la gestione degli articoli di produzione. + /// public interface IProductionItemRepository { - #region Public Methods - + /// + /// Esegue l'assegnazione bulk degli articoli di produzione a un unico batch di produzione. + /// + /// L'identificatore della riga d'ordine. + /// L'identificatore del batch di produzione. + /// Il numero di articoli aggiornati. Task BulkAssignProdBatchAsync(int orderRowId, int prodBatchId); - Task BulkAssignProdGroupAsync(int OrderRowId, int ProdGroupId, Dictionary itemsToAssign); + /// + /// Esegue l'assegnazione bulk degli articoli di produzione a un unico gruppo di produzione. + /// + /// L'identificatore della riga d'ordine. + /// L'identificatore del gruppo di produzione. + /// Un dizionario che mappa i tag degli articoli ai tempi stimati. + /// Il numero di articoli aggiornati. + Task BulkAssignProdGroupAsync(int orderRowId, int prodGroupId, Dictionary itemsToAssign); + /// + /// Recupera l'elenco degli articoli di produzione per una riga d'ordine. + /// + /// L'identificatore della riga d'ordine. + /// L'elenco degli articoli di produzione. Task> GetByOrderRowAsync(int orderRowId); + /// + /// Resetta le assegnazioni degli articoli di produzione per una riga d'ordine. + /// + /// L'identificatore della riga d'ordine. + /// Il numero di articoli resettati. Task ResetAssignAsync(int orderRowID); - - #endregion Public Methods } } \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Production/IProductionOdlRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/IProductionOdlRepository.cs index 2d76166..232aaa9 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/IProductionOdlRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/IProductionOdlRepository.cs @@ -2,53 +2,57 @@ namespace EgwCoreLib.Lux.Data.Repository.Production { + /// + /// Interfaccia per la gestione degli ODL (Ordini di Lavoro) di produzione. + /// public interface IProductionOdlRepository { - #region Public Methods - /// - /// Metodo aggiunta record + /// Inserisce un nuovo record ODL nel database. /// - /// - /// + /// L'ODL da inserire. + /// True se l'inserimento ha successo, false altrimenti. Task AddAsync(ProductionODLModel entity); + /// + /// Assegna in blocco gli articoli di produzione agli ODL corrispondenti. + /// + /// La lista degli ODL coinvolti. + /// Un dizionario che mappa le chiavi (fase, risorsa, macchina, indice) ai tag degli articoli. + /// Il numero di relazioni create. Task AssignProdItem2OdlAsync(List dbList, Dictionary<(int phaseId, int resId, string machine, int index), List> dictParts); /// - /// Insert sul DB di un elenco ODL con calcolo della relativa KEY a cui poter, successivamente, collegare i record child (items) + /// Inserisce in blocco un elenco di ODL nel database e calcola i tag automaticamente. /// - /// - /// - /// + /// La lista degli OL da inserire. + /// La lista degli ODL con gli identificatori aggiornati. Task> CreateAsync(List listOdl2ins); /// - /// Recupero record ProdOdl dato Tag/uID + /// Recupera un record ODL dato il tag o l'UID. /// - /// - /// + /// Il tag o UID dell'ODL. + /// L'ODL corrispondente, o null se non esiste. Task GetByUidAsync(string uID); /// - /// Elenco PODL non assegnati + /// Recupera l'elenco degli ODL non ancora assegnati. /// - /// + /// L'elenco degli ODL non assegnati. Task> GetUnassignAsync(); /// - /// Elenco PODL non assegnati con struttura DTO appiattita + /// Recupera l'elenco degli ODL non assegnati con struttura DTO appiattita. /// - /// + /// L'elenco dei DTO degli ODL non assegnati. Task> GetUnassignOdlDtoAsync(); /// - /// Update generico record + /// Aggiorna un record ODL esistente nel database. /// - /// - /// + /// L'ODL aggiornato. + /// True se l'aggiornamento ha successo, false altrimenti. Task UpdateAsync(ProductionODLModel entity); - - #endregion Public Methods } } \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Production/IProductionPlantRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/IProductionPlantRepository.cs index 2f7a473..04069ae 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/IProductionPlantRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/IProductionPlantRepository.cs @@ -1,7 +1,14 @@ namespace EgwCoreLib.Lux.Data.Repository.Production { + /// + /// Interfaccia per la gestione degli impianti di produzione. + /// public interface IProductionPlantRepository { + /// + /// Recupera l'elenco di tutti gli impianti di produzione. + /// + /// L'elenco di tutti gli impianti. Task> GetAllAsync(); } } diff --git a/EgwCoreLib.Lux.Data/Repository/Production/ProductionBatchRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/ProductionBatchRepository.cs index 7e2506b..63aac8c 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/ProductionBatchRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/ProductionBatchRepository.cs @@ -14,11 +14,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production #region Public Methods - /// - /// Creazione di un Batch con relativo Tag e info x creazione ODL correlati - /// - /// - /// + /// public async Task CreateAsync(ProductionBatchModel entity) { await using var dbCtx = await CreateContextAsync(); diff --git a/EgwCoreLib.Lux.Data/Repository/Production/ProductionGroupRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/ProductionGroupRepository.cs index 28cfbd5..ae28f84 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/ProductionGroupRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/ProductionGroupRepository.cs @@ -14,10 +14,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production #region Public Methods - /// - /// Elenco record ProductionGroup dato OrderRow - /// - /// + /// public async Task> GetByOrderRowAsync(int orderRowID) { await using var dbCtx = await CreateContextAsync(); @@ -28,10 +25,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production .ToListAsync(); } - /// - /// Elenco record ProductionGroup dato Stato dell'OrderRow - /// - /// + /// public async Task> GetByOrderStateAsync(OrderStates reqState) { await using var dbCtx = await CreateContextAsync(); @@ -43,12 +37,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production .ToListAsync(); } - /// - /// Add record di un singolo ProdGroup da fase Balance - /// - /// UID dell'item offerta di cui si è ricevuto l'oggetto Balance' - /// Prod Group di riferimento - /// + /// public async Task UpsertBalanceAsync(string uID, string rGroup, string rawBalance) { bool answ = false; diff --git a/EgwCoreLib.Lux.Data/Repository/Production/ProductionItemRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/ProductionItemRepository.cs index 1be9f61..5cccb62 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/ProductionItemRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/ProductionItemRepository.cs @@ -12,12 +12,7 @@ #region Public Methods - /// - /// Esegue assegnazione bulk dei ProdItem ad un unico ProdBatch parent (per ora totale x RigaOrd) - /// - /// - /// - /// + /// public async Task BulkAssignProdBatchAsync(int orderRowId, int prodBatchId) { await using var dbCtx = await CreateContextAsync(); @@ -42,13 +37,7 @@ return totUpd; } - /// - /// Esegue assegnazione bulk dei ProdItem ad un unico ProdGroup parent - /// - /// - /// - /// - /// + /// public async Task BulkAssignProdGroupAsync(int orderRowId, int prodGroupId, Dictionary itemsToAssign) { await using var dbCtx = await CreateContextAsync(); @@ -77,6 +66,7 @@ return totUpd; } + /// public async Task> GetByOrderRowAsync(int orderRowId) { await using var dbCtx = await CreateContextAsync(); @@ -86,6 +76,7 @@ .ToListAsync(); } + /// public async Task ResetAssignAsync(int orderRowID) { await using var dbCtx = await CreateContextAsync(); diff --git a/EgwCoreLib.Lux.Data/Repository/Production/ProductionOdlRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/ProductionOdlRepository.cs index 623f444..cfb7681 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/ProductionOdlRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/ProductionOdlRepository.cs @@ -15,6 +15,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production #region Public Methods + /// public async Task AddAsync(ProductionODLModel entity) { await using var dbCtx = await CreateContextAsync(); @@ -22,12 +23,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production return await dbCtx.SaveChangesAsync() > 0; } - /// - /// Assegnazione in blocco degli item agli ODL corrispondenti - /// - /// - /// - /// + /// public async Task AssignProdItem2OdlAsync(List dbList, Dictionary<(int phaseId, int resId, string machine, int index), List> dictParts) { int totalCreated = 0; @@ -99,12 +95,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production return totalCreated; } - /// - /// Insert sul DB di un elenco ODL con calcolo della relativa KEY a cui poter, successivamente, collegare i record child (items) - /// - /// - /// - /// + /// public async Task> CreateAsync(List listOdl2ins) { await using var dbCtx = await CreateContextAsync(); @@ -147,11 +138,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production } } - /// - /// Recupero record ProdOdl dato Tag/uID - /// - /// - /// + /// public async Task GetByUidAsync(string uID) { await using var dbCtx = await CreateContextAsync(); @@ -160,10 +147,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production .FirstOrDefaultAsync(x => x.OdlTag == uID); } - /// - /// Elenco PODL non assegnati - /// - /// + /// public async Task> GetUnassignAsync() { await using var dbCtx = await CreateContextAsync(); @@ -174,10 +158,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production .ToListAsync(); } - /// - /// Elenco PODL non assegnati con struttura DTO appiattita - /// - /// + /// public async Task> GetUnassignOdlDtoAsync() { await using var dbCtx = await CreateContextAsync(); @@ -210,11 +191,7 @@ namespace EgwCoreLib.Lux.Data.Repository.Production .ToListAsync(); } - /// - /// Update generico record - /// - /// - /// + /// public async Task UpdateAsync(ProductionODLModel entity) { await using var dbCtx = await CreateContextAsync(); diff --git a/EgwCoreLib.Lux.Data/Repository/Production/ProductionPlantRepository.cs b/EgwCoreLib.Lux.Data/Repository/Production/ProductionPlantRepository.cs index b4423f8..8a4cc08 100644 --- a/EgwCoreLib.Lux.Data/Repository/Production/ProductionPlantRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Production/ProductionPlantRepository.cs @@ -12,6 +12,7 @@ #region Public Methods + /// public async Task> GetAllAsync() { await using var dbCtx = await CreateContextAsync(); diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/CustomerRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/CustomerRepository.cs index 814896a..b6495e7 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/CustomerRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/CustomerRepository.cs @@ -10,14 +10,13 @@ #endregion Public Constructors - #region Public Methods - +/// public async Task> GetAllAsync() { await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetCustomer - .AsNoTracking() - .ToListAsync(); + .AsNoTracking() + .ToListAsync(); } #endregion Public Methods diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/DealerRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/DealerRepository.cs index 63abac4..c3910fd 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/DealerRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/DealerRepository.cs @@ -11,13 +11,13 @@ #endregion Public Constructors #region Public Methods - + /// public async Task> GetAllAsync() { await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetDealer - .AsNoTracking() - .ToListAsync(); + .AsNoTracking() + .ToListAsync(); } #endregion Public Methods diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/ICustomerRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/ICustomerRepository.cs index 42ec38d..0a8bbe3 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/ICustomerRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/ICustomerRepository.cs @@ -1,7 +1,14 @@ namespace EgwCoreLib.Lux.Data.Repository.Sales { + /// + /// Interfaccia per la gestione dei clienti. + /// public interface ICustomerRepository { + /// + /// Recupera l'elenco di tutti i clienti. + /// + /// L'elenco di tutti i clienti. Task> GetAllAsync(); } } diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/IDealerRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/IDealerRepository.cs index ead4873..06347ee 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/IDealerRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/IDealerRepository.cs @@ -1,7 +1,14 @@ namespace EgwCoreLib.Lux.Data.Repository.Sales { + /// + /// Interfaccia per la gestione dei rivenditori. + /// public interface IDealerRepository { + /// + /// Recupera l'elenco di tutti i rivenditori. + /// + /// L'elenco di tutti i rivenditori. Task> GetAllAsync(); } } diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/IOfferRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/IOfferRepository.cs index f91b0c7..abd5039 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/IOfferRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/IOfferRepository.cs @@ -1,34 +1,89 @@ namespace EgwCoreLib.Lux.Data.Repository.Sales { + /// + /// Interfaccia per la gestione delle offerte. + /// public interface IOfferRepository : IBaseRepository { - #region Public Methods - + /// + /// Inserisce una nuova offerta nel database. + /// + /// L'offerta da inserire. + /// True se l'inserimento ha successo, false altrimenti. Task AddAsync(OfferModel entity); + /// + /// Segna come scadute le offerte la cui data di validità è passata e che sono ancora aperte. + /// + /// True se almeno un'offerta è stata aggiornata, false altrimenti. Task CheckExpiredAsync(); + /// + /// Esegue il cloning completo di un'Offerta e di tutte le relative righe. + /// + /// L'offerta da clonare. + /// True se il cloning ha successo, false altrimenti. Task CloneAsync(OfferModel rec2clone); + /// + /// Elimina un'offerta dal database. + /// + /// L'offerta da eliminare. + /// True se l'eliminazione ha successo, false altrimenti. Task DeleteAsync(OfferModel entity); + /// + /// Recupera l'elenco di tutte le offerte. + /// + /// L'elenco di tutte le offerte con clienti, rivenditori e righe associate. Task> GetAllAsync(); + /// + /// Recupera l'elenco degli elementi BOM (Bill of Materials) utilizzati nelle offerte. + /// + /// L'elenco degli elementi BOM. Task> GetBomItemsAsync(); + /// + /// Recupera un'offerta per il suo identificatore. + /// + /// L'identificatore dell'offerta. + /// L'offerta corrispondente, o null se non esiste. Task GetByIdAsync(int recId); + /// + /// Recupera le offerte inserite in un intervallo di date specifico. + /// + /// La data di inizio del periodo. + /// La data di fine del periodo. + /// L'elenco delle offerte nell'intervallo specificato. Task> GetFiltAsync(DateTime inizio, DateTime fine); + /// + /// Recupera l'elenco dei gruppi di articoli. + /// + /// L'elenco dei gruppi di articoli. Task> GetItemGroupsAsync(); + /// + /// Recupera le righe dell'offerta per un'offerta specifica. + /// + /// L'identificatore dell'offerta. + /// L'elenco delle righe dell'offerta. Task> GetRowsAsync(int recId); + /// + /// Aggiorna in batch le righe di un'offerta. + /// + /// L'elenco delle righe da aggiornare. + /// True se l'aggiornamento ha successo, false altrimenti. Task SaveRowsAsync(List rows); + /// + /// Aggiorna un'offerta esistente nel database. + /// + /// L'offerta aggiornata. + /// True se l'aggiornamento ha successo, false altrimenti. Task UpdateAsync(OfferModel entity); - - - #endregion Public Methods } } \ No newline at end of file diff --git a/EgwCoreLib.Lux.Data/Repository/Sales/OfferRepository.cs b/EgwCoreLib.Lux.Data/Repository/Sales/OfferRepository.cs index a4d6866..629ff70 100644 --- a/EgwCoreLib.Lux.Data/Repository/Sales/OfferRepository.cs +++ b/EgwCoreLib.Lux.Data/Repository/Sales/OfferRepository.cs @@ -12,6 +12,7 @@ #region Public Methods + /// public async Task AddAsync(OfferModel entity) { await using var dbCtx = await CreateContextAsync(); @@ -19,6 +20,7 @@ return await dbCtx.SaveChangesAsync() > 0; } + /// public async Task CheckExpiredAsync() { await using var dbCtx = await CreateContextAsync(); @@ -47,11 +49,7 @@ } } - /// - /// Esegue il cloning completo di un Offerta e di TUTTE le relative righe... - /// - /// - /// + /// public async Task CloneAsync(OfferModel rec2clone) { await using var dbCtx = await CreateContextAsync(); @@ -150,6 +148,7 @@ } } + /// public async Task DeleteAsync(OfferModel entity) { await using var dbCtx = await CreateContextAsync(); @@ -157,6 +156,7 @@ return await dbCtx.SaveChangesAsync() > 0; } + /// public async Task> GetAllAsync() { await using var dbCtx = await CreateContextAsync(); @@ -168,6 +168,7 @@ .ToListAsync(); } + /// public async Task> GetBomItemsAsync() { await using var dbCtx = await CreateContextAsync(); @@ -176,12 +177,14 @@ .ToListAsync(); } + /// public async Task GetByIdAsync(int recId) { await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetOffer.FirstOrDefaultAsync(x => x.OfferID == recId); } + /// public async Task> GetFiltAsync(DateTime inizio, DateTime fine) { await using var dbCtx = await CreateContextAsync(); @@ -194,12 +197,14 @@ .ToListAsync(); } + /// public async Task> GetItemGroupsAsync() { await using var dbCtx = await CreateContextAsync(); return await dbCtx.DbSetItemGroup.ToListAsync(); } + /// public async Task> GetRowsAsync(int recId) { await using var dbCtx = await CreateContextAsync(); @@ -208,6 +213,7 @@ .ToListAsync(); } + /// public async Task SaveRowsAsync(List rows) { // Add validation for null or empty list @@ -236,6 +242,7 @@ } } + /// public async Task UpdateAsync(OfferModel entity) { await using var dbCtx = await CreateContextAsync();