diff --git a/services/device.service.js b/services/device.service.js new file mode 100644 index 0000000..d4c8a44 --- /dev/null +++ b/services/device.service.js @@ -0,0 +1,81 @@ +const { + getAllDevicesDb, + getDeviceByIdDb, + getDeviceByCodeDb, + createDeviceDb, + updateDeviceDb, + softDeleteDeviceDb +} = require('../db/device.db'); +const { ErrorHandler } = require('../helpers/error'); + +class DeviceService { + // Get all devices + static async getAllDevices() { + const devices = await getAllDevicesDb(); + return devices; + } + + // Get device by ID + static async getDeviceById(id) { + const device = await getDeviceByIdDb(id); + if (!device) { + throw new ErrorHandler(404, 'Device not found'); + } + return device; + } + + // Get device by code + static async getDeviceByCode(code) { + const device = await getDeviceByCodeDb(code); + if (!device) { + throw new ErrorHandler(404, 'Device not found'); + } + return device; + } + + // Create device + static async createDevice(data, userId) { + if (!data || typeof data !== 'object') data = {}; + + data.created_by = userId; + data.is_active = 1; + + // cek kode unik + const existingDevice = await getDeviceByCodeDb(data.device_code); + if (existingDevice) { + throw new ErrorHandler(400, 'Device code already exists'); + } + + const newDevice = await createDeviceDb(data); + return newDevice; + } + + // Update device + static async updateDevice(id, data, userId) { + if (!data || typeof data !== 'object') data = {}; + + const existingDevice = await getDeviceByIdDb(id); + if (!existingDevice) { + throw new ErrorHandler(404, 'Device not found'); + } + + data.updated_by = userId; + data.updated_at = new Date(); + + await updateDeviceDb(id, data); + return { message: 'Device updated successfully' }; + } + + // Soft delete device + static async deleteDevice(id, userId) { + const existingDevice = await getDeviceByIdDb(id); + if (!existingDevice) { + throw new ErrorHandler(404, 'Device not found'); + } + + await softDeleteDeviceDb(id, userId); + return { message: 'Device deleted successfully' }; + } +} + +module.exports = DeviceService;