perosnel işlemleri change
This commit is contained in:
350
src/server.js
350
src/server.js
@@ -7,6 +7,63 @@ import bcrypt from 'bcrypt';
|
||||
import { promises as fs } from 'fs';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { dirname, join } from 'path';
|
||||
import {
|
||||
getGoodsManagers,
|
||||
addGoodsManager,
|
||||
updateGoodsManager,
|
||||
deleteGoodsManager
|
||||
} from './lib/data/goodsManagers.js';
|
||||
|
||||
// Units veritabanı
|
||||
let units = [
|
||||
{
|
||||
id: 1,
|
||||
name: '1. Motorlu Piyade Tugayı',
|
||||
address: 'Mecidiyeköy, Şişli/İstanbul',
|
||||
stk: 'STK-12345',
|
||||
btk: 'BTK-67890',
|
||||
commander: {
|
||||
full_name: 'Mehmet Yılmaz',
|
||||
rank: 'Yüzbaşı',
|
||||
registration_number: '123456',
|
||||
tc_kimlik: '12345678901',
|
||||
phone: '05321234567'
|
||||
},
|
||||
created_at: new Date().toISOString()
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: '2. Zırhlı Tabur',
|
||||
address: 'Havran, Balıkesir',
|
||||
stk: 'STK-54321',
|
||||
btk: 'BTK-09876',
|
||||
commander: {
|
||||
full_name: 'Ali Kaya',
|
||||
rank: 'Binbaşı',
|
||||
registration_number: '654321',
|
||||
tc_kimlik: '98765432109',
|
||||
phone: '05337654321'
|
||||
},
|
||||
created_at: new Date().toISOString()
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: '3. Komutanlık',
|
||||
address: 'Çankaya, Ankara',
|
||||
stk: 'STK-11111',
|
||||
btk: 'BTK-22222',
|
||||
commander: {
|
||||
full_name: 'Hasan Demir',
|
||||
rank: 'Üsteğmen',
|
||||
registration_number: '111111',
|
||||
tc_kimlik: '11111111111',
|
||||
phone: '05321111111'
|
||||
},
|
||||
created_at: new Date().toISOString()
|
||||
}
|
||||
];
|
||||
|
||||
let nextUnitId = 4;
|
||||
|
||||
const app = express();
|
||||
const server = createServer(app);
|
||||
@@ -20,7 +77,7 @@ const io = new Server(server, {
|
||||
// Export io for use in other modules
|
||||
export { io };
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
const PORT = process.env.PORT || 3002;
|
||||
|
||||
// ES Module equivalent of __dirname
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
@@ -254,6 +311,297 @@ app.get('/api/users', (req, res) => {
|
||||
});
|
||||
});
|
||||
|
||||
// Units API endpoint'leri
|
||||
|
||||
// GET - Tüm birlikleri listele
|
||||
app.get('/api/units', (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
res.json({ units });
|
||||
});
|
||||
|
||||
// POST - Yeni birlik ekle
|
||||
app.post('/api/units', (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const {
|
||||
name,
|
||||
address,
|
||||
stk,
|
||||
btk,
|
||||
commander
|
||||
} = req.body;
|
||||
|
||||
// Validasyon
|
||||
if (!name || !address || !stk || !btk || !commander) {
|
||||
return res.status(400).json({ message: 'Tüm alanlar zorunludur.' });
|
||||
}
|
||||
|
||||
// Komutan validasyonu
|
||||
const { full_name, rank, registration_number, tc_kimlik, phone } = commander;
|
||||
if (!full_name || !rank || !registration_number || !tc_kimlik || !phone) {
|
||||
return res.status(400).json({ message: 'Birlik sorumlusunun tüm bilgileri zorunludur.' });
|
||||
}
|
||||
|
||||
// TC Kimlik numarası validasyonu
|
||||
if (!/^[0-9]{11}$/.test(tc_kimlik)) {
|
||||
return res.status(400).json({ message: 'TC Kimlik numarası 11 haneli olmalıdır.' });
|
||||
}
|
||||
|
||||
// Yeni birlik oluştur
|
||||
const newUnit = {
|
||||
id: nextUnitId++,
|
||||
name: name.trim(),
|
||||
address: address.trim(),
|
||||
stk: stk.trim().toUpperCase(),
|
||||
btk: btk.trim().toUpperCase(),
|
||||
commander: {
|
||||
full_name: full_name.trim(),
|
||||
rank: rank.trim(),
|
||||
registration_number: registration_number.trim(),
|
||||
tc_kimlik: tc_kimlik.trim(),
|
||||
phone: phone.trim()
|
||||
},
|
||||
created_at: new Date().toISOString()
|
||||
};
|
||||
|
||||
units.push(newUnit);
|
||||
|
||||
res.json({
|
||||
message: 'Birlik başarıyla eklendi.',
|
||||
unit: newUnit
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// PUT - Birlik güncelle
|
||||
app.put('/api/units', (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const {
|
||||
id,
|
||||
name,
|
||||
address,
|
||||
stk,
|
||||
btk,
|
||||
commander
|
||||
} = req.body;
|
||||
|
||||
// Validasyon
|
||||
if (!id || !name || !address || !stk || !btk || !commander) {
|
||||
return res.status(400).json({ message: 'Tüm alanlar zorunludur.' });
|
||||
}
|
||||
|
||||
// Komutan validasyonu
|
||||
const { full_name, rank, registration_number, tc_kimlik, phone } = commander;
|
||||
if (!full_name || !rank || !registration_number || !tc_kimlik || !phone) {
|
||||
return res.status(400).json({ message: 'Birlik sorumlusunun tüm bilgileri zorunludur.' });
|
||||
}
|
||||
|
||||
// TC Kimlik numarası validasyonu
|
||||
if (!/^[0-9]{11}$/.test(tc_kimlik)) {
|
||||
return res.status(400).json({ message: 'TC Kimlik numarası 11 haneli olmalıdır.' });
|
||||
}
|
||||
|
||||
// Birlik bul
|
||||
const unitIndex = units.findIndex(u => u.id === parseInt(id));
|
||||
if (unitIndex === -1) {
|
||||
return res.status(404).json({ message: 'Birlik bulunamadı.' });
|
||||
}
|
||||
|
||||
// Birlik güncelle
|
||||
units[unitIndex] = {
|
||||
...units[unitIndex],
|
||||
name: name.trim(),
|
||||
address: address.trim(),
|
||||
stk: stk.trim().toUpperCase(),
|
||||
btk: btk.trim().toUpperCase(),
|
||||
commander: {
|
||||
full_name: full_name.trim(),
|
||||
rank: rank.trim(),
|
||||
registration_number: registration_number.trim(),
|
||||
tc_kimlik: tc_kimlik.trim(),
|
||||
phone: phone.trim()
|
||||
}
|
||||
};
|
||||
|
||||
res.json({
|
||||
message: 'Birlik başarıyla güncellendi.',
|
||||
unit: units[unitIndex]
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// DELETE - Birlik sil
|
||||
app.delete('/api/units', (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const { id } = req.body;
|
||||
|
||||
if (!id) {
|
||||
return res.status(400).json({ message: 'Birlik ID zorunludur.' });
|
||||
}
|
||||
|
||||
// Birlik bul
|
||||
const unitIndex = units.findIndex(u => u.id === parseInt(id));
|
||||
if (unitIndex === -1) {
|
||||
return res.status(404).json({ message: 'Birlik bulunamadı.' });
|
||||
}
|
||||
|
||||
// Birlik sil
|
||||
const deletedUnit = units.splice(unitIndex, 1)[0];
|
||||
|
||||
res.json({
|
||||
message: 'Birlik başarıyla silindi.',
|
||||
unit: deletedUnit
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// Goods Managers API endpoint'leri
|
||||
|
||||
// GET - Tüm mal sorumlularını listele
|
||||
app.get('/api/goods-managers', (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
try {
|
||||
const goodsManagers = getGoodsManagers();
|
||||
res.json({ goodsManagers });
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: 'Mal sorumluları alınırken hata oluştu.' });
|
||||
}
|
||||
});
|
||||
|
||||
// POST - Yeni mal sorumlusu ekle
|
||||
app.post('/api/goods-managers', async (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const {
|
||||
full_name,
|
||||
rank,
|
||||
registration_number,
|
||||
tc_kimlik,
|
||||
phone,
|
||||
unit_id,
|
||||
username,
|
||||
password,
|
||||
is_active = true
|
||||
} = req.body;
|
||||
|
||||
const newManager = addGoodsManager({
|
||||
full_name,
|
||||
rank,
|
||||
registration_number,
|
||||
tc_kimlik,
|
||||
phone,
|
||||
unit_id,
|
||||
unit_name: units.find(u => u.id === parseInt(unit_id))?.name || 'Bilinmeyen Birlik',
|
||||
username,
|
||||
password,
|
||||
is_active
|
||||
});
|
||||
|
||||
res.json({
|
||||
message: 'Personel başarıyla eklendi.',
|
||||
goodsManager: newManager
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
if (error.message.includes('zorunludur') ||
|
||||
error.message.includes('zaten kayıtlı') ||
|
||||
error.message.includes('Geçersiz') ||
|
||||
error.message.includes('karakter')) {
|
||||
return res.status(400).json({ message: error.message });
|
||||
}
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// PUT - Mal sorumlusu güncelle
|
||||
app.put('/api/goods-managers', async (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const {
|
||||
id,
|
||||
full_name,
|
||||
rank,
|
||||
registration_number,
|
||||
tc_kimlik,
|
||||
phone,
|
||||
unit_id,
|
||||
username,
|
||||
password,
|
||||
is_active
|
||||
} = req.body;
|
||||
|
||||
const updatedManager = updateGoodsManager(id, {
|
||||
full_name,
|
||||
rank,
|
||||
registration_number,
|
||||
tc_kimlik,
|
||||
phone,
|
||||
unit_id,
|
||||
unit_name: units.find(u => u.id === parseInt(unit_id))?.name || 'Bilinmeyen Birlik',
|
||||
username,
|
||||
password,
|
||||
is_active
|
||||
});
|
||||
|
||||
res.json({
|
||||
message: 'Personel başarıyla güncellendi.',
|
||||
goodsManager: updatedManager
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
if (error.message.includes('zorunludur') ||
|
||||
error.message.includes('bulunamadı') ||
|
||||
error.message.includes('zaten kayıtlı') ||
|
||||
error.message.includes('Geçersiz') ||
|
||||
error.message.includes('karakter')) {
|
||||
return res.status(error.message.includes('bulunamadı') ? 404 : 400).json({ message: error.message });
|
||||
}
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// DELETE - Mal sorumlusu sil
|
||||
app.delete('/api/goods-managers', async (req, res) => {
|
||||
// Yetki kontrolü (temporary - will be implemented with proper session)
|
||||
|
||||
try {
|
||||
const { id } = req.body;
|
||||
|
||||
if (!id) {
|
||||
return res.status(400).json({ message: 'Mal sorumlusu ID zorunludur.' });
|
||||
}
|
||||
|
||||
const deletedManager = deleteGoodsManager(id);
|
||||
|
||||
res.json({
|
||||
message: 'Mal sorumlusu başarıyla silindi.',
|
||||
goodsManager: deletedManager
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
if (error.message.includes('bulunamadı')) {
|
||||
return res.status(404).json({ message: error.message });
|
||||
}
|
||||
res.status(500).json({ message: 'Sunucu hatası.' });
|
||||
}
|
||||
});
|
||||
|
||||
// Socket.IO bağlantıları
|
||||
io.on('connection', (socket) => {
|
||||
console.log('✅ Bir kullanıcı bağlandı:', socket.id);
|
||||
|
||||
Reference in New Issue
Block a user