Versão 1
Implementação simples, com autenticação embutida no corpo da requisição (basic).
O código está distribuído em vários repositórios:
1. Jogando Jogos e Recebendo Tijolinhos:
- O usuário inicia sua jornada jogando os jogos disponíveis.
- Após cada jogo, insere seu ID e senha obtidos do banco na interface do jogo.
- Frontend do Jogo -> API (POST /credito) -> Banco de Dados (Atualização de Saldo) -> Frontend do Jogo
- O usuário recebe tijolinhos como recompensa pela participação.
2. Consultando Extrato Financeiro:
- O usuário pode consultar seu extrato financeiro para visualizar ganhos e transações.
- Frontend do Usuário -> API (GET /extrato) -> Banco de Dados (Consulta de Extrato) -> Frontend do Usuário
3. Realizando PIX entre Jogadores:
- O usuário decide fazer um PIX para outro jogador.
- Frontend do Usuário -> API (GET /pix) -> Banco de Dados (Verificação e Atualização de Saldo) -> Frontend do Usuário
- O PIX é concluído, e os saldos são atualizados.
4. Comprando Produtos no Dispenser:
- O usuário escolhe um produto no dispenser de alimentos.
- Insere seu ID e senha na máquina para autenticação.
- Máquina -> API (POST /debito) -> Banco de Dados (Verificação e Atualização de Saldo) -> Máquina
- Se tiver saldo suficiente, o dispenser ejeta o alimento e o saldo é debitado.
- O usuário pode atualizar informações da sua conta.
- Frontend do Usuário -> API (POST /conta) -> Banco de Dados (Atualização de Informações) -> Frontend do Usuário
- Por exemplo, alterar a senha.
6. Administração do Sistema:
- Administradores podem acessar informações e funcionalidades específicas.
- Frontend do Administrador -> API (GET /adm) -> Banco de Dados (Consulta de Informações) -> Frontend do Administrador
- Atualizar estoque de produtos, informações da conta do jogador, etc.
7. Atualizando Estoque de Produtos:
- Administradores podem atualizar o estoque de produtos.
- Frontend do Administrador -> API (POST /atualizar-estoque) -> Banco de Dados (Atualização de Estoque) -> Frontend do Administrador
8. Atualizando Valor de Produtos:
- Administradores podem atualizar o valor de produtos.
- Frontend do Administrador -> API (POST /atualizar-valor) -> Banco de Dados (Atualização de Valor) -> Frontend do Administrador
- A comunicação entre a API e o dispenser de alimentos ocorre via MQTT.
- API (MQTT Publish) -> Broker MQTT -> Dispenser (MQTT Subscribe)
1. Cadastro e Autenticação
- O usuário cria uma conta no banco digital para feira de jogos
https://feira-de-jogos.sj.ifsc.edu.br
(já desativado).
- Ao iniciar a jornada, autentica-se nos jogos usando o sistema de autenticação via Google OAuth 2.0.
- O usuário joga os jogos desenvolvidos pela 8ª fase de telecomunicações.
- Ao finalizar cada jogo, insere seu ID e senha obtidos do banco para receber tijolinhos.
3. Recompensas e Economia
- O usuário ganha tijolinhos como recompensa pela participação nos jogos.
- Pode consultar seu extrato financeiro para acompanhar ganhos e transações.
4. Gastos e Transações
- Utiliza os tijolinhos para diversas atividades econômicas, como fazer PIX entre jogadores.
- Realiza transações PIX para responsáveis de máquinas de jogos retro, possibilitando a continuação da jornada.
5. Dispenser de Alimentos
- Acesso ao dispenser de alimentos inserindo ID e senha.
- Se tiver saldo suficiente, o dispenser ejeta o alimento desejado usando uma mola.
- O saldo é debitado automaticamente do usuário.
6. Consultas e Atualizações da Conta
- O usuário pode consultar e atualizar informações da sua conta usando operações como
/extrato
, /pix
, /credito
, /debito
, /conta
.
- A comunicação entre a aplicação e o dispenser de alimentos ocorre via MQTT, garantindo sincronização e comunicação bidirecional.
8. Serviços em Nuvem
- Utilização de um banco de dados relacional PostgreSQL para armazenar informações sobre jogadores, jogos, transações, produtos, entre outros.
- Serviços em nuvem, como MQTT para comunicação com dispositivos físicos e NGINX para gerenciar o tráfego da API.
9. Segurança
- Autenticação segura via OAuth 2.0 para acesso à API.
- Utilização de certificados SSL/TLS para proteger a comunicação entre o cliente e o servidor.
10. Ambiente do Servidor
- Configuração de variáveis de ambiente para diferentes serviços.
- Uso do Systemd para gerenciar os serviços da API e MQTT.
11. Diagrama de Blocos
- Visualização da arquitetura de serviços e protocolos por meio de um diagrama de blocos:

