Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EduHub Logo

Typing SVG



🛠 Tecnologias

Node.js Express TypeScript Next.js React PostgreSQL Prisma Discord.js Tailwind CSS

Camada Stack
Backend Node.js · Express · TypeScript · Prisma ORM
Frontend Next.js 15 · React 18 · TypeScript · Tailwind CSS · shadcn/ui
Banco de dados PostgreSQL (Neon)
Bot Discord.js v14
Deploy Railway (backend) · Vercel (frontend)

Como rodar localmente

Pré-requisitos


1. Clone o repositório

git clone https://github.com/Waldevv/eduhub.git
cd eduhub

2. Configure o Backend

cd backend
cp .env.example .env

Edite o .env com suas variáveis (veja a seção Variáveis de Ambiente).

npm install
npx prisma migrate dev   # cria as tabelas no banco
npm run dev              # inicia em http://localhost:3001

3. Configure o Frontend

cd ../frontend

Crie um arquivo .env.local:

NEXT_PUBLIC_API_URL=http://localhost:3001
npm install
npm run dev              # inicia em http://localhost:3000

Variáveis de Ambiente

Backend (backend/.env)

Variável Descrição Exemplo
DATABASE_URL String de conexão PostgreSQL postgresql://user:pass@host/eduhub?sslmode=require
PORT Porta do servidor 3001
JWT_SECRET Segredo para assinatura dos tokens JWT uma_string_aleatoria_longa
DISCORD_CLIENT_ID ID do cliente OAuth da aplicação Discord 123456789012345678
DISCORD_CLIENT_SECRET Secret do cliente OAuth abc123...
DISCORD_REDIRECT_URI URI de callback OAuth http://localhost:3001/api/auth/discord/callback
DISCORD_BOT_TOKEN Token do bot Discord Bot abc123...
FRONTEND_URL URL do frontend (usado em redirects e anúncios) http://localhost:3000

Frontend (frontend/.env.local)

Variável Descrição Exemplo
NEXT_PUBLIC_API_URL URL base da API backend http://localhost:3001

Endpoints da API

Base URL: http://localhost:3001

Todos os endpoints (exceto os marcados como público) exigem header Authorization: Bearer <token>.


Auth — /api/auth

Método Rota Descrição Auth
GET /discord Redireciona para login OAuth do Discord Público
GET /discord/callback Callback OAuth — gera o JWT da sessão Público
POST /complete-profile Completa perfil após primeiro login (define papel: professor/estudante) Sim
GET /me Retorna dados do usuário autenticado Sim

Cursos — /api/courses

Método Rota Descrição Auth
GET /join/:code Busca informações de um curso pelo código de convite Público
POST /join/:code Estudante entra no curso com código de convite Sim
GET / Lista cursos do professor autenticado Sim
GET /:id Retorna detalhes de um curso Sim
POST / Cria um novo curso Sim
PATCH /:id Atualiza dados de um curso Sim
DELETE /:id Remove um curso Sim

Unidades (Aulas) — /api/units

Método Rota Descrição Auth
GET /course/:courseId Lista unidades de um curso Sim
GET /:id Retorna detalhes de uma unidade com blocos Sim
POST / Cria uma nova unidade Sim
PATCH /reorder Reordena unidades em lote Sim
PATCH /:id Atualiza dados de uma unidade Sim
DELETE /:id Remove uma unidade (e canais Discord vinculados) Sim

Blocos — /api/blocks

Método Rota Descrição Auth
GET /unit/:unitId Lista blocos de uma unidade Sim
POST / Cria um novo bloco Sim
PATCH /reorder Reordena blocos em lote Sim
PATCH /:id Atualiza configurações de um bloco Sim
DELETE /:id Remove um bloco Sim

Tipos de bloco: content · activity · exam · interaction · consolidation · evaluation


Quizzes — /api/quizzes

Método Rota Descrição Auth
GET / Lista quizzes criados pelo professor Sim
GET /:id Retorna quiz com questões e opções Sim
POST / Cria um quiz Sim
PATCH /:id Atualiza título/descrição do quiz Sim
DELETE /:id Remove um quiz Sim
POST /:quizId/questions Adiciona questão ao quiz Sim
PATCH /questions/:id Atualiza uma questão Sim
DELETE /questions/:id Remove uma questão Sim
PATCH /:quizId/questions/reorder Reordena questões Sim
POST /questions/:questionId/options Adiciona opção a uma questão Sim
PATCH /options/:id Atualiza uma opção Sim

Estudante — /api/student

Método Rota Descrição Auth
GET /courses Lista cursos nos quais o estudante está matriculado Sim
GET /courses/:id Detalhes do curso com progresso das unidades Sim
GET /units/:id Unidade com blocos e status de progresso/desbloqueio Sim
POST /units/:id/sync-discord Ressincroniza permissões Discord do estudante na unidade Sim
GET /discord-membership/:courseId Verifica se o estudante está no servidor Discord do curso Sim
POST /discord-leave/:courseId Remove o estudante do servidor Discord do curso Sim
POST /blocks/:id/complete Marca um bloco como concluído manualmente Sim
POST /blocks/:id/quiz Envia respostas de quiz e registra progresso Sim
POST /blocks/:id/assignment Envia tarefa (arquivo, texto ou link) Sim

Professor — /api/teacher

Método Rota Descrição Auth
GET /units/:unitId/progress Visão geral do progresso de todos os estudantes na unidade Sim
GET /units/:unitId/students/:studentId Progresso detalhado de um estudante em uma unidade Sim
GET /courses/:courseId/students-progress Progresso de todos os estudantes em todas as unidades do curso Sim
POST /submissions/:id/grade Corrige uma submissão (atribui nota e aprovação) Sim
POST /blocks/:blockId/students/:studentId/grade Atribui nota manual a um estudante em um bloco Sim

Discord — /api/discord

Método Rota Descrição Auth
GET /user-guilds Lista servidores Discord que o professor administra Sim
GET /bot-status/:guildId Verifica se o bot está no servidor e se tem Community ativo Sim
GET /channels/:guildId Lista canais do servidor Discord Sim
GET /server/:courseId Retorna servidor Discord vinculado ao curso Sim
POST /server Vincula um servidor Discord a um curso Sim
DELETE /server/:courseId Desvincula o servidor Discord do curso Sim
POST /server/:courseId/regenerate-invite Gera novo link de convite permanente para o servidor Sim
POST /publish-lesson/:unitId Cria canais Discord para uma unidade (texto, fórum, voz, anúncios) Sim


🗂 Estrutura do Projeto

eduhub/
├── backend/
│   ├── prisma/
│   │   └── schema.prisma       # Modelos do banco de dados
│   └── src/
│       ├── lib/
│       │   ├── discord-bot.ts  # Bot Discord (canais, eventos, permissões)
│       │   └── prisma.ts       # Cliente Prisma singleton
│       ├── middleware/
│       │   └── auth.ts         # Middleware JWT
│       └── routes/             # Rotas da API
└── frontend/
    └── src/
        ├── app/
        │   ├── student/        # Páginas do estudante
        │   └── teacher/        # Páginas do professor
        ├── modules/lessons/    # Componentes de aula
        └── lib/api.ts          # Cliente HTTP para o backend

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages