1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-18 09:35:20 +02:00
joplin/packages/lib/services/rest/routes/events.ts

40 lines
1.3 KiB
TypeScript

import { ModelType } from '../../../BaseModel';
import { Request, RequestMethod } from '../Api';
import { ErrorBadRequest, ErrorNotFound } from '../utils/errors';
import ItemChange, { ChangeSinceIdOptions } from '../../../models/ItemChange';
import requestFields from '../utils/requestFields';
export default async function(request: Request, id: string = null, _link: string = null) {
if (request.method === RequestMethod.GET) {
const options: ChangeSinceIdOptions = {
limit: 100,
fields: requestFields(request, ModelType.ItemChange, ['id', 'item_type', 'item_id', 'type', 'created_time']),
};
if (!id) {
if (!('cursor' in request.query)) {
return {
items: [],
has_more: false,
cursor: (await ItemChange.lastChangeId()).toString(),
};
} else {
const cursor = Number(request.query.cursor);
if (isNaN(cursor)) throw new ErrorBadRequest(`Invalid cursor: ${request.query.cursor}`);
const changes = await ItemChange.changesSinceId(cursor, options);
return {
items: changes,
has_more: changes.length >= options.limit,
cursor: (changes.length ? changes[changes.length - 1].id : cursor).toString(),
};
}
} else {
const change = await ItemChange.load(id, { fields: options.fields });
if (!change) throw new ErrorNotFound();
return change;
}
}
}