mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-25 19:26:31 -05:00
refactor: remove cycling dependency between notes and revisions
Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
parent
8cdc90bb8e
commit
8596bed729
7 changed files with 10 additions and 66 deletions
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
import { forwardRef, Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { ConfigModule } from '@nestjs/config';
|
import { ConfigModule } from '@nestjs/config';
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ import { Tag } from './tag.entity';
|
||||||
User,
|
User,
|
||||||
Alias,
|
Alias,
|
||||||
]),
|
]),
|
||||||
forwardRef(() => RevisionsModule),
|
RevisionsModule,
|
||||||
UsersModule,
|
UsersModule,
|
||||||
GroupsModule,
|
GroupsModule,
|
||||||
LoggerModule,
|
LoggerModule,
|
||||||
|
|
|
@ -359,38 +359,6 @@ describe('NotesService', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getLatestRevision', () => {
|
|
||||||
it('works', async () => {
|
|
||||||
const content = 'testContent';
|
|
||||||
jest
|
|
||||||
.spyOn(noteRepo, 'save')
|
|
||||||
.mockImplementation(async (note: Note): Promise<Note> => note);
|
|
||||||
const newNote = await service.createNote(content, null);
|
|
||||||
const revisions = await newNote.revisions;
|
|
||||||
jest.spyOn(revisionRepo, 'findOne').mockResolvedValueOnce(revisions[0]);
|
|
||||||
await service.getLatestRevision(newNote).then((result) => {
|
|
||||||
expect(result).toEqual(revisions[0]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getFirstRevision', () => {
|
|
||||||
it('works', async () => {
|
|
||||||
const user = {} as User;
|
|
||||||
user.username = 'hardcoded';
|
|
||||||
const content = 'testContent';
|
|
||||||
jest
|
|
||||||
.spyOn(noteRepo, 'save')
|
|
||||||
.mockImplementation(async (note: Note): Promise<Note> => note);
|
|
||||||
const newNote = await service.createNote(content, null);
|
|
||||||
const revisions = await newNote.revisions;
|
|
||||||
jest.spyOn(revisionRepo, 'findOne').mockResolvedValueOnce(revisions[0]);
|
|
||||||
await service.getLatestRevision(newNote).then((result) => {
|
|
||||||
expect(result).toEqual(revisions[0]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('getNoteByIdOrAlias', () => {
|
describe('getNoteByIdOrAlias', () => {
|
||||||
it('works', async () => {
|
it('works', async () => {
|
||||||
const user = User.create('hardcoded', 'Testy') as User;
|
const user = User.create('hardcoded', 'Testy') as User;
|
||||||
|
|
|
@ -39,7 +39,6 @@ export class NotesService {
|
||||||
@InjectRepository(User) private userRepository: Repository<User>,
|
@InjectRepository(User) private userRepository: Repository<User>,
|
||||||
@Inject(UsersService) private usersService: UsersService,
|
@Inject(UsersService) private usersService: UsersService,
|
||||||
@Inject(GroupsService) private groupsService: GroupsService,
|
@Inject(GroupsService) private groupsService: GroupsService,
|
||||||
@Inject(forwardRef(() => RevisionsService))
|
|
||||||
private revisionsService: RevisionsService,
|
private revisionsService: RevisionsService,
|
||||||
@Inject(noteConfiguration.KEY)
|
@Inject(noteConfiguration.KEY)
|
||||||
private noteConfig: NoteConfig,
|
private noteConfig: NoteConfig,
|
||||||
|
@ -117,27 +116,7 @@ export class NotesService {
|
||||||
* @return {string} the content of the note
|
* @return {string} the content of the note
|
||||||
*/
|
*/
|
||||||
async getNoteContent(note: Note): Promise<string> {
|
async getNoteContent(note: Note): Promise<string> {
|
||||||
return (await this.getLatestRevision(note)).content;
|
return (await this.revisionsService.getLatestRevision(note)).content;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @async
|
|
||||||
* Get the first revision of the note.
|
|
||||||
* @param {Note} note - the note to use
|
|
||||||
* @return {Revision} the first revision of the note
|
|
||||||
*/
|
|
||||||
async getLatestRevision(note: Note): Promise<Revision> {
|
|
||||||
return await this.revisionsService.getLatestRevision(note);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @async
|
|
||||||
* Get the last revision of the note.
|
|
||||||
* @param {Note} note - the note to use
|
|
||||||
* @return {Revision} the last revision of the note
|
|
||||||
*/
|
|
||||||
async getFirstRevision(note: Note): Promise<Revision> {
|
|
||||||
return await this.revisionsService.getFirstRevision(note);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -264,7 +243,7 @@ export class NotesService {
|
||||||
* @return {User} user to be used as updateUser in the NoteDto
|
* @return {User} user to be used as updateUser in the NoteDto
|
||||||
*/
|
*/
|
||||||
async calculateUpdateUser(note: Note): Promise<User | null> {
|
async calculateUpdateUser(note: Note): Promise<User | null> {
|
||||||
const lastRevision = await this.getLatestRevision(note);
|
const lastRevision = await this.revisionsService.getLatestRevision(note);
|
||||||
const edits = await lastRevision.edits;
|
const edits = await lastRevision.edits;
|
||||||
if (edits.length > 0) {
|
if (edits.length > 0) {
|
||||||
// Sort the last Revisions Edits by their updatedAt Date to get the latest one
|
// Sort the last Revisions Edits by their updatedAt Date to get the latest one
|
||||||
|
@ -333,7 +312,8 @@ export class NotesService {
|
||||||
permissions: await this.toNotePermissionsDto(note),
|
permissions: await this.toNotePermissionsDto(note),
|
||||||
tags: await this.toTagList(note),
|
tags: await this.toTagList(note),
|
||||||
version: note.version,
|
version: note.version,
|
||||||
updatedAt: (await this.getLatestRevision(note)).createdAt,
|
updatedAt: (await this.revisionsService.getLatestRevision(note))
|
||||||
|
.createdAt,
|
||||||
updateUsername: updateUser ? updateUser.username : null,
|
updateUsername: updateUser ? updateUser.username : null,
|
||||||
viewCount: note.viewCount,
|
viewCount: note.viewCount,
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,13 +3,12 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
import { forwardRef, Module } from '@nestjs/common';
|
import { Module } from '@nestjs/common';
|
||||||
import { ConfigModule } from '@nestjs/config';
|
import { ConfigModule } from '@nestjs/config';
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
import { AuthorsModule } from '../authors/authors.module';
|
import { AuthorsModule } from '../authors/authors.module';
|
||||||
import { LoggerModule } from '../logger/logger.module';
|
import { LoggerModule } from '../logger/logger.module';
|
||||||
import { NotesModule } from '../notes/notes.module';
|
|
||||||
import { Edit } from './edit.entity';
|
import { Edit } from './edit.entity';
|
||||||
import { EditService } from './edit.service';
|
import { EditService } from './edit.service';
|
||||||
import { Revision } from './revision.entity';
|
import { Revision } from './revision.entity';
|
||||||
|
@ -18,7 +17,6 @@ import { RevisionsService } from './revisions.service';
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
TypeOrmModule.forFeature([Revision, Edit]),
|
TypeOrmModule.forFeature([Revision, Edit]),
|
||||||
forwardRef(() => NotesModule),
|
|
||||||
LoggerModule,
|
LoggerModule,
|
||||||
ConfigModule,
|
ConfigModule,
|
||||||
AuthorsModule,
|
AuthorsModule,
|
||||||
|
|
|
@ -3,14 +3,13 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
import { forwardRef, Inject, Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
import { Equal, Repository } from 'typeorm';
|
import { Equal, Repository } from 'typeorm';
|
||||||
|
|
||||||
import { NotInDBError } from '../errors/errors';
|
import { NotInDBError } from '../errors/errors';
|
||||||
import { ConsoleLoggerService } from '../logger/console-logger.service';
|
import { ConsoleLoggerService } from '../logger/console-logger.service';
|
||||||
import { Note } from '../notes/note.entity';
|
import { Note } from '../notes/note.entity';
|
||||||
import { NotesService } from '../notes/notes.service';
|
|
||||||
import { EditService } from './edit.service';
|
import { EditService } from './edit.service';
|
||||||
import { RevisionMetadataDto } from './revision-metadata.dto';
|
import { RevisionMetadataDto } from './revision-metadata.dto';
|
||||||
import { RevisionDto } from './revision.dto';
|
import { RevisionDto } from './revision.dto';
|
||||||
|
@ -27,7 +26,6 @@ export class RevisionsService {
|
||||||
private readonly logger: ConsoleLoggerService,
|
private readonly logger: ConsoleLoggerService,
|
||||||
@InjectRepository(Revision)
|
@InjectRepository(Revision)
|
||||||
private revisionRepository: Repository<Revision>,
|
private revisionRepository: Repository<Revision>,
|
||||||
@Inject(forwardRef(() => NotesService)) private notesService: NotesService,
|
|
||||||
private editService: EditService,
|
private editService: EditService,
|
||||||
) {
|
) {
|
||||||
this.logger.setContext(RevisionsService.name);
|
this.logger.setContext(RevisionsService.name);
|
||||||
|
|
|
@ -269,7 +269,7 @@ describe('Notes', () => {
|
||||||
user,
|
user,
|
||||||
'test5',
|
'test5',
|
||||||
);
|
);
|
||||||
const revision = await testSetup.notesService.getLatestRevision(note);
|
const revision = await testSetup.revisionsService.getLatestRevision(note);
|
||||||
const response = await agent
|
const response = await agent
|
||||||
.get(`/api/private/notes/test5/revisions/${revision.id}`)
|
.get(`/api/private/notes/test5/revisions/${revision.id}`)
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
|
|
|
@ -361,7 +361,7 @@ describe('Notes', () => {
|
||||||
|
|
||||||
'test7',
|
'test7',
|
||||||
);
|
);
|
||||||
const revision = await testSetup.notesService.getLatestRevision(note);
|
const revision = await testSetup.revisionsService.getLatestRevision(note);
|
||||||
const response = await request(testSetup.app.getHttpServer())
|
const response = await request(testSetup.app.getHttpServer())
|
||||||
.get(`/api/v2/notes/test7/revisions/${revision.id}`)
|
.get(`/api/v2/notes/test7/revisions/${revision.id}`)
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
|
|
Loading…
Reference in a new issue