diff --git a/apps/server/src/core/page/page.controller.ts b/apps/server/src/core/page/page.controller.ts index 3096abc..94dc93e 100644 --- a/apps/server/src/core/page/page.controller.ts +++ b/apps/server/src/core/page/page.controller.ts @@ -28,6 +28,12 @@ export class PageController { private readonly pageHistoryService: PageHistoryService, ) {} + @HttpCode(HttpStatus.OK) + @Post() + async getSpacePages(@Body() spaceIdDto: SpaceIdDto) { + return this.pageService.getSidebarPagesBySpaceId(spaceIdDto.spaceId); + } + @HttpCode(HttpStatus.OK) @Post('/info') async getPage(@Body() pageIdDto: PageIdDto) { @@ -81,22 +87,16 @@ export class PageController { return this.pageService.getRecentSpacePages(spaceIdDto.spaceId, pagination); } - @HttpCode(HttpStatus.OK) - @Post() - async getSpacePages(spaceId: string) { - return this.pageService.getSidebarPagesBySpaceId(spaceId); - } - @HttpCode(HttpStatus.OK) @Post('ordering') - async getSpacePageOrder(spaceId: string) { - return this.pageOrderService.getSpacePageOrder(spaceId); + async getSpacePageOrder(@Body() spaceIdDto: SpaceIdDto) { + return this.pageOrderService.getSpacePageOrder(spaceIdDto.spaceId); } @HttpCode(HttpStatus.OK) @Post('tree') - async spacePageTree(@Body() { spaceId }) { - return this.pageOrderService.convertToTree(spaceId); + async spacePageTree(@Body() spaceIdDto: SpaceIdDto) { + return this.pageOrderService.convertToTree(spaceIdDto.spaceId); } // TODO: scope to workspaces diff --git a/apps/server/src/core/page/services/page-ordering.service.ts b/apps/server/src/core/page/services/page-ordering.service.ts index a469e8f..32337b4 100644 --- a/apps/server/src/core/page/services/page-ordering.service.ts +++ b/apps/server/src/core/page/services/page-ordering.service.ts @@ -27,7 +27,6 @@ export class PageOrderingService { ) {} // TODO: scope to workspace and space - async movePage(dto: MovePageDto, trx?: KyselyTransaction): Promise { await executeTx( this.db, @@ -59,8 +58,6 @@ export class PageOrderingService { ); orderPageList(spaceOrdering.childrenIds, dto); - // it should save or update right? - // await manager.save(spaceOrdering); //TODO: to update or create new record? pretty confusing await trx .updateTable('pageOrdering') .set(spaceOrdering) @@ -146,7 +143,7 @@ export class PageOrderingService { trx, ); } else { - await this.addToSpacePageOrder(spaceId, pageId, trx); + await this.addToSpacePageOrder(pageId, spaceId, trx); } }, trx, @@ -154,8 +151,8 @@ export class PageOrderingService { } async addToSpacePageOrder( - spaceId: string, pageId: string, + spaceId: string, trx: KyselyTransaction, ) { await this.upsertOrdering( @@ -167,6 +164,39 @@ export class PageOrderingService { ); } + async upsertOrdering( + entityId: string, + entityType: string, + childId: string, + spaceId: string, + trx: KyselyTransaction, + ) { + let ordering = await this.getEntityOrdering(entityId, entityType, trx); + console.log(ordering); + console.log('oga1'); + + if (!ordering) { + ordering = await this.createPageOrdering( + entityId, + entityType, + spaceId, + trx, + ); + } + + if (!ordering.childrenIds.includes(childId)) { + ordering.childrenIds.unshift(childId); + console.log(childId); + console.log('childId above'); + await trx + .updateTable('pageOrdering') + .set(ordering) + .where('id', '=', ordering.id) + .execute(); + //await manager.save(PageOrdering, ordering); + } + } + async removeFromParent( parentId: string, childId: string, @@ -217,35 +247,6 @@ export class PageOrderingService { } } - async upsertOrdering( - entityId: string, - entityType: string, - childId: string, - spaceId: string, - trx: KyselyTransaction, - ) { - let ordering = await this.getEntityOrdering(entityId, entityType, trx); - - if (!ordering) { - ordering = await this.createPageOrdering( - entityId, - entityType, - spaceId, - trx, - ); - } - - if (!ordering.childrenIds.includes(childId)) { - ordering.childrenIds.unshift(childId); - await trx - .updateTable('pageOrdering') - .set(ordering) - .where('id', '=', ordering.id) - .execute(); - //await manager.save(PageOrdering, ordering); - } - } - async getEntityOrdering( entityId: string, entityType: string, diff --git a/apps/server/src/core/page/services/page.service.ts b/apps/server/src/core/page/services/page.service.ts index e864fa2..a3fbdbf 100644 --- a/apps/server/src/core/page/services/page.service.ts +++ b/apps/server/src/core/page/services/page.service.ts @@ -44,9 +44,16 @@ export class PageService { if (!parentPage) throw new NotFoundException('Parent page not found'); } + let pageId = undefined; + if (createPageDto.pageId) { + pageId = createPageDto.pageId; + delete createPageDto.pageId; + } + //TODO: should be in a transaction const createdPage = await this.pageRepo.insertPage({ ...createPageDto, + id: pageId, creatorId: userId, workspaceId: workspaceId, lastUpdatedById: userId, @@ -54,7 +61,7 @@ export class PageService { await this.pageOrderingService.addPageToOrder( createPageDto.spaceId, - createPageDto.pageId, + pageId, createPageDto.parentPageId, ); @@ -65,16 +72,17 @@ export class PageService { pageId: string, updatePageDto: UpdatePageDto, userId: string, - ): Promise { + ): Promise { await this.pageRepo.updatePage( { - ...updatePageDto, + title: updatePageDto.title, + icon: updatePageDto.icon, lastUpdatedById: userId, }, pageId, ); - //return await this.pageRepo.findById(pageId); + return await this.pageRepo.findById(pageId); } async updateState( diff --git a/apps/server/src/kysely/repos/page/page.repo.ts b/apps/server/src/kysely/repos/page/page.repo.ts index a786c3f..bb982be 100644 --- a/apps/server/src/kysely/repos/page/page.repo.ts +++ b/apps/server/src/kysely/repos/page/page.repo.ts @@ -9,7 +9,6 @@ import { } from '@docmost/db/types/entity.types'; import { sql } from 'kysely'; import { PaginationOptions } from '@docmost/db/pagination/pagination-options'; -import { OrderingEntity } from 'src/core/page/page.util'; import { executeWithPagination } from '@docmost/db/pagination/pagination'; // TODO: scope to space/workspace @@ -69,7 +68,7 @@ export class PageRepo { .updateTable('pages') .set(updatablePage) .where('id', '=', pageId) - .execute(); + .executeTakeFirst(); } async insertPage( @@ -106,8 +105,7 @@ export class PageRepo { async getSpaceSidebarPages(spaceId: string, limit: number) { const pages = await this.db .selectFrom('pages as page') - .innerJoin('pageOrdering as ordering', 'ordering.entityId', 'page.id') - .where('ordering.entityType', '=', OrderingEntity.PAGE) + .leftJoin('pageOrdering as ordering', 'ordering.entityId', 'page.id') .where('page.spaceId', '=', spaceId) .select([ 'page.id',