Pular para o conteúdo principal

API Examples (Request/Response)

Introdução ao documento

Este documento apresenta exemplos práticos de requests/responses da API activity-delivery-api para facilitar consumo e troubleshooting.

Versionamento

  • Versão do documento: 1.0.0
  • Última atualização: 2026-03-04
  • Responsável: Time Dhedalos

Referencial teórico

Base URL: http://localhost:8000/api

Autenticação

  • API Key (api.key): header Authorization: <api_key> — usado na maioria dos endpoints
  • JWT (jwt.auth): header Authorization: Bearer <jwt_token> — usado apenas em POST /api/submissions
  • Evidência: app/Http/Middleware/ApiKeyMiddleware.php, app/Http/Middleware/JwtAuthenticate.php

Exemplo 1 — GET /api/submissions/token

Gera um JWT para autenticação na criação de submissões.

Fonte: app/Http/Controllers/Api/SubmissionController.php — método getToken

Request:

curl --request GET \
--url 'http://localhost:8000/api/submissions/token' \
--header 'Authorization: <API_KEY>'

Response 200:

{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhY3Rpdml0eS1kZWxpdmVyeS1hcGkiLCJpYXQiOjE3MDk1NjA4MDAsImV4cCI6MTcwOTU2NDQwMH0.abc123..."
}

Response 401:

{
"message": "Unauthorized"
}

Exemplo 2 — GET /api/submissions

Lista submissões com filtros opcionais.

Fonte: app/Http/Controllers/Api/SubmissionController.php — método index

Request:

curl --request GET \
--url 'http://localhost:8000/api/submissions?course_id=1&class_id=2&status=submitted' \
--header 'Authorization: <API_KEY>'

Response 200:

[
{
"id": 1,
"participant_id": 100,
"participant_email": "aluno@email.com",
"participant_name": "João Silva",
"activity_id": 5,
"title": "Atividade Estratégica 1",
"class_id": 2,
"class_name": "Turma A",
"course_id": 1,
"course_name": "Curso de Gestão",
"cycle_id": 3,
"facilitator_id": 50,
"facilitator_name": "Maria Santos",
"facilitator_email": "facilitador@email.com",
"status": "submitted",
"score": 0,
"facilitator_comment": null,
"evaluated_at": null,
"created_at": "2026-01-15T10:30:00.000000Z",
"updated_at": "2026-01-15T10:30:00.000000Z",
"deleted_at": null,
"files": [
{
"id": 1,
"deliverable_submission_id": 1,
"file_path": "submissions/abc123.pdf",
"original_name": "trabalho-final.pdf",
"file_type": "application/pdf",
"created_at": "2026-01-15T10:30:00.000000Z",
"updated_at": "2026-01-15T10:30:00.000000Z"
}
]
}
]

Exemplo 3 — POST /api/submissions

Cria nova submissão (requer JWT).

Fonte: app/Http/Controllers/Api/SubmissionController.php — método store

Request:

curl --request POST \
--url 'http://localhost:8000/api/submissions' \
--header 'Authorization: Bearer <JWT_TOKEN>' \
--form 'participant_id=100' \
--form 'participant_email=aluno@email.com' \
--form 'participant_name=João Silva' \
--form 'activity_id=5' \
--form 'title=Atividade Estratégica 1' \
--form 'class_id=2' \
--form 'class_name=Turma A' \
--form 'course_id=1' \
--form 'course_name=Curso de Gestão' \
--form 'cycle_id=3' \
--form 'facilitator_id=50' \
--form 'facilitator_name=Maria Santos' \
--form 'facilitator_email=facilitador@email.com' \
--form 'files[]=@/path/to/trabalho.pdf'

Response 201:

{
"id": 1,
"participant_id": 100,
"activity_id": 5,
"title": "Atividade Estratégica 1",
"status": "submitted",
"files": [
{
"id": 1,
"file_path": "submissions/abc123.pdf",
"original_name": "trabalho.pdf",
"file_type": "application/pdf"
}
]
}

Response 400 (duplicata):

{
"message": "Já existe uma submissão para essa combinação."
}

Exemplo 4 — POST /api/submissions/{id} (Avaliação)

Atualiza status, nota e comentário do facilitador.

Fonte: app/Http/Controllers/Api/SubmissionController.php — método update

Request:

curl --request POST \
--url 'http://localhost:8000/api/submissions/1' \
--header 'Authorization: <API_KEY>' \
--form 'status=evaluated' \
--form 'score=85' \
--form 'facilitator_comment=Bom trabalho, bem estruturado.'

Response 200:

{
"id": 1,
"status": "evaluated",
"score": 85,
"facilitator_comment": "Bom trabalho, bem estruturado.",
"evaluated_at": "2026-01-20T14:00:00.000000Z"
}

Exemplo 5 — DELETE /api/submissions/{id}?action=resend

Solicita reenvio da atividade.

Fonte: app/Http/Controllers/Api/SubmissionController.php — método destroy

Request:

curl --request DELETE \
--url 'http://localhost:8000/api/submissions/1?action=resend' \
--header 'Authorization: <API_KEY>'

Response 200:

{
"message": "Submissão removida com sucesso."
}

Exemplo 6 — POST /api/activity-template-files

Upload de arquivo modelo.

Fonte: app/Http/Controllers/Api/ActivityTemplateFileController.php — método store

Request:

curl --request POST \
--url 'http://localhost:8000/api/activity-template-files' \
--header 'Authorization: <API_KEY>' \
--form 'course_id=1' \
--form 'activity_id=5' \
--form 'cycle_id=3' \
--form 'class_id=2' \
--form 'file=@/path/to/template.docx' \
--form 'description=Modelo para atividade estratégica'

Response 201:

{
"id": 10,
"course_id": 1,
"activity_id": 5,
"cycle_id": 3,
"class_id": 2,
"file_path": "activity-templates/xyz789.docx",
"original_name": "template.docx",
"file_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"description": "Modelo para atividade estratégica"
}

Exemplo 7 — GET /api/submissions/status-sumary

Resumo de pendências por facilitador.

Fonte: app/Http/Controllers/Api/SubmissionController.php — método checkPendingActivityReviews

Request:

curl --request GET \
--url 'http://localhost:8000/api/submissions/status-sumary?facilitator_id=50' \
--header 'Authorization: <API_KEY>'

Response 200:

{
"3": {
"2": {
"pending": 5,
"submitted": 3,
"evaluated": 10
},
"4": {
"pending": 2,
"submitted": 1,
"evaluated": 8
}
}
}

Pendências

  • ⚠️ PENDÊNCIA: Validar formato exato das respostas de erro com base na execução real da API.
  • ⚠️ PENDÊNCIA: Adicionar exemplos de respostas para GET /api/submissions/files (download ZIP).
  • ⚠️ PENDÊNCIA: Confirmar se o campo status-sumary no endpoint é intencional ou typo de status-summary.