This commit is contained in:
john 2025-05-04 23:22:45 +02:00
parent 8e365867bd
commit 74c66e74c9
13 changed files with 363 additions and 112 deletions

View file

@ -13,11 +13,8 @@ export async function loadPostsForAuthor(
): Promise<components['schemas']['GetAuthorPostsResponse']> {
const url = new URL(`authors/${authorId}/posts`, ApiHost)
if (amount != null) url.searchParams.set('amount', amount.toString())
if (cursor != null) url.searchParams.set('from', cursor)
const res = await doGetRequest(url)
return res as components['schemas']['GetAuthorPostsResponse']
}
@ -27,14 +24,46 @@ export async function loadPublicFeed(
): Promise<components['schemas']['GetAllPublicPostsResponse']> {
const url = new URL(`posts`, ApiHost)
if (amount != null) url.searchParams.set('amount', amount.toString())
if (cursor) url.searchParams.set('from', cursor)
if (cursor != null) url.searchParams.set('from', cursor)
const res = await doGetRequest(url)
return res as components['schemas']['GetAllPublicPostsResponse']
}
export async function uploadMedia(
file: File,
): Promise<components['schemas']['UploadMediaResponse']> {
const url = new URL('media', ApiHost)
const body = new FormData()
body.append('file', file)
const response = await fetch(
new Request(url, {
method: 'POST',
body: body,
}),
)
if (!response.ok) throw new Error(await response.text())
return await response.json()
}
export async function createPost(
authorId: string,
content: string,
media: string[],
): Promise<components['schemas']['CreatePostResponse']> {
const url = new URL('posts', ApiHost)
const body: components['schemas']['CreatePostRequest'] = {
authorId,
content,
media,
}
const res = await doPostRequest(url, body)
return res as components['schemas']['CreatePostResponse']
}
async function doGetRequest(url: URL): Promise<unknown> {
const response = await fetch(new Request(url))
@ -42,3 +71,19 @@ async function doGetRequest(url: URL): Promise<unknown> {
return await response.json()
}
async function doPostRequest(url: URL, body: unknown): Promise<unknown> {
const response = await fetch(
new Request(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
}),
)
if (!response.ok) throw new Error(await response.text())
return await response.json()
}

View file

@ -9,7 +9,7 @@ export interface paths {
get: {
parameters: {
query?: {
Cursor?: string
From?: string
Amount?: number
}
header?: never
@ -66,6 +66,85 @@ export interface paths {
patch?: never
trace?: never
}
'/media': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
get?: never
put?: never
post: {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
requestBody: {
content: {
'multipart/form-data': {
/** Format: binary */
file?: string
}
}
}
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown
}
content: {
'text/plain': components['schemas']['UploadMediaResponse']
'application/json': components['schemas']['UploadMediaResponse']
'text/json': components['schemas']['UploadMediaResponse']
}
}
}
}
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
'/media/{id}': {
parameters: {
query?: never
header?: never
path?: never
cookie?: never
}
get: {
parameters: {
query?: never
header?: never
path: {
id: string
}
cookie?: never
}
requestBody?: never
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown
}
content?: never
}
}
}
put?: never
post?: never
delete?: never
options?: never
head?: never
patch?: never
trace?: never
}
'/authors/{username}/posts': {
parameters: {
query?: never
@ -76,7 +155,7 @@ export interface paths {
get: {
parameters: {
query?: {
Cursor?: string
From?: string
Amount?: number
}
header?: never
@ -160,6 +239,11 @@ export interface components {
/** Format: date-time */
createdAt: string
}
UploadMediaResponse: {
/** Format: uuid */
mediaId: string
url: string
}
}
responses: never
parameters: never