// schemas.ts // Copyright (C) 2020 Dwayne Harris // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . import { JSONSchema } from 'fastify' export const tokenResponseSchema: JSONSchema = { description: 'Token response.', type: 'object', properties: { id: { type: 'string' }, access: { type: 'string' }, refresh: { type: 'string' }, expires: { type: 'number' }, }, } export const userSettingsSchema: JSONSchema = { type: 'object', properties: { allowThemeChange: { type: 'boolean' }, alwaysReveal: { type: 'boolean' }, autoPlayGifs: { type: 'boolean' }, }, } export const groupSchema: JSONSchema = { description: 'Group entity.', type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' }, about: { type: 'string' }, imageUrl: { type: 'string' }, coverImageUrl: { type: 'string' }, iconImageUrl: { type: 'string' }, theme: { type: 'string' }, requiresApproval: { type: 'boolean' }, members: { type: 'number' }, posts: { type: 'number' }, points: { type: 'number' }, created: { type: 'number' }, membership: { type: 'string' }, }, } export const subscriptionSchema: JSONSchema = { type: 'object', properties: { from: { type: 'string' }, to: { type: 'string' }, pending: { type: 'boolean' }, }, } export const userSchema: JSONSchema = { description: 'User entity.', type: 'object', properties: { id: { type: 'string' }, group: groupSchema, name: { type: 'string' }, about: { type: 'string' }, imageUrl: { type: 'string' }, coverImageUrl: { type: 'string' }, theme: { type: 'string' }, subscriptions: { type: 'array', items: subscriptionSchema, }, membership: { type: 'string' }, intro: { type: 'string' }, posts: { type: 'number' }, points: { type: 'number' }, created: { type: 'number' }, }, } export const attachmentSchema: JSONSchema = { type: 'object', properties: { url: { type: 'string' }, text: { type: 'string' }, cover: { type: 'string' }, }, } export const postSchema: JSONSchema = { description: 'Post entity.', type: 'object', properties: { id: { type: 'string' }, userId: { type: 'string' }, user: userSchema, appId: { type: 'string' }, text: { type: 'string' }, cover: { type: 'string' }, attachments: { type: 'array', items: attachmentSchema, }, data: { type: 'object', additionalProperties: true, }, visible: { type: 'boolean' }, replies: { type: 'number' }, created: { type: 'number' }, }, } export const appSchema: JSONSchema = { description: 'App entity.', type: 'object', properties: { id: { type: 'string' }, user: userSchema, name: { type: 'string' }, displayName: { type: 'string' }, imageUrl: { type: 'string' }, coverImageUrl: { type: 'string' }, iconImageUrl: { type: 'string' }, about: { type: 'string' }, websiteUrl: { type: 'string' }, companyName: { type: 'string' }, version: { type: 'string' }, rating: { type: 'number' }, users: { type: 'number' }, updated: { type: 'number' }, created: { type: 'number' }, publicKey: { type: 'string' }, privateKey: { type: 'string' }, composerUrl: { type: 'string' }, rendererUrl: { type: 'string' }, revisions: { type: 'array', items: { type: 'object', }, }, } } export const selfSchema: JSONSchema = { description: 'Authenticated User entity.', type: 'object', properties: { id: { type: 'string' }, group: groupSchema, name: { type: 'string' }, email: { type: 'string' }, about: { type: 'string' }, settings: userSettingsSchema, imageUrl: { type: 'string' }, coverImageUrl: { type: 'string' }, theme: { type: 'string' }, requiresApproval: { type: 'boolean' }, privacy: { type: 'string' }, membership: { type: 'string' }, posts: { type: 'number' }, points: { type: 'number' }, admin: { type: 'boolean' }, created: { type: 'number' }, }, } export const errorSchema: JSONSchema = { description: 'Client error.', type: 'object', properties: { message: { type: 'string' }, errors: { type: 'array', items: { type: 'object', properties: { field: { type: 'string' }, message: { type: 'string' }, }, }, }, }, }