diff --git a/frontend/composables/post.ts b/frontend/composables/post.ts index ff4241b..f70313a 100644 --- a/frontend/composables/post.ts +++ b/frontend/composables/post.ts @@ -1,30 +1,29 @@ import { z } from 'zod' const PostValidator = z.object({ - sequence: z.number(), - id: z.string(), - title: z.string(), - description: z.string(), - created_at: z.string().datetime(), - updated_at: z.string(), - user: z.object({ - name: z.string(), - }), + sequence: z.number(), + id: z.string(), + description: z.string(), + created_at: z.string().datetime(), + updated_at: z.string(), + user: z.object({ + name: z.string(), + }), }) const newPostValidator = z.object({ - title: z.string(), - description: z.string(), + title: z.string(), + description: z.string(), }) const parsePost = (data: unknown) => { - return PostValidator.parse(data) + return PostValidator.parse(data) } const PostsValidator = PostValidator.array() const parsePosts = (data: unknown[]) => { - return PostsValidator.parse(data) + return PostsValidator.parse(data) } type Posts = z.infer @@ -32,55 +31,55 @@ type Posts = z.infer const usePosts = () => useState(() => []) const createNewPost = async (data: unknown) => { - const parsedNewPost = newPostValidator.safeParse(data) + const parsedNewPost = newPostValidator.safeParse(data) - if (!parsedNewPost.success) return + if (!parsedNewPost.success) return - await useCustomFetch('/api/posts', { - method: 'POST', - body: parsedNewPost.data, - }) + await useCustomFetch('/api/posts', { + method: 'POST', + body: parsedNewPost.data, + }) - await fetchPosts('new') + await fetchPosts('new') } const responseValidator = z.object({ - status: z.number(), - data: z.unknown().array(), + status: z.number(), + data: z.unknown().array(), }) const fetchPosts = async ( - order: 'new' | 'old' = 'old', - refresh: Boolean = false + order: 'new' | 'old' = 'old', + refresh: Boolean = false ) => { - const posts = usePosts() - const lastPost = refresh - ? 0 - : posts.value.length - ? posts.value[posts.value.length - 1].sequence - : 0 - const firstPost = posts.value.length ? posts.value[0].sequence : 0 - - const { data } = await useCustomFetch('/api/posts', { - params: { lastPost: lastPost, firstPost: firstPost, order: order }, - }) - - const response = responseValidator.safeParse(data.value) - - if (!response.success) return - - if (order == 'old') { - posts.value = [...posts.value, ...parsePosts(response.data.data)] - } else { - posts.value = [...parsePosts(response.data.data), ...posts.value] - } + const posts = usePosts() + const lastPost = refresh + ? 0 + : posts.value.length + ? posts.value[posts.value.length - 1].sequence + : 0 + const firstPost = posts.value.length ? posts.value[0].sequence : 0 + + const { data } = await useCustomFetch('/api/posts', { + params: { lastPost: lastPost, firstPost: firstPost, order: order }, + }) + + const response = responseValidator.safeParse(data.value) + + if (!response.success) return + + if (order == 'old') { + posts.value = [...posts.value, ...parsePosts(response.data.data)] + } else { + posts.value = [...parsePosts(response.data.data), ...posts.value] + } } export { - createNewPost, - fetchPosts, - parsePost, - parsePosts, - PostValidator, - usePosts, + createNewPost, + fetchPosts, + parsePost, + parsePosts, + PostValidator, + usePosts, }