Implementação do banco de dados das Turmas e Alunos no Supabase e Refatoração do Modal de Cadastro
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user