Files
twitter-lite/src/features/posts/server-functions.ts
T

56 lines
1.5 KiB
TypeScript

import { createServerFn } from '@tanstack/react-start'
import {
searchPageInputSchema,
threadPageInputSchema,
userPageInputSchema,
} from './inputs'
import { loadThreadPage, loadUserPage, searchPage } from './post-service'
import type { LoadFailure } from './types'
const configFailure = (diagnostic: unknown): LoadFailure => {
console.error('Bird client configuration failed:', diagnostic)
return {
ok: false,
error: {
code: 'relay-config',
message: 'TWITTER_RELAY_BASE_URL を設定してください。',
retryable: false,
},
}
}
async function reader() {
const { getBirdReader } = await import('./bird-client.server')
return getBirdReader()
}
export const loadUserPosts = createServerFn({ method: 'GET' })
.validator(userPageInputSchema)
.handler(async ({ data }) => {
try {
return await loadUserPage(await reader(), data)
} catch (error) {
return configFailure(error)
}
})
export const searchPosts = createServerFn({ method: 'GET' })
.validator(searchPageInputSchema)
.handler(async ({ data }) => {
try {
return await searchPage(await reader(), data)
} catch (error) {
return configFailure(error)
}
})
export const loadThreadPosts = createServerFn({ method: 'GET' })
.validator(threadPageInputSchema)
.handler(async ({ data }) => {
try {
return await loadThreadPage(await reader(), data)
} catch (error) {
return configFailure(error)
}
})