docs: improve doucmentation

improve doucmentation and fix small store changes
This commit is contained in:
2026-04-30 01:16:48 +02:00
parent 3f92e74350
commit 0a714428f6
31 changed files with 4161 additions and 23 deletions

View File

@@ -5,6 +5,15 @@ export interface OpenApiBuildOptions {
export function buildOpenApiDocument(options: OpenApiBuildOptions): unknown {
const { baseUrl, appVersion } = options;
const roomIdPathParameter = { name: 'roomId', in: 'path', required: true, schema: { type: 'string' } };
const userIdPathParameter = { name: 'userId', in: 'path', required: true, schema: { type: 'string' } };
const messageIdPathParameter = { name: 'messageId', in: 'path', required: true, schema: { type: 'string' } };
const sinceTimestampQueryParameter = {
name: 'sinceTimestamp',
in: 'query',
required: true,
schema: { type: 'integer', minimum: 0, format: 'int64' }
};
return {
openapi: '3.1.0',
@@ -96,6 +105,19 @@ export function buildOpenApiDocument(options: OpenApiBuildOptions): unknown {
},
additionalProperties: true
},
User: {
type: 'object',
properties: {
id: { type: 'string' },
oderId: { type: 'string' },
username: { type: 'string' },
displayName: { type: 'string' },
status: { type: 'string' },
role: { type: 'string' },
isOnline: { type: 'boolean' }
},
additionalProperties: true
},
Message: {
type: 'object',
properties: {
@@ -110,6 +132,59 @@ export function buildOpenApiDocument(options: OpenApiBuildOptions): unknown {
isDeleted: { type: 'boolean' }
},
additionalProperties: true
},
Reaction: {
type: 'object',
properties: {
id: { type: 'string' },
messageId: { type: 'string' },
userId: { type: 'string' },
oderId: { type: 'string' },
emoji: { type: 'string' },
timestamp: { type: 'integer', format: 'int64' }
},
additionalProperties: true
},
Attachment: {
type: 'object',
properties: {
id: { type: 'string' },
messageId: { type: 'string' },
filename: { type: 'string' },
size: { type: 'integer' },
mime: { type: 'string' },
isImage: { type: 'boolean' },
filePath: { type: 'string' },
savedPath: { type: 'string' }
},
additionalProperties: true
},
Ban: {
type: 'object',
properties: {
oderId: { type: 'string' },
roomId: { type: 'string' },
userId: { type: 'string' },
bannedBy: { type: 'string' },
displayName: { type: 'string' },
reason: { type: 'string' },
expiresAt: { type: 'integer', format: 'int64' },
timestamp: { type: 'integer', format: 'int64' }
},
additionalProperties: true
},
PluginDataValue: {
type: 'object',
properties: {
value: {}
}
},
MetaValue: {
type: 'object',
properties: {
key: { type: 'string' },
value: { type: ['string', 'null'] }
}
}
}
},
@@ -225,11 +300,47 @@ export function buildOpenApiDocument(options: OpenApiBuildOptions): unknown {
}
}
},
'/api/rooms/{roomId}': {
get: {
summary: 'Get a room by id',
parameters: [roomIdPathParameter],
responses: {
'200': {
description: 'Room details',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/Room' }
}
}
},
'404': {
description: 'Room not found',
content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } }
}
}
}
},
'/api/rooms/{roomId}/users': {
get: {
summary: 'List users known for a room',
parameters: [roomIdPathParameter],
responses: {
'200': {
description: 'Users array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/User' } }
}
}
}
}
}
},
'/api/rooms/{roomId}/messages': {
get: {
summary: 'List messages for a room',
parameters: [
{ name: 'roomId', in: 'path', required: true, schema: { type: 'string' } },
roomIdPathParameter,
{ name: 'limit', in: 'query', required: false, schema: { type: 'integer', minimum: 1, maximum: 500 } },
{ name: 'offset', in: 'query', required: false, schema: { type: 'integer', minimum: 0 } }
],
@@ -247,6 +358,182 @@ export function buildOpenApiDocument(options: OpenApiBuildOptions): unknown {
}
}
}
},
'/api/rooms/{roomId}/messages/since': {
get: {
summary: 'List room messages after a timestamp',
parameters: [roomIdPathParameter, sinceTimestampQueryParameter],
responses: {
'200': {
description: 'Messages array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/Message' } }
}
}
}
}
}
},
'/api/rooms/{roomId}/bans': {
get: {
summary: 'List active bans for a room',
parameters: [roomIdPathParameter],
responses: {
'200': {
description: 'Bans array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/Ban' } }
}
}
}
}
}
},
'/api/rooms/{roomId}/bans/{userId}': {
get: {
summary: 'Check whether a user is banned in a room',
parameters: [roomIdPathParameter, userIdPathParameter],
responses: {
'200': {
description: 'Ban status',
content: {
'application/json': {
schema: {
type: 'object',
required: ['isBanned'],
properties: { isBanned: { type: 'boolean' } }
}
}
}
}
}
}
},
'/api/messages/{messageId}': {
get: {
summary: 'Get a message by id',
parameters: [messageIdPathParameter],
responses: {
'200': {
description: 'Message details',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/Message' }
}
}
},
'404': {
description: 'Message not found',
content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } }
}
}
}
},
'/api/messages/{messageId}/reactions': {
get: {
summary: 'List reactions for a message',
parameters: [messageIdPathParameter],
responses: {
'200': {
description: 'Reactions array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/Reaction' } }
}
}
}
}
}
},
'/api/messages/{messageId}/attachments': {
get: {
summary: 'List attachments for a message',
parameters: [messageIdPathParameter],
responses: {
'200': {
description: 'Attachments array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/Attachment' } }
}
}
}
}
}
},
'/api/users/{userId}': {
get: {
summary: 'Get a user by id',
parameters: [userIdPathParameter],
responses: {
'200': {
description: 'User details',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/User' }
}
}
},
'404': {
description: 'User not found',
content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } }
}
}
}
},
'/api/attachments': {
get: {
summary: 'List all attachments stored on this device',
responses: {
'200': {
description: 'Attachments array',
content: {
'application/json': {
schema: { type: 'array', items: { $ref: '#/components/schemas/Attachment' } }
}
}
}
}
}
},
'/api/plugin-data': {
get: {
summary: 'Read a plugin data value',
parameters: [
{ name: 'pluginId', in: 'query', required: true, schema: { type: 'string' } },
{ name: 'key', in: 'query', required: true, schema: { type: 'string' } },
{ name: 'scope', in: 'query', required: true, schema: { type: 'string', enum: ['local', 'server'] } },
{ name: 'serverId', in: 'query', required: false, schema: { type: 'string' } }
],
responses: {
'200': {
description: 'Plugin data value',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/PluginDataValue' }
}
}
}
}
}
},
'/api/meta/{key}': {
get: {
summary: 'Read a desktop metadata value',
parameters: [{ name: 'key', in: 'path', required: true, schema: { type: 'string' } }],
responses: {
'200': {
description: 'Metadata value',
content: {
'application/json': {
schema: { $ref: '#/components/schemas/MetaValue' }
}
}
}
}
}
}
}
};