🎓 Hackathon SOAT11 - Pós-Graduação FIAP

Sistema de Processamento de Vídeos - RM364893

Arquitetura de microsserviços escalável para processamento assíncrono de vídeos com extração de frames, utilizando as melhores práticas de desenvolvimento de software.

📹 Vídeo de Apresentação

Demonstração completa do sistema funcionando

✨ Funcionalidades

Requisitos funcionais implementados

🎬

Processamento Múltiplo

Processa múltiplos vídeos simultaneamente através de workers escaláveis conectados via RabbitMQ.

🔒

Autenticação JWT

Sistema protegido por usuário e senha com tokens JWT para acesso seguro às funcionalidades.

📊

Status em Tempo Real

Listagem completa dos vídeos com status: Pending, Processing, Completed ou Failed.

📧

Notificações por E-mail

Microsserviço dedicado para envio de notificações quando o processamento é concluído.

📦

Download ZIP

Download das imagens extraídas em formato ZIP compactado, pronto para uso.

🚀

Alta Disponibilidade

Arquitetura resiliente com filas que não perde requisições em picos de acesso.

🏗️ Arquitetura do Sistema

Microsserviços independentes comunicando via mensageria

flowchart TB subgraph Client["🖥️ Cliente"] FE["Frontend React"] end subgraph Azure["☁️ Azure Kubernetes Service"] subgraph API["📡 fiapx-api"] A1["API REST"] A2["JWT Auth"] end subgraph MQ["🐰 RabbitMQ"] Q1["video-processing-queue"] Q2["email-queue"] end subgraph Worker["⚙️ fiapx-worker"] W1["Video Processor"] W2["FFmpeg"] end subgraph Email["📧 fiapx-email"] E1["Email Consumer"] E2["SMTP Sender"] end end subgraph Storage["💾 Azure Storage"] DB[(SQL Database)] BLOB[(Blob Storage)] end FE -->|HTTP/REST| A1 A1 -->|Publish| Q1 A1 -->|Publish| Q2 A1 -->|Read/Write| DB A1 -->|Upload| BLOB Q1 -->|Consume| W1 W1 --> W2 W1 -->|Update Status| DB W1 -->|Save Frames| BLOB W1 -->|Publish| Q2 Q2 -->|Consume| E1 E1 --> E2 style API fill:#0ea5e9,stroke:#0284c7,color:#fff style Worker fill:#8b5cf6,stroke:#7c3aed,color:#fff style Email fill:#ec4899,stroke:#db2777,color:#fff style MQ fill:#f59e0b,stroke:#d97706,color:#fff

🛠️ Stack Tecnológica

Tecnologias utilizadas no projeto

🔷

.NET 8

Backend

🐰

RabbitMQ

Mensageria

🗄️

SQL Server

Banco de Dados

🎬

FFmpeg

Processamento

🐳

Docker

Containers

☸️

Kubernetes

Orquestração

☁️

Azure

Cloud

🏗️

Terraform

IaC

📊

Prometheus

Métricas

📈

Grafana

Dashboards

🔄

GitHub Actions

CI/CD

🧪

xUnit

Testes

🗄️ Modelo de Dados

Estrutura das tabelas do banco de dados

👤 Users
Id PK UNIQUEIDENTIFIER
Name NVARCHAR(200)
Email NVARCHAR(300)
PasswordHash NVARCHAR(500)
CreatedAt DATETIME2
🎬 Videos
Id PK UNIQUEIDENTIFIER
UserId FK UNIQUEIDENTIFIER
OriginalFileName NVARCHAR(500)
StoragePath NVARCHAR(1000)
Status INT
FrameCount INT
ZipPath NVARCHAR(1000)
ErrorMessage NVARCHAR(2000)
CreatedAt DATETIME2
ProcessedAt DATETIME2

☁️ Infraestrutura

Recursos provisionados no Azure via Terraform

flowchart TB subgraph Azure["☁️ Microsoft Azure"] subgraph RG["📁 Resource Group: rg-fiapx"] subgraph AKS["☸️ Azure Kubernetes Service"] API["fiapx-api
Replicas: 2-10"] Worker["fiapx-worker
Replicas: 2-20"] Email["fiapx-email
Replicas: 2"] RabbitMQ["RabbitMQ"] end ACR["🐳 Azure Container Registry
fiapxacr"] SQL["🗄️ Azure SQL Database
FiapXDb"] Storage["💾 Storage Account
Blob Storage"] end end subgraph GitHub["🐙 GitHub"] Repo["Repositories"] Actions["GitHub Actions
CI/CD Pipeline"] end Repo --> Actions Actions -->|Push Image| ACR ACR -->|Pull Image| AKS API --> SQL API --> Storage Worker --> SQL Worker --> Storage style AKS fill:#326ce5,stroke:#fff,color:#fff style ACR fill:#0078d4,stroke:#fff,color:#fff style SQL fill:#0078d4,stroke:#fff,color:#fff style Storage fill:#0078d4,stroke:#fff,color:#fff
☸️

AKS - Kubernetes

Cluster gerenciado com auto-scaling, balanceamento de carga e alta disponibilidade.

🐳

Container Registry

Registro privado para armazenar as imagens Docker dos microsserviços.

🗄️

SQL Database

Banco de dados gerenciado com backup automático e alta disponibilidade.

💾

Blob Storage

Armazenamento de objetos para vídeos enviados e ZIPs gerados.

📡 API Endpoints

Documentação dos endpoints REST disponíveis

🔐 Autenticação

POST /api/auth/register Registrar novo usuário
POST /api/auth/login Autenticar e obter token JWT

🎬 Vídeos

POST /api/videos/upload Upload de vídeo para processamento 🔒 Auth
GET /api/videos Listar vídeos do usuário 🔒 Auth
GET /api/videos/{id} Obter detalhes de um vídeo 🔒 Auth
GET /api/videos/{id}/download Download do ZIP com frames 🔒 Auth

💚 Health

GET /health Health check da aplicação
GET /metrics Métricas para Prometheus

📂 Repositórios

Código fonte dos microsserviços

📡 fiapx-api

API REST principal com autenticação JWT, endpoints de upload/download e integração com RabbitMQ.

Ver repositório →

⚙️ fiapx-worker

Worker para processamento de vídeos com FFmpeg, extração de frames e geração de ZIP.

Ver repositório →

📧 fiapx-email

Microsserviço de notificações por e-mail, consumindo fila de mensagens.

Ver repositório →

🎓 Projeto Acadêmico

Desenvolvido para o Hackathon SOAT11 da Pós-Graduação em Arquitetura de Software na FIAP

Assistir Apresentação