Skip to content

Commit

Permalink
Feat: add CRUD Api for task occurrences
Browse files Browse the repository at this point in the history
  • Loading branch information
saimanoj committed Mar 6, 2025
1 parent 53971e9 commit 316c51a
Show file tree
Hide file tree
Showing 15 changed files with 362 additions and 217 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
Warnings:
- A unique constraint covering the columns `[taskId,pageId]` on the table `TaskOccurrence` will be added. If there are existing duplicate values, this will fail.
- Made the column `pageId` on table `TaskOccurrence` required. This step will fail if there are existing NULL values in that column.
*/
-- DropForeignKey
ALTER TABLE "TaskOccurrence" DROP CONSTRAINT "TaskOccurrence_pageId_fkey";

-- DropIndex
DROP INDEX "TaskOccurrence_taskId_startTime_endTime_key";

-- AlterTable
ALTER TABLE "TaskOccurrence" ALTER COLUMN "pageId" SET NOT NULL;

-- CreateIndex
CREATE UNIQUE INDEX "TaskOccurrence_taskId_pageId_key" ON "TaskOccurrence"("taskId", "pageId");

-- AddForeignKey
ALTER TABLE "TaskOccurrence" ADD CONSTRAINT "TaskOccurrence_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "Page"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "ModelName" ADD VALUE 'TaskOccurrence';
7 changes: 4 additions & 3 deletions apps/server/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -372,13 +372,13 @@ model TaskOccurrence {
task Task @relation(fields: [taskId], references: [id])
taskId String
page Page? @relation(fields: [pageId], references: [id])
pageId String?
page Page @relation(fields: [pageId], references: [id])
pageId String
workspace Workspace @relation(fields: [workspaceId], references: [id])
workspaceId String
@@unique([taskId, startTime, endTime])
@@unique([taskId, pageId])
}

