Dealer_Onboarding_Backend/controllers/outletController.js

185 lines
4.0 KiB
JavaScript

const { Outlet, User, Resignation } = require('../models');
// Get all outlets for logged-in dealer
exports.getOutlets = async (req, res) => {
try {
const where = {};
if (req.user.role === 'Dealer') {
where.dealerId = req.user.id;
}
const outlets = await Outlet.findAll({
where,
include: [
{
model: User,
as: 'dealer',
attributes: ['name', 'email']
},
{
model: Resignation,
as: 'resignations',
required: false,
where: {
status: { [Op.notIn]: ['Completed', 'Rejected'] }
}
}
],
order: [['createdAt', 'DESC']]
});
res.json({
success: true,
outlets
});
} catch (error) {
console.error('Get outlets error:', error);
res.status(500).json({
success: false,
message: 'Error fetching outlets'
});
}
};
// Get specific outlet details
exports.getOutletById = async (req, res) => {
try {
const { id } = req.params;
const outlet = await Outlet.findByPk(id, {
include: [{
model: User,
as: 'dealer',
attributes: ['name', 'email', 'phone']
}]
});
if (!outlet) {
return res.status(404).json({
success: false,
message: 'Outlet not found'
});
}
// Check if dealer can access this outlet
if (req.user.role === 'Dealer' && outlet.dealerId !== req.user.id) {
return res.status(403).json({
success: false,
message: 'Access denied'
});
}
res.json({
success: true,
outlet
});
} catch (error) {
console.error('Get outlet error:', error);
res.status(500).json({
success: false,
message: 'Error fetching outlet'
});
}
};
// Create new outlet (admin only)
exports.createOutlet = async (req, res) => {
try {
const {
dealerId,
code,
name,
type,
address,
city,
state,
pincode,
establishedDate,
latitude,
longitude
} = req.body;
// Validate required fields
if (!dealerId || !code || !name || !type || !address || !city || !state) {
return res.status(400).json({
success: false,
message: 'Missing required fields'
});
}
// Check if code already exists
const existing = await Outlet.findOne({ where: { code } });
if (existing) {
return res.status(400).json({
success: false,
message: 'Outlet code already exists'
});
}
const outlet = await Outlet.create({
dealerId,
code,
name,
type,
address,
city,
state,
pincode,
establishedDate,
latitude,
longitude
});
res.status(201).json({
success: true,
message: 'Outlet created successfully',
outletId: outlet.id
});
} catch (error) {
console.error('Create outlet error:', error);
res.status(500).json({
success: false,
message: 'Error creating outlet'
});
}
};
// Update outlet
exports.updateOutlet = async (req, res) => {
try {
const { id } = req.params;
const { name, address, city, state, pincode, status, latitude, longitude } = req.body;
const outlet = await Outlet.findByPk(id);
if (!outlet) {
return res.status(404).json({
success: false,
message: 'Outlet not found'
});
}
await outlet.update({
name: name || outlet.name,
address: address || outlet.address,
city: city || outlet.city,
state: state || outlet.state,
pincode: pincode || outlet.pincode,
status: status || outlet.status,
latitude: latitude || outlet.latitude,
longitude: longitude || outlet.longitude,
updatedAt: new Date()
});
res.json({
success: true,
message: 'Outlet updated successfully'
});
} catch (error) {
console.error('Update outlet error:', error);
res.status(500).json({
success: false,
message: 'Error updating outlet'
});
}
};