rafaeltiribas / techtiribas-discord-bot

A discord bot with multiple functionalities for the TechTiribas server.
3 stars 1 forks source link

feat: Sistema de Users com Roles e Bytes Wallet junto com Database #15

Closed thiagochirana closed 1 month ago

thiagochirana commented 1 month ago

Novas entidades

Implementação de User com Roles (funções) com Wallet (carteira) de Bytes para atender a issue #14 e iniciar a atender a issue #13

Foi criada 3 entidades: User, Wallet e TransactionHistory, onde:

A cardinalidade seria assim

image

Um User pode conter apenas 1 Wallet, e 1 Wallet pode conter n Transactions

Roles (ou Funcoes) do User

Atualmente com essa feature, foi pensada em 4 roles Council, Admin, Subscriber e Member.

A Hierarquia é basicamente, do mais alto ao mais baixo: Council > Admin > Subscriber > Member

Novos comandos

Foi criado 2 novos comandos no momento, o /register e o /alterar_funcao

/register

Serve para registrar a quem interessar ter acesso as funcionalidades do Bot. Com esse comando o novo user será registrado como Member e terá 300.0 bytes na carteira

/alterar_funcao

Foi criando pensando em alterar as roles dos User, porem com a regra de apenas um usuário com uma role superior pode alterar a role de outro usuário.

Exceto o Council que basicamente não existe regra, ele tem poder de alterar totalmente as roles de qualquer User.

Database do Bot

Com essas novas feats, o bot necessitaria de um database, o escolhido foi SQLite3 , junto com o ORM SQLObject para facilitar e agilizar a manipulação de dados junto a esse db.

O database SQLite3 foi escolhido pois é leve e fácil de implementar, e o ORM SQLObject foi selecionado devido a sua facilidade de implementar o CRUD (persistir, alterar, excluir e criar novos models). Ele já atende a grande maioria das funcoes SQL que é necessário como Select, Update e até Joins caso necessite.

Onde fica "instalado" o banco?

Quando o bot inicia pela primeira vez, ele cria um arquivo na raiz do projeto local , o techtiribas_bot.db , ele não é inserido nos commits até então, não há necessidade disso.

Ao iniciar o bot, ele faz a validação se o banco existe e se as tables dentro do banco existem

Se quiser implementar novas tabelas, basta ir no arquivo db/database_config.py e na def create_tables() inserir mais uma linha por exemplo:

def create_tables():
    User.createTable(ifNotExists=True)
    Wallet.createTable(ifNotExists=True)
    TransactionHistory.createTable(ifNotExists=True)

o formato é basicamente :

Model.createTable(ifNotExists=True)