160 lines
5.3 KiB
JavaScript
160 lines
5.3 KiB
JavaScript
const nocodbService = require('../services/nocodb');
|
|
const logger = require('../utils/logger');
|
|
const config = require('../config');
|
|
const { sanitizeUser, extractId } = require('../utils/helpers');
|
|
|
|
class UsersController {
|
|
async getAll(req, res) {
|
|
try {
|
|
// Debug logging
|
|
logger.info('UsersController.getAll called');
|
|
logger.info('loginSheetId from config:', config.nocodb.loginSheetId);
|
|
logger.info('NocoDB config:', {
|
|
apiUrl: config.nocodb.apiUrl,
|
|
hasToken: !!config.nocodb.apiToken,
|
|
projectId: config.nocodb.projectId,
|
|
tableId: config.nocodb.tableId,
|
|
loginSheetId: config.nocodb.loginSheetId
|
|
});
|
|
|
|
if (!config.nocodb.loginSheetId) {
|
|
logger.error('Login sheet not configured in environment');
|
|
return res.status(500).json({
|
|
success: false,
|
|
error: 'Login sheet not configured. Please set NOCODB_LOGIN_SHEET in your environment variables.'
|
|
});
|
|
}
|
|
|
|
logger.info('Fetching users from NocoDB...');
|
|
// Remove the sort parameter that's causing the error
|
|
const response = await nocodbService.getAll(config.nocodb.loginSheetId, {
|
|
limit: 100
|
|
// Removed: sort: '-created_at'
|
|
});
|
|
|
|
const users = response.list || [];
|
|
logger.info(`Retrieved ${users.length} users from database`);
|
|
|
|
// Remove password field from response for security
|
|
const safeUsers = users.map(sanitizeUser);
|
|
|
|
res.json({
|
|
success: true,
|
|
users: safeUsers
|
|
});
|
|
|
|
} catch (error) {
|
|
logger.error('Error fetching users:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to fetch users: ' + error.message
|
|
});
|
|
}
|
|
}
|
|
|
|
async create(req, res) {
|
|
try {
|
|
const { email, password, name, admin } = req.body;
|
|
|
|
if (!email || !password) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Email and password are required'
|
|
});
|
|
}
|
|
|
|
if (!config.nocodb.loginSheetId) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
error: 'Login sheet not configured'
|
|
});
|
|
}
|
|
|
|
// Check if user already exists
|
|
const existingUser = await nocodbService.getUserByEmail(email);
|
|
|
|
if (existingUser) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'User with this email already exists'
|
|
});
|
|
}
|
|
|
|
// Create new user - use the actual column names from your table
|
|
const userData = {
|
|
Email: email,
|
|
email: email,
|
|
Password: password,
|
|
password: password,
|
|
Name: name || '',
|
|
name: name || '',
|
|
Admin: admin === true,
|
|
admin: admin === true
|
|
// Removed created_at fields as they might not exist
|
|
};
|
|
|
|
const response = await nocodbService.create(
|
|
config.nocodb.loginSheetId,
|
|
userData
|
|
);
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: 'User created successfully',
|
|
user: {
|
|
id: extractId(response),
|
|
email: email,
|
|
name: name,
|
|
admin: admin
|
|
}
|
|
});
|
|
|
|
} catch (error) {
|
|
logger.error('Error creating user:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to create user'
|
|
});
|
|
}
|
|
}
|
|
|
|
async delete(req, res) {
|
|
try {
|
|
const userId = req.params.id;
|
|
|
|
if (!config.nocodb.loginSheetId) {
|
|
return res.status(500).json({
|
|
success: false,
|
|
error: 'Login sheet not configured'
|
|
});
|
|
}
|
|
|
|
// Don't allow admins to delete themselves
|
|
if (userId === req.session.userId) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Cannot delete your own account'
|
|
});
|
|
}
|
|
|
|
await nocodbService.delete(
|
|
config.nocodb.loginSheetId,
|
|
userId
|
|
);
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'User deleted successfully'
|
|
});
|
|
|
|
} catch (error) {
|
|
logger.error('Error deleting user:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to delete user'
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new UsersController(); |