From fa0161710e445c2ba153551bc5865395bee28424 Mon Sep 17 00:00:00 2001 From: Redsandyg Date: Tue, 3 Jun 2025 14:04:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=20Company?= =?UTF-8?q?=20=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D1=81=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=83=D1=87=D0=B5=D1=82=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20TgAgent=20=D1=81=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=BE=D0=B9=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D0=B8.=20=D0=98?= =?UTF-8?q?=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BD=D0=B8=D0=BC=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 32 +++++++++++++++++++++++++++++--- models.py | 3 ++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index da20bad..0054859 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,14 @@ import jwt AUTH_DATABASE_ADDRESS = "sqlite:///partner.db" #SQLModel +class Company(SQLModel, table=True): + id: Optional[int] = Field(default=None, primary_key=True) + name: str + commission: float # процент комиссии + key: str = Field(index=True, unique=True) + create_dttm: datetime = Field(default_factory=datetime.utcnow) + update_dttm: datetime = Field(default_factory=datetime.utcnow) + class TgAgent(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) tg_id: int = Field(index=True, unique=True) @@ -23,6 +31,7 @@ class TgAgent(SQLModel, table=True): name: Optional[str] = None login: Optional[str] = None hash: Optional[str] = None + company_id: int = Field(foreign_key="company.id") create_dttm: datetime = Field(default_factory=datetime.utcnow) update_dttm: datetime = Field(default_factory=datetime.utcnow) @@ -40,6 +49,7 @@ class Sale(SQLModel, table=True): crediting: float # сколько начислено за продажу ref: int = Field(foreign_key="ref.id") sale_id: str + company_id: int = Field(foreign_key="company.id") create_dttm: datetime = Field(default_factory=datetime.utcnow) update_dttm: datetime = Field(default_factory=datetime.utcnow) @@ -49,6 +59,7 @@ class Transaction(SQLModel, table=True): sum: float tg_agent_id: int = Field(foreign_key="tgagent.id") status: str # 'process' || 'done' || 'error' || 'waiting' + company_id: int = Field(foreign_key="company.id") create_dttm: datetime = Field(default_factory=datetime.utcnow) update_dttm: datetime = Field(default_factory=datetime.utcnow) @@ -58,7 +69,9 @@ class Account(SQLModel, table=True): password_hash: str # теперь хранится hash пароля name: Optional[str] = None email: Optional[str] = None - balance: float = 0.0 + company_id: int = Field(foreign_key="company.id") + create_dttm: datetime = Field(default_factory=datetime.utcnow) + update_dttm: datetime = Field(default_factory=datetime.utcnow) # Создание движка базы данных AUTH_DB_ENGINE = create_engine(AUTH_DATABASE_ADDRESS, echo=True) @@ -110,12 +123,25 @@ def register(req: RegisterRequest, db: Session = Depends(get_db)): phone = req.phone name = getattr(req, 'name', None) login = getattr(req, 'login', None) - print(f'tg_id: {tg_id}, chat_id: {chat_id}, phone: {phone}, name: {name}, login: {login}') + company_key = req.company_key + print(f'tg_id: {tg_id}, chat_id: {chat_id}, phone: {phone}, name: {name}, login: {login}, company_key: {company_key}') tg_agent = get_tg_agent_by_tg_id(db, tg_id) if tg_agent: raise HTTPException(status_code=400, detail="tg_id already registered") + # Поиск компании по ключу + company = db.exec(select(Company).where(Company.key == company_key)).first() + if not company: + raise HTTPException(status_code=400, detail="Компания с таким ключом не найдена") hash_value = sha256(f"{tg_id}sold".encode()).hexdigest() - new_tg_agent = TgAgent(tg_id=tg_id, chat_id=chat_id, phone=phone, name=name, login=login, hash=hash_value) + new_tg_agent = TgAgent( + tg_id=tg_id, + chat_id=chat_id, + phone=phone, + name=name, + login=login, + hash=hash_value, + company_id=company.id + ) db.add(new_tg_agent) db.commit() db.refresh(new_tg_agent) diff --git a/models.py b/models.py index c04bd76..c4fd30c 100644 --- a/models.py +++ b/models.py @@ -28,4 +28,5 @@ class RegisterRequest(BaseModel): chat_id: Optional[int] = None phone: Optional[str] = None name: Optional[str] = None - login: Optional[str] = None \ No newline at end of file + login: Optional[str] = None + company_key: str \ No newline at end of file