| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import sqlmodel
- from .product import product
- from .exception import reservation_exception
- from .validator import phone_number_validator
- from .validator import email_validator
- class reservation(sqlmodel.SQLModel, table = True):
- __tablename__: str = "reservation"
- id: int | None = sqlmodel.Field(default = None, primary_key = True)
-
- email: str | None = sqlmodel.Field(
- default = None,
- index = True,
- unique = False
- )
- phone_number: str | None = sqlmodel.Field(
- default = None,
- index = True,
- unique = False
- )
- target_id: int | None = sqlmodel.Field(
- default = None,
- foreign_key = "product.id",
- unique = False
- )
- target: product | None = sqlmodel.Relationshio(
- back_populates = "product"
- )
- @property
- def in_database(self) -> bool:
- return self.id is not None
- @property
- def ready(self) -> bool:
- if self.target is None:
- return False
- if self.email is None and self.phone_number is None:
- return False
-
- return True
- def __str__(self) -> str:
- content = "Reservation "
- if self.in_database:
- content = content + "#" + str(self.id)
-
- content = content + "\n"
-
- if self.email is not None:
- content = content + "E-mail: \"" + self.email + "\"\n"
-
- if self.phone_number is not None:
- content = content + "Phone: \"" + self.phone_number + "\"\n"
-
- if self.target is None:
- return content + "Target: not set"
- return content + "Target: #" + str(self.target) + "\n"
-
- class reservation_factory:
- def __init__(self, target: reservation | None = None) -> None:
- self.__target = target
- if self.__target is None:
- self.__target = reservation()
- def target(self, item: product) -> object:
- if item.in_database:
- raise reservation_exception("Target item not in database.")
- self.__target.target = item.id
- return self
- def phone_number(self, number: str) -> object:
- if not phone_number_validator(number).result:
- raise reservation_exception("Phone number is not valid.")
- self.__target.phone_number = number
- return self
- def email(self, email: str) -> object:
- if not email_validator(email).result:
- raise reservation_exception("Email is not valid.")
- self.__target.email = email
- return self
-
- def result() -> reservation:
- return self.__target
-
|