コード例 #1
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult AddVoyage(VoyageDTO voyageDto)
        {
            var result = new ServiceResult();

            if (voyageDto.EndPoint == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "EndPoint", Message = "Voyage gotta have some end point" });
            if (voyageDto.StartPoint == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "StartPoint", Message = "Voyage gotta have some start point" });

            if (voyageDto.StartPoint == null || voyageDto.EndPoint == null)
                return result;

            voyageDto.Status = DTO.VoyageStatus.Open;
            voyageDto.LifeCycle = new VoyageLifeCycleDTO { Opened = DateTime.Now };

            try
            {
                _db.Voyages.Create(Mapper.Map<Voyage>(voyageDto));
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #2
0
ファイル: VehicleService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult DeleteVehicle(int vehicleId)
        {
            var result = new ServiceResult();

            var vehicle = _db.Vehicles.Get(vehicleId);
            if (vehicle == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "vehicleId", Message = "There is no vehicle wtih such id in db" });
                return result;
            }

            if (!IsVehicleFree(vehicleId, DateTime.Now))
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "vehicleId", Message = "This vehicle is in usage" });
                return result;
            }

            vehicle.EntryState = EntryState.Removed;

            try
            {
                _db.Vehicles.Update(vehicle);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #3
0
ファイル: AuthService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult ChangeRoleForUser(Int32 userId, Int32 roleId)
        {
            var result = new ServiceResult();

            var user = _db.Users.Get(userId);
            var role = _db.Roles.Get(roleId);

            if (user == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "userId", Message = "Such user doesn't exist in db" });
            if (role == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "roleId", Message = "Such role doesn't exist in db" });

            if (user == null || role == null) return result;

            user.Role = null;
            user.RoleId = role.Id;

            try
            {
                _db.Users.Update(user);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #4
0
ファイル: VehicleService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult AddVehicle(VehicleDTO vehicleDto)
        {
            var result = new ServiceResult();

            if (vehicleDto.Drive == null && vehicleDto.DriveId == 0)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Drive", Message = "You gotta determine drive" });
            if (vehicleDto.Class == null && vehicleDto.VehicleClassId == 0)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Class", Message = "You gotta determine vehicle class" });
            if (vehicleDto.Dimensions == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Dimensions", Message = "You gotta determine vehicle dimensions" });

            if ((vehicleDto.Class != null || vehicleDto.VehicleClassId != 0)
                && (vehicleDto.Drive != null || vehicleDto.DriveId != 0) &&vehicleDto.Dimensions != null)
            {
                _db.Vehicles.Create(Mapper.Map<Vehicle>(vehicleDto));
                _db.Save();
            }

            return result;
        }
コード例 #5
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult AcceptRequest(int voyageId, int driverId)
        {
            CheckStatus();

            var result = new ServiceResult();

            var request = _db.DriverVoyageRequests.Find(x => x.DriverId == driverId && x.VoyageId == voyageId).FirstOrDefault();
            var allRequestsForVoyage = _db.DriverVoyageRequests.Find(x => x.VoyageId == voyageId).ToList();

            if (request == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId/driverId", Message = "There is no request in db with such id" });
                return result;
            }

            var voyage = _db.Voyages.Get(voyageId);
            voyage.Requests = null;

            try
            {
                allRequestsForVoyage.ForEach(x => _db.DriverVoyageRequests.Remove(x.Id));

                voyage.DriverId = driverId;
                voyage.Status = VoyageStatus.Accepted;
                voyage.LifeCycle.Acceped = DateTime.Now;

                _db.Voyages.Update(voyage);

                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #6
0
ファイル: AuthService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult ConfirmUser(int userId)
        {
            var result = new ServiceResult();

            var user = _db.Users.Get(userId);
            if (user == null)
            {
                result.Errors.Add(new PropertyMessagePair {PropertyName = "userId", Message = "There is no such user in db"});
                return result;
            }

            try
            {
                user.IsConfirmed = true;
                _db.Users.Update(user);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #7
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult ModifyVoyage(VoyageDTO voyageDto)
        {
            var result = new ServiceResult();

            var voyage = _db.Voyages.Get(voyageDto.Id);

            if (voyage == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Id", Message = "There is no such voyage in db you wanna modify" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Processing)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageDto", Message = "You can't modify voyage while it's processing" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Accepted)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageDto", Message = "You can't modify voyage after accepting" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Succeded)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageDto", Message = "You can't modify voyage after it's succeded" });
                return result;
            }

            try
            {
                _db.Voyages.Update(Mapper.Map<Voyage>(voyageDto));
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }
            return result;
        }
コード例 #8
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult MakeDriverVoyageRequest(int voyageId, int userId)
        {
            CheckStatus();

            var result = new ServiceResult();

            var voyage = _db.Voyages.Get(voyageId);
            var user = _db.Users.Get(userId);
            var driver = user.Driver;

            if (voyage == null || driver == null)
            {
                if (voyage == null)
                    result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "There is no voyage in db with such id" });
                if (driver == null)
                    result.Errors.Add(new PropertyMessagePair { PropertyName = "driverId", Message = "There is no driver in db with such id" });
                return result;
            }

            var isFree =
                (!_db.DriverVoyageRequests.Find(
                    x =>
                        x.Driver == driver && voyage.RequestedEndTime.AddHours(1) > x.Voyage.RequestedStartTime &&
                        voyage.RequestedStartTime < x.Voyage.RequestedEndTime.AddHours(1)).Any());

            if (!isFree)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "driverId", Message = "Driver is busy for this period of time" });
                return result;
            }

            try
            {
                _db.DriverVoyageRequests.Create(new DriverVoyageRequest { VoyageId = voyage.Id, DriverId = driver.Id });
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }
            return result;
        }
コード例 #9
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult DeleteVoyage(int voyageId)
        {
            CheckStatus();

            var result = new ServiceResult();

            var voyage = _db.Voyages.Get(voyageId);

            if (voyage == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "There is no voyage with such id" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Processing)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "You can't delete voyage while it's processing" });
                return result;
            }

            if (voyage.Status == VoyageStatus.Open || voyage.Status == VoyageStatus.Accepted)
            {
                voyage.Status = VoyageStatus.Canceled;
                voyage.LifeCycle.Canceled = DateTime.Now;
            }

            voyage.EntryState = DAL.Entities.EntryState.Removed;

            try
            {
                _db.Voyages.Update(voyage);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #10
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult Complete(int id, int userId)
        {
            CheckStatus();

            var result = new ServiceResult();

            var user = _db.Users.Get(userId);
            if (user == null)
            {
                result.Errors.Add(new PropertyMessagePair {PropertyName = "userId", Message = "There is no such user in db"});
                return result;
            }

            var driver = _db.Drivers.Get(user.Driver.Id);
            if (driver == null)
            {
                result.Errors.Add(new PropertyMessagePair {PropertyName = "userId", Message = "User has no driver attached"});
                return result;
            }

            var voyage = _db.Voyages.Get(id);
            if (voyage == null)
            {
                result.Errors.Add(new PropertyMessagePair {Message = "There is no voyage in db with such id", PropertyName = "id"});
                return result;
            }

            if (voyage.DriverId != driver.Id)
            {
                result.Errors.Add(new PropertyMessagePair {PropertyName = "driverId", Message = "Only voyage driver can mark voyage as succeded"});
                return result;
            }

            voyage.Status = VoyageStatus.Succeded;
            voyage.LifeCycle.Succeded = DateTime.Now;

            try
            {
                _db.Voyages.Update(voyage);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #11
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult CancelVoyage(int voyageId)
        {
            CheckStatus();

            var result = new ServiceResult();

            var voyage = _db.Voyages.Get(voyageId);

            if (voyage == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "There is no voyage with such id" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Processing)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "You can't cancel voyage while it's processing" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Succeded)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "You can't cancel voyage if it's already succeded" });
                return result;
            }
            if (voyage.Status == VoyageStatus.Canceled)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "You can't cancel already canceled voyage" });
                return result;
            }

            voyage.Status = VoyageStatus.Canceled;
            voyage.LifeCycle.Canceled = DateTime.Now;

            try
            {
                _db.Voyages.Update(voyage);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }
