Добавлена модель Company и обновлены связанные модели для учета компании. Обновлены функции регистрации TgAgent с проверкой ключа компании. Изменены комментарии для улучшения понимания кода.
This commit is contained in:
parent
f494f75020
commit
fa0161710e
32
main.py
32
main.py
@ -15,6 +15,14 @@ import jwt
|
|||||||
AUTH_DATABASE_ADDRESS = "sqlite:///partner.db"
|
AUTH_DATABASE_ADDRESS = "sqlite:///partner.db"
|
||||||
|
|
||||||
#SQLModel
|
#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):
|
class TgAgent(SQLModel, table=True):
|
||||||
id: Optional[int] = Field(default=None, primary_key=True)
|
id: Optional[int] = Field(default=None, primary_key=True)
|
||||||
tg_id: int = Field(index=True, unique=True)
|
tg_id: int = Field(index=True, unique=True)
|
||||||
@ -23,6 +31,7 @@ class TgAgent(SQLModel, table=True):
|
|||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
login: Optional[str] = None
|
login: Optional[str] = None
|
||||||
hash: Optional[str] = None
|
hash: Optional[str] = None
|
||||||
|
company_id: int = Field(foreign_key="company.id")
|
||||||
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
||||||
update_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 # сколько начислено за продажу
|
crediting: float # сколько начислено за продажу
|
||||||
ref: int = Field(foreign_key="ref.id")
|
ref: int = Field(foreign_key="ref.id")
|
||||||
sale_id: str
|
sale_id: str
|
||||||
|
company_id: int = Field(foreign_key="company.id")
|
||||||
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
||||||
update_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
|
sum: float
|
||||||
tg_agent_id: int = Field(foreign_key="tgagent.id")
|
tg_agent_id: int = Field(foreign_key="tgagent.id")
|
||||||
status: str # 'process' || 'done' || 'error' || 'waiting'
|
status: str # 'process' || 'done' || 'error' || 'waiting'
|
||||||
|
company_id: int = Field(foreign_key="company.id")
|
||||||
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
create_dttm: datetime = Field(default_factory=datetime.utcnow)
|
||||||
update_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 пароля
|
password_hash: str # теперь хранится hash пароля
|
||||||
name: Optional[str] = None
|
name: Optional[str] = None
|
||||||
email: 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)
|
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
|
phone = req.phone
|
||||||
name = getattr(req, 'name', None)
|
name = getattr(req, 'name', None)
|
||||||
login = getattr(req, 'login', 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)
|
tg_agent = get_tg_agent_by_tg_id(db, tg_id)
|
||||||
if tg_agent:
|
if tg_agent:
|
||||||
raise HTTPException(status_code=400, detail="tg_id already registered")
|
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()
|
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.add(new_tg_agent)
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(new_tg_agent)
|
db.refresh(new_tg_agent)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user