API/ remnawave 1.6.12/ admins in database and more

This commit is contained in:
Vladless
2025-06-14 21:16:53 +03:00
parent cebdeb78fe
commit e06b0ef1bc
28 changed files with 1021 additions and 25 deletions
+17 -3
View File
@@ -1,7 +1,21 @@
from database.db import engine
from database.models import Base
from database.db import engine, async_session_maker
from database.models import Base, Admin
from sqlalchemy import select
from config import ADMIN_ID
from datetime import datetime
async def init_db():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async with async_session_maker() as session:
for tg_id in ADMIN_ID:
result = await session.execute(select(Admin).where(Admin.tg_id == tg_id))
if not result.scalar_one_or_none():
session.add(Admin(
tg_id=tg_id,
role="superadmin",
description="Imported from config",
added_at=datetime.utcnow()
))
await session.commit()
+13 -8
View File
@@ -12,6 +12,7 @@ from sqlalchemy import (
String,
Text,
)
import secrets
from sqlalchemy.orm import Mapped, declarative_base, mapped_column
Base = declarative_base()
@@ -57,7 +58,7 @@ class Key(DictLikeMixin, Base):
key = Column(String)
server_id = Column(String)
remnawave_link = Column(String)
tariff_id = Column(Integer, ForeignKey("tariffs.id"))
tariff_id = Column(Integer, ForeignKey("tariffs.id", ondelete="SET NULL"))
is_frozen = Column(Boolean, default=False)
alias = Column(String)
notified = Column(Boolean, default=False)
@@ -202,11 +203,15 @@ class TrackingSource(DictLikeMixin, Base):
created_at = Column(DateTime, default=datetime.utcnow)
class Log(DictLikeMixin, Base):
__tablename__ = "logs"
class Admin(Base):
__tablename__ = "admins"
id = Column(Integer, primary_key=True)
event_type = Column(String)
tg_id = Column(BigInteger)
details = Column(JSON)
created_at = Column(DateTime, default=datetime.utcnow)
tg_id = Column(BigInteger, primary_key=True)
token = Column(String, unique=True, nullable=True)
description = Column(String, nullable=True)
role = Column(String, nullable=False, default="admin")
added_at = Column(DateTime, default=datetime.utcnow)
@staticmethod
def generate_token() -> str:
return secrets.token_urlsafe(32)