summaryrefslogtreecommitdiff
path: root/files/TG_bot_VPN-main/database/models.py
blob: ded6baeae7557cb69f987f97eb922c50bc4aa57c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import datetime
import os.path
import re

from config_data.config import BASE_DIR
import peewee

db = peewee.SqliteDatabase(os.path.join(BASE_DIR, "database/database.db"))


class BaseModel(peewee.Model):
    """ Базовая модель """
    class Meta:
        database = db


class Server(BaseModel):
    """ Модель сервера для подключения VPN """
    username = peewee.CharField()
    password = peewee.CharField()
    location = peewee.CharField()
    ip_address = peewee.CharField(unique=True)
    public_key = peewee.CharField(null=True, unique=True)


class VPNKey(BaseModel):
    """ Модель для VPN ключа. Привязан к серверу. Имеет qr код (картинка) для подключения """
    server = peewee.ForeignKeyField(Server, related_name="keys",
                                     on_delete="cascade",
                                     on_update="cascade")
    name = peewee.CharField()
    key = peewee.CharField(unique=True)
    qr_code = peewee.CharField()
    is_valid = peewee.BooleanField(default=True)
    created_at = peewee.DateTimeField(default=datetime.datetime.now())
    updated_at = peewee.DateTimeField(default=datetime.datetime.now())

    def extract_uuid(self) -> str | None:
        """
        Извлекает UUID из VLESS-ссылки ключа.
        """
        match = re.match(r'vless://([a-fA-F0-9-]{36})@', self.key)
        return match.group(1) if match else None


class User(BaseModel):
    """ Модель пользователя """
    user_id = peewee.CharField(unique=True)
    full_name = peewee.CharField()
    username = peewee.CharField()
    is_premium = peewee.BooleanField(null=True)
    is_subscribed = peewee.BooleanField(default=False)
    vpn_key = peewee.ForeignKeyField(VPNKey, related_name="users", null=True, on_update="set null",
                                     on_delete="set null")


class Group(BaseModel):
    """ Класс группы """
    group_id = peewee.CharField(unique=True)
    title = peewee.CharField()
    description = peewee.TextField(null=True)
    bio = peewee.TextField(null=True)
    invite_link = peewee.CharField(null=True)
    location = peewee.CharField(null=True)
    username = peewee.CharField(null=True)


def create_models():
    db.create_tables(BaseModel.__subclasses__())