Merge branch 'unfavourite' into 'main'

Add unfavourite controller

Closes soapbox#1819

See merge request soapbox-pub/ditto!609
This commit is contained in:
Daniel 2025-03-08 19:28:57 +00:00
commit 22eb70d019
3 changed files with 40 additions and 2 deletions

View file

@ -34,6 +34,7 @@ import {
muteController, muteController,
relationshipsController, relationshipsController,
unblockController, unblockController,
unfavouriteController,
unfollowController, unfollowController,
unmuteController, unmuteController,
updateCredentialsController, updateCredentialsController,
@ -357,6 +358,7 @@ app.get('/api/v1/statuses/:id{[0-9a-f]{64}}/reblogged_by', rebloggedByController
app.get('/api/v1/statuses/:id{[0-9a-f]{64}}/context', contextController); app.get('/api/v1/statuses/:id{[0-9a-f]{64}}/context', contextController);
app.get('/api/v1/statuses/:id{[0-9a-f]{64}}', statusController); app.get('/api/v1/statuses/:id{[0-9a-f]{64}}', statusController);
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/favourite', userMiddleware(), favouriteController); app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/favourite', userMiddleware(), favouriteController);
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/unfavourite', userMiddleware(), unfavouriteController);
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/bookmark', userMiddleware(), bookmarkController); app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/bookmark', userMiddleware(), bookmarkController);
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/unbookmark', userMiddleware(), unbookmarkController); app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/unbookmark', userMiddleware(), unbookmarkController);
app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/pin', userMiddleware(), pinController); app.post('/api/v1/statuses/:id{[0-9a-f]{64}}/pin', userMiddleware(), pinController);

View file

@ -509,6 +509,43 @@ const favouritesController: AppController = async (c) => {
return paginated(c, events1, statuses); return paginated(c, events1, statuses);
}; };
const unfavouriteController: AppController = async (c) => {
const { relay, user, signal } = c.var;
const id = c.req.param('id');
const pubkey = await user!.signer.getPublicKey();
const [event] = await relay.query([{ ids: [id], kinds: [1] }], { signal });
if (!event) {
return c.json({ error: 'Record not found.' }, 404);
}
const favouriteEvents = await relay.query([
{ kinds: [7], authors: [pubkey], '#e': [id] },
]);
if (!favouriteEvents.length) {
return c.json({ error: 'Record not found.' }, 404);
}
for (const e of favouriteEvents) {
if (e.content === '+') {
await createEvent({
kind: 5,
tags: [
['e', e.id],
['k', '7'],
],
content: 'unfavourite',
}, c);
}
}
await hydrateEvents({ ...c.var, events: [event], relay, signal });
const status = await renderStatus(relay, event, { viewerPubkey: pubkey });
return c.json(status);
};
const familiarFollowersController: AppController = async (c) => { const familiarFollowersController: AppController = async (c) => {
const { relay, user, signal } = c.var; const { relay, user, signal } = c.var;
@ -560,6 +597,7 @@ export {
muteController, muteController,
relationshipsController, relationshipsController,
unblockController, unblockController,
unfavouriteController,
unfollowController, unfollowController,
unmuteController, unmuteController,
updateCredentialsController, updateCredentialsController,

View file

@ -27,7 +27,6 @@ const reactionController: AppController = async (c) => {
await createEvent({ await createEvent({
kind: 7, kind: 7,
content: emoji, content: emoji,
created_at: Math.floor(Date.now() / 1000),
tags: [['e', id], ['p', event.pubkey]], tags: [['e', id], ['p', event.pubkey]],
}, c); }, c);
@ -72,7 +71,6 @@ const deleteReactionController: AppController = async (c) => {
await createEvent({ await createEvent({
kind: 5, kind: 5,
content: '', content: '',
created_at: Math.floor(Date.now() / 1000),
tags, tags,
}, c); }, c);