You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.5 KiB
195 lines
5.5 KiB
// 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 <https://www.gnu.org/licenses/>.
|
|
|
|
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' },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|