[rewrite] Implemented login and register

This commit is contained in:
Thastertyn committed 2025-03-12 14:01:13 +01:00
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"]
+17 -11
View File
@@ -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"),
+29 -19
View File
@@ -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"]