# Avaliador Sistema para avaliar códigos de forma automatizada. ## Como funciona A ideia central é executar códigos e comparar a saída da execução com o que é esperado a ser produzido, para vários pares entrada-saída preparados anteriormente. Já que só precisa executar o código e ver a saída que produz, o funcionamento é praticamente o mesmo para qualquer linguagem de programação. E considerando também as questões de segurança que podem surgir, este sistema utilizará containers Docker para executar os códigos. ## Docker Por utilizar Docker, o ambiente será controlado e isolado, permitindo algum nível de segurança neste sistema. As imagens serão construídas de forma a que dentro do container seja um usuário comum a executar o código. Além disso é possível limitar uso de CPU e Memória, além de instituir um tempo máximo (timeout) de execução caso ocorra uma situação de programa que nunca finaliza sua execução. # Arquitetura O sistema é dividido nas seguintes partes: - Banco de dados: MongoDB - Usuários - Exercícios e seus pares entrada-saída - Avaliação de um código: status e feedback - Backend: API NodeJS - Cadastrar Exercícios com pares entrada-saída de execução - Gerenciar avaliação do código (Rota que agenda, obtêm status, etc... da avaliação de um código específico) - Frontend: Site NextJS - Autenticar como usuário - Listar códigos enviados em cada exercício e seus feedbacks - Enviar código para ser avaliado em exercício específico apt-get install build-essential