/// <summary> /// Метод добавляет нового или обновляет существующего агента /// </summary> public Agent AddOrUpdateAgent(Guid agentGuid, Agent agent) { if (agentGuid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid)); } if (agent == null) { throw new InvalidDataException("Agent is null"); } if (string.IsNullOrEmpty(agent.Name)) { throw new InvalidDataException(string.Format("Invalid agent.Name {0}", agent.Name)); } var operations = _rightRepository.GetRights(agentGuid, EntityType.Agent); if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Agent, agent.Guid)); } Agent result; var dt = DateTime.UtcNow; var updateList = new List <Agent>(); var addList = new List <Agent>(); var existAgent = _dataContext.Agents.Find(agent.Id); if (existAgent == null) { agent.Guid = Guid.NewGuid(); agent.UpdateTime = dt; agent.CreateTime = dt; _dataContext.Agents.Add(agent); _entityRepository.AddEntity(agentGuid, agent.Guid, EntityType.Agent); addList.Add(agent); _logger.Info(string.Format("Add new agent {0}. Owner {1}", agent.Guid, agentGuid)); result = agent; } else { if (agent.Guid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid agent.Guid {0}", agent.Guid)); } if (!_entityRepository.Exist(agentGuid, agent.Guid, EntityType.Agent)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Agent, agent.Guid)); } existAgent.Name = agent.Name; existAgent.Description = agent.Description; existAgent.UpdateTime = dt; updateList.Add(existAgent); _logger.Info(string.Format("Update agent {0}. Owner {1}", agent.Guid, agentGuid)); result = agent; } _dataContext.SaveChanges(); UpdateCache(addList, updateList, new List <Agent>()); return(result); }
/// <summary> /// Функция добавляет новую арену и возвращает ее /// </summary> /// <param name="owner">пользователь добавляющий аренду</param> /// <param name="carGuid">идентификтор автомобиля</param> /// <param name="driverGuid">идентификатор машины</param> /// <returns></returns> public CarRental AddRental(Guid owner, Guid carGuid, Guid driverGuid) { if (owner == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid owner {0}", owner)); } if (carGuid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid carGuid {0}", carGuid)); } if (driverGuid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid driverGuid {0}", driverGuid)); } var operations = _rightRepository.GetRights(owner, EntityType.CarRental); if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update rental from car {1} by driver {2}", owner, carGuid, driverGuid)); } var carsGuid = _entityRepository.GetEntitys(owner, EntityType.Car); if (!carsGuid.Contains(carGuid)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to car {1} ", owner, carGuid)); } var driversGuid = _entityRepository.GetEntitys(owner, EntityType.Driver); if (!driversGuid.Contains(driverGuid)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to driver {1} ", owner, driverGuid)); } var rental = new CarRental { CarGuid = carGuid, DriverGuid = driverGuid, StartRentalDate = DateTime.UtcNow }; _dataContext.CarRentals.Add(rental); _dataContext.SaveChanges(); UpdateCache(new List <CarRental> { rental }, new List <CarRental>(), new List <CarRental>()); _logger.Info(string.Format("Agent {0} add rental to car {1} and driver {2}", owner, carGuid, driverGuid)); return(rental); }
/// <summary> /// Метод возвращает список водителей по идентификаторам /// </summary> /// <returns></returns> public Driver AddOrUpdateDriver(Guid agentGuid, Driver driver) { if (agentGuid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid)); } if (driver == null) { throw new InvalidDataException("driver is null"); } if (string.IsNullOrEmpty(driver.Surname)) { throw new InvalidDataException(string.Format("Invalid driver.Surname {0}", driver.Surname)); } if (string.IsNullOrEmpty(driver.Name)) { throw new InvalidDataException(string.Format("Invalid driver.Name {0}", driver.Surname)); } if (driver.Birthday == DateTime.MinValue) { throw new InvalidDataException(string.Format("Invalid driver.Birthday {0}", driver.Birthday)); } var operations = _rightRepository.GetRights(agentGuid, EntityType.Driver); if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Driver, driver.Guid)); } Driver result; var dt = DateTime.UtcNow; var updateList = new List <Driver>(); var addList = new List <Driver>(); var existDriver = _dataContext.Drivers.Find(driver.Id); if (existDriver == null) { driver.Guid = Guid.NewGuid(); driver.UpdateTime = dt; driver.CreateTime = dt; _dataContext.Drivers.Add(driver); _entityRepository.AddEntity(agentGuid, driver.Guid, EntityType.Driver); addList.Add(driver); _logger.Info(string.Format("Add new driver {0}. Owner {1}", driver.Guid, agentGuid)); result = driver; } else { if (driver.Guid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid driver.Guid {0}", driver.Guid)); } if (!_entityRepository.Exist(agentGuid, driver.Guid, EntityType.Driver)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Driver, driver.Guid)); } existDriver.Birthday = driver.Birthday; existDriver.CarLicenseNumberCode = driver.CarLicenseNumberCode; existDriver.CarLicenseSerialCode = driver.CarLicenseSerialCode; existDriver.Name = driver.Name; existDriver.Patronymic = driver.Patronymic; existDriver.Surname = driver.Surname; existDriver.UpdateTime = dt; updateList.Add(existDriver); _logger.Info(string.Format("Update driver {0}. Owner {1}", driver.Guid, agentGuid)); result = driver; } _dataContext.SaveChanges(); UpdateCache(addList, updateList, new List <Driver>()); return(result); }
/// <summary> /// Метод добавляет новый или обновляет существующий автомобиль /// </summary> public Car AddOrUpdateCar(Guid agentGuid, Car car) { if (agentGuid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid agentGuid {0}", agentGuid)); } if (car == null) { throw new InvalidDataException("Car is null"); } if (string.IsNullOrEmpty(car.Number)) { throw new InvalidDataException(string.Format("Invalid car.Number {0}", car.Number)); } var operations = _rightRepository.GetRights(agentGuid, EntityType.Car); if (!operations.Contains(OperationType.AddOrUpdate) && !operations.Contains(OperationType.Admin)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to add or update {1} {2}", agentGuid, EntityType.Car, car.Guid)); } Car result; var dt = DateTime.UtcNow; var updateList = new List <Car>(); var addList = new List <Car>(); var existCar = _dataContext.Cars.Find(car.Id); if (existCar == null) { car.Guid = Guid.NewGuid(); car.UpdateTime = dt; car.CreateTime = dt; _dataContext.Cars.Add(car); _entityRepository.AddEntity(agentGuid, car.Guid, EntityType.Car); addList.Add(car); _logger.Info(string.Format("Add new car {0}. Owner {1}", car.Guid, agentGuid)); result = car; } else { if (car.Guid == Guid.Empty) { throw new InvalidDataException(string.Format("Invalid car.Guid {0}", car.Guid)); } if (!_entityRepository.Exist(agentGuid, car.Guid, EntityType.Car)) { throw new InvalidDataException(string.Format("Agent {0} cannot access to object {1} {2}", agentGuid, EntityType.Car, car.Guid)); } existCar.Number = car.Number; existCar.Distance = car.Distance; existCar.Make = car.Make; existCar.Model = car.Model; existCar.NumberCode = car.NumberCode; existCar.SerialCode = car.SerialCode; existCar.VinCode = car.VinCode; existCar.UpdateTime = dt; updateList.Add(existCar); _logger.Info(string.Format("Update car {0}. Owner {1}", car.Guid, agentGuid)); result = car; } _dataContext.SaveChanges(); UpdateCache(addList, updateList, new List <Car>()); return(result); }