public Restaurant(string name, int openingHour, int closingHour,
                          SubscriptionType subscriptionType, ContractStatus contractStatus, PhoneNumberValue phoneNumber,
                          string imageUrl, Locality locality, GeographicLocation location, string description,
                          string descriptionEng)
        {
            CheckRule(new OpeningAndClosingHoursAreValid(openingHour, closingHour));
            CheckRule(new ConditionMustBeTrueRule(subscriptionType != SubscriptionType.Invalid,
                                                  "subscription must be valid"));
            CheckRule(new ConditionMustBeTrueRule(contractStatus != ContractStatus.Invalid,
                                                  "contract must be valid"));
            CheckRule(new ConditionMustBeTrueRule(phoneNumber != null,
                                                  "phone number be valid"));

            ImageUrl           = imageUrl;
            Locality           = locality;
            GeographicLocation = location;
            Description        = description;
            DescriptionEng     = descriptionEng;
            Name             = name;
            OpeningHour      = openingHour;
            ClosingHour      = closingHour;
            SubscriptionType = subscriptionType;
            ContractStatus   = contractStatus;
            State            = RestaurantState.Open;
            ExpirationDate   = subscriptionType.GetExpirationTime();
            PhoneNumber      = phoneNumber;
        }
 public void UpdateSubscription(SubscriptionType subscriptionType)
 {
     CheckRule(new ConditionMustBeTrueRule(subscriptionType != SubscriptionType.Invalid,
                                           "invalid subscription"));
     SubscriptionType = subscriptionType;
     ExpirationDate   = subscriptionType.GetExpirationTime();
     AddDomainEvent(new SubscriptionUpdatedEvent(Id, subscriptionType));
 }