Files
tickte-system/src/hooks/useRoadmaps.js
T
ClaudeandClaude Opus 5.5 b758b1f9a7 Demo-Modus entfernt
isDemoMode war nie aktiv: appwrite.js hat immer eine Projekt-ID als
Fallback. Weg sind die Demo-Zweige in Anmeldung und Hooks sowie die
Beispieldaten aus der alten IT-Welt (Serverausfall, Drucker, Kunde A–E).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 14:36:33 +00:00

95 lines
2.7 KiB
JavaScript

import { useState, useCallback } from 'react'
import { databases, DATABASE_ID, COLLECTIONS, Query } from '../lib/appwrite'
import {
createRoadmapPlan,
deleteRoadmapPlan,
completeRoadmap,
fetchRoadmapByTicketId,
} from '../lib/roadmaps'
export function useRoadmaps() {
const [roadmaps, setRoadmaps] = useState([])
const [loading, setLoading] = useState(false)
const [error, setError] = useState(null)
const fetchAll = useCallback(async () => {
setLoading(true)
setError(null)
try {
const response = await databases.listDocuments(
DATABASE_ID, COLLECTIONS.ROADMAPS,
[Query.orderDesc('$createdAt'), Query.limit(500)]
)
setRoadmaps(response.documents)
return response.documents
} catch (err) {
setError(err.message)
return []
} finally {
setLoading(false)
}
}, [])
const fetchById = useCallback(async (roadmapId) => {
if (!roadmapId) return null
try {
return await databases.getDocument(DATABASE_ID, COLLECTIONS.ROADMAPS, roadmapId)
} catch {
return null
}
}, [])
const fetchByTicketId = useCallback(async (ticketId) => {
try {
return await fetchRoadmapByTicketId(ticketId)
} catch {
return null
}
}, [])
const createRoadmap = async (project, data, user) => {
try {
const result = await createRoadmapPlan(project, data, user)
setRoadmaps((prev) => [result.roadmap, ...prev])
return { success: true, data: result }
} catch (err) {
return { success: false, error: err.message }
}
}
const updateRoadmap = async (roadmapId, data) => {
try {
const doc = await databases.updateDocument(DATABASE_ID, COLLECTIONS.ROADMAPS, roadmapId, {
...data,
updatedAt: new Date().toISOString(),
})
setRoadmaps((prev) => prev.map((r) => (r.$id === roadmapId ? doc : r)))
return { success: true, data: doc }
} catch (err) {
return { success: false, error: err.message }
}
}
const deleteRoadmap = async (roadmap, user) => {
try {
await deleteRoadmapPlan(roadmap, user)
setRoadmaps((prev) => prev.filter((r) => r.$id !== roadmap.$id))
return { success: true }
} catch (err) {
return { success: false, error: err.message }
}
}
const completePlan = async (roadmap, user) => {
try {
const updated = await completeRoadmap(roadmap, user)
setRoadmaps((prev) => prev.map((r) => (r.$id === updated.$id ? updated : r)))
return { success: true, data: updated }
} catch (err) {
return { success: false, error: err.message }
}
}
return { roadmaps, loading, error, fetchAll, fetchById, fetchByTicketId, createRoadmap, updateRoadmap, deleteRoadmap, completePlan }
}