Support favourites
This commit is contained in:
parent
6e09e6f9e5
commit
4993b4ca52
|
@ -13,7 +13,12 @@ import { emptyArrayController, emptyObjectController } from './controllers/api/f
|
||||||
import { homeController } from './controllers/api/timelines.ts';
|
import { homeController } from './controllers/api/timelines.ts';
|
||||||
import instanceController from './controllers/api/instance.ts';
|
import instanceController from './controllers/api/instance.ts';
|
||||||
import { createTokenController, oauthAuthorizeController, oauthController } from './controllers/api/oauth.ts';
|
import { createTokenController, oauthAuthorizeController, oauthController } from './controllers/api/oauth.ts';
|
||||||
import { contextController, createStatusController, statusController } from './controllers/api/statuses.ts';
|
import {
|
||||||
|
contextController,
|
||||||
|
createStatusController,
|
||||||
|
favouriteController,
|
||||||
|
statusController,
|
||||||
|
} from './controllers/api/statuses.ts';
|
||||||
import { requireAuth, setAuth } from './middleware/auth.ts';
|
import { requireAuth, setAuth } from './middleware/auth.ts';
|
||||||
import { indexController } from './controllers/site.ts';
|
import { indexController } from './controllers/site.ts';
|
||||||
|
|
||||||
|
@ -51,6 +56,7 @@ app.get('/api/v1/accounts/:pubkey{[0-9a-f]{64}}', accountController);
|
||||||
|
|
||||||
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', favouriteController);
|
||||||
app.post('/api/v1/statuses', requireAuth, createStatusController);
|
app.post('/api/v1/statuses', requireAuth, createStatusController);
|
||||||
|
|
||||||
app.get('/api/v1/timelines/home', requireAuth, homeController);
|
app.get('/api/v1/timelines/home', requireAuth, homeController);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { type AppContext, AppController } from '@/app.ts';
|
import { type AppContext, AppController } from '@/app.ts';
|
||||||
import { getAncestors, getDescendants, getEvent } from '@/client.ts';
|
import { getAncestors, getDescendants, getEvent } from '@/client.ts';
|
||||||
import { validator, z } from '@/deps.ts';
|
import { Kind, validator, z } from '@/deps.ts';
|
||||||
import { type Event } from '@/event.ts';
|
import { type Event } from '@/event.ts';
|
||||||
import publish from '@/publisher.ts';
|
import publish from '@/publisher.ts';
|
||||||
import { signEvent } from '@/sign.ts';
|
import { signEvent } from '@/sign.ts';
|
||||||
|
@ -27,8 +27,8 @@ const createStatusController = validator('json', async (value, c: AppContext) =>
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
const { data } = result;
|
const { data } = result;
|
||||||
|
|
||||||
const event = await signEvent<1>({
|
const event = await signEvent({
|
||||||
kind: 1,
|
kind: Kind.Text,
|
||||||
content: data.status,
|
content: data.status,
|
||||||
tags: [],
|
tags: [],
|
||||||
created_at: Math.floor(new Date().getTime() / 1000),
|
created_at: Math.floor(new Date().getTime() / 1000),
|
||||||
|
@ -60,4 +60,34 @@ const contextController: AppController = async (c) => {
|
||||||
return c.json({ error: 'Event not found.' }, 404);
|
return c.json({ error: 'Event not found.' }, 404);
|
||||||
};
|
};
|
||||||
|
|
||||||
export { contextController, createStatusController, statusController };
|
const favouriteController: AppController = async (c) => {
|
||||||
|
const id = c.req.param('id');
|
||||||
|
const target = await getEvent(id, 1);
|
||||||
|
|
||||||
|
if (target) {
|
||||||
|
const event = await signEvent({
|
||||||
|
kind: Kind.Reaction,
|
||||||
|
content: '+',
|
||||||
|
tags: [
|
||||||
|
['e', target.id],
|
||||||
|
['p', target.pubkey],
|
||||||
|
],
|
||||||
|
created_at: Math.floor(new Date().getTime() / 1000),
|
||||||
|
}, c);
|
||||||
|
|
||||||
|
publish(event);
|
||||||
|
|
||||||
|
const status = await toStatus(target);
|
||||||
|
|
||||||
|
if (status) {
|
||||||
|
status.favourited = true;
|
||||||
|
status.favourites_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.json(status);
|
||||||
|
} else {
|
||||||
|
return c.json({ error: 'Event not found.' }, 404);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export { contextController, createStatusController, favouriteController, statusController };
|
||||||
|
|
|
@ -14,6 +14,7 @@ export {
|
||||||
type Filter,
|
type Filter,
|
||||||
getEventHash,
|
getEventHash,
|
||||||
getPublicKey,
|
getPublicKey,
|
||||||
|
Kind,
|
||||||
matchFilter,
|
matchFilter,
|
||||||
nip05,
|
nip05,
|
||||||
nip19,
|
nip19,
|
||||||
|
|
Loading…
Reference in New Issue