model Template {
Expand Down Expand Up @@ -466,6 +466,7 @@ enum ModelName {
Conversation
ConversationHistory
List
TaskOccurrence
}

enum ActionType {
Expand Down
7 changes: 0 additions & 7 deletions apps/server/src/modules/pages/pages.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import {
CreatePageDto,
EnhancePageResponse,
GetPageByTitleDto,
MoveTaskToPageDto,
Page,
PageRequestParamsDto,
UpdatePageDto,
Expand Down Expand Up @@ -56,12 +55,6 @@ export class PagesController {
return await this.pagesService.createPage(pageData, workspaceId);
}

@Post('move-task')
@UseGuards(AuthGuard)
async moveTaskToPage(@Body() moveTaskToPageData: MoveTaskToPageDto) {
return await this.pagesService.moveTaskToPage(moveTaskToPageData);
}

@Post(':pageId')
@UseGuards(AuthGuard)
async updateIssue(
Expand Down
56 changes: 7 additions & 49 deletions apps/server/src/modules/pages/pages.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import {
PageSelect,
UpdatePageDto,
enchancePrompt,
MoveTaskToPageDto,
JsonObject,
} from '@sigma/types';
import { parse } from 'date-fns';
Expand Down Expand Up @@ -257,15 +256,16 @@ export class PagesService {
return tasks;
}

async removeTaskFromPageByTitle(title: string, taskId: string) {
async removeTaskFromPageByTitle(title: string, taskIds: string[]) {
const page = await this.prisma.page.findFirst({
where: { title, deleted: null },
});

let tasksExtensionContent = getTaskExtensionInPage(page);
tasksExtensionContent = removeTaskInExtension(tasksExtensionContent, [
taskId,
]);
tasksExtensionContent = removeTaskInExtension(
tasksExtensionContent,
taskIds,
);

const pageDescription = updateTaskExtensionInPage(
page,
Expand Down Expand Up @@ -373,6 +373,7 @@ export class PagesService {
const removedTaskIds = currentTaskExtensionIds.filter(
(taskId) => !taskExtensionTaskIds.has(taskId),
);

const addedTaskIds = Array.from(taskExtensionTaskIds).filter(
(taskId) => !currentTaskExtensionIds.includes(taskId),
);
Expand All @@ -381,6 +382,7 @@ export class PagesService {
await this.prisma.taskOccurrence.updateMany({
where: {
taskId: { in: removedTaskIds },
pageId,
},
data: { deleted: new Date().toISOString() },
});
Expand Down Expand Up @@ -416,48 +418,4 @@ export class PagesService {
await this.storeOutlinks(payload.pageId);
}
}

async moveTaskToPage(moveTaskToPageData: MoveTaskToPageDto) {
const fromPage = await this.prisma.page.findFirst({
where: { title: moveTaskToPageData.fromDate },
});
const toPage = await this.prisma.page.findFirst({
where: { title: moveTaskToPageData.toDate },
});

if (fromPage) {
let fromTaskExtension = getTaskExtensionInPage(fromPage);
fromTaskExtension = removeTaskInExtension(
fromTaskExtension,
moveTaskToPageData.taskIds,
);

const pageDescription = updateTaskExtensionInPage(
fromPage,
fromTaskExtension,
);
await this.contentService.updateContentForDocument(
fromPage.id,
JSON.parse(pageDescription),
);
}

if (toPage) {
let toTaskExtension = getTaskExtensionInPage(toPage);
const tasks = await this.prisma.task.findMany({
where: { id: { in: moveTaskToPageData.taskIds } },
include: { page: true },
});
toTaskExtension = upsertTaskInExtension(toTaskExtension, tasks);
const pageDescription = updateTaskExtensionInPage(
toPage,
toTaskExtension,
);
await this.contentService.updateContentForDocument(
toPage.id,
JSON.parse(pageDescription),
);
}
return { success: true };
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const tablesToSendMessagesFor = new Map([
[ModelNameEnum.Conversation, true],
[ModelNameEnum.ConversationHistory, true],
[ModelNameEnum.List, true],
[ModelNameEnum.TaskOccurrence, true],
]);

export const tableHooks = new Map([[ModelNameEnum.Page, true]]);
61 changes: 42 additions & 19 deletions apps/server/src/modules/task-occurence/task-occurence.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ import {
Body,
Get,
Query,
Put,
} from '@nestjs/common';
import { GetTaskOccurenceDTO, UpdateTaskOccurenceDTO } from '@sigma/types';
import {
CreateTaskOccurenceDTO,
GetTaskOccurenceDTO,
UpdateTaskOccurenceDTO,
} from '@sigma/types';

import { AuthGuard } from 'modules/auth/auth.guard';
import { Workspace } from 'modules/auth/session.decorator';
Expand Down Expand Up @@ -42,37 +47,55 @@ export class TaskOccurenceController {

@Post()
@UseGuards(AuthGuard)
async createTaskOccurence(@Body('taskId') taskId: string) {
return await this.taskOccurenceService.createTaskOccurance(taskId);
}

@Post('task/:taskId')
@UseGuards(AuthGuard)
async updateTaskOccurenceByTask(@Param('taskId') taskId: string) {
return await this.taskOccurenceService.updateTaskOccuranceByTask(taskId);
async createTaskOccurence(
@Body() createTaskOccurencesData: CreateTaskOccurenceDTO,
@Workspace() workspaceId: string,
) {
return await this.taskOccurenceService.createTaskOccurence(
createTaskOccurencesData,
workspaceId,
);
}

@Post(':taskOccurenceId')
@Put()
@UseGuards(AuthGuard)
async updateTaskOccurence(
@Param('taskOccurenceId') taskOccurenceId: string,
@Body() updateTaskOccurenceDto: UpdateTaskOccurenceDTO,
@Workspace() workspaceId: string,
) {
return await this.taskOccurenceService.updateTaskOccurance(
taskOccurenceId,
return await this.taskOccurenceService.updateTaskOccurence(
updateTaskOccurenceDto,
workspaceId,
true,
);
}

@Delete('task/:taskId')
@Delete()
@UseGuards(AuthGuard)
async deleteTaskOccurenceByTask(@Param('taskId') taskId: string) {
return await this.taskOccurenceService.deleteTaskOccuranceByTask(taskId);
async deleteTaskOccurence(
@Body('taskOccurenceIds') taskOccurenceIds: string[],
) {
return await this.taskOccurenceService.deleteTaskOccurence(
taskOccurenceIds,
true,
);
}

@Delete(':taskOccurenceId')
@Post('task')
@UseGuards(AuthGuard)
async createTaskOccurenceByTask(@Body('taskId') taskId: string) {
return await this.taskOccurenceService.createTaskOccurenceByTask(taskId);
}

@Post('task/:taskId')
@UseGuards(AuthGuard)
async deleteTaskOccurence(@Param('taskOccurenceId') taskOccurenceId: string) {
return await this.taskOccurenceService.deleteTaskOccurence(taskOccurenceId);
async updateTaskOccurenceByTask(@Param('taskId') taskId: string) {
return await this.taskOccurenceService.updateTaskOccurenceByTask(taskId);
}

@Delete('task/:taskId')
@UseGuards(AuthGuard)
async deleteTaskOccurenceByTask(@Param('taskId') taskId: string) {
return await this.taskOccurenceService.deleteTaskOccurenceByTask(taskId);
}
}
Loading

0 comments on commit 316c51a

Please sign in to comment.