Plataforma de Gestão de Recursos Educativos
A plataforma depende de vários serviços para funcionar corretamente - uma web app feita em Elixir com Phoenix e uma base de dados em PostgreSQL.
Como tal, o grupo decidiu criar um setup com recurso a Docker e Docker Compose.
[!NOTE] Caso pretenda utilizar a autenticação via Google, é necessária a criação de uma aplicação no Google Developers.
cp .env.dev.sample .env.dev # Copiar o ficheiro de configuração (poderá ser necessário alterar localhost para db em DB_HOST)
docker-compose -f docker-compose.dev.yml -f {linux,darwin,windows}.yml up
Atenção na escolha do segundo ficheiro, pois o mesmo é dependente do sistema operativo que está a ser utilizado.
É, ainda possível, levantar apenas um container com a base de dados, utilizando a web app em modo local.
docker-compose -f docker-compose.dev.yml -f {linux,darwin,windows}.yml up db
cp .env.dev.sample .env.dev # Copiar o ficheiro de configuração
mix setup # Instalar as dependências
mix ecto.create # Cria a base de dados
mix ecto.migrate # Cria as tabelas
mix ecto.seed # Preenche a base de dados com dados de exemplo
mix phx.server # Iniciar a web app
Estrutura do modelo de um utilizador:
User: {
email: string
hashed_password: string
avatar: string
handle: string
first_name :string
last_name: string
course: string
university: string
role: string
confirmed_at :datetime
active: boolean
}
Daqui depreende-se que um utilizador tem um email, uma password, um avatar, um handle, um primeiro nome, um último nome, um curso, uma universidade, um papel, uma data de confirmação e um estado de ativação.
Esta data de confirmação é utilizada para verificar se o utilizador confirmou o seu email.
O estado de ativação é utilizado para verificar se o utilizador está ativo ou não. Inicialmente, para verificar se o mesmo já terminou o seu registo, preenchendo campos como o primeiro nome, o último nome, o curso e a universidade, etc.
![]() |
---|
Página de perfil de um utilizador |
![]() |
---|
Página de definições de um utilizador |
![]() |
---|
Aba 'Dev' da página de definições de um utilizador |
![]() |
---|
Feed principal da aplicação |
Estrutura do modelo de um recurso educativo:
Resource: {
title: string
description: string
type: string (book | article | notes | code | worksheet ...)
date: date
visibility: string (public | private)
root_directory_id: uuid
... # outros relacionamentos
}
Daqui depreende-se que um recurso educativo tem um título, uma descrição, um tipo, uma data, uma visibilidade e uma diretoria raiz. Esta diretoria é uploaded pelo utilizador aquando da criação do recurso educativo. Foi criado, também, um mapeamento na base de dados para diretorias e ficheiros de um recurso, de forma que seja possível fazer uma listagem dos mesmos.
Para além da criação simples, através de um formulário, de um recurso, é também possível a criação de múltiplos recursos através do uso de um ficheiro .json
.
![]() |
---|
Criação de um único recurso |
![]() |
---|
Criação de múltiplos recursos |
![]() |
---|
Página de um recurso |
Estrutura do modelo de um anúncio:
Announcement: {
title: string
body: string
}
![]() |
---|
Página de um anúncio |
![]() |
---|
Página de gestão de utilizadores da plataforma |
![]() |
---|
Página de gestão de recursos educativos da plataforma |
![]() |
---|
Página de gestão de anúncios da plataforma |
![]() |
---|
Página de gestão de posts da plataforma |
![]() |
---|
Página de gestão de tags da plataforma |
O grupo decidiu criar uma API REST para a plataforma, de forma que seja possível a integração com outras aplicações. Esta API é acessível com recurso a uma chave que pode ser gerada na página de definições de um utilizador.
Headers necessários:
Authorization: <token>
Este token pode ser obtido a partir das definições do utilizador na página de desenvolvimento.
GET /api
- Endpoint mostrar estado da API (não é necessário token)GET /api/test
- Endpoint testar validade tokenGET /api/myself
- Endpoint ver utilizador associado ao tokenGET /api/users/:id
- Endpoint ver utilizador com id
GET /api/resources
- Endpoint listar todos os recursosGET /api/resources/:id
- Endpoint ver informações recursoPOST /api/resources/
- Endpoint publicar recurso (enviar recurso com multipart)GET /api/tags
- Endpoint listar todas as tagsGET /api/tags/:id
- Endpoint ver informações de uma tagGET /api/announcements
- Endpoint listar todos os anúnciosGET /api/announcements/:id
- Endpoint ver informações de um anúncioTodos estes endpoints só estão disponíveis caso o utilizador associado ao token seja um administrador.
GET /api/users
- Endpoint listar todos os utilizadoresPOST /api/tags
- Endpoint criar uma tagPUT /api/tags/:id
- Endpoint editar uma tagDELETE /api/tags/:id
- Endpoint apagar uma tagPOST /api/announcements
- Endpoint criar um anúncioPUT /api/announcements/:id
- Endpoint editar um anúncioDELETE /api/announcements/:id
- Endpoint apagar um anúncio.json
, acessível apenas por administradores