using BeautySaloonDataModels; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson; using BeautySaloonContracts.BindingModels; using BeautySaloonContracts.ViewModels; using Microsoft.Extensions.Logging; using Amazon.Auth.AccessControlPolicy; using MongoDB.Driver; namespace BeautySaloonNoSQLDatabaseImplement { public class Order : IOrderModel { [BsonId] [BsonElement("_id"), BsonRepresentation(BsonType.ObjectId)] private string IdMongo { get; set; } = string.Empty; [BsonElement("id")] public int Id { get; set; } [BsonElement("date")] private DateTime DateMongo { get; set; } [BsonIgnore] public DateOnly Date { get { return DateOnly.FromDateTime(DateMongo); } private set { DateMongo = value.ToDateTime(new TimeOnly()); } } [BsonElement("sum"), BsonRepresentation(BsonType.Double)] public decimal Sum { get; private set; } [BsonElement("client")] public int ClientId { get; private set; } [BsonElement("employee")] public int EmployeeId { get; private set; } private Client? _client; private Employee? _employee; [BsonIgnore] public Client Client { get { if (_client == null) { _client = NewdbContext.GetInstance().Clients .Find(new BsonDocument("id", ClientId)).FirstOrDefault(); } return _client; } } [BsonIgnore] public Employee Employee { get { if (_employee == null) { _employee = NewdbContext.GetInstance().Employees .Find(new BsonDocument("id", EmployeeId)).FirstOrDefault(); } return _employee; } } [BsonElement("services")] public virtual List ServiceOrders { get; set; } = new List(); [BsonIgnore] public Dictionary _orderServices = null!; [BsonIgnore] public Dictionary OrderServices { get { if (_orderServices == null) { _orderServices = ServiceOrders .ToDictionary(recPC => recPC.Service.Id, recPC => (recPC.Date, recPC.Service as IServiceModel, recPC.Employee.Id)); } return _orderServices; } } public static Order? Create(OrderBindingModel? model) { if (model == null) { return null; } return new Order() { Id = model.Id, Date = model.Date, Sum = model.Sum, ClientId = model.ClientId, EmployeeId = model.EmployeeId, ServiceOrders = model.OrderServices.Select(x => new ServiceOrder { Service = NewdbContext.GetInstance().Services.Find(new BsonDocument("id", x.Key)).FirstOrDefault(), Date = x.Value.Item1, Employee = NewdbContext.GetInstance().Employees.Find(new BsonDocument("id", x.Value.Item3)).FirstOrDefault(), }).ToList() }; } public void Update(OrderBindingModel model) { Date = model.Date; Sum = model.Sum; EmployeeId = model.EmployeeId; ClientId = model.ClientId; } public OrderViewModel GetViewModel => new() { Id = Id, Date = Date, Sum = Sum, ClientId = ClientId, EmployeeId = EmployeeId, ClientName = Client.Name + " " + Client.Surname + " " + Client.Patronymic, EmployeeName = Employee.Name + " " + Employee.Surname + " " + Employee.Patronymic, ClientPhone = Client.Phone, EmployeePhone = Employee.Phone, OrderServices = OrderServices }; } }