using DevExpress.Utils.Serializing; using Microsoft.EntityFrameworkCore; using TIAM.Core.Enums; using TIAM.Entities.Transfers; namespace TIAM.Database.DbSets.Transfers; public static class TransferDbSetExtensions { #region Add, Update, Remove public static bool AddTransfer(this ITransferDbSet ctx, Transfer transfer) => ctx.Transfers.Add(transfer).State == EntityState.Added; public static bool UpdateTransfer(this ITransferDbSet ctx, Transfer transfer) => ctx.Transfers.Update(transfer).State == EntityState.Modified; public static bool UpdateTransferStatus(this ITransferDbSet ctx, Guid transferId, TransferStatusType transferStatusType, bool onlyStatusLowerThanNew = true) { var transfer = ctx.Transfers.FirstOrDefault(x => x.Id == transferId); return transfer != null && ctx.UpdateTransferStatus(transfer, transferStatusType); } public static bool UpdateTransferStatus(this ITransferDbSet ctx, Transfer transfer, TransferStatusType transferStatusType, bool onlyStatusLowerThanNew = true) { if (transfer.TransferStatusType == transferStatusType || (onlyStatusLowerThanNew && transfer.TransferStatusType > transferStatusType)) return true; transfer.TransferStatusType = transferStatusType; return ctx.Transfers.Update(transfer).State == EntityState.Modified; } private static bool RemoveTransfer(this ITransferDbSet ctx, Transfer transfer) { ctx.TransferToDrivers.RemoveRange(ctx.TransferToDrivers.Where(x => x.TransferId == transfer.Id)); return ctx.Transfers.Remove(transfer).State == EntityState.Deleted; } public static bool RemoveTransfer(this ITransferDbSet ctx, Guid transferId) { var transfer = ctx.GetTransferById(transferId); return transfer == null || ctx.RemoveTransfer(transfer); } #endregion Add, Update, Remove public static IQueryable GetTransfersByUserId(this ITransferDbSet ctx, Guid userId) => ctx.GetTransfers().Where(x => x.UserId == userId); public static IQueryable GetTransfersByDriverUserId(this ITransferDbSet ctx, Guid driverUserId) => ctx.GetTransfers().Where(x => x.TransferToDrivers.Any(ttd => ttd.UserProductMapping.UserId == driverUserId)); public static IQueryable GetTransfersByUserProductMappingId(this ITransferDbSet ctx, Guid userProductMappingId) => ctx.GetTransfers().Where(x => x.TransferToDrivers.Any(ttd => ttd.UserProductMappingId == userProductMappingId)); public static Transfer? GetTransferById(this ITransferDbSet ctx, Guid transferId) => ctx.Transfers.FirstOrDefault(x => x.Id == transferId); public static IQueryable GetTransfers(this ITransferDbSet ctx) => ctx.Transfers; #region TransferDestination public static TransferDestination? GetTransferDestinationById(this ITransferDestinationDbSet ctx, Guid transferDestinationId) => ctx.TransferDestinations.FirstOrDefault(x => x.Id == transferDestinationId); public static IQueryable GetTransferDestinations(this ITransferDestinationDbSet ctx) => ctx.TransferDestinations; public static bool AddTransferDestination(this ITransferDestinationDbSet ctx, TransferDestination transferDestination) => ctx.TransferDestinations.Add(transferDestination).State == EntityState.Added; public static bool UpdateTransferDestination(this ITransferDestinationDbSet ctx, TransferDestination transferDestination) => ctx.TransferDestinations.Update(transferDestination).State == EntityState.Modified; private static bool RemoveTransferDestination(this ITransferDestinationDbSet ctx, TransferDestination transferDestination, bool removeAddress) { if (removeAddress) ctx.Addresses.Remove(transferDestination.Address); ctx.RemoveTransferDestinationToProductByTransferDestinationId(transferDestination.Id); return ctx.TransferDestinations.Remove(transferDestination).State == EntityState.Deleted; } public static bool RemoveTransferDestination(this ITransferDestinationDbSet ctx, Guid transferDestinationId, bool removeAddress) { var transferDestination = ctx.GetTransferDestinationById(transferDestinationId); return transferDestination == null || ctx.RemoveTransferDestination(transferDestination, removeAddress); } #endregion TransferDestination #region TransferDestinationToProduct public static TransferDestinationToProduct? GetTransferDestinationToProductById(this ITransferDestinationToProductDbSet ctx, Guid transferDestinationToProductId) => ctx.TransferDestinationToProducts.FirstOrDefault(x => x.Id == transferDestinationToProductId); public static TransferDestinationToProduct? GetTransferDestinationToProduct(this ITransferDestinationToProductDbSet ctx, Guid productId, Guid transferDestinationId) => ctx.TransferDestinationToProducts.FirstOrDefault(x => x.ProductId == productId && x.TransferDestinationId == transferDestinationId); public static IQueryable GetTransferDestinationToProducts(this ITransferDestinationToProductDbSet ctx) => ctx.TransferDestinationToProducts; public static IQueryable GetTransferDestinationToProductsByProductId(this ITransferDestinationToProductDbSet ctx, Guid productId) => ctx.TransferDestinationToProducts.Where(x => x.ProductId == productId); public static IQueryable GetTransferDestinationToProductsByTransferDestinationId(this ITransferDestinationToProductDbSet ctx, Guid transferDestinationId) => ctx.TransferDestinationToProducts.Where(x => x.TransferDestinationId == transferDestinationId); public static bool AddTransferDestinationToProduct(this ITransferDestinationToProductDbSet ctx, TransferDestinationToProduct transferDestinationToProduct) => ctx.TransferDestinationToProducts.Add(transferDestinationToProduct).State == EntityState.Added; public static bool UpdateTransferDestinationToProduct(this ITransferDestinationToProductDbSet ctx, TransferDestinationToProduct transferDestinationToProduct) => ctx.TransferDestinationToProducts.Update(transferDestinationToProduct).State == EntityState.Modified; private static bool RemoveTransferDestinationToProduct(this ITransferDestinationToProductDbSet ctx, TransferDestinationToProduct transferDestinationToProduct) { return ctx.TransferDestinationToProducts.Remove(transferDestinationToProduct).State == EntityState.Deleted; } public static bool RemoveTransferDestinationToProduct(this ITransferDestinationToProductDbSet ctx, Guid transferDestinationToProductId) { var transferDestinationToProduct = ctx.GetTransferDestinationToProductById(transferDestinationToProductId); return transferDestinationToProduct == null || ctx.RemoveTransferDestinationToProduct(transferDestinationToProduct); } public static bool RemoveTransferDestinationToProductByProductId(this ITransferDestinationToProductDbSet ctx, Guid productId) { ctx.TransferDestinationToProducts.RemoveRange(ctx.TransferDestinationToProducts.Where(x => x.ProductId == productId)); return true; } public static bool RemoveTransferDestinationToProductByTransferDestinationId(this ITransferDestinationToProductDbSet ctx, Guid transferDestinationId) { ctx.TransferDestinationToProducts.RemoveRange(ctx.TransferDestinationToProducts.Where(x => x.TransferDestinationId == transferDestinationId)); return true; } #endregion TransferDestinationToProduct }