88 lines
2.2 KiB
Python
88 lines
2.2 KiB
Python
from peewee import Field, Model, BigIntegerField, CharField, DateField, DateTimeField, ForeignKeyField
|
|
|
|
import config
|
|
from playhouse.db_url import connect
|
|
|
|
from datetime import datetime, date
|
|
|
|
from enum import Enum
|
|
class MemberRoles(Enum):
|
|
OWNER = "owner"
|
|
ADMIN = "admin"
|
|
HELPER = "helper"
|
|
MEMBER = "member"
|
|
|
|
|
|
db = connect(config.db_url)
|
|
|
|
class Member(Model):
|
|
user_id = BigIntegerField()
|
|
first_name = CharField()
|
|
username = CharField(null=True)
|
|
|
|
warns = BigIntegerField(default=0)
|
|
|
|
role = CharField(default="member")
|
|
|
|
joined = DateField(default=date.today())
|
|
|
|
|
|
@staticmethod
|
|
def exists(fieldname, value) -> bool | None:
|
|
"""Check if data exists in db"""
|
|
query = Member.select().where(fieldname == value)
|
|
|
|
if (query is None):
|
|
return None
|
|
|
|
return query.exists()
|
|
|
|
@staticmethod
|
|
def search(fieldname:Field, value):
|
|
if (not Member.exists(fieldname, value)):
|
|
return None
|
|
|
|
return Member.get(fieldname == value)
|
|
|
|
@staticmethod
|
|
def report(delete=False):
|
|
"""If the user exists, returns number reports. Gives the user a warning or retrieves it."""
|
|
count = Member.warns
|
|
|
|
if delete:count -= 1
|
|
else:count += 1
|
|
|
|
Member.update(warns = count).execute()
|
|
|
|
return count
|
|
|
|
class Meta:
|
|
db_table = "members"
|
|
database = db
|
|
|
|
class Restriction(Model):
|
|
# TODO: not forget rename all operation to action
|
|
action = CharField()
|
|
|
|
from_user = ForeignKeyField(Member, lazy_load=True)
|
|
to_user = ForeignKeyField(Member, lazy_load=True)
|
|
|
|
reason = CharField(null=True)
|
|
timestamp = DateTimeField(default=datetime.now().replace(microsecond=0))
|
|
|
|
@staticmethod
|
|
def search(to_user=None,id=None):
|
|
if (id):
|
|
query = Restriction.get(Restriction.id == id)
|
|
if (to_user):
|
|
query = Restriction.select().where(Restriction.to_user == to_user)
|
|
|
|
return query
|
|
|
|
class Meta:
|
|
db_table = "auditlog"
|
|
database = db
|
|
|
|
def build() -> None:
|
|
db.create_tables([Member,Restriction])
|