import { login } from './auth.js' import { convertToAmsterdamTime } from "./utils.js"; export const getShifts = async (req, res) => { const apiKey = req.body.apiKey; // const apiProdUrl = 'https://api.fleks.works/v1/shifts/?limit=100000&page=1&isArchived=false&is_approved=false&is_exported=false&is_invoiced=false&is_paid_out=true&noShiftComments=true'; const apiProdUrl = 'https://api.fleks.works/v1/shifts/?limit=100000&page=1&isArchived=false&is_approved=false&noShiftComments=true'; try { const response = await fetch(apiProdUrl, { headers: { 'x-api-key': apiKey } }); const data = await response.json(); const shifts = data.results.map(shift => { const startDate = new Date(shift.start_date); const endDate = new Date(shift.end_date); const startAmsterdamTime = convertToAmsterdamTime(startDate); const endAmsterdamTime = convertToAmsterdamTime(endDate); return { ...shift, start_time: startAmsterdamTime, end_time: endAmsterdamTime }; }); res.json({ ...data, results: shifts }); } catch (error) { console.log(error) res.status(500).json({ error: 'Error fetching data' }); } } export const updateShifts = async (req, res) => { const { config, shifts } = req.body; // Expected type = { config , shifts } if (!Array.isArray(shifts)) { console.error('Request body should be an array of updates'); return res.status(400).json({ error: 'Request body should be an array of updates' }); } const results = { success: [], failed: [] }; const getToken = async () => { return await login(config?.userName, config?.passWord); } let token = await getToken(); if (!token) { const error = `token not obtained`; console.log(error); return res.status(403).send({ error }); } const updateShift = async (update) => { const { uuid, break_hours } = update; const apiProdUrl = `https://backend.fleks.works/api/jobs/workflow-fields/${uuid}/`; try { const response = await fetch(apiProdUrl, { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `JWT ${token}` }, body: JSON.stringify({ break_hours }) }); const data = await response.json(); if (response.ok) { console.log(`Successfully updated break hours for UUID: ${uuid}`); results.success.push({ uuid, message: data.message }); } else { if (response.status === 401 || response.status === 403) { console.log(`Token invalid. Reattempting login for UUID: ${uuid}`); token = await getToken(); if (token) { return updateShift(update); } else { console.error(`Failed to update break hours for UUID: ${uuid}`, data); results.failed.push({ uuid, error: 'Failed to reauthenticate and obtain new token' }); } } else { console.error(`Failed to update break hours for UUID: ${uuid}`, data); results.failed.push({ uuid, error: data.message || data }); } } } catch (error) { console.error(`Error updating break hours for UUID: ${uuid}`, error); results.failed.push({ uuid, error: error.message }); } } for (const update of shifts) { await updateShift(update); } console.log(`Finished processing updates. Success: ${results.success.length}, Failed: ${results.failed.length}`); res.json(results); }