178 lines
5.3 KiB
JavaScript
178 lines
5.3 KiB
JavaScript
import { ref } from 'vue'
|
||
import { useToast } from './useToast'
|
||
import { useApi } from './useApi'
|
||
|
||
const machines = ref([])
|
||
const loading = ref(false)
|
||
|
||
export function useMachines() {
|
||
const { showSuccess, showError, showInfo } = useToast()
|
||
const { get, post, patch, delete: del } = useApi()
|
||
|
||
const loadMachines = async () => {
|
||
loading.value = true
|
||
try {
|
||
const result = await get('/machines')
|
||
if (result.success) {
|
||
machines.value = result.data
|
||
showInfo(`Chargement de ${machines.value.length} machine(s) réussi`)
|
||
}
|
||
} catch (error) {
|
||
console.error('Erreur lors du chargement des machines:', error)
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
const createMachine = async (machineData) => {
|
||
loading.value = true
|
||
try {
|
||
const result = await post('/machines', machineData)
|
||
if (result.success) {
|
||
machines.value.push(result.data)
|
||
showSuccess(`Machine "${machineData.name}" créée avec succès`)
|
||
}
|
||
return result
|
||
} catch (error) {
|
||
console.error('Erreur lors de la création de la machine:', error)
|
||
return { success: false, error: error.message }
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
const createMachineFromType = async (machineData, typeMachine) => {
|
||
// Créer la machine avec la structure héritée du type
|
||
const machineWithStructure = {
|
||
...machineData,
|
||
typeMachineId: typeMachine.id,
|
||
// La structure sera automatiquement héritée du type
|
||
// Les composants et pièces seront créés automatiquement
|
||
}
|
||
|
||
return await createMachine(machineWithStructure)
|
||
}
|
||
|
||
const updateMachineData = async (id, machineData) => {
|
||
loading.value = true
|
||
try {
|
||
const result = await patch(`/machines/${id}`, machineData)
|
||
if (result.success) {
|
||
const index = machines.value.findIndex(machine => machine.id === id)
|
||
if (index !== -1) {
|
||
machines.value[index] = result.data
|
||
}
|
||
showSuccess(`Machine "${result.data?.name || machineData.name || ''}" mise à jour avec succès`)
|
||
}
|
||
return result
|
||
} catch (error) {
|
||
console.error('Erreur lors de la mise à jour de la machine:', error)
|
||
return { success: false, error: error.message }
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
const reconfigureSkeleton = async (machineId, payload) => {
|
||
if (!machineId) {
|
||
return { success: false, error: 'Identifiant de machine manquant' }
|
||
}
|
||
|
||
loading.value = true
|
||
try {
|
||
const result = await patch(`/machines/${machineId}/skeleton`, payload)
|
||
if (result.success) {
|
||
const index = machines.value.findIndex(machine => machine.id === machineId)
|
||
if (index !== -1) {
|
||
machines.value[index] = result.data?.machine || result.data
|
||
}
|
||
showSuccess('Structure de la machine mise à jour avec succès')
|
||
}
|
||
return result
|
||
} catch (error) {
|
||
console.error('Erreur lors de la reconfiguration du squelette de la machine:', error)
|
||
return { success: false, error: error.message }
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
const addMissingCustomFields = async (machineId, { showToast: shouldShowToast = true } = {}) => {
|
||
if (!machineId) {
|
||
const error = 'Identifiant de machine manquant'
|
||
if (shouldShowToast) {
|
||
showError(error)
|
||
}
|
||
return { success: false, error }
|
||
}
|
||
|
||
try {
|
||
const result = await post(`/machines/${machineId}/add-custom-fields`)
|
||
if (result.success) {
|
||
if (shouldShowToast) {
|
||
showSuccess('Champs personnalisés complétés avec succès')
|
||
}
|
||
} else if (shouldShowToast && result.error) {
|
||
showError(result.error)
|
||
}
|
||
return result
|
||
} catch (error) {
|
||
console.error('Erreur lors de l’ajout des champs personnalisés manquants:', error)
|
||
if (shouldShowToast) {
|
||
showError('Erreur lors de la complétion des champs personnalisés')
|
||
}
|
||
return { success: false, error: error.message }
|
||
}
|
||
}
|
||
|
||
const deleteMachine = async (id) => {
|
||
loading.value = true
|
||
try {
|
||
const result = await del(`/machines/${id}`)
|
||
if (result.success) {
|
||
const deletedMachine = machines.value.find(machine => machine.id === id)
|
||
machines.value = machines.value.filter(machine => machine.id !== id)
|
||
showSuccess(`Machine "${deletedMachine?.name || 'inconnu'}" supprimée avec succès`)
|
||
}
|
||
return result
|
||
} catch (error) {
|
||
console.error('Erreur lors de la suppression de la machine:', error)
|
||
return { success: false, error: error.message }
|
||
} finally {
|
||
loading.value = false
|
||
}
|
||
}
|
||
|
||
const getMachineById = (id) => {
|
||
return machines.value.find(machine => machine.id === id)
|
||
}
|
||
|
||
const getMachinesBySite = (siteId) => {
|
||
return machines.value.filter(machine => machine.siteId === siteId)
|
||
}
|
||
|
||
const getMachinesByType = (typeMachineId) => {
|
||
return machines.value.filter(machine => machine.typeMachineId === typeMachineId)
|
||
}
|
||
|
||
const getMachines = () => machines.value
|
||
const isLoading = () => loading.value
|
||
|
||
return {
|
||
machines,
|
||
loading,
|
||
loadMachines,
|
||
createMachine,
|
||
createMachineFromType,
|
||
updateMachine: updateMachineData,
|
||
reconfigureSkeleton,
|
||
deleteMachine,
|
||
getMachineById,
|
||
getMachinesBySite,
|
||
getMachinesByType,
|
||
getMachines,
|
||
isLoading,
|
||
addMissingCustomFields
|
||
}
|
||
}
|