Uma aplicação desenvolvida em Typescript usando Nestjs Framework
Sistema base pré-ajustado para começar projetos em GraphQL utilizando o NestJs. Basta clonar o repositório e começar novos projetos com o código base já pronto!
Contas de administrador possuem uma role, que é formada por uma agregação de várias permissões, que definem quais recursos a conta poderá acessar dentro do sistema
Crie um arquivo .env baseado no .env.example disponível na raíz do projeto.
Instale as dependencias do projeto com seu package manager preferido (npm ou yarn). Utilizei yarn no exemplo.
yarn
Para a primeira inicialização, você precisará subir o banco de dados (postgre), gerar as tabelas e popular as tabelas de permissões, roles e administradores.
Para fazer isso, siga esta sequência:
Você pode usar o script do package.json pronto para a tarefa usando o Docker:
yarn postgre:test
A api usa o TypeORM com opção de SYNC. Ou seja, ajuste o SYNC (arquivo .env) para true e inicie a API. Isto irá gerar automaticamente as tabelas.
yarn start
Após ter iniciado a api uma vez, basta rodar um "migration" para popular as tabelas. Para isso, eu utilizei os migrations nativos do typeorm, adaptando para fazer seed em vez de migration. O arquivo ormconfig.json será lido por esse comando a seguir, para configuração do banco que o comando deverá executar. Observe que a API não utiliza esse arquivo, apenas a migration. Execute esse comando:
yarn migrations
Pronto! o sistema está pronto para uso!
A rota de login é REST. Mantive essa rota em REST devido a uma série de restrições do modulo Passport, que vem pré-configurado para funcionar apenas no REST.
Utilizando um postman ou um insomnia, envie um POST para a rota
http://localhost:3000/auth/admin
Utilize uma das duas contas de administrador padrão no body:
{
"username":"adminmaster@server.com",
"password":"123456"
}
ou
{
"username":"auditoria@server.com",
"password":"123456"
}
Copie o token fornecido na resposta.
Com o token gerado, agora já podemos utilziar todos os recursos da API.
Acesse a rota
http://localhost:3000/graphql
no canto esquerdo inferior, vá nos headers e adicione o token
{
"Authorization":"<Seu Token vai aqui>"
}
Pronto! agora você poderá utilziar a API.
No canto direito você pode consultar a documentação e os schemas da API ;)
Exemplos de requisições possíveis:
query permissions {
listPermissions(query: { limit: 1000 }) {
id
operation
feature
}
}
query roles {
listRoles(query: { limit: 10000 }) {
id
name
permissions {
id
}
}
}
query logs {
listLogs(query: { limit: 1000 }) {
id
}
}
query admns {
listAdmins(query: { limit: 10000 }) {
id
name
email
role {
name
}
}
}
mutation createPermission {
createPermission(data: { operation: "delete", feature: "log" }) {
id
}
}
mutation createRole {
createRole(
data: { name: "asd", description: "asd", permissions: [1, 2, 3] }
) {
id
}
}
mutation createAdmin {
createAdmin(
data: {
name: "asd"
birthDay: "2020-01-01"
email: "asd@asd.asd"
cpf: "1234123123"
phone: "27988884444"
password: "123456"
}
) {
id
}
}
mutation editAdmin {
editAdmin(data: { id: 2, birthDay: "2020-10-10" }) {
id
}
}
mutation editPermissionAdd {
editRoleAddingPermissions(dto: { role: 2, permissions: [3, 4] }) {
id
}
}
mutation editPermissionRemove {
editRoleRemovingPermissions(dto: { role: 2, permissions: [3, 4] }) {
id
}
}
Após iniciar o Debug (F5), aguarde a mensagem "API pronta e ouvindo na porta 3000" no terminal do debugger antes de iniciar a sua depuração.