Implementação do banco de dados das Turmas e Alunos no Supabase e Refatoração do Modal de Cadastro

This commit is contained in:
2026-06-07 22:48:13 +00:00
parent a31764811b
commit 02d0c6fb86
5 changed files with 1238 additions and 159 deletions
+148
View File
@@ -2097,6 +2097,36 @@ async function initDatabase() {
);
-- Estúdio Musical (Áudio MiniMax)
-- Turmas
CREATE TABLE IF NOT EXISTS escola.turmas (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
usuario_id UUID NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
nome VARCHAR(255) NOT NULL,
sala VARCHAR(255),
periodo VARCHAR(100),
prof_titular VARCHAR(255),
prof_aux1 VARCHAR(255),
prof_aux2 VARCHAR(255),
cuidadora VARCHAR(255),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Alunos
CREATE TABLE IF NOT EXISTS escola.alunos (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
usuario_id UUID NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
turma_id UUID REFERENCES escola.turmas(id) ON DELETE CASCADE,
nome VARCHAR(255) NOT NULL,
apelido VARCHAR(255),
data_nasc DATE,
especial BOOLEAN DEFAULT false,
especial_detalhes TEXT,
pais TEXT,
autorizados TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS escola.estudio_musicas (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
usuario_id UUID NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000',
@@ -4541,6 +4571,124 @@ app.get('*', requireAuth, (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
// ============================================================
// CRUD TURMAS E ALUNOS (MINHA TURMA)
// ============================================================
app.get('/api/turmas', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
try {
const dbRes = await dbPool.query("SELECT * FROM escola.turmas WHERE usuario_id = $1 ORDER BY created_at ASC;", [usuarioId]);
res.json(dbRes.rows);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.post('/api/turmas', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { nome, sala, periodo, profTitular, profAux1, profAux2, cuidadora } = req.body;
if (!nome) return res.status(400).json({ error: 'Nome é obrigatório' });
try {
const dbRes = await dbPool.query(
"INSERT INTO escola.turmas (usuario_id, nome, sala, periodo, prof_titular, prof_aux1, prof_aux2, cuidadora) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *;",
[usuarioId, nome, sala, periodo, profTitular, profAux1, profAux2, cuidadora]
);
res.status(201).json(dbRes.rows[0]);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.put('/api/turmas/:id', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { id } = req.params;
const { nome, sala, periodo, profTitular, profAux1, profAux2, cuidadora } = req.body;
if (!nome) return res.status(400).json({ error: 'Nome é obrigatório' });
try {
const dbRes = await dbPool.query(
"UPDATE escola.turmas SET nome = $1, sala = $2, periodo = $3, prof_titular = $4, prof_aux1 = $5, prof_aux2 = $6, cuidadora = $7 WHERE id = $8 AND usuario_id = $9 RETURNING *;",
[nome, sala, periodo, profTitular, profAux1, profAux2, cuidadora, id, usuarioId]
);
res.json(dbRes.rows[0]);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.delete('/api/turmas/:id', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { id } = req.params;
try {
await dbPool.query("DELETE FROM escola.turmas WHERE id = $1 AND usuario_id = $2;", [id, usuarioId]);
res.json({ success: true });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.get('/api/alunos', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { turma_id } = req.query;
try {
let query = "SELECT * FROM escola.alunos WHERE usuario_id = $1";
let params = [usuarioId];
if (turma_id) {
query += " AND turma_id = $2";
params.push(turma_id);
}
query += " ORDER BY nome ASC;";
const dbRes = await dbPool.query(query, params);
res.json(dbRes.rows);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.post('/api/alunos', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { turma_id, nome, apelido, data_nasc, especial, especial_detalhes, pais, autorizados } = req.body;
if (!nome || !turma_id) return res.status(400).json({ error: 'Nome e Turma são obrigatórios' });
let nascDate = data_nasc ? data_nasc : null;
try {
const dbRes = await dbPool.query(
"INSERT INTO escola.alunos (usuario_id, turma_id, nome, apelido, data_nasc, especial, especial_detalhes, pais, autorizados) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING *;",
[usuarioId, turma_id, nome, apelido, nascDate, especial, especial_detalhes, pais, autorizados]
);
res.status(201).json(dbRes.rows[0]);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.put('/api/alunos/:id', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { id } = req.params;
const { turma_id, nome, apelido, data_nasc, especial, especial_detalhes, pais, autorizados } = req.body;
if (!nome || !turma_id) return res.status(400).json({ error: 'Nome e Turma são obrigatórios' });
let nascDate = data_nasc ? data_nasc : null;
try {
const dbRes = await dbPool.query(
"UPDATE escola.alunos SET turma_id = $1, nome = $2, apelido = $3, data_nasc = $4, especial = $5, especial_detalhes = $6, pais = $7, autorizados = $8 WHERE id = $9 AND usuario_id = $10 RETURNING *;",
[turma_id, nome, apelido, nascDate, especial, especial_detalhes, pais, autorizados, id, usuarioId]
);
res.json(dbRes.rows[0]);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.delete('/api/alunos/:id', requireAuth, async (req, res) => {
const usuarioId = req.cookies.usuario_id || req.headers['user-id'] || '00000000-0000-0000-0000-000000000000';
const { id } = req.params;
try {
await dbPool.query("DELETE FROM escola.alunos WHERE id = $1 AND usuario_id = $2;", [id, usuarioId]);
res.json({ success: true });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`Servidor rodando na porta ${PORT}`);
initDatabase();