コード例 #12
0
ファイル: VoyageService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult CancelDriverVoyageRequest(int voyageId, int userId)
        {
            var result = new ServiceResult();

            var voyage = _db.Voyages.Get(voyageId);
            var user = _db.Users.Get(userId);
            var driver = user.Driver;

            if (voyage == null || driver == null)
            {
                if (voyage == null)
                    result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId", Message = "There is no voyage in db with such id" });
                if (driver == null)
                    result.Errors.Add(new PropertyMessagePair { PropertyName = "driverId", Message = "There is no driver in db with such id" });
                return result;
            }

            var voyageRequest = _db.DriverVoyageRequests.Find(x => x.Voyage == voyage && x.Driver == driver).FirstOrDefault();
            if (voyageRequest == null)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "voyageId, driverId", Message = "There is no such request" });
                return result;
            }

            try
            {
                _db.DriverVoyageRequests.Remove(voyageId);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }
            return result;
        }
コード例 #13
0
ファイル: VehicleService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult ModifyVehicle(VehicleDTO vehicleDto)
        {
            var result = new ServiceResult();

            if (vehicleDto.Drive == null && vehicleDto.DriveId == 0)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Drive", Message = "You gotta determine drive" });
            if (vehicleDto.Class == null && vehicleDto.VehicleClassId == 0)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Class", Message = "You gotta determine vehicle class" });
            if (vehicleDto.Dimensions == null)
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Dimensions", Message = "You gotta determine vehicle dimensions" });

            if ((vehicleDto.Class != null || vehicleDto.VehicleClassId!=0) &&
                (vehicleDto.Drive != null || vehicleDto.DriveId != 0) &&
                vehicleDto.Dimensions != null)
            {

                try
                {
                    _db.Vehicles.Update(Mapper.Map<Vehicle>(vehicleDto));
                    _db.Save();
                }
                catch (DbEntityValidationException ex)
                {
                    result.Append(ex);
                }
            }

            return result;
        }
コード例 #14
0
ファイル: AuthService.cs プロジェクト: Followin/MotorDepot
        public ServiceResult RegisterUser(UserDTO userDto)
        {
            var result = new ServiceResult();

            var userExists = _db.Users.Find(x => x.Nickname == userDto.Nickname).Any();
            if (userExists)
            {
                result.Errors.Add(new PropertyMessagePair { PropertyName = "Nickname", Message = "User with such nickname already exists" });
                return result;
            }

            userDto.Password = Crypto.HashPassword(userDto.Password);

            var user = Mapper.Map<User>(userDto);

            if (user.Driver != null && user.Driver.DriverLicense != null)
            {
                user.Driver.DriverLicense.VehicleClasses = new Collection<VehicleClass>();
                userDto.Driver.DriverLicense.VehicleClassIds
                    .Select(x => _db.VehicleClasses.Get(x))
                    .ToList()
                    .ForEach(user.Driver.DriverLicense.VehicleClasses.Add);
            }

            if (user.Role == null || user.RoleId == 0)
            {
                var driverRole = _db.Roles.Find(x => x.Name == "Driver").FirstOrDefault();
                if (driverRole != null)
                    user.RoleId = driverRole.Id;
            }

            try
            {
                _db.Users.Create(user);
                _db.Save();
            }
            catch (DbEntityValidationException ex)
            {
                result.Append(ex);
            }

            return result;
        }