mirror of
https://github.com/laurent22/joplin.git
synced 2025-01-23 18:53:36 +02:00
Api: Allow preserving timestamps when updating a note
This commit is contained in:
parent
5e040c062c
commit
ad7a80e260
@ -183,6 +183,59 @@ describe('services_rest_Api', function() {
|
|||||||
|
|
||||||
expect(response.user_updated_time).toBe(updatedTime);
|
expect(response.user_updated_time).toBe(updatedTime);
|
||||||
expect(response.user_created_time).toBe(createdTime);
|
expect(response.user_created_time).toBe(createdTime);
|
||||||
|
|
||||||
|
const timeBefore = Date.now();
|
||||||
|
|
||||||
|
response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||||
|
parent_id: f.id,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const newNote = await Note.load(response.id);
|
||||||
|
expect(newNote.user_updated_time).toBeGreaterThanOrEqual(timeBefore);
|
||||||
|
expect(newNote.user_created_time).toBeGreaterThanOrEqual(timeBefore);
|
||||||
|
}));
|
||||||
|
|
||||||
|
it('should preserve user timestamps when updating notes', asyncTest(async () => {
|
||||||
|
const folder = await Folder.save({ title: 'mon carnet' });
|
||||||
|
|
||||||
|
const updatedTime = Date.now() - 1000;
|
||||||
|
const createdTime = Date.now() - 10000;
|
||||||
|
|
||||||
|
const response = await api.route('POST', 'notes', null, JSON.stringify({
|
||||||
|
parent_id: folder.id,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const noteId = response.id;
|
||||||
|
|
||||||
|
{
|
||||||
|
// Check that if user timestamps are supplied, they are preserved by the API
|
||||||
|
|
||||||
|
await api.route('PUT', `notes/${noteId}`, null, JSON.stringify({
|
||||||
|
user_updated_time: updatedTime,
|
||||||
|
user_created_time: createdTime,
|
||||||
|
title: 'mod',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const modNote = await Note.load(noteId);
|
||||||
|
expect(modNote.title).toBe('mod');
|
||||||
|
expect(modNote.user_updated_time).toBe(updatedTime);
|
||||||
|
expect(modNote.user_created_time).toBe(createdTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Check if no user timestamps are supplied they are automatically updated.
|
||||||
|
|
||||||
|
const beforeTime = Date.now();
|
||||||
|
|
||||||
|
await api.route('PUT', `notes/${noteId}`, null, JSON.stringify({
|
||||||
|
title: 'mod2',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const modNote = await Note.load(noteId);
|
||||||
|
expect(modNote.title).toBe('mod2');
|
||||||
|
expect(modNote.user_updated_time).toBeGreaterThanOrEqual(beforeTime);
|
||||||
|
expect(modNote.user_created_time).toBeGreaterThanOrEqual(createdTime);
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should create notes with supplied ID', asyncTest(async () => {
|
it('should create notes with supplied ID', asyncTest(async () => {
|
||||||
|
@ -432,6 +432,8 @@ export default class Api {
|
|||||||
const timestamp = Date.now();
|
const timestamp = Date.now();
|
||||||
note.updated_time = timestamp;
|
note.updated_time = timestamp;
|
||||||
note.created_time = timestamp;
|
note.created_time = timestamp;
|
||||||
|
if (!('user_updated_time' in note)) note.user_updated_time = timestamp;
|
||||||
|
if (!('user_created_time' in note)) note.user_created_time = timestamp;
|
||||||
|
|
||||||
note = await Note.save(note, saveOptions);
|
note = await Note.save(note, saveOptions);
|
||||||
|
|
||||||
@ -454,7 +456,24 @@ export default class Api {
|
|||||||
|
|
||||||
if (!note) throw new ErrorNotFound();
|
if (!note) throw new ErrorNotFound();
|
||||||
|
|
||||||
const updatedNote = await this.defaultAction_(BaseModel.TYPE_NOTE, request, id, link);
|
const saveOptions = {
|
||||||
|
...this.defaultSaveOptions_(note, 'PUT'),
|
||||||
|
autoTimestamp: false, // No auto-timestamp because user may have provided them
|
||||||
|
userSideValidation: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
const timestamp = Date.now();
|
||||||
|
|
||||||
|
const newProps = request.bodyJson(this.readonlyProperties('PUT'));
|
||||||
|
if (!('user_updated_time' in newProps)) newProps.user_updated_time = timestamp;
|
||||||
|
|
||||||
|
let newNote = {
|
||||||
|
...note,
|
||||||
|
...newProps,
|
||||||
|
updated_time: timestamp,
|
||||||
|
};
|
||||||
|
|
||||||
|
newNote = await Note.save(newNote, saveOptions);
|
||||||
|
|
||||||
const requestNote = JSON.parse(request.body);
|
const requestNote = JSON.parse(request.body);
|
||||||
if (requestNote.tags || requestNote.tags === '') {
|
if (requestNote.tags || requestNote.tags === '') {
|
||||||
@ -462,7 +481,7 @@ export default class Api {
|
|||||||
await Tag.setNoteTagsByTitles(id, tagTitles);
|
await Tag.setNoteTagsByTitles(id, tagTitles);
|
||||||
}
|
}
|
||||||
|
|
||||||
return updatedNote;
|
return newNote;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.defaultAction_(BaseModel.TYPE_NOTE, request, id, link);
|
return this.defaultAction_(BaseModel.TYPE_NOTE, request, id, link);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user