feat(note): save createdAt in a separate column

To keep the createdAt date stable, even when the revisions are dropped,
this adds a separate column
 to store this data separately from revisions.

Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
David Mehren 2022-02-14 16:59:36 +01:00
parent 342efcd7b7
commit 09ec447069
4 changed files with 10 additions and 6 deletions

View file

@ -5,6 +5,7 @@
*/
import {
Column,
CreateDateColumn,
Entity,
JoinTable,
ManyToMany,
@ -94,6 +95,9 @@ export class Note {
})
version: number;
@CreateDateColumn()
createdAt: Date;
// eslint-disable-next-line @typescript-eslint/no-empty-function
private constructor() {}
@ -102,7 +106,10 @@ export class Note {
* @param owner The owner of the note
* @param alias Optional primary alias
*/
public static create(owner: User | null, alias?: string): Omit<Note, 'id'> {
public static create(
owner: User | null,
alias?: string,
): Omit<Note, 'id' | 'createdAt'> {
const newNote = new Note();
newNote.publicId = generatePublicId();
newNote.aliases = alias

View file

@ -775,7 +775,6 @@ describe('NotesService', () => {
expect(metadataDto.aliases).toHaveLength(1);
expect(metadataDto.aliases[0].name).toEqual((await note.aliases)[0].name);
expect(metadataDto.title).toEqual(note.title);
expect(metadataDto.createdAt).toEqual(revisions[0].createdAt);
expect(metadataDto.description).toEqual(note.description);
expect(metadataDto.editedBy).toHaveLength(1);
expect(metadataDto.editedBy[0]).toEqual(user.username);
@ -879,7 +878,6 @@ describe('NotesService', () => {
(await note.aliases)[0].name,
);
expect(noteDto.metadata.title).toEqual(note.title);
expect(noteDto.metadata.createdAt).toEqual(revisions[0].createdAt);
expect(noteDto.metadata.description).toEqual(note.description);
expect(noteDto.metadata.editedBy).toHaveLength(1);
expect(noteDto.metadata.editedBy[0]).toEqual(user.username);
@ -900,7 +898,6 @@ describe('NotesService', () => {
);
expect(noteDto.metadata.tags).toHaveLength(1);
expect(noteDto.metadata.tags[0]).toEqual((await note.tags)[0].name);
expect(noteDto.metadata.updatedAt).toEqual(revisions[0].createdAt);
expect(noteDto.metadata.updateUsername).toEqual(user.username);
expect(noteDto.metadata.viewCount).toEqual(note.viewCount);
expect(noteDto.content).toEqual(content);

View file

@ -405,7 +405,7 @@ export class NotesService {
),
primaryAddress: (await getPrimaryAlias(note)) ?? note.id,
title: note.title ?? '',
createdAt: (await this.getFirstRevision(note)).createdAt,
createdAt: note.createdAt,
description: note.description ?? '',
editedBy: (await this.getAuthorUsers(note)).map((user) => user.username),
permissions: await this.toNotePermissionsDto(note),

View file

@ -315,7 +315,7 @@ describe('Notes', () => {
'test5a',
);
// save the creation time
const createDate = (await note.revisions)[0].createdAt;
const createDate = note.createdAt;
// wait one second
await new Promise((r) => setTimeout(r, 1000));
// update the note