API backend que permite o upload de arquivos de vídeo e áudio,realiza o processamento básico desses arquivos e fornece uma interface para acessar os resultados do processamento.
Deve primeiramente copiar o ficheiro .env.example
e renomear o arquivo copiado para .env
. Todas variaveis padrão que vem do arquivo copiado é suficiente para API funcionar correctamente. Observe a seguintes descrições:
- PORT: A porta que servidor local vai rodar. Padrão 5533
- MAX_LENGHT_VIDEO Limite do tamanho de arquivos de vídeo para upload. Padrão 100 MB. Obs: Medido em bytes
- MAX_LENGHT_AUDIO Limite do tamanho de arquivos de áudio para upload. Padrão 30 MB. Obs: Medido em bytes
- DATABASE_URL URL do banco de dados do projecto manipulado pelo Prisma.
- HOST URL do servidor local
Este projecto é aberta a vários tipos de SGBDs para armazenamento dos dados e metadados dos ficheiros, porque conta com o uso do Prisma, que é uma ferramenta de ORM (Object-Relational Mapping) para Node.js e TypeScript que simplifica a interação com bancos de dados. Normalmente nós manipulamos qual SGBDs utilizar com variavel de ambiente DATABASE_URL. Caso deseja utilizar uma SGBDs diferente do padrão que atualmente é SQLite, consulte as URLS de Conexão do prisma.
Após isto existem algumas etapas para base de dados estar configurada:
-
npx prisma migrate dev
- Rode este comando para pode migrar toda estrutura do schema para base de dados. Será solicitado nome da migração é existe nenhuma regra sobre isso, mas sugerimos que nomeia a suas migrações de forma sequencial ou por data, Ex:migration_1
oumigration_03_12_2024
-
npx prisma generate
- Rode este comando para permite que o projecto posso gerar os arquivos necessário para interagir com base de dados
Este projecto utiliza a biblioteca Fluent-FFMPEG para o processamento das mídias carregadas na API. E para seu funcionamento correcto, devemos configurar algumas coisas. Primeiramnete baixar ffmpeg
e o ffprobe
.
- ffmpeg é uma ferramenta de código aberto para processamento de áudio e vídeo.
- ffprobe é uma ferramenta complementar ao FFmpeg, usada para inspecionar informações detalhadas sobre arquivos de mídia.
Baixa aqui os binários do ffmpeg
e ffprobe
e define na variável PATH do sistema.
Após toda este configuração o projecto pode rodar em modo de produção ou desenvolvimento.
É um modo desenhado para rodar em ambiente de desenvolvimento que oferece recursos que inclui o auto-reload que oferece uma experiência de desenvolvimento que permite desenvolver este projecto com mais rapidez e facilidade. Para rodar no Modo de desenvolvimento
deves apenas:
- Rodar o script
npm run dev
Permite rodar o projecto totalmente otimizado para ambiente de produção com todos os ficheiros compilados e otimizados. Para rodar no Modo de produção
deves fazer o seguinte:
- Compilar no projecto
npm run build
- Rodar o projecto compilado
npm start
O projecto utiliza o prettier para formatação do código podes facilmente antes de todo commit rodar o comando npm run format
para poder formatar o projecto para configuraçōes do prettier.
A documentação da API pode ser acessada por meio do endereço localhost e porta defina na variável de ambiente. Ex: http://localhost:5533
Método: GET
URL: /
Método: GET
URL: /api/v1
{
"sucess": true,
"message": "API Server running..."
}
Método: POST
URL: /api/v1/upload
Content-Type: multipart/form-data
{
"file": [file-to-upload]
}
{
"sucess": true,
"message": "File Uploaded",
"data": {
"id": "4353534-353435-3432jsd",
"createdAt": "2022-12-02"
}
}
Método: GET
URL: /api/v1/files
{
"sucess": true,
"data": [
{
"id": "a8ab667c-149d-4970-887e-ce83056aabfd",
"name": "Oruam – Rolé na Favela de Nave (feat. Didi,Dj Lc da Roça,MC K9,MC Smith).mp3",
"type": "audio",
"size": 5858200,
"duration": 193.044898,
"mimetype": "audio/mpeg",
"createdAt": "2024-12-02T19:27:09.374Z",
"download_url": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/download",
"short_file": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/short_file",
"file_converted": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/converted"
},
{
"id": "86ea1333-bc62-4995-9c24-79b5788b01d5",
"name": "Cópia de Nome.mp4",
"type": "video",
"size": 553683,
"duration": 5,
"mimetype": "video/mp4",
"createdAt": "2024-12-02T19:28:15.440Z",
"download_url": "http://localhost:5533/api/v1/files/86ea1333-bc62-4995-9c24-79b5788b01d5/download",
"short_file": "http://localhost:5533/api/v1/files/86ea1333-bc62-4995-9c24-79b5788b01d5/short_file",
"thumbnail": "http://localhost:5533/api/v1/files/86ea1333-bc62-4995-9c24-79b5788b01d5/thumbnail"
}
]
}
Método: GET
URL: /api/v1/files/{id}
id
(requerido): ID do arquivo.
{
"sucess": true,
"data": {
"id": "a8ab667c-149d-4970-887e-ce83056aabfd",
"name": "Oruam – Rolé na Favela de Nave (feat. Didi,Dj Lc da Roça,MC K9,MC Smith).mp3",
"type": "audio",
"size": 5858200,
"duration": 193.044898,
"mimetype": "audio/mpeg",
"createdAt": "2024-12-02T19:27:09.374Z",
"download_url": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/download",
"short_file": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/short_file",
"file_converted": "http://localhost:5533/api/v1/files/a8ab667c-149d-4970-887e-ce83056aabfd/converted"
}
}
Método: GET
URL: /api/v1/files/{id}/thumbnail
id
(requerido): ID do arquivo.
- Binary File
Método: GET
URL: /api/v1/files/{id}/download
id
(requerido): ID do arquivo.
- Binary File
Método: GET
URL: /api/v1/files/{id}/converted
id
(requerido): ID do arquivo.
- Binary File
Método: GET
URL: /api/v1/files/{id}/short_file
id
(requerido): ID do arquivo.
- Binary File