feat(api): 🏷️ Port Status OpenAPI schemas from Mastodon API docs

This commit is contained in:
Jesse Wierzbinski 2025-02-05 22:49:07 +01:00
parent 2aeada4904
commit 7c622730dc
No known key found for this signature in database
26 changed files with 920 additions and 148 deletions

View file

@ -1,8 +1,9 @@
import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note, Timeline } from "@versia/kit/db";
import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, isNull, lt, or, sql } from "drizzle-orm";
import { Status } from "~/classes/schemas/status";
const schemas = {
param: z.object({
@ -61,7 +62,7 @@ const route = createRoute({
description: "A list of statuses by the specified account",
content: {
"application/json": {
schema: z.array(Note.schema),
schema: z.array(Status),
},
},
headers: {

View file

@ -3,6 +3,7 @@ import { createRoute } from "@hono/zod-openapi";
import { Application } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Application as ApplicationSchema } from "~/classes/schemas/application";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -21,7 +22,7 @@ const route = createRoute({
description: "Application",
content: {
"application/json": {
schema: Application.schema,
schema: ApplicationSchema,
},
},
},
@ -52,13 +53,6 @@ export default apiRoute((app) =>
throw new ApiError(401, "Application not found");
}
return context.json(
{
...application.toApi(),
redirect_uris: application.data.redirectUri,
scopes: application.data.scopes,
},
200,
);
return context.json(application.toApi(), 200);
}),
);

View file

@ -1,8 +1,9 @@
import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note, Timeline } from "@versia/kit/db";
import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, gt, gte, lt, sql } from "drizzle-orm";
import { Status } from "~/classes/schemas/status";
const schemas = {
query: z.object({
@ -31,7 +32,7 @@ const route = createRoute({
description: "Favourites",
content: {
"application/json": {
schema: z.array(Note.schema),
schema: z.array(Status),
},
},
},

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Status } from "~/classes/schemas/status";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -26,8 +26,8 @@ const route = createRoute({
content: {
"application/json": {
schema: z.object({
ancestors: z.array(Note.schema),
descendants: z.array(Note.schema),
ancestors: z.array(Status),
descendants: z.array(Status),
}),
},
},

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Status } from "~/classes/schemas/status";
const route = createRoute({
method: "post",
@ -27,7 +27,7 @@ const route = createRoute({
description: "Favourited status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -1,9 +1,10 @@
import { apiRoute, auth, jsonOrForm, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Media, Note } from "@versia/kit/db";
import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import ISO6391 from "iso-639-1";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@ -84,7 +85,7 @@ const routeGet = createRoute({
description: "Status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},
@ -121,7 +122,7 @@ const routeDelete = createRoute({
description: "Deleted status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},
@ -180,7 +181,7 @@ const routePut = createRoute({
description: "Updated status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -1,9 +1,10 @@
import { apiRoute, auth, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note, db } from "@versia/kit/db";
import { db } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import type { SQL } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -30,7 +31,7 @@ const route = createRoute({
description: "Pinned status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -4,6 +4,7 @@ import { Note } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, eq } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { ErrorSchema } from "~/types/api";
const schemas = {
@ -51,7 +52,7 @@ const route = createRoute({
description: "Reblogged status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -1,7 +1,7 @@
import { apiRoute, auth, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Status } from "~/classes/schemas/status";
const route = createRoute({
method: "post",
@ -27,7 +27,7 @@ const route = createRoute({
description: "Unfavourited status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -1,8 +1,8 @@
import { apiRoute, auth, withNoteParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -29,7 +29,7 @@ const route = createRoute({
description: "Unpinned status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -4,6 +4,7 @@ import { Note } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, eq } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -30,7 +31,7 @@ const route = createRoute({
description: "Unreblogged status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -4,6 +4,7 @@ import { Media, Note } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import ISO6391 from "iso-639-1";
import { ApiError } from "~/classes/errors/api-error";
import { Status } from "~/classes/schemas/status";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@ -116,7 +117,7 @@ const route = createRoute({
description: "The new status",
content: {
"application/json": {
schema: Note.schema,
schema: Status,
},
},
},

View file

@ -1,8 +1,9 @@
import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note, Timeline } from "@versia/kit/db";
import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm";
import { Status } from "~/classes/schemas/status";
const schemas = {
query: z.object({
@ -36,7 +37,7 @@ const route = createRoute({
description: "Home timeline",
content: {
"application/json": {
schema: z.array(Note.schema),
schema: z.array(Status),
},
},
},

View file

@ -1,8 +1,9 @@
import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Note, Timeline } from "@versia/kit/db";
import { Timeline } from "@versia/kit/db";
import { Notes, RolePermissions } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, or, sql } from "drizzle-orm";
import { Status } from "~/classes/schemas/status";
const schemas = {
query: z.object({
@ -47,7 +48,7 @@ const route = createRoute({
description: "Public timeline",
content: {
"application/json": {
schema: z.array(Note.schema),
schema: z.array(Status),
},
},
},

View file

@ -5,6 +5,7 @@ import { Instances, Notes, RolePermissions, Users } from "@versia/kit/tables";
import { and, eq, inArray, isNull, sql } from "drizzle-orm";
import { ApiError } from "~/classes/errors/api-error";
import { Account } from "~/classes/schemas/account";
import { Status } from "~/classes/schemas/status";
import { searchManager } from "~/classes/search/search-manager";
import { config } from "~/packages/config-manager";
import { ErrorSchema } from "~/types/api";
@ -48,7 +49,7 @@ const route = createRoute({
"application/json": {
schema: z.object({
accounts: z.array(Account),
statuses: z.array(Note.schema),
statuses: z.array(Status),
hashtags: z.array(z.string()),
}),
},