diff --git a/README.md b/README.md index 7d158cd..401ad8a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # eMbewu Welcome! + +# Contributors + +- Mike Kent [MK-Mike](https://github.com/MK-Mike) diff --git a/eMbewu/models.py b/eMbewu/models.py new file mode 100644 index 0000000..5476711 --- /dev/null +++ b/eMbewu/models.py @@ -0,0 +1,92 @@ +import reflex as rx +import sqlmodel +import datetime + +from typing import Optional, List + + +class User(rx.Model, table=True): + email: str + role: str = sqlmodel.Field(sqlmodel.Enum( + choices=["admin", "customer", "provider"], default="customer")) + description: str + + +class Provider(rx.Model, table=True): + name: str + about: str + contact: Optional[str] = None + phone: Optional[str] = None + + # relationships to products + products: List["Product"] = sqlmodel.Relationship( + back_populates="provider") + + +class Category(rx.Model, table=True): + name: str + description: Optional[str] = None + + # relationships to products + products: List["Product"] = sqlmodel.Relationship( + back_populates="category") + + +class Product(rx.Model, table=True): + name: str + wholesale_price: float + retail_price: float + description: str + provider_id: Optional[int] = sqlmodel.Field( + default=None, foreign_key="provider.id") + category_id: Optional[int] = sqlmodel.Field( + default=None, foreign_key="category.id") + + # relationships to providers + provider: Optional["Provider"] = sqlmodel.Relationship( + back_populates="products") + category: Optional["Category"] = sqlmodel.Relationship( + back_populates="products") + cart_items: List["CartItem"] = sqlmodel.Relationship( + back_populates="product") + images: List["ProductImage"] = sqlmodel.Relationship( + back_populates="product") + + +class ProductImage(rx.Model, table=True): + product_id: int = sqlmodel.Field(default=None, foreign_key="product.id") + url: str + alt_text: Optional[str] = None + + # relationships to products + product: Product = sqlmodel.Relationship(back_populates="images") + + +class Cart(rx.Model, table=True): + user_id: int = sqlmodel.Field(default=None, foreign_key="user.id") + + # Relationships + user: User = sqlmodel.Relationship(back_populates="carts") + cart_items: List["CartItem"] = sqlmodel.Relationship(back_populates="cart") + + +class CartItem(rx.Model, table=True): + product_id: int = sqlmodel.Field(default=None, foreign_key="product.id") + cart_id: int = sqlmodel.Field(default=None, foreign_key="cart.id") + quantity: int + + # Relationships + product: Product = sqlmodel.Relationship(back_populates="cart_items") + cart: Cart = sqlmodel.Relationship(back_populates="cart_items") + + +class CustomerOrder(rx.Model, table=True): + user_id: int = sqlmodel.Field(default=None, foreign_key="user.id") + cart_id: int = sqlmodel.Field(default=None, foreign_key="cart.id") + order_date: datetime.datetime = sqlmodel.Field( + default=datetime.datetime.now) + status: str = sqlmodel.Field(default="pending") + + # Relationships + user: User = sqlmodel.Relationship(back_populates="orders") + cart: Cart = sqlmodel.Relationship(back_populates="orders") diff --git a/rxconfig.py b/rxconfig.py index e6ecfbc..5d3cc72 100644 --- a/rxconfig.py +++ b/rxconfig.py @@ -2,4 +2,5 @@ config = rx.Config( app_name="eMbewu", -) \ No newline at end of file + db_url="sqlite:///reflex.db", +)