mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-25 03:06:31 -05:00
feat(revision): include edits in dto
Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
parent
50c8f39c0c
commit
7050c9f13b
7 changed files with 48 additions and 6 deletions
|
@ -172,7 +172,7 @@ export class NotesController {
|
|||
@RequestNote() note: Note,
|
||||
@Param('revisionId') revisionId: number,
|
||||
): Promise<RevisionDto> {
|
||||
return this.revisionsService.toRevisionDto(
|
||||
return await this.revisionsService.toRevisionDto(
|
||||
await this.revisionsService.getRevision(note, revisionId),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -264,7 +264,7 @@ export class NotesController {
|
|||
@RequestNote() note: Note,
|
||||
@Param('revisionId') revisionId: number,
|
||||
): Promise<RevisionDto> {
|
||||
return this.revisionsService.toRevisionDto(
|
||||
return await this.revisionsService.toRevisionDto(
|
||||
await this.revisionsService.getRevision(note, revisionId),
|
||||
);
|
||||
}
|
||||
|
|
24
src/revisions/edit.service.ts
Normal file
24
src/revisions/edit.service.ts
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { EditDto } from './edit.dto';
|
||||
import { Edit } from './edit.entity';
|
||||
|
||||
@Injectable()
|
||||
export class EditService {
|
||||
async toEditDto(edit: Edit): Promise<EditDto> {
|
||||
const authorUser = await (await edit.author).user;
|
||||
|
||||
return {
|
||||
username: authorUser ? authorUser.username : null,
|
||||
startPos: edit.startPos,
|
||||
endPos: edit.endPos,
|
||||
createdAt: edit.createdAt,
|
||||
updatedAt: edit.updatedAt,
|
||||
};
|
||||
}
|
||||
}
|
|
@ -5,9 +5,10 @@
|
|||
*/
|
||||
import { ApiProperty } from '@nestjs/swagger';
|
||||
import { Type } from 'class-transformer';
|
||||
import { IsDate, IsNumber, IsString } from 'class-validator';
|
||||
import { IsDate, IsNumber, IsString, ValidateNested } from 'class-validator';
|
||||
|
||||
import { BaseDto } from '../utils/base.dto.';
|
||||
import { EditDto } from './edit.dto';
|
||||
import { Revision } from './revision.entity';
|
||||
|
||||
export class RevisionDto extends BaseDto {
|
||||
|
@ -42,4 +43,11 @@ export class RevisionDto extends BaseDto {
|
|||
@Type(() => Date)
|
||||
@ApiProperty()
|
||||
createdAt: Date;
|
||||
|
||||
/**
|
||||
* All edit objects which are used in the revision.
|
||||
*/
|
||||
@ValidateNested()
|
||||
@ApiProperty()
|
||||
edits: EditDto[];
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import { AuthorsModule } from '../authors/authors.module';
|
|||
import { LoggerModule } from '../logger/logger.module';
|
||||
import { NotesModule } from '../notes/notes.module';
|
||||
import { Edit } from './edit.entity';
|
||||
import { EditService } from './edit.service';
|
||||
import { Revision } from './revision.entity';
|
||||
import { RevisionsService } from './revisions.service';
|
||||
|
||||
|
@ -22,7 +23,7 @@ import { RevisionsService } from './revisions.service';
|
|||
ConfigModule,
|
||||
AuthorsModule,
|
||||
],
|
||||
providers: [RevisionsService],
|
||||
exports: [RevisionsService],
|
||||
providers: [RevisionsService, EditService],
|
||||
exports: [RevisionsService, EditService],
|
||||
})
|
||||
export class RevisionsModule {}
|
||||
|
|
|
@ -25,6 +25,7 @@ import { NoteUserPermission } from '../permissions/note-user-permission.entity';
|
|||
import { Session } from '../users/session.entity';
|
||||
import { User } from '../users/user.entity';
|
||||
import { Edit } from './edit.entity';
|
||||
import { EditService } from './edit.service';
|
||||
import { Revision } from './revision.entity';
|
||||
import { RevisionsService } from './revisions.service';
|
||||
|
||||
|
@ -36,6 +37,7 @@ describe('RevisionsService', () => {
|
|||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
RevisionsService,
|
||||
EditService,
|
||||
{
|
||||
provide: getRepositoryToken(Revision),
|
||||
useClass: Repository,
|
||||
|
|
|
@ -11,6 +11,7 @@ import { NotInDBError } from '../errors/errors';
|
|||
import { ConsoleLoggerService } from '../logger/console-logger.service';
|
||||
import { Note } from '../notes/note.entity';
|
||||
import { NotesService } from '../notes/notes.service';
|
||||
import { EditService } from './edit.service';
|
||||
import { RevisionMetadataDto } from './revision-metadata.dto';
|
||||
import { RevisionDto } from './revision.dto';
|
||||
import { Revision } from './revision.entity';
|
||||
|
@ -22,6 +23,7 @@ export class RevisionsService {
|
|||
@InjectRepository(Revision)
|
||||
private revisionRepository: Repository<Revision>,
|
||||
@Inject(forwardRef(() => NotesService)) private notesService: NotesService,
|
||||
private editService: EditService,
|
||||
) {
|
||||
this.logger.setContext(RevisionsService.name);
|
||||
}
|
||||
|
@ -109,12 +111,17 @@ export class RevisionsService {
|
|||
};
|
||||
}
|
||||
|
||||
toRevisionDto(revision: Revision): RevisionDto {
|
||||
async toRevisionDto(revision: Revision): Promise<RevisionDto> {
|
||||
return {
|
||||
id: revision.id,
|
||||
content: revision.content,
|
||||
createdAt: revision.createdAt,
|
||||
patch: revision.patch,
|
||||
edits: await Promise.all(
|
||||
(
|
||||
await revision.edits
|
||||
).map(async (edit) => await this.editService.toEditDto(edit)),
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue