用户管理器

118 阅读1分钟
import uuid
from dataclasses import dataclass, field


# 任务模型
@dataclass
class Task:
    task_id: int  # 任务 id
    task_state: bool = False  # 任务状态


# 用户模型
@dataclass
class User:
    username: str  # 用户名
    task_dict: dict[int:Task] = field(default_factory=dict)  # 任务字典

    def create_task(self, task_id: int) -> None:
        """
        创建任务
        :param task_id : 任务 id
        """
        self.task_dict[task_id] = Task(task_id=task_id)

    def delete_task(self, task_id: int) -> None:
        """
        删除任务
        :param task_id : 任务 id
        """
        del self.task_dict[task_id]

    def get_task(self, task_id: int) -> Task:
        """
        获取任务
        :param task_id : 任务 id
        :return Task : 返回任务模型
        """
        return self.task_dict[task_id]


# 用户管理器
class UserManager:
    def __init__(self):
        self.user_dict: dict[str:User] = {}  # 用户字典

    def add_user(self, user: str) -> bool:
        """
        添加新用户
        :param user : 添加的用户
        :return bool : 如果用户已存在,返回 False;否则添加用户,返回 True
        """
        if self.check_user_exists(user):  # 若用户已存在
            return False
        else:
            self.user_dict[user] = User(username=user)  # 生成 User 模型,初始化用户
            return True

    def remove_user(self, user: str) -> bool:
        """
        移除用户
        :param user : 移除的用户
        :return bool : 如果用户存在,移除用户并返回 True;否则返回 False
        """
        if self.check_user_exists(user):  # 若用户已存在
            del self.user_dict[user]
            return True
        else:
            return False

    def check_user_exists(self, user: str) -> bool:
        """
        检查用户是否已存在用户字典中
        :param user : 检查的用户
        :return bool : 如果用户已存在,返回 True;否则返回 False
        """
        return user in self.user_dict

    def get_user(self, user: str) -> User:
        """
        获取用户字典中的用户
        :param user : 获取的用户
        :return User : 返回用户模型
        """
        return self.user_dict[user]

    @staticmethod
    def get_username_uuid(username) -> str:
        """
        将用户名与 uuid 拼接,格式为'用户名_uuid'
        :param username : 用户名
        :return str : 拼接后的字符串
        """
        return f'{username}_{uuid.uuid4()}'