mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-27 10:32:58 +02:00
40 lines
1.3 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
}
|