server: refactor pagination

* fix transaction usgae in repos
* other bug fixes
This commit is contained in:
Philipinho
2024-04-01 01:23:52 +01:00
parent ade3a5b589
commit 4913975e99
38 changed files with 648 additions and 756 deletions

View File

@ -14,9 +14,9 @@ export class CreatePageDto {
icon?: string;
@IsOptional()
@IsString()
@IsUUID()
parentPageId?: string;
@IsString()
@IsUUID()
spaceId: string;
}

View File

@ -1,6 +0,0 @@
import { IsUUID } from 'class-validator';
export class DeletePageDto {
@IsUUID()
pageId: string;
}

View File

@ -1,6 +0,0 @@
import { IsUUID } from 'class-validator';
export class HistoryDetailsDto {
@IsUUID()
historyId: string;
}

View File

@ -1,6 +0,0 @@
import { IsUUID } from 'class-validator';
export class PageDetailsDto {
@IsUUID()
pageId: string;
}

View File

@ -1,6 +0,0 @@
import { IsUUID } from 'class-validator';
export class PageHistoryDto {
@IsUUID()
pageId: string;
}

View File

@ -0,0 +1,16 @@
import { IsUUID } from 'class-validator';
export class PageIdDto {
@IsUUID()
pageId: string;
}
export class SpaceIdDto {
@IsUUID()
spaceId: string;
}
export class PageHistoryIdDto {
@IsUUID()
historyId: string;
}

View File

