/** * Board Posts Composable * Shared state + CRUD for board posts. */ export function useBoardPosts() { const posts = useState('board.posts', () => []) const loading = useState('board.loading', () => false) async function fetchPosts(params = {}) { loading.value = true try { const result = await $fetch('/api/board/posts', { params }) posts.value = result?.posts || [] return posts.value } finally { loading.value = false } } async function createPost(body, refreshParams = {}) { const created = await $fetch('/api/board/posts', { method: 'POST', body, }) await fetchPosts(refreshParams) return created } async function updatePost(id, body, refreshParams = {}) { const updated = await $fetch(`/api/board/posts/${id}`, { method: 'PATCH', body, }) await fetchPosts(refreshParams) return updated } async function deletePost(id, refreshParams = {}) { const result = await $fetch(`/api/board/posts/${id}`, { method: 'DELETE', }) await fetchPosts(refreshParams) return result } return { posts: readonly(posts), loading: readonly(loading), fetchPosts, createPost, updatePost, deletePost, } }