import { Post } from './posts.ts' import client from '../../api/client.ts' export class PostsService { constructor() {} async createNew( authorId: string, content: string, media: CreatePostMedia[], isPublic: boolean, ): Promise { const response = await client.POST('/posts', { body: { authorId, content, media: media.map((m) => { return { ...m, type: null, url: m.url.toString() } }), isPublic, }, credentials: 'include', }) if (!response.data) { throw new Error('Failed to create post') } return response.data.postId } async loadPublicFeed(cursor: string | null, amount: number | null): Promise { const response = await client.GET('/posts', { query: { cursor, amount }, credentials: 'include', }) if (!response.data) { return [] } return response.data?.posts.map((post) => Post.fromDto(post)) } async loadByAuthor( username: string, cursor: string | null, amount: number | null, ): Promise { const response = await client.GET('/posts', { params: { query: { From: cursor ?? undefined, Amount: amount ?? undefined, Author: username }, }, credentials: 'include', }) if (!response.data) { return [] } return response.data?.posts.map((post) => Post.fromDto(post)) } } interface CreatePostMedia { mediaId: string url: string | URL width: number | null height: number | null }