12. Atualizações do Sistema
- Possibilidade de atualização para a API (v2) pós-2023, conforme previsto.
- Atualizações do banco de dados relacional conforme necessário para manter a integridade e escalabilidade do sistema.
REST API
Operações de jogador:
Autenticação do jogador:
-
Método: POST
-
Path:
/autenticacao
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Operação iniciada pela tela inicial do aplicativo do usuário, com autenticação via Google OAuth 2.0.
-
Entrada: Requisição HTTP POST com o seguinte corpo:
-
credential
: Token de identificação fornecido pelo Google Sign-In.
-
Respostas:
-
302: Found - Redireciona para
/api/v1/extrato
em caso de sucesso na autenticação.
-
500: Internal Server Error - Erro interno no servidor.
Extrato de jogador:
-
Método: GET
-
Path:
/extrato
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo:
- Operação que retorna a página HTML do extrato financeiro do jogador. A requisição deve ser feita via GET e ser autenticada usando o token fornecido durante a autenticação via Google OAuth 2.0.
-
Respostas:
-
200: OK - Retorna uma página HTML com o extrato do jogador.
-
401: Unauthorized - Redireciona para a tela de autenticação em caso de falha na autenticação.
-
500: Erro Interno do Servidor - Erro interno no servidor.
Pix entre jogadores:
-
Método: GET
-
Path:
/pix
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo:
- Operação que retorna a página HTML para realizar uma transação Pix entre jogadores. A requisição deve ser feita via GET e ser autenticada usando o token fornecido durante a autenticação via Google OAuth 2.0.
-
Respostas:
-
200: OK - Retorna uma página HTML com o formulário para realizar uma transação Pix.
-
302: Redirecionamento - Em caso de autenticação bem-sucedida.
-
401: Unauthorized - Redireciona para a tela de autenticação em caso de falha na autenticação.
-
404: Usuário não encontrado - Retorna um JSON com
{ result: 1, message: 'Usuário não encontrado' }
.
-
403: Saldo Insuficiente - Retorna um JSON com
{ result: 2, message: 'Saldo Insuficiente' }
.
-
400: Não é possível enviar um Pix para você mesmo! - Retorna um JSON com
{ result: 3, message: 'Não é possível enviar um Pix para você mesmo!' }
.
-
400: Valor abaixo de 1 tijolinho - Retorna um JSON com
{ result: 4, message: 'Você não pode enviar um valor abaixo de 1 tijolinho' }
.
-
200: Pix enviado com sucesso! - Retorna um JSON com
{ result: 5, message: 'Pix enviado com sucesso!' }
.
-
500: Erro Interno do Servidor - Erro interno no servidor.
Crédito para jogador:
-
Método: POST
-
Path:
/credito
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Realiza uma operação de crédito para um jogador específico.
-
Parâmetros:
-
id
(Identificador do jogador)
-
senha
(Senha do jogador)
-
jogo
(Identificador do jogo)
-
valor
(Valor da operação em tijolinhos)
-
Respostas:
-
200: OK - Retorna JSON com resultado da operação.
-
400: Bad Request - Formato da requisição inválida.
-
401: Unauthorized - Autenticação inválida.
-
500: Erro Interno do Servidor - Erro interno no servidor.
Débito para jogador:
-
Método: POST
-
Path:
/debito
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: O corpo da requisição deve ser em JSON.
-
Parâmetros:
-
id
(Identificador do jogador)
-
senha
(Senha do jogador)
-
maquina
(Identificador da máquina)
-
produto
(Identificador do produto)
-
Respostas:
-
200: OK - Retorna JSON com resultado da operação.
-
400: Bad Request - Formato da requisição inválida.
-
401: Unauthorized - Autenticação inválida.
-
402: Pagamento não autorizado - Saldo Insuficiente
-
403: Forbidden - Produto inexistente ou sem estoque.
-
500: Erro Interno do Servidor - Erro interno no servidor.
Conta do jogador:
-
Método: POST
-
Path:
/conta
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Atualiza informações da conta do jogador, permitindo visualizar e modificar dados como nome, ID, senha e saldo. A requisição deve ser autenticada utilizando o token fornecido durante a autenticação via Google OAuth 2.0. O corpo da requisição deve ser em JSON.
-
Parâmetros:
-
idNumero
(Identificador do jogador)
-
novaSenha
(Nova senha para atualização)
-
Respostas:
-
200: OK - Retorna JSON com resultado da operação.
-
400: Bad Request - Formato da requisição inválido ou senhas não coincidem.
-
401: Unauthorized - Autenticação inválida.
-
500: Erro Interno do Servidor - Erro interno no servidor durante a atualização da senha.
Operações de administrador:
-
Método: GET
-
Path:
/adm
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Recupera informações de um jogador com perfil de administrador. A requisição deve ser autenticada utilizando o token fornecido durante a autenticação via Google OAuth 2.0.
-
Respostas:
-
200: OK - Retorna uma página HTML com informações e funcionalidades para administradores.
-
302: Found - Redireciona para a página de login se o usuário não estiver autenticado.
-
500: Erro Interno do Servidor - Erro interno no servidor durante o processamento.
Atualizar Estoque do Produto
-
Método: POST
-
Path:
/atualizar-estoque
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Atualiza o estoque de um produto. Requer autenticação de administrador e fornece informações como o ID do produto e a quantidade a ser atualizada.
-
Parâmetros:
-
productIdE
(ID do produto)
-
amountE
(Quantidade a ser atualizada no estoque)
-
idNumero
(Identificador do administrador)
-
Respostas:
-
200: OK - Estoque atualizado com sucesso.
-
400: Bad Request - Produto não encontrado, tentativa de alterar o estoque do Pix ou quantidade negativa.
-
401: Unauthorized - Autenticação de administrador inválida.
-
500: Erro Interno do Servidor - Erro interno no servidor durante a atualização do estoque.
Atualizar Valor do Produto
-
Método: POST
-
Path:
/atualizar-valor
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Atualiza o valor de um produto. Requer autenticação de administrador e fornece informações como o ID do produto e a quantidade a ser atualizada.
-
Parâmetros:
-
productIdV
(ID do produto)
-
amountV
(Novo valor do produto)
-
idNumero
(Identificador do administrador)
-
Respostas:
-
200: OK - Valor do produto atualizado com sucesso.
-
400: Bad Request - Produto não encontrado, tentativa de alterar o valor do Pix ou valor negativo.
-
401: Unauthorized - Autenticação de administrador inválida.
-
500: Erro Interno do Servidor - Erro interno no servidor durante a atualização do valor do produto.
Operação de máquina:
Estoque de máquina:
-
Método: POST
-
Path: /estoque
-
Base URL: https://feira-de-jogos.sj.ifsc.edu.br/api/v1
-
Resumo: Operação para verificar o estoque da máquina.
-
Parâmetros:
-
id
(Identificador da máquina)
-
senha
(Senha atribuída a máquina)
-
produto
(Identificador do produto)
-
quantidade
(Quantidade atualizada do produto)
-
Respostas:
-
200: OK - Retorna JSON com o estoque corrente da máquina.
-
400: Bad Request - Formato da requisição inválida.
-
401: Unauthorized - Autenticação inválida.
-
403: Forbidden - Operação inválida: produto não existe ou não pode ser estocado nessa máquina.
Banco de dados relacional
O banco foi assim modelado (copiado do original):

Para PostgreSQL, os comandos DDL estão no arquivo ddl.sql.