feat: adicionar gerenciamento de clínicas e tokens
This commit is contained in:
@@ -48,7 +48,10 @@ router.post('/login', async (req, res) => {
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
email: user.email
|
||||
email: user.email,
|
||||
clinic_name: user.clinic_name,
|
||||
pc_name: user.pc_name,
|
||||
is_admin: user.is_admin
|
||||
}
|
||||
});
|
||||
|
||||
@@ -85,7 +88,10 @@ router.get('/verify', async (req, res) => {
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
email: user.email
|
||||
email: user.email,
|
||||
clinic_name: user.clinic_name,
|
||||
pc_name: user.pc_name,
|
||||
is_admin: user.is_admin
|
||||
}
|
||||
});
|
||||
|
||||
@@ -109,13 +115,17 @@ router.post('/logout', (req, res) => {
|
||||
// POST /api/auth/create-user - Criar usuário (admin only)
|
||||
// ================================================================
|
||||
|
||||
router.post('/create-user', async (req, res) => {
|
||||
router.post('/create-user', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
const { username, email, password } = req.body;
|
||||
if (!req.user.is_admin) {
|
||||
return res.status(403).json({ error: 'Apenas administradores podem criar usuários' });
|
||||
}
|
||||
|
||||
const { username, email, password, clinic_name, pc_name } = req.body;
|
||||
|
||||
if (!username || !email || !password) {
|
||||
return res.status(400).json({
|
||||
error: 'Todos os campos são obrigatórios'
|
||||
error: 'Username, email e senha são obrigatórios'
|
||||
});
|
||||
}
|
||||
|
||||
@@ -136,9 +146,9 @@ router.post('/create-user', async (req, res) => {
|
||||
|
||||
// Criar usuário
|
||||
const result = await db.run(
|
||||
`INSERT INTO users (username, email, password_hash, created_at)
|
||||
VALUES (?, ?, ?, NOW())`,
|
||||
[username, email, passwordHash]
|
||||
`INSERT INTO users (username, email, password_hash, clinic_name, pc_name, created_at)
|
||||
VALUES (?, ?, ?, ?, ?, NOW())`,
|
||||
[username, email, passwordHash, clinic_name || null, pc_name || null]
|
||||
);
|
||||
|
||||
res.json({
|
||||
@@ -153,6 +163,54 @@ router.post('/create-user', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// ================================================================
|
||||
// GERENCIAMENTO DE USUÁRIOS/CLÍNICAS (ADMIN)
|
||||
// ================================================================
|
||||
|
||||
router.get('/users', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
if (!req.user.is_admin) {
|
||||
return res.status(403).json({ error: 'Acesso negado' });
|
||||
}
|
||||
const users = await db.all('SELECT id, username, email, clinic_name, pc_name, is_admin, created_at FROM users ORDER BY created_at DESC');
|
||||
res.json({ success: true, users });
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: 'Erro ao buscar usuários' });
|
||||
}
|
||||
});
|
||||
|
||||
router.delete('/users/:id', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
if (!req.user.is_admin) {
|
||||
return res.status(403).json({ error: 'Acesso negado' });
|
||||
}
|
||||
const userId = req.params.id;
|
||||
if (parseInt(userId) === req.user.id) {
|
||||
return res.status(400).json({ error: 'Não é possível excluir o próprio usuário admin' });
|
||||
}
|
||||
await db.run('DELETE FROM users WHERE id = ?', [userId]);
|
||||
res.json({ success: true, message: 'Usuário excluído com sucesso' });
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: 'Erro ao excluir usuário' });
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/users/:id/token', authenticateToken, async (req, res) => {
|
||||
try {
|
||||
if (!req.user.is_admin) {
|
||||
return res.status(403).json({ error: 'Acesso negado' });
|
||||
}
|
||||
const user = await db.get('SELECT * FROM users WHERE id = ?', [req.params.id]);
|
||||
if (!user) return res.status(404).json({ error: 'Usuário não encontrado' });
|
||||
|
||||
// Gera um token com duração longa para uso no desktop (ex: 3650 dias = ~10 anos)
|
||||
const token = generateToken(user, '3650d');
|
||||
res.json({ success: true, token });
|
||||
} catch (error) {
|
||||
res.status(500).json({ error: 'Erro ao gerar token' });
|
||||
}
|
||||
});
|
||||
|
||||
// ================================================================
|
||||
// PUT /api/auth/update-credentials - Alterar usuário/senha
|
||||
// ================================================================
|
||||
|
||||
Reference in New Issue
Block a user