[rewrite] Implemented login and register
This commit is contained in:
1 parent
cd8fdb9c21
commit
20ef2aa4e8
29 files changed
+183
-722
No files matched your search
@@ -1,5 +0,0 @@
|
||||
from sqlalchemy.orm import declarative_base
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
__all__ = ["Base"]
|
||||
@@ -1,13 +1,12 @@
|
||||
from uuid import UUID
|
||||
from enum import Enum as PyEnum
|
||||
from typing import Optional, List
|
||||
from datetime import datetime, time
|
||||
from enum import Enum as PyEnum
|
||||
from typing import Optional
|
||||
from uuid import UUID
|
||||
|
||||
from sqlalchemy import Column, CheckConstraint
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
|
||||
from sqlmodel import SQLModel, Field, Relationship, Enum
|
||||
from pydantic import BaseModel, constr
|
||||
from sqlalchemy import CheckConstraint, Column
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlmodel import Enum, Field, Relationship, SQLModel
|
||||
|
||||
|
||||
class ShopStatus(PyEnum):
|
||||
@@ -22,7 +21,7 @@ class ShopLinkEntry(BaseModel):
|
||||
|
||||
|
||||
class ShopLinks(BaseModel):
|
||||
links: List[ShopLinkEntry]
|
||||
links: list[ShopLinkEntry]
|
||||
|
||||
|
||||
class ShopBusinessHourEntry(BaseModel):
|
||||
@@ -32,7 +31,7 @@ class ShopBusinessHourEntry(BaseModel):
|
||||
|
||||
|
||||
class ShopBusinessHours(BaseModel):
|
||||
hours: List[ShopBusinessHourEntry]
|
||||
hours: list[ShopBusinessHourEntry]
|
||||
|
||||
|
||||
class Shop(SQLModel, table=True):
|
||||
@@ -59,8 +58,15 @@ class Shop(SQLModel, table=True):
|
||||
sa_column=Column(JSONB, nullable=False, default=lambda: {})
|
||||
)
|
||||
|
||||
owner: Optional["User"] = Relationship(back_populates='owned_shops')
|
||||
registered_users: List["User"] = Relationship(back_populates='registered_shop')
|
||||
owner: Optional["User"] = Relationship(
|
||||
back_populates='owned_shop',
|
||||
sa_relationship_kwargs={"foreign_keys": "[Shop.owner_id]"}
|
||||
)
|
||||
|
||||
registered_users: list["User"] = Relationship(
|
||||
back_populates='registered_shop',
|
||||
sa_relationship_kwargs={"foreign_keys": "[User.shop_id]"}
|
||||
)
|
||||
|
||||
__table_args__ = (
|
||||
CheckConstraint("business_hours ? 'hours'", name="check_business_hours_keys"),
|
||||
|
||||
@@ -1,17 +1,28 @@
|
||||
from typing import Optional, List
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
from enum import Enum as PyEnum
|
||||
from typing import Optional
|
||||
from uuid import UUID
|
||||
|
||||
from sqlmodel import SQLModel, Field, Relationship
|
||||
from sqlalchemy import Column
|
||||
from sqlmodel import Enum, Field, Relationship, SQLModel
|
||||
|
||||
|
||||
class UserRole(PyEnum):
|
||||
OWNER = "owner"
|
||||
CUSTOMER = "customer"
|
||||
EMPLOYEE = "employee"
|
||||
MANAGER = "manager"
|
||||
ADMIN = "admin"
|
||||
|
||||
|
||||
class User(SQLModel, table=True):
|
||||
__tablename__ = 'user'
|
||||
__tablename__ = "user"
|
||||
|
||||
id: int = Field(primary_key=True)
|
||||
uuid: UUID = Field(nullable=False, unique=True)
|
||||
user_role_id: int = Field(foreign_key="user_role.id", nullable=False)
|
||||
user_role: UserRole = Field(sa_column=Column(Enum(UserRole), nullable=False))
|
||||
shop_id: Optional[int] = Field(foreign_key="shop.id")
|
||||
status: UserRole = Field(sa_column=Column(Enum(UserRole)))
|
||||
username: str = Field(max_length=64, nullable=False, unique=True)
|
||||
email: str = Field(max_length=128, nullable=False, unique=True)
|
||||
password: str = Field(max_length=60, nullable=False)
|
||||
@@ -23,31 +34,29 @@ class User(SQLModel, table=True):
|
||||
updated_at: datetime = Field(default_factory=datetime.utcnow, nullable=False)
|
||||
last_login: Optional[datetime] = Field(default_factory=datetime.utcnow)
|
||||
|
||||
owned_shops: List["Shop"] = Relationship(back_populates="owner")
|
||||
registered_shop: List["Shop"] = Relationship(back_populates="registered_users")
|
||||
owned_shop: "Shop" = Relationship(
|
||||
back_populates="owner",
|
||||
sa_relationship_kwargs={"foreign_keys": "[Shop.owner_id]"}
|
||||
)
|
||||
|
||||
registered_shop: Optional["Shop"] = Relationship(
|
||||
back_populates="registered_users",
|
||||
sa_relationship_kwargs={"foreign_keys": "[User.shop_id]"}
|
||||
)
|
||||
|
||||
user_assigned_role: Optional["UserRole"] = Relationship(back_populates="role_users", sa_relationship_kwargs={"foreign_keys": "[User.user_role_id]"})
|
||||
preferences: Optional["UserPreferences"] = Relationship(back_populates="user")
|
||||
statistics: Optional["UserStatistics"] = Relationship(back_populates="user_statistics")
|
||||
statistics: Optional["UserStatistics"] = Relationship(back_populates="user")
|
||||
|
||||
|
||||
|
||||
class UserPreferences(SQLModel, table=True):
|
||||
__tablename__ = 'user_preferences'
|
||||
__tablename__ = "user_preferences"
|
||||
|
||||
user_id: int = Field(foreign_key="user.id", primary_key=True)
|
||||
|
||||
user: Optional["User"] = Relationship(back_populates="preferences")
|
||||
|
||||
|
||||
class UserRole(SQLModel, table=True):
|
||||
__tablename__ = 'user_role'
|
||||
|
||||
id: int = Field(primary_key=True)
|
||||
name: str = Field(nullable=False, unique=True, max_length=50)
|
||||
|
||||
role_users: List["User"] = Relationship(back_populates="user_assigned_role")
|
||||
|
||||
|
||||
class UserStatistics(SQLModel, table=True):
|
||||
__tablename__ = "user_statistics"
|
||||
|
||||
@@ -56,4 +65,5 @@ class UserStatistics(SQLModel, table=True):
|
||||
|
||||
user: Optional["User"] = Relationship(back_populates="statistics")
|
||||
|
||||
|
||||
__all__ = ["User", "UserPreferences", "UserRole"]
|
||||
Reference in new issue
Block a user