refactor(api): 🏷️ Begin porting all code over to new schemas

This commit is contained in:
Jesse Wierzbinski 2025-02-12 23:25:22 +01:00
parent fda1167234
commit bff1c5f734
No known key found for this signature in database
32 changed files with 171 additions and 264 deletions

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -24,7 +25,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -3,6 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { iso631 } from "~/classes/schemas/common";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const schemas = {
param: z.object({
@ -39,7 +40,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const schemas = {
param: z.object({
@ -49,7 +50,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const schemas = {
param: z.object({
@ -43,7 +44,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -29,7 +30,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -29,7 +30,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -29,7 +30,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -30,7 +31,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -29,7 +30,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, withUserParam } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const route = createRoute({
method: "post",
@ -29,7 +30,7 @@ const route = createRoute({
description: "Updated relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth, qsQuery } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Relationship } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
const schemas = {
query: z.object({
@ -30,7 +31,7 @@ const route = createRoute({
description: "Relationships",
content: {
"application/json": {
schema: z.array(Relationship.schema),
schema: z.array(RelationshipSchema),
},
},
},

View file

@ -263,6 +263,7 @@ export default apiRoute((app) =>
self.source.fields.push({
name: field.name,
value: field.value,
verified_at: null,
});
}
}

View file

@ -3,6 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { Relationship, User } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
import { ErrorSchema } from "~/types/api";
const schemas = {
@ -29,7 +30,7 @@ const route = createRoute({
description: "Relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -3,6 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { Relationship, User } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Relationship as RelationshipSchema } from "~/classes/schemas/relationship";
import { ErrorSchema } from "~/types/api";
const schemas = {
@ -29,7 +30,7 @@ const route = createRoute({
description: "Relationship",
content: {
"application/json": {
schema: Relationship.schema,
schema: RelationshipSchema,
},
},
},

View file

@ -3,6 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Attachment as AttachmentSchema } from "~/classes/schemas/attachment";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@ -46,7 +47,7 @@ const routePut = createRoute({
description: "Media updated",
content: {
"application/json": {
schema: Media.schema,
schema: AttachmentSchema,
},
},
},
@ -80,7 +81,7 @@ const routeGet = createRoute({
description: "Media",
content: {
"application/json": {
schema: Media.schema,
schema: AttachmentSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Attachment as AttachmentSchema } from "~/classes/schemas/attachment";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@ -42,7 +43,7 @@ const route = createRoute({
description: "Attachment",
content: {
"application/json": {
schema: Media.schema,
schema: AttachmentSchema,
},
},
},

View file

@ -3,6 +3,7 @@ import { createRoute, z } from "@hono/zod-openapi";
import { Notification } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { ApiError } from "~/classes/errors/api-error";
import { Notification as NotificationSchema } from "~/classes/schemas/notification.ts";
import { ErrorSchema } from "~/types/api";
const route = createRoute({
@ -26,7 +27,7 @@ const route = createRoute({
description: "Notification",
content: {
"application/json": {
schema: Notification.schema,
schema: NotificationSchema,
},
},
},

View file

@ -1,72 +1,26 @@
import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Notification, Timeline } from "@versia/kit/db";
import { Timeline } from "@versia/kit/db";
import { Notifications, RolePermissions } from "@versia/kit/tables";
import { and, eq, gt, gte, inArray, lt, not, sql } from "drizzle-orm";
import { Account as AccountSchema } from "~/classes/schemas/account";
import { Notification as NotificationSchema } from "~/classes/schemas/notification.ts";
const schemas = {
query: z
.object({
max_id: z.string().uuid().optional(),
since_id: z.string().uuid().optional(),
min_id: z.string().uuid().optional(),
max_id: NotificationSchema.shape.id.optional(),
since_id: NotificationSchema.shape.id.optional(),
min_id: NotificationSchema.shape.id.optional(),
limit: z.coerce.number().int().min(1).max(80).default(15),
exclude_types: z
.enum([
"mention",
"status",
"follow",
"follow_request",
"reblog",
"poll",
"favourite",
"update",
"admin.sign_up",
"admin.report",
"chat",
"pleroma:chat_mention",
"pleroma:emoji_reaction",
"pleroma:event_reminder",
"pleroma:participation_request",
"pleroma:participation_accepted",
"move",
"group_reblog",
"group_favourite",
"user_approved",
])
.array()
.optional(),
types: z
.enum([
"mention",
"status",
"follow",
"follow_request",
"reblog",
"poll",
"favourite",
"update",
"admin.sign_up",
"admin.report",
"chat",
"pleroma:chat_mention",
"pleroma:emoji_reaction",
"pleroma:event_reminder",
"pleroma:participation_request",
"pleroma:participation_accepted",
"move",
"group_reblog",
"group_favourite",
"user_approved",
])
.array()
.optional(),
account_id: z.string().uuid().optional(),
exclude_types: z.array(NotificationSchema.shape.type).optional(),
types: z.array(NotificationSchema.shape.type).optional(),
account_id: AccountSchema.shape.id.optional(),
})
.refine((val) => {
// Can't use both exclude_types and types
return !(val.exclude_types && val.types);
}),
}, "Can't use both exclude_types and types"),
};
const route = createRoute({
@ -90,7 +44,7 @@ const route = createRoute({
description: "Notifications",
content: {
"application/json": {
schema: z.array(Notification.schema),
schema: z.array(NotificationSchema),
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth } from "@/api";
import { createRoute } from "@hono/zod-openapi";
import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error";
import { WebPushSubscription as WebPushSubscriptionSchema } from "~/classes/schemas/pushsubscription";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) =>
@ -27,7 +28,7 @@ export default apiRoute((app) =>
description: "WebPushSubscription",
content: {
"application/json": {
schema: PushSubscription.schema,
schema: WebPushSubscriptionSchema,
},
},
},

View file

@ -3,6 +3,7 @@ import { auth, jsonOrForm } from "@/api";
import { createRoute } from "@hono/zod-openapi";
import { PushSubscription } from "@versia/kit/db";
import { WebPushSubscriptionInput } from "~/classes/schemas/pushsubscription";
import { WebPushSubscription as WebPushSubscriptionSchema } from "~/classes/schemas/pushsubscription";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) =>
@ -39,7 +40,7 @@ export default apiRoute((app) =>
"A new PushSubscription has been generated, which will send the requested alerts to your endpoint.",
content: {
"application/json": {
schema: PushSubscription.schema,
schema: WebPushSubscriptionSchema,
},
},
},

View file

@ -2,7 +2,10 @@ import { apiRoute, auth, jsonOrForm } from "@/api";
import { createRoute } from "@hono/zod-openapi";
import { PushSubscription } from "@versia/kit/db";
import { ApiError } from "~/classes/errors/api-error";
import { WebPushSubscriptionInput } from "~/classes/schemas/pushsubscription";
import {
WebPushSubscriptionInput,
WebPushSubscription as WebPushSubscriptionSchema,
} from "~/classes/schemas/pushsubscription";
import { RolePermissions } from "~/drizzle/schema";
export default apiRoute((app) =>
@ -41,7 +44,7 @@ export default apiRoute((app) =>
description: "The WebPushSubscription has been updated.",
content: {
"application/json": {
schema: PushSubscription.schema,
schema: WebPushSubscriptionSchema,
},
},
},

View file

@ -2,6 +2,7 @@ import { apiRoute, auth } from "@/api";
import { createRoute, z } from "@hono/zod-openapi";
import { Media } from "@versia/kit/db";
import { RolePermissions } from "@versia/kit/tables";
import { Attachment as AttachmentSchema } from "~/classes/schemas/attachment";
import { config } from "~/packages/config-manager/index.ts";
import { ErrorSchema } from "~/types/api";
@ -42,7 +43,7 @@ const route = createRoute({
description: "Uploaded media",
content: {
"application/json": {
schema: Media.schema,
schema: AttachmentSchema,
},
},
},

View file

@ -132,9 +132,10 @@ export default apiRoute((app) =>
},
{
rel: "avatar",
// Default avatars are SVGs
type:
user.data.source.avatar?.content_type ||
"application/octet-stream",
user.avatar?.getPreferredMimeType() ??
"image/svg+xml",
href: user.getAvatarUrl(config),
},
].filter(Boolean) as {