Skip to content

SuggestClasses - Sistema de Sugestão de Horários para o BSI/UFRN.

License

Notifications You must be signed in to change notification settings

labens-ufrn/suggestclasses

Repository files navigation

SuggestClasses by LABENS/UFRN

Sistema de Sugestão de Horários para o BSI/UFRN.

Lista de Requisitos Funcionais

O sistema SuggestClasses terá o cadastro de sugestões de horários para turmas de componentes curriculares de um curso em um certo período. Também manterá o horário aprovado das turmas e exibirá relatórios de horários para professores, alunos, por sala e por período.

Os requisitos funcionais detalhados estão na página wiki Requisitos Funcionais.

Na página Documentação temos os detalhes do projeto e a lista de documentos.

Pré-requisitos

O sistema atualmente utiliza o SGBD PostgreSQL para armazenar os dados, e é desenvolvido com o Django framework e Python 3. Utilizamos o Docker e docker-compose para deploy e execução no servidor. Inicialmente o SGBD era o MariaDB e sua configuração está aqui!.

Criação do Banco de Dados

Utilzamos o SGBD PostgreSQL para armazenar os dados. Você pode utilizar o Docker para executar o PostgreSQL + pgAdmin.

Crie o usuário de acesso ao banco de dados:

CREATE ROLE sc_user WITH
	LOGIN
	NOSUPERUSER
	NOCREATEDB
	NOCREATEROLE
	NOINHERIT
	NOREPLICATION
	CONNECTION LIMIT -1
	PASSWORD 'xxxxxx';

Crie o banco de dados com Collate pt_BR (Configuração do Locale pt_BR no seu container):

CREATE DATABASE scdb_dev
    WITH
    OWNER = sc_user
    ENCODING = 'UTF8'
    LC_COLLATE = 'pt_BR.utf8'
    LC_CTYPE = 'pt_BR.utf8'
    TABLESPACE = pg_default
    TEMPLATE= template0
    CONNECTION LIMIT = -1;

Defina as permissions e privilégios do Usuário:

GRANT ALL PRIVILEGES ON DATABASE scdb_dev TO sc_user;
GRANT ALL ON SCHEMA public TO sc_user;

Ambiente Virtual

Criação do Ambiente Virtual com python3-venv:

python3 -m venv .venv

Para ativar: source venv/bin/activate. Para desativar: deactivate.

Copie os exemplos destes arquivos no diretório raiz do projeto:

cp .env.sample .env
cp path.env.sample path.env

Edite o arquivo path.env para informar as variáveis:

export DJANGO_SETTINGS_MODULE=suggestclasses.settings
export PYTHONPATH=${PYTHONPATH}:/home/<seu_diretorio>/suggestclasses

Após editar os valores, execute os comandos:

source .env
source path.env

Execução do Projeto

Ative o ambiente virtual e instale as depedências.

source .venv/bin/activate
pip install -r requirements.txt

Atualize os arquivos estáticos.

python manage.py collectstatic

Se houver modificações nos models (em models.py), execute a criação das migrações. Depois execute as migrações.

python3 manage.py makemigrations core
python3 manage.py migrate

Crie um super usuário de administração do Django.

python manage.py createsuperuser

Execute o sistema.

python manage.py runserver

Lembre-se: O SGBD deve estar em execução e configure o acesso no arquivo .env.

Povoamento

O sistema é baseado nos dados abertos da UFRN, desta forma é necessário povoar o banco de dados com informações de Horários, Centro, Salas, Departamentos, Componentes, etc.

Lembre-se de deixar todas as variáveis de ambiente definidas. Execute o comando source path.env no Linux ou activate path.env no Windows para carregar as variáveis.

A ordem é importante e deve ser seguida conforme descrito abaixo.

Criar Grupos e Permissões

Deve-se rodar, na raiz do projeto, o script povoar_grupos.py na pasta dados.

python dados/povoar_grupos.py

Criar base de horários da UFRN

Deve-se rodar, na raiz do projeto, o script povoar_horarios.py na pasta dados.

python dados/povoar_horarios.py

Criar o restante da base de Dados

Os scripts seguintes farão o povoamento do restante da base.

python dados/baixar_dados.py
python dados/povoar.py
python dados/povoar_organizacao_curricular.py

Para atualizar a base, devem-ser deletados os csv's antigos e executar novamente os scripts.

Testes

Rodar os testes mantendo o banco de testes:

python manage.py test --keepdb core/

Devemos acrescentar nas classes de testes:

import django
django.setup()

Configurações executar os testes:

export DJANGO_SETTINGS_MODULE=suggestclasses.settings
python manage.py test

Executar os Testes de Unidade e Cobertura

Utilizando o Cobetura

Primeiro defina a varíavel de ambiente: export DJANGO_SETTINGS_MODULE=projectname.settings.

Depois instale o coverage e rode para ele gerar o arquivo coverage.xml.

pip install coverage
coverage run -m unittest discover
coverage xml

Se usar coverage html, ele gera o relatório em html.

Utilizando Nose (desativado)

pip install nose
pip install coverage
export DJANGO_SETTINGS_MODULE=suggestclasses.settings
nosetests --with-xunit
nosetests --with-coverage --cover-package=core --cover-branches --cover-xml

Executar o Sonar

sonar-scanner \
  -Dsonar.projectKey=suggestclasses \
  -Dsonar.organization=labens-github \
  -Dsonar.sources=. \
  -Dsonar.host.url=https://sonarcloud.io \
  -Dsonar.login=02254c57898053f6e25acfb70756ef6f840d4d35

Rodando o projeto usando Docker e Docker Compose

Tenha certeza que o Docker e o Docker Compose estão instalados em sua máquina. Caso contrário, Instalando o Docker e Instalando Docker Compose.

Rode os seguintes comandos para criar as imagens.

docker build .
docker-compose build

Para rodar o projeto rode o seguinte comando.

docker-compose up

Se preferir iniciar apenas o container do mariadb para rodar o projeto do suggestclasses fora de um container, use o comando.

docker-compose up -d mariadb

Para desativar os containers, digite o seguinte comando.

docker-compose down

Outras Configurações

  • Arquivo .editorconfig de estilo de codificação adicionado.

Tabela com horários de aula

Matutino Vespertino Noturno
M1 – 07h00 às 07h50 T1 – 13h00 às 13h50 N1 – 18h45 às 19h35
M2 – 07h50 às 08h40 T2 – 13h50 às 14h40 N2 – 19h35 às 20h25
M3 – 08h55 às 09h45 T3 – 14h55 às 15h45 N3 – 20h35 às 21h25
M4 – 09h45 às 10h35 T4 – 15h45 às 16h35 N4 – 21h25 às 22h15
M5 – 10h50 às 11h40 T5 – 16h50 às 17h40
M6 – 11h40 às 12h30 T6 – 17h40 às 18h30

Links