Move reaction controllers to pleromaStatusesRoute

This commit is contained in:
Alex Gleason 2025-03-15 13:49:42 -05:00
parent 55a171fd2c
commit 2f65be7dc4
No known key found for this signature in database
GPG key ID: 7211D1F99744FBB7
2 changed files with 17 additions and 16 deletions

View file

@ -87,7 +87,6 @@ import {
} from '@/controllers/api/pleroma.ts'; } from '@/controllers/api/pleroma.ts';
import { preferencesController } from '@/controllers/api/preferences.ts'; import { preferencesController } from '@/controllers/api/preferences.ts';
import { getSubscriptionController, pushSubscribeController } from '@/controllers/api/push.ts'; import { getSubscriptionController, pushSubscribeController } from '@/controllers/api/push.ts';
import { deleteReactionController, reactionController, reactionsController } from '@/controllers/api/reactions.ts';
import { relayController } from '@/controllers/nostr/relay.ts'; import { relayController } from '@/controllers/nostr/relay.ts';
import { import {
adminReportController, adminReportController,
@ -150,6 +149,7 @@ import { logiMiddleware } from '@/middleware/logiMiddleware.ts';
import customEmojisRoute from '@/routes/customEmojisRoute.ts'; import customEmojisRoute from '@/routes/customEmojisRoute.ts';
import dittoNamesRoute from '@/routes/dittoNamesRoute.ts'; import dittoNamesRoute from '@/routes/dittoNamesRoute.ts';
import pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts'; import pleromaAdminPermissionGroupsRoute from '@/routes/pleromaAdminPermissionGroupsRoute.ts';
import pleromaStatusesRoute from '@/routes/pleromaStatusesRoute.ts';
import { DittoRelayStore } from '@/storages/DittoRelayStore.ts'; import { DittoRelayStore } from '@/storages/DittoRelayStore.ts';
export interface AppEnv extends DittoEnv { export interface AppEnv extends DittoEnv {
@ -435,10 +435,7 @@ app.post('/api/v1/markers', userMiddleware({ verify: true }), updateMarkersContr
app.get('/api/v1/push/subscription', userMiddleware(), getSubscriptionController); app.get('/api/v1/push/subscription', userMiddleware(), getSubscriptionController);
app.post('/api/v1/push/subscription', userMiddleware({ verify: true }), pushSubscribeController); app.post('/api/v1/push/subscription', userMiddleware({ verify: true }), pushSubscribeController);
app.get('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions', reactionsController); app.route('/api/v1/pleroma/statuses', pleromaStatusesRoute);
app.get('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', reactionsController);
app.put('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), reactionController);
app.delete('/api/v1/pleroma/statuses/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), deleteReactionController);
app.get('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), configController); app.get('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), configController);
app.post('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), updateConfigController); app.post('/api/v1/pleroma/admin/config', userMiddleware({ role: 'admin' }), updateConfigController);

View file

@ -1,4 +1,6 @@
import { AppController } from '@/app.ts'; import { userMiddleware } from '@ditto/mastoapi/middleware';
import { DittoRoute } from '@ditto/mastoapi/router';
import { DittoEvent } from '@/interfaces/DittoEvent.ts'; import { DittoEvent } from '@/interfaces/DittoEvent.ts';
import { hydrateEvents } from '@/storages/hydrate.ts'; import { hydrateEvents } from '@/storages/hydrate.ts';
import { createEvent } from '@/utils/api.ts'; import { createEvent } from '@/utils/api.ts';
@ -8,11 +10,13 @@ import { HTTPException } from '@hono/hono/http-exception';
import { getCustomEmojis } from '@/utils/custom-emoji.ts'; import { getCustomEmojis } from '@/utils/custom-emoji.ts';
/** const route = new DittoRoute();
/*
* React to a status. * React to a status.
* https://docs.pleroma.social/backend/development/API/pleroma_api/#put-apiv1pleromastatusesidreactionsemoji * https://docs.pleroma.social/backend/development/API/pleroma_api/#put-apiv1pleromastatusesidreactionsemoji
*/ */
const reactionController: AppController = async (c) => { route.put('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => {
const { relay, user, conf, signal } = c.var; const { relay, user, conf, signal } = c.var;
const { type, value } = parseEmojiParam(c.req.param('emoji')); const { type, value } = parseEmojiParam(c.req.param('emoji'));
@ -46,13 +50,13 @@ const reactionController: AppController = async (c) => {
const status = await renderStatus(relay, event, { viewerPubkey: pubkey }); const status = await renderStatus(relay, event, { viewerPubkey: pubkey });
return c.json(status); return c.json(status);
}; });
/** /*
* Delete reactions to a status. * Delete reactions to a status.
* https://docs.pleroma.social/backend/development/API/pleroma_api/#delete-apiv1pleromastatusesidreactionsemoji * https://docs.pleroma.social/backend/development/API/pleroma_api/#delete-apiv1pleromastatusesidreactionsemoji
*/ */
const deleteReactionController: AppController = async (c) => { route.delete('/:id{[0-9a-f]{64}}/reactions/:emoji', userMiddleware(), async (c) => {
const { relay, user } = c.var; const { relay, user } = c.var;
const id = c.req.param('id'); const id = c.req.param('id');
@ -89,13 +93,13 @@ const deleteReactionController: AppController = async (c) => {
const status = renderStatus(relay, event, { viewerPubkey: pubkey }); const status = renderStatus(relay, event, { viewerPubkey: pubkey });
return c.json(status); return c.json(status);
}; });
/** /*
* Get an object of emoji to account mappings with accounts that reacted to the post. * Get an object of emoji to account mappings with accounts that reacted to the post.
* https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromastatusesidreactions * https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromastatusesidreactions
*/ */
const reactionsController: AppController = async (c) => { route.get('/:id{[0-9a-f]{64}}/reactions', userMiddleware({ required: false }), async (c) => {
const { relay, user } = c.var; const { relay, user } = c.var;
const id = c.req.param('id'); const id = c.req.param('id');
@ -133,7 +137,7 @@ const reactionsController: AppController = async (c) => {
); );
return c.json(results); return c.json(results);
}; });
function parseEmojiParam(input: string): { type: 'native' | 'custom'; value: string } { function parseEmojiParam(input: string): { type: 'native' | 'custom'; value: string } {
if (/^\p{RGI_Emoji}$/v.test(input)) { if (/^\p{RGI_Emoji}$/v.test(input)) {
@ -147,4 +151,4 @@ function parseEmojiParam(input: string): { type: 'native' | 'custom'; value: str
throw new HTTPException(400, { message: 'Invalid emoji' }); throw new HTTPException(400, { message: 'Invalid emoji' });
} }
export { deleteReactionController, reactionController, reactionsController }; export default route;