public string CreateProspect(CreateProspectModel model)
        {
            try
            {
                var validationResult = model.Evaluate();
                if (validationResult.IsFailure)
                {
                    return(validationResult.Error);
                }

                var personId = new PersonId(Option.Some(model.PersonId));

                var accomodationNumber = AccomodationNumber.Create(model.AccomodationNumber);
                var accomodationId     = new AccomodationId(accomodationNumber.Value);

                this.prospectService.CreateProspect(personId, accomodationId);

                return("Person become a prospect on this accomodation!");
            }
            catch (AccomodationAlreadySoldException)
            {
                return("This accomodation is already sold");
            }
            catch (Exception)
            {
                return("An unknow error was thrown");
            }
        }
Exemplo n.º 2
0
        public void CreateProspect(PersonId person, AccomodationId accomodation)
        {
            this.ThrowExceptionIfAccomodationDoesNotExistInRepository(accomodation);
            this.ThrowExceptionIfPersonDoesNotExistInRepository(person);
            this.ThrowExceptionWhenProscpectIsAlreadyLinkedToAccomodation(person, accomodation);

            this.personRepository.CreateProspect(person, accomodation);
        }
Exemplo n.º 3
0
        private void ThrowExceptionIfAccomodationDoesNotExistInRepository(AccomodationId accomodation)
        {
            var accomodationExist = this.accomodationQuery.Exist(accomodation);

            if (!accomodationExist)
            {
                throw new AccomodationDoesNotExistException();
            }
        }
        public void SellAccomodation(PersonId person, AccomodationId accomodation)
        {
            this.ThrowExceptionIfAccomodationDoesNotExistInRepository(accomodation);
            this.ThrowExceptionIfPersonDoesNotExistInRepository(person);
            this.ThrowExceptionWhenAccomodationIsAlreadySold(accomodation);

            this.personRepository.SellAccomodation(person, accomodation);

            this.mediator.Publish(new AccomodationSoldDomainEvent(accomodation));
        }
        public void SellAccomodation(PersonId person, AccomodationId accomodation)
        {
            var personEntity       = Database.Persons.Single(p => p.Id == person.SurrogateId.ValueOrFailure());
            var accomodationEntity = Database.Accomodations.Single(p => p.Number == accomodation.Number);
            var client             = new ClientEntity
            {
                Person       = personEntity,
                Accomodation = accomodationEntity
            };

            Database.Clients.Add(client);
        }
        public void CreateProspect(PersonId person, AccomodationId accomodation)
        {
            var personEntity       = Database.Persons.Single(p => p.Id == person.SurrogateId.ValueOrFailure());
            var accomodationEntity = Database.Accomodations.Single(p => p.Number == accomodation.Number);
            var prospect           = new ProspectEntity
            {
                Person       = personEntity,
                Accomodation = accomodationEntity
            };

            Database.Prospects.Add(prospect);
        }
        public string SellAccomodation(SellAccomodationModel model)
        {
            try
            {
                var validationResult = model.Evaluate();
                if (validationResult.IsFailure)
                {
                    return(validationResult.Error);
                }

                var personId = new PersonId(Option.Some(model.PersonId));

                var accomodationNumber = AccomodationNumber.Create(model.AccomodationNumber);
                var accomodationId     = new AccomodationId(accomodationNumber.Value);

                this.clientService.SellAccomodation(personId, accomodationId);

                return("Accomodation Sold !");
            }
            catch (AccomodationAlreadySoldException)
            {
                return("The accomodation is already sold");
            }
            catch (AccomodationDoesNotExistException)
            {
                return("The accomodation does not exist");
            }
            catch (PersonDoesNotExistException)
            {
                return("The person does not exist");
            }
            catch (Exception)
            {
                return("An unknow error was thrown");
            }
        }
 public AccomodationSoldDomainEvent(AccomodationId accomodation)
 {
     this.Accomodation = accomodation;
 }
 private void ThrowExceptionWhenAccomodationIsAlreadySold(AccomodationId accomodation)
 {
     var accomodationAlreadySold = this.personQuery.IsAccomodationSold(accomodation);
     if (accomodationAlreadySold)
         throw new AccomodationAlreadySoldException();
 }
Exemplo n.º 10
0
        private void ThrowExceptionWhenProscpectIsAlreadyLinkedToAccomodation(PersonId person, AccomodationId accomodation)
        {
            var isAlreadyProspectOnThisAccomodation = this.personQuery.IsProspectOnThisAccomodation(person, accomodation);

            if (isAlreadyProspectOnThisAccomodation)
            {
                throw new AlreadyProspectOnAccomodationException();
            }
        }
 public IEnumerable <Person> GetProspects(AccomodationId accomodation)
 {
     return(Database.Prospects
            .Where(p => p.Accomodation.Number == accomodation.Number)
            .Select(p => p.Person.ToBusiness()));
 }
 public bool IsAccomodationSold(AccomodationId accomodation)
 {
     return(Database.Clients.Any(c => c.Accomodation.Number == accomodation.Number));
 }
 public bool IsProspectOnThisAccomodation(PersonId person, AccomodationId accomodation)
 {
     return(Database.Prospects
            .Where(p => p.Person.Id == person.SurrogateId.ValueOrFailure())
            .Any(p => p.Accomodation.Number == accomodation.Number));
 }
 public bool Exist(AccomodationId accomodation)
 {
     return(Database.Accomodations.Any(a => a.Number == accomodation.Number));
 }
        public Accomodation Get(AccomodationId accomodation)
        {
            var accomodationEntity = Database.Accomodations.First(p => p.Number == accomodation.Number);

            return(accomodationEntity.ToBusiness());
        }