- Backend: Flask (framework Python leve) ou Django (framework Python completo), fornecendo APIs RESTful.
- Frontend: Vue.js 3 (Composition API), combinado com bibliotecas UI como Element Plus ou Vant.
- Ferramentas de Desenvolvimento: PyCharm (para backend), VS Code (para frontend).
- Banco de Dados: MySQL/PostgreSQL, operado através de SQLAlchemy ou Django ORM.
- Ferramentas Auxiliares: Documentação de API com Swagger, autenticação JWT, notificações em tempo real com WebSocket.
Design dos Módulos Funcionais Principais
Perfis de Usuário
- Estudantes: Matrícula em cursos, envio de trabalhos, visualização de notas.
- Professores: Publicação de cursos, atribuição de trrabalhos, correção de atividades.
- Administradores: Gestão de usuários, gestão de cursos, monitoramento do sistema.
Módulos Funcionais
- Gestão de Cursos: Operações CRUD, categorização de cursos, busca e filtragem.
- Sistema de Matrícula: Verificação de conflitos de horário, limite de vagas.
- Módulo de Trabalhos: Upload de arquivos (armazenamento em OSS), anotações online, lembretes de prazo.
- Estatísticas de Desempenho: Gráficos visuais (Echarts), exportação de dados para Excel.
Implementação Backend (Exemplo com Flask)
Estrutura do Projeto
app/
├── controllers/ # Camada de rotas
├── models/ # Modelos de dados
├── services/ # Lógica de negócio
├── utils/ # Classes utilitárias (JWT, upload OSS)
└── config.py # Arquivo de configuração
Exemplo de API RESTful
# API de matrícula em curso
@app.route('/api/matricula/curso', methods=['POST'])
@jwt_required()
def realizar_matricula():
dados = request.get_json()
# Lógica de validação de conflitos
if verificar_conflito(dados['usuario_id'], dados['curso_id']):
return jsonify({"erro": "Conflito de horário"}), 400
# Operações no banco de dados
matricula = Matricula(usuario_id=dados['usuario_id'], curso_id=dados['curso_id'])
db.session.add(matricula)
db.session.commit()
return jsonify({"mensagem": "Matrícula realizada com sucesso"}), 200
Implementação Frontend (Vue 3 + TypeScript)
Design Componentizado
CartaoCurso.vue: Componente de cartão de curso, exibindo capa, nome e informações do professor.
EnvioTrabalho.vue: Suporte a upload por arrastar e soltar, validação de tipo de arquivo.
GraficoDesempenho.vue: Utilização do Echarts para desenhar gráficos de linha/coluna.
Gestão de Estado (Pinia)
// stores/cursoStore.ts
export const useCursoStore = defineStore('curso', {
state: () => ({
cursos: [] as Curso[],
cursosSelecionados: [] as number[],
}),
actions: {
async buscarCursos() {
const resposta = await api.get('/api/cursos')
this.cursos = resposta.data
}
}
})
Design Chave do Banco de Dados
Tabela de Cursos
CREATE TABLE cursos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
professor_id INT REFERENCES usuarios(id),
max_alunos INT DEFAULT 50,
horario JSON -- Armazenamento de horário (ex: {"dia_semana": 2, "hora_inicio": "14:00"})
);
Tabela de Envios de Trabalhos
CREATE TABLE envios_trabalhos (
id INT AUTO_INCREMENT PRIMARY KEY,
estudante_id INT REFERENCES usuarios(id),
trabalho_id INT REFERENCES trabalhos(id),
url_arquivo VARCHAR(255),
data_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Deploy e Otimização
Deploy em Contêineres
- Backend: Imagem Docker empacotando aplicação Flask/Django, execução multiprocesso com Gunicorn.
- Frontend: Recursos estáticos servidos por Nginx, configuração HTTPS (Let's Encrypt).
Otimização de Desempenho
- Cache: Redis para dados de cursos populares.
- Tarefas assíncronas: Celery para operações demoradas como correção de trabalhos.
- CDN: Distribuição de recursos frontend via CDN da Alibaba/Tencent Cloud.
Sugestões de Funcionalidades Expandidas
- Interação em Tempo Real: Integração de WebSocket para sala de chat em aula.
- Testes Automatizados: Pytest (backend), Jest (frontend).
- Arquitetura de Microsserviços: Divisão do módulo de trabalhos em serviço independente (Flask + gRPC).
Rota Tecnológica de Desenvolvimento
- Linguagem: Python
- Framework: flask/django
- Software: PyCharm/vscode
- Banco de Dados: mysql
- Ferramenta de BD: Navicat for mysql
- Framework Frontend: vue.js
- Versão MySQL: qualquer versão