import fs from 'fs/promises';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const DATABASE_PATH = path.join(__dirname, '..', 'data', 'database.json');
/**
* Veritabanını okur
*/
export async function readDatabase() {
try {
const data = await fs.readFile(DATABASE_PATH, 'utf8');
return JSON.parse(data);
} catch (error) {
console.error('Veritabanı okuma hatası:', error);
throw new Error('Veritabanı okunamadı');
}
}
/**
* Veritabanını günceller
*/
export async function writeDatabase(data) {
try {
await fs.writeFile(DATABASE_PATH, JSON.stringify(data, null, 2), 'utf8');
return true;
} catch (error) {
console.error('Veritabanı yazma hatası:', error);
throw new Error('Veritabanı güncellenemedi');
}
}
/**
* Yeni ID oluşturur
*/
export function generateId(items) {
if (!items || items.length === 0) return 1;
return Math.max(...items.map(item => item.id)) + 1;
}
/**
* Kullanıcı arar (ad, email, departman, pozisyona göre)
*/
export function searchUsers(users, query) {
const searchTerm = query.toLowerCase();
return users.filter(user =>
user.name.toLowerCase().includes(searchTerm) ||
user.email.toLowerCase().includes(searchTerm) ||
user.department.toLowerCase().includes(searchTerm) ||
user.position.toLowerCase().includes(searchTerm)
);
}
/**
* Departman istatistikleri hesaplar
*/
export function calculateDepartmentStats(users, departments) {
const stats = {};
departments.forEach(dept => {
const deptUsers = users.filter(user => user.department === dept.name);
const salaries = deptUsers.map(user => user.salary || 0);
stats[dept.name] = {
employeeCount: deptUsers.length,
totalSalary: salaries.reduce((sum, salary) => sum + salary, 0),
averageSalary: salaries.length > 0 ? salaries.reduce((sum, salary) => sum + salary, 0) / salaries.length : 0,
minSalary: salaries.length > 0 ? Math.min(...salaries) : 0,
maxSalary: salaries.length > 0 ? Math.max(...salaries) : 0
};
});
return stats;
}
/**
* Maaş analizi yapar
*/
export function analyzeSalaries(users, department = null) {
let targetUsers = users;
if (department) {
targetUsers = users.filter(user => user.department === department);
}
const salaries = targetUsers.map(user => user.salary || 0).filter(salary => salary > 0);
if (salaries.length === 0) {
return {
department: department || 'Tüm Şirket',
employeeCount: 0,
averageSalary: 0,
minSalary: 0,
maxSalary: 0,
totalSalaryBudget: 0
};
}
return {
department: department || 'Tüm Şirket',
employeeCount: salaries.length,
averageSalary: salaries.reduce((sum, salary) => sum + salary, 0) / salaries.length,
minSalary: Math.min(...salaries),
maxSalary: Math.max(...salaries),
totalSalaryBudget: salaries.reduce((sum, salary) => sum + salary, 0)
};
}