Почти доделал

This commit is contained in:
2025-05-27 17:31:03 +04:00
parent da946e07ce
commit 491df32c85
279 changed files with 172737 additions and 1121 deletions

View File

@@ -0,0 +1,157 @@
using ComputerStoreContracts.BindingModels;
using ComputerStoreContracts.StoragesContracts;
using ComputerStoreContracts.ViewModels;
using ComputerStoreDatabase.Models;
using Microsoft.EntityFrameworkCore;
namespace ComputerStoreDatabase.Implementations;
public class OrderStorageImplementation : IOrderStorageContract
{
private readonly ComputerStoreDbContext _context;
public OrderStorageImplementation(ComputerStoreDbContext context)
{
_context = context;
}
public List<OrderViewModel> GetFullList() => _context.Orders
.Select(o => new OrderViewModel
{
Id = o.Id,
CreatedAt = o.CreatedAt,
Status = o.Status,
UserId = o.UserID,
RequestIds = o.OrderRequests.Select(or => or.RequestId).ToList(),
BatchIds = o.OrderBatchesLink.Select(ob => ob.OrderBatchId).ToList()
}).ToList();
public OrderViewModel? GetElement(int id) => _context.Orders
.Where(o => o.Id == id)
.Select(o => new OrderViewModel
{
Id = o.Id,
CreatedAt = o.CreatedAt,
Status = o.Status,
UserId = o.UserID,
RequestIds = o.OrderRequests.Select(or => or.RequestId).ToList(),
BatchIds = o.OrderBatchesLink.Select(ob => ob.OrderBatchId).ToList()
}).FirstOrDefault();
public void Create(OrderCreateBindingModel model)
{
var order = new Order
{
Status = model.Status,
UserID = model.UserId,
OrderRequests = model.RequestIds.Select(r => new OrderRequest
{
OrderId = model.UserId, // будет обновлено после SaveChanges
RequestId = r
}).ToList(),
OrderBatchesLink = model.BatchIds.Select(b => new OrderOrderBatch
{
OrderId = model.UserId, // будет обновлено после SaveChanges
OrderBatchId = b
}).ToList(),
CreatedAt = DateTime.UtcNow,
};
_context.Orders.Add(order);
_context.SaveChanges();
}
public void Update(OrderCreateBindingModel model)
{
var order = _context.Orders
.Include(o => o.OrderRequests)
.Include(o => o.OrderBatchesLink)
.FirstOrDefault(o => o.Id == model.Id);
if (order == null) throw new Exception("Order not found");
order.Status = model.Status;
order.UserID = model.UserId;
// Обновление связей
var newRequests = model.RequestIds.Except(order.OrderRequests.Select(r => r.RequestId)).ToList();
var removedRequests = order.OrderRequests.Where(r => !model.RequestIds.Contains(r.RequestId)).ToList();
foreach (var id in newRequests)
order.OrderRequests.Add(new OrderRequest { OrderId = model.Id, RequestId = id });
foreach (var req in removedRequests)
_context.OrderRequests.Remove(req);
var newBatches = model.BatchIds.Except(order.OrderBatchesLink.Select(b => b.OrderBatchId)).ToList();
var removedBatches = order.OrderBatchesLink.Where(b => !model.BatchIds.Contains(b.OrderBatchId)).ToList();
foreach (var id in newBatches)
order.OrderBatchesLink.Add(new OrderOrderBatch { OrderId = model.Id, OrderBatchId = id });
foreach (var batch in removedBatches)
_context.OrderOrderBatches.Remove(batch);
_context.SaveChanges();
}
public void Delete(int id)
{
var order = _context.Orders.Find(id);
if (order != null)
{
_context.Orders.Remove(order);
_context.SaveChanges();
}
}
public List<AssemblyViewModel> GetAssembliesByOrders(List<int> orderIds) => _context.Requests
.Where(r => orderIds.Contains(r.Id) && r.AssemblyId.HasValue)
.Select(r => new AssemblyViewModel
{
Id = r.Assembly!.Id,
Name = r.Assembly.Name,
Description = r.Assembly.Description,
UserId = r.Assembly.UserId
}).ToList();
public List<OrderReportViewModel> GetOrdersWithDetailsByDateRange(
int userId,
DateTime start,
DateTime end)
{
return _context.Orders
.Where(o => o.UserID == userId && o.CreatedAt >= start.ToUniversalTime() && o.CreatedAt <= end.ToUniversalTime())
.SelectMany(o => o.OrderRequests.Select(or => new OrderReportViewModel
{
OrderId = o.Id,
OrderStatus = o.Status,
CreatedAt = o.CreatedAt,
RequestId = or.RequestId,
RequestDescription = or.Request.Description,
ProductId = o.OrderBatchesLink!= null
? _context.OrderOrderBatches
.Where(ca => ca.OrderId == o.Id)
.Select(ca => ca.OrderBatch)
.Select(c => c.Product)
.Select(pc => pc.Id)
.FirstOrDefault()
: 0,
ProductName = o.OrderBatchesLink != null
? _context.OrderOrderBatches
.Where(ca => ca.OrderId == o.Id)
.Select(ca => ca.OrderBatch)
.Select(c => c.Product)
.Select(pc => pc.Name)
.FirstOrDefault() ?? "N/A"
: "N/A",
UserId = o.UserID,
UserFIO = o.User.FIO
}))
.ToList();
}
}