fix: Socket.io real-time güncelleme sistemi tamamen düzeltildi
- Socket.IO client modülü oluşturuldu (socketClient.js) - SvelteKit API route'larından Socket.IO event gönderimi için client kullanımı - fuel-slips API'de HTTP fetch yerine Socket.IO client kullanımı - Server'da API event'larını dinleyip broadcast etme eklendi - GoodsManagerContent component'inde Socket.IO dinleyicileri düzeltildi - Dashboard'da Mal Sorumlusu content render düzeltmesi - İbrahim Kara kullanıcısı ve mal sorumlusu kaydı eklendi - Login endpoint'inde goods_manager ID mapping düzeltmesi - fuel-slips/+page.svelte'de eksik fonksiyonlar eklendi - Kapsamlı debug logları tüm Socket.IO işlemlerine eklendi Çalışma prensibi: 1. Yakıt fişi oluşturulduğunda -> api-fuel-slip-assigned -> broadcast fuel-slip-assigned 2. Fiş onaylandığında/reddedildiğinde -> api-fuel-slip-updated -> broadcast fuel-slip-updated 3. Tüm değişiklikler anlık olarak ilgili ekranlarda güncelleniyor
This commit is contained in:
@@ -17,6 +17,9 @@ const io = new Server(server, {
|
||||
}
|
||||
});
|
||||
|
||||
// Export io for use in other modules
|
||||
export { io };
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
// ES Module equivalent of __dirname
|
||||
@@ -93,7 +96,8 @@ async function initializeDatabase() {
|
||||
const users = [
|
||||
{ username: 'admin', password: 'admin123', role: 'admin', full_name: 'Sistem Yöneticisi' },
|
||||
{ username: 'fuel', password: 'fuel123', role: 'fuel_manager', full_name: 'Yakıt Sorumlusu' },
|
||||
{ username: 'goods', password: 'goods123', role: 'goods_manager', full_name: 'Mal Sorumlusu' }
|
||||
{ username: 'goods', password: 'goods123', role: 'goods_manager', full_name: 'Mal Sorumlusu' },
|
||||
{ username: 'ibrahim_kara', password: 'kara123', role: 'goods_manager', full_name: 'İbrahim Kara' }
|
||||
];
|
||||
|
||||
// Her kullanıcıyı kontrol et ve yoksa ekle
|
||||
@@ -139,21 +143,35 @@ app.post('/api/login', async (req, res) => {
|
||||
}
|
||||
|
||||
// Session oluştur
|
||||
req.session.user = {
|
||||
let sessionUser = {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
role: user.role,
|
||||
full_name: user.full_name
|
||||
};
|
||||
|
||||
// Eğer goods_manager ise, goods_managers API'den gerçek ID'yi al
|
||||
if (user.role === 'goods_manager') {
|
||||
try {
|
||||
const goodsManagersRes = await fetch('http://localhost:3000/api/goods-managers');
|
||||
if (goodsManagersRes.ok) {
|
||||
const goodsData = await goodsManagersRes.json();
|
||||
const goodsManager = goodsData.goodsManagers?.find(gm => gm.username === user.username);
|
||||
if (goodsManager) {
|
||||
sessionUser.id = goodsManager.id; // goods_manager ID'sini kullan
|
||||
console.log(`✅ Goods manager logged in: ${user.full_name} (ID: ${goodsManager.id})`);
|
||||
}
|
||||
}
|
||||
} catch (fetchError) {
|
||||
console.warn('⚠️ Could not fetch goods manager ID:', fetchError);
|
||||
}
|
||||
}
|
||||
|
||||
req.session.user = sessionUser;
|
||||
|
||||
res.json({
|
||||
message: 'Giriş başarılı.',
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
role: user.role,
|
||||
full_name: user.full_name
|
||||
}
|
||||
user: sessionUser
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
@@ -189,6 +207,7 @@ app.post('/api/socket-notify', (req, res) => {
|
||||
}
|
||||
|
||||
// Socket.IO ile olay yayınla
|
||||
console.log(`📢 Socket.IO event emitted: ${event}`, data);
|
||||
io.emit(event, data);
|
||||
|
||||
res.json({ message: 'Bildirim gönderildi.' });
|
||||
@@ -210,10 +229,21 @@ app.get('/api/users', (req, res) => {
|
||||
|
||||
// Socket.IO bağlantıları
|
||||
io.on('connection', (socket) => {
|
||||
console.log('Bir kullanıcı bağlandı:', socket.id);
|
||||
console.log('✅ Bir kullanıcı bağlandı:', socket.id);
|
||||
|
||||
// API'den gelen event'ları dinle ve broadcast et
|
||||
socket.on('api-fuel-slip-assigned', (data) => {
|
||||
console.log('📢 API event received: api-fuel-slip-assigned, broadcasting to all clients', data);
|
||||
io.emit('fuel-slip-assigned', data);
|
||||
});
|
||||
|
||||
socket.on('api-fuel-slip-updated', (data) => {
|
||||
console.log('📢 API event received: api-fuel-slip-updated, broadcasting to all clients', data);
|
||||
io.emit('fuel-slip-updated', data);
|
||||
});
|
||||
|
||||
socket.on('disconnect', () => {
|
||||
console.log('Bir kullanıcı ayrıldı:', socket.id);
|
||||
console.log('❌ Bir kullanıcı ayrıldı:', socket.id);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user