Initial commit: IT Nexus Web-App
This commit is contained in:
179
backend/src/models/User.js
Normal file
179
backend/src/models/User.js
Normal file
@@ -0,0 +1,179 @@
|
||||
const { getDatabase } = require('../config/database');
|
||||
|
||||
class User {
|
||||
static getAll() {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
u.id, u.username, u.email, u.first_name, u.last_name,
|
||||
u.is_active, u.must_change_password, u.email_notifications, u.last_login,
|
||||
u.created_at, u.updated_at, u.role_id, u.azure_id,
|
||||
r.name as role_name, r.description as role_description
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
ORDER BY u.created_at DESC
|
||||
`);
|
||||
return stmt.all();
|
||||
}
|
||||
|
||||
static getById(id) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT
|
||||
u.id, u.username, u.email, u.first_name, u.last_name,
|
||||
u.is_active, u.must_change_password, u.email_notifications, u.last_login,
|
||||
u.created_at, u.updated_at, u.role_id, u.azure_id,
|
||||
r.name as role_name, r.description as role_description
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
WHERE u.id = ?
|
||||
`);
|
||||
return stmt.get(id);
|
||||
}
|
||||
|
||||
static getByIdWithPassword(id) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT u.*, r.name as role_name, r.description as role_description
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
WHERE u.id = ?
|
||||
`);
|
||||
return stmt.get(id);
|
||||
}
|
||||
|
||||
static getByUsername(username) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT u.*, r.name as role_name
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
WHERE u.username = ?
|
||||
`);
|
||||
return stmt.get(username);
|
||||
}
|
||||
|
||||
static getByEmail(email) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT u.*, r.name as role_name
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
WHERE u.email = ?
|
||||
`);
|
||||
return stmt.get(email);
|
||||
}
|
||||
|
||||
static getByAzureId(azureId) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
SELECT u.*, r.name as role_name
|
||||
FROM users u
|
||||
LEFT JOIN roles r ON u.role_id = r.id
|
||||
WHERE u.azure_id = ?
|
||||
`);
|
||||
return stmt.get(azureId);
|
||||
}
|
||||
|
||||
static createFromAzure({ azure_id, email, first_name, last_name, username }) {
|
||||
const db = getDatabase();
|
||||
const role = db.prepare("SELECT id FROM roles WHERE name = 'benutzer'").get();
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO users (username, email, password_hash, role_id, first_name, last_name, is_active, must_change_password, azure_id)
|
||||
VALUES (?, ?, 'AZURE_SSO_NO_PASSWORD', ?, ?, ?, 1, 0, ?)
|
||||
`);
|
||||
const result = stmt.run(username, email, role.id, first_name || null, last_name || null, azure_id);
|
||||
return this.getById(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
static create(userData) {
|
||||
const db = getDatabase();
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO users (
|
||||
username, email, password_hash, role_id,
|
||||
first_name, last_name, is_active, must_change_password
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
const result = stmt.run(
|
||||
userData.username,
|
||||
userData.email,
|
||||
userData.password_hash,
|
||||
userData.role_id,
|
||||
userData.first_name || null,
|
||||
userData.last_name || null,
|
||||
userData.is_active !== undefined ? (userData.is_active ? 1 : 0) : 1,
|
||||
userData.must_change_password !== undefined ? (userData.must_change_password ? 1 : 0) : 1
|
||||
);
|
||||
return this.getById(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
static update(id, userData) {
|
||||
const db = getDatabase();
|
||||
const fields = [];
|
||||
const values = [];
|
||||
|
||||
if (userData.username !== undefined) { fields.push('username = ?'); values.push(userData.username); }
|
||||
if (userData.email !== undefined) { fields.push('email = ?'); values.push(userData.email); }
|
||||
if (userData.password_hash !== undefined) { fields.push('password_hash = ?'); values.push(userData.password_hash); }
|
||||
if (userData.role_id !== undefined) { fields.push('role_id = ?'); values.push(userData.role_id); }
|
||||
if (userData.first_name !== undefined) { fields.push('first_name = ?'); values.push(userData.first_name); }
|
||||
if (userData.last_name !== undefined) { fields.push('last_name = ?'); values.push(userData.last_name); }
|
||||
if (userData.is_active !== undefined) { fields.push('is_active = ?'); values.push(userData.is_active ? 1 : 0); }
|
||||
if (userData.must_change_password !== undefined) { fields.push('must_change_password = ?'); values.push(userData.must_change_password ? 1 : 0); }
|
||||
if (userData.azure_id !== undefined) { fields.push('azure_id = ?'); values.push(userData.azure_id); }
|
||||
|
||||
fields.push('updated_at = CURRENT_TIMESTAMP');
|
||||
values.push(id);
|
||||
|
||||
const stmt = db.prepare(`UPDATE users SET ${fields.join(', ')} WHERE id = ?`);
|
||||
stmt.run(...values);
|
||||
return this.getById(id);
|
||||
}
|
||||
|
||||
static delete(id) {
|
||||
const db = getDatabase();
|
||||
const result = db.prepare('DELETE FROM users WHERE id = ?').run(id);
|
||||
return result.changes > 0;
|
||||
}
|
||||
|
||||
static updateLastLogin(id) {
|
||||
const db = getDatabase();
|
||||
db.prepare('UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = ?').run(id);
|
||||
}
|
||||
|
||||
static changePassword(id, passwordHash, mustChange = false) {
|
||||
const db = getDatabase();
|
||||
db.prepare(`
|
||||
UPDATE users SET password_hash = ?, must_change_password = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?
|
||||
`).run(passwordHash, mustChange ? 1 : 0, id);
|
||||
}
|
||||
|
||||
static updateEmailNotifications(id, enabled) {
|
||||
const db = getDatabase();
|
||||
db.prepare('UPDATE users SET email_notifications = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?')
|
||||
.run(enabled ? 1 : 0, id);
|
||||
return this.getById(id);
|
||||
}
|
||||
|
||||
static updateStaffNotifications(id, prefs) {
|
||||
const db = getDatabase();
|
||||
db.prepare(`UPDATE users SET
|
||||
notif_ticket_created = ?,
|
||||
notif_ticket_assigned = ?,
|
||||
notif_new_comment = ?,
|
||||
notif_weekly_report = ?,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?`
|
||||
).run(
|
||||
prefs.notif_ticket_created ? 1 : 0,
|
||||
prefs.notif_ticket_assigned ? 1 : 0,
|
||||
prefs.notif_new_comment ? 1 : 0,
|
||||
prefs.notif_weekly_report ? 1 : 0,
|
||||
id
|
||||
);
|
||||
return this.getById(id);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = User;
|
||||
Reference in New Issue
Block a user