@ -10,16 +10,13 @@ import { PageService } from './services/page.service';
import { CreatePageDto } from './dto/create-page.dto';
import { UpdatePageDto } from './dto/update-page.dto';
import { MovePageDto } from './dto/move-page.dto';
import { PageDetailsDto } from './dto/page-details.dto';
import { DeletePageDto } from './dto/delete-page.dto';
import { PageHistoryIdDto, PageIdDto, SpaceIdDto } from './dto/page.dto';
import { PageOrderingService } from './services/page-ordering.service';
import { PageHistoryService } from './services/page-history.service';
import { HistoryDetailsDto } from './dto/history-details.dto';
import { PageHistoryDto } from './dto/page-history.dto';
import { AuthUser } from '../../decorators/auth-user.decorator';
import { AuthWorkspace } from '../../decorators/auth-workspace.decorator';
import { JwtAuthGuard } from '../../guards/jwt-auth.guard';
import { PaginationOptions } from 'src/helpers/pagination/pagination-options';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { User, Workspace } from '@docmost/db/types/entity.types';
@UseGuards(JwtAuthGuard)
@ -33,8 +30,8 @@ export class PageController {
@HttpCode(HttpStatus.OK)
@Post('/info')
async getPage(@Body() input: PageDetailsDto) {
return this.pageService.findById(input.pageId);
async getPage(@Body() pageIdDto: PageIdDto) {
return this.pageService.findById(pageIdDto.pageId);
}
@HttpCode(HttpStatus.CREATED)
@ -59,13 +56,13 @@ export class PageController {
@HttpCode(HttpStatus.OK)
@Post('delete')
async delete(@Body() deletePageDto: DeletePageDto) {
await this.pageService.forceDelete(deletePageDto.pageId);
async delete(@Body() pageIdDto: PageIdDto) {
await this.pageService.forceDelete(pageIdDto.pageId);
}
@HttpCode(HttpStatus.OK)
@Post('restore')
async restore(@Body() deletePageDto: DeletePageDto) {
async restore(@Body() pageIdDto: PageIdDto) {
// await this.pageService.restore(deletePageDto.id);
}
@ -78,10 +75,10 @@ export class PageController {
@HttpCode(HttpStatus.OK)
@Post('recent')
async getRecentSpacePages(
@Body() { spaceId },
@Body() spaceIdDto: SpaceIdDto,
@Body() pagination: PaginationOptions,
) {
return this.pageService.getRecentSpacePages(spaceId, pagination);
return this.pageService.getRecentSpacePages(spaceIdDto.spaceId, pagination);
}
@HttpCode(HttpStatus.OK)
@ -106,7 +103,7 @@ export class PageController {
@HttpCode(HttpStatus.OK)
@Post('/history')
async getPageHistory(
@Body() dto: PageHistoryDto,
@Body() dto: PageIdDto,
@Body() pagination: PaginationOptions,
) {
return this.pageHistoryService.findHistoryByPageId(dto.pageId, pagination);
@ -114,7 +111,7 @@ export class PageController {
@HttpCode(HttpStatus.OK)
@Post('/history/details')
async get(@Body() dto: HistoryDetailsDto) {
async get(@Body() dto: PageHistoryIdDto) {
return this.pageHistoryService.findById(dto.historyId);
}
}

View File

@ -1,9 +1,8 @@
import { BadRequestException, Injectable } from '@nestjs/common';
import { PageHistoryRepo } from '@docmost/db/repos/page/page-history.repo';
import { Page, PageHistory } from '@docmost/db/types/entity.types';
import { PaginationOptions } from 'src/helpers/pagination/pagination-options';
import { PaginatedResult } from 'src/helpers/pagination/paginated-result';
import { PaginationMetaDto } from 'src/helpers/pagination/pagination-meta-dto';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { PaginationResult } from '@docmost/db/pagination/pagination';
@Injectable()
export class PageHistoryService {
@ -35,14 +34,12 @@ export class PageHistoryService {
async findHistoryByPageId(
pageId: string,
paginationOptions: PaginationOptions,
) {
const { pageHistory, count } =
await this.pageHistoryRepo.findPageHistoryByPageId(
pageId,
paginationOptions,
);
): Promise<PaginationResult<any>> {
const pageHistory = await this.pageHistoryRepo.findPageHistoryByPageId(
pageId,
paginationOptions,
);
const paginationMeta = new PaginationMetaDto({ count, paginationOptions });
return new PaginatedResult(pageHistory, paginationMeta);
return pageHistory;
}
}

View File

@ -11,9 +11,8 @@ import { PageWithOrderingDto } from '../dto/page-with-ordering.dto';
import { transformPageResult } from '../page.util';
import { PageRepo } from '@docmost/db/repos/page/page.repo';
import { Page } from '@docmost/db/types/entity.types';
import { PaginationOptions } from 'src/helpers/pagination/pagination-options';
import { PaginationMetaDto } from 'src/helpers/pagination/pagination-meta-dto';
import { PaginatedResult } from 'src/helpers/pagination/paginated-result';
import { PaginationOptions } from '@docmost/db/pagination/pagination-options';
import { PaginationResult } from '@docmost/db/pagination/pagination';
@Injectable()
export class PageService {
@ -96,6 +95,30 @@ export class PageService {
);
}
async getSidebarPagesBySpaceId(
spaceId: string,
limit = 200,
): Promise<PageWithOrderingDto[]> {
const pages = await this.pageRepo.getSpaceSidebarPages(spaceId, limit);
return transformPageResult(pages);
}
async getRecentSpacePages(
spaceId: string,
pagination: PaginationOptions,
): Promise<PaginationResult<Page>> {
const pages = await this.pageRepo.getRecentPagesInSpace(
spaceId,
pagination,
);
return pages;
}
async forceDelete(pageId: string): Promise<void> {
await this.pageRepo.deletePage(pageId);
}
/*
// TODO: page deletion and restoration
async delete(pageId: string): Promise<void> {
@ -186,29 +209,4 @@ export class PageService {
}
}
*/
async forceDelete(pageId: string): Promise<void> {
await this.pageRepo.deletePage(pageId);
}
async getSidebarPagesBySpaceId(
spaceId: string,
limit = 200,
): Promise<PageWithOrderingDto[]> {
const pages = await this.pageRepo.getSpaceSidebarPages(spaceId, limit);
return transformPageResult(pages);
}
async getRecentSpacePages(
spaceId: string,
paginationOptions: PaginationOptions,
): Promise<PaginatedResult<Page>> {
const { pages, count } = await this.pageRepo.getRecentPagesInSpace(
spaceId,
paginationOptions,
);
const paginationMeta = new PaginationMetaDto({ count, paginationOptions });
return new PaginatedResult(pages, paginationMeta);
}
}