154 lines
4.1 KiB
JavaScript
154 lines
4.1 KiB
JavaScript
// controllers/tenantController.js
|
|
// Controller for tenant-related operations
|
|
|
|
// Mock tenant storage - this would be a database in production
|
|
const tenants = [
|
|
{
|
|
id: 'default',
|
|
name: 'Default Tenant',
|
|
subdomain: 'default',
|
|
settings: {
|
|
allowedDomains: ['localhost', 'merchants-of-hope.org'],
|
|
features: ['job-posting', 'resume-uploading', 'application-tracking']
|
|
},
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
}
|
|
];
|
|
|
|
const getTenant = async (req, res) => {
|
|
try {
|
|
const { tenantId } = req.params;
|
|
|
|
// Find the requested tenant
|
|
const tenant = tenants.find(t => t.id === tenantId || t.subdomain === tenantId);
|
|
|
|
if (!tenant) {
|
|
return res.status(404).json({ error: 'Tenant not found' });
|
|
}
|
|
|
|
res.status(200).json({
|
|
tenant: {
|
|
id: tenant.id,
|
|
name: tenant.name,
|
|
subdomain: tenant.subdomain,
|
|
settings: tenant.settings,
|
|
createdAt: tenant.createdAt,
|
|
updatedAt: tenant.updatedAt
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Get tenant error:', error);
|
|
res.status(500).json({ error: 'Internal server error' });
|
|
}
|
|
};
|
|
|
|
const createTenant = async (req, res) => {
|
|
try {
|
|
const { name, subdomain, settings } = req.body;
|
|
|
|
// Validate required fields
|
|
if (!name || !subdomain) {
|
|
return res.status(400).json({ error: 'Name and subdomain are required' });
|
|
}
|
|
|
|
// Check if tenant already exists
|
|
const existingTenant = tenants.find(t => t.subdomain === subdomain || t.name === name);
|
|
if (existingTenant) {
|
|
return res.status(409).json({ error: 'Tenant with this name or subdomain already exists' });
|
|
}
|
|
|
|
// Create new tenant
|
|
const newTenant = {
|
|
id: require('uuid').v4(),
|
|
name,
|
|
subdomain,
|
|
settings: settings || {},
|
|
createdAt: new Date(),
|
|
updatedAt: new Date()
|
|
};
|
|
|
|
tenants.push(newTenant);
|
|
|
|
res.status(201).json({
|
|
message: 'Tenant created successfully',
|
|
tenant: {
|
|
id: newTenant.id,
|
|
name: newTenant.name,
|
|
subdomain: newTenant.subdomain,
|
|
settings: newTenant.settings
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Create tenant error:', error);
|
|
res.status(500).json({ error: 'Internal server error' });
|
|
}
|
|
};
|
|
|
|
const updateTenant = async (req, res) => {
|
|
try {
|
|
const { tenantId } = req.params;
|
|
const { name, settings } = req.body;
|
|
|
|
// Find the tenant to update
|
|
const tenantIndex = tenants.findIndex(t => t.id === tenantId || t.subdomain === tenantId);
|
|
|
|
if (tenantIndex === -1) {
|
|
return res.status(404).json({ error: 'Tenant not found' });
|
|
}
|
|
|
|
// Update tenant properties
|
|
if (name) {
|
|
tenants[tenantIndex].name = name;
|
|
}
|
|
if (settings) {
|
|
tenants[tenantIndex].settings = { ...tenants[tenantIndex].settings, ...settings };
|
|
}
|
|
tenants[tenantIndex].updatedAt = new Date();
|
|
|
|
res.status(200).json({
|
|
message: 'Tenant updated successfully',
|
|
tenant: {
|
|
id: tenants[tenantIndex].id,
|
|
name: tenants[tenantIndex].name,
|
|
subdomain: tenants[tenantIndex].subdomain,
|
|
settings: tenants[tenantIndex].settings,
|
|
updatedAt: tenants[tenantIndex].updatedAt
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Update tenant error:', error);
|
|
res.status(500).json({ error: 'Internal server error' });
|
|
}
|
|
};
|
|
|
|
const deleteTenant = async (req, res) => {
|
|
try {
|
|
const { tenantId } = req.params;
|
|
|
|
// Find the tenant to delete
|
|
const tenantIndex = tenants.findIndex(t => t.id === tenantId || t.subdomain === tenantId);
|
|
|
|
if (tenantIndex === -1) {
|
|
return res.status(404).json({ error: 'Tenant not found' });
|
|
}
|
|
|
|
// In a real implementation, you'd want to also delete all related data
|
|
// For now, we'll just remove the tenant from our mock storage
|
|
tenants.splice(tenantIndex, 1);
|
|
|
|
res.status(200).json({
|
|
message: 'Tenant deleted successfully'
|
|
});
|
|
} catch (error) {
|
|
console.error('Delete tenant error:', error);
|
|
res.status(500).json({ error: 'Internal server error' });
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
getTenant,
|
|
createTenant,
|
|
updateTenant,
|
|
deleteTenant
|
|
}; |