RevisionEntity: Change primary key type from UUID to number

The precision of sqlites datetime() timestamp is only one second (see https://www.sqlite.org/lang_datefunc.html). Therefore we could not order revisions of one note that were created in the same second. To remedy this, the primary key was changed to a monotonically increasing number, which solves the ordering problem.

Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
David Mehren 2020-09-22 20:06:16 +02:00
parent 1abb472621
commit d462a571d8
No known key found for this signature in database
GPG key ID: 185982BA4C42B7C3
5 changed files with 10 additions and 9 deletions

View file

@ -58,7 +58,7 @@ entity "Session" as seesion {
entity "Revision" { entity "Revision" {
*id : uuid <<generated>> *id : number <<generated>>
-- --
*noteId : uuid <<FK Note>> *noteId : uuid <<FK Note>>
*content : text *content : text
@ -78,7 +78,7 @@ entity "Authorship" {
} }
entity "RevisionAuthorship" { entity "RevisionAuthorship" {
*revisionId : uuid <<FK Revision>> *revisionId : number <<FK Revision>>
*authorshipId : uuid <<FK Authorship>> *authorshipId : uuid <<FK Authorship>>
} }

View file

@ -2,7 +2,7 @@ import { IsDate, IsNumber, IsString } from 'class-validator';
import { Revision } from './revision.entity'; import { Revision } from './revision.entity';
export class RevisionMetadataDto { export class RevisionMetadataDto {
@IsString() @IsNumber()
id: Revision['id']; id: Revision['id'];
@IsDate() @IsDate()

View file

@ -1,8 +1,8 @@
import { IsString } from 'class-validator'; import { IsNumber, IsString } from 'class-validator';
import { Revision } from './revision.entity'; import { Revision } from './revision.entity';
export class RevisionDto { export class RevisionDto {
@IsString() @IsNumber()
id: Revision['id']; id: Revision['id'];
@IsString() @IsString()
content: string; content: string;

View file

@ -16,8 +16,8 @@ import { Authorship } from './authorship.entity';
*/ */
@Entity() @Entity()
export class Revision { export class Revision {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn()
id: string; id: number;
/** /**
* The patch from the previous revision to this one. * The patch from the previous revision to this one.

View file

@ -16,14 +16,14 @@ export class RevisionsService {
this.logger.warn('Using hardcoded data!'); this.logger.warn('Using hardcoded data!');
return [ return [
{ {
id: 'some-uuid', id: 42,
updatedAt: new Date(), updatedAt: new Date(),
length: 42, length: 42,
}, },
]; ];
} }
getNoteRevision(noteIdOrAlias: string, revisionId: string): RevisionDto { getNoteRevision(noteIdOrAlias: string, revisionId: number): RevisionDto {
this.logger.warn('Using hardcoded data!'); this.logger.warn('Using hardcoded data!');
return { return {
id: revisionId, id: revisionId,
@ -39,6 +39,7 @@ export class RevisionsService {
}, },
order: { order: {
createdAt: 'DESC', createdAt: 'DESC',
id: 'DESC',
}, },
}); });
} }