Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions src/backend/src/controllers/rules.controllers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,19 +158,20 @@ export default class RulesController {
}
}

static async editProjectRuleStatus(req: Request, res: Response, next: NextFunction) {
static async setRuleCompletion(req: Request, res: Response, next: NextFunction) {
try {
const { projectRuleId } = req.params;
const { newStatus } = req.body;
const { ruleId } = req.params;
const { isComplete, projectId } = req.body;

const projectRule: ProjectRule = await RulesService.editProjectRuleStatus(
const rule: Rule = await RulesService.setRuleCompletion(
req.currentUser,
req.organization,
projectRuleId as string,
newStatus
ruleId as string,
isComplete,
projectId
);

res.status(200).json(projectRule);
res.status(200).json(rule);
} catch (error: unknown) {
next(error);
}
Expand Down
35 changes: 19 additions & 16 deletions src/backend/src/prisma-query-args/rules.query-args.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,32 @@ export const getRulePreviewQueryArgs = () =>
teamId: true,
teamName: true
}
},
completedBy: {
select: {
firstName: true,
lastName: true
}
},
completedInProject: {
select: {
projectId: true,
wbsElement: {
select: {
name: true
}
}
}
}
}
});

export type ProjectRuleQueryArgs = ReturnType<typeof getProjectRuleQueryArgs>;

export const getProjectRuleQueryArgs = () =>
Prisma.validator<Prisma.Project_RuleDefaultArgs>()({
include: {
rule: getRulePreviewQueryArgs(),
project: { select: { projectId: true } },
statusHistory: {
include: {
createdBy: {
select: {
userId: true,
firstName: true,
lastName: true
}
}
},
orderBy: {
dateCreated: 'desc'
}
}
rule: getRulePreviewQueryArgs()
}
});

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
Warnings:

- You are about to drop the column `currentStatus` on the `Project_Rule` table. All the data in the column will be lost.
- You are about to drop the `Rule_Status_Change` table. If the table is not empty, all the data it contains will be lost.

*/
-- DropForeignKey
ALTER TABLE "Rule_Status_Change" DROP CONSTRAINT "Rule_Status_Change_createdByUserId_fkey";

-- DropForeignKey
ALTER TABLE "Rule_Status_Change" DROP CONSTRAINT "Rule_Status_Change_deletedByUserId_fkey";

-- DropForeignKey
ALTER TABLE "Rule_Status_Change" DROP CONSTRAINT "Rule_Status_Change_projectRuleId_fkey";

-- AlterTable
ALTER TABLE "Project_Rule" DROP COLUMN "currentStatus";

-- AlterTable
ALTER TABLE "Rule" ADD COLUMN "completedByUserId" TEXT,
ADD COLUMN "completedInProjectId" TEXT,
ADD COLUMN "isComplete" BOOLEAN NOT NULL DEFAULT false;

-- DropTable
DROP TABLE "Rule_Status_Change";

-- DropEnum
DROP TYPE "Rule_Completion";

-- AddForeignKey
ALTER TABLE "Rule" ADD CONSTRAINT "Rule_completedByUserId_fkey" FOREIGN KEY ("completedByUserId") REFERENCES "User"("userId") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "Rule" ADD CONSTRAINT "Rule_completedInProjectId_fkey" FOREIGN KEY ("completedInProjectId") REFERENCES "Project"("projectId") ON DELETE SET NULL ON UPDATE CASCADE;
87 changes: 35 additions & 52 deletions src/backend/src/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,6 @@ enum Sponsor_Value_Type {
DISCOUNT
}

enum Rule_Completion {
REVIEW // all rules start as REVIEW
INCOMPLETE // rules that need an action
COMPLETED
}

model User {
userId String @id @default(uuid())
firstName String
Expand Down Expand Up @@ -299,8 +293,7 @@ model User {
deletedSponsorTiers Sponsor_Tier[]
financeDelegateForOrganizations Organization[] @relation(name: "financeDelegates")
assignedReimbursementRequests Reimbursement_Request[] @relation(name: "reimbursementRequestAssignee")
createdRuleStatuses Rule_Status_Change[] @relation(name: "ruleStatusCreator")
deletedRuleStatuses Rule_Status_Change[] @relation(name: "ruleStatusDeletor")
completedRules Rule[] @relation(name: "ruleCompleter")
createdRulesetTypes Ruleset_Type[] @relation(name: "rulesetTypeCreator")
deletedRulesetTypes Ruleset_Type[] @relation(name: "rulesetTypeDeleter")
createdRulesets Ruleset[] @relation(name: "rulesetCreator")
Expand Down Expand Up @@ -601,6 +594,7 @@ model Project {
abbreviation String?
parts Part[]
rules Project_Rule[] @relation(name: "projectsForRule")
completedRules Rule[] @relation(name: "ruleCompletedInProject")

@@index([carId])
}
Expand Down Expand Up @@ -1850,61 +1844,50 @@ model Ruleset {
}

model Rule {
ruleId String @id @default(uuid())
ruleCode String
ruleContent String
imageFileIds String[]
rulesetId String
ruleset Ruleset @relation(fields: [rulesetId], references: [rulesetId])
parentRuleId String?
parentRule Rule? @relation(name: "subRules", fields: [parentRuleId], references: [ruleId])
subRules Rule[] @relation(name: "subRules")
referencedRule Rule[] @relation(name: "ruleReferences")
referencedBy Rule[] @relation(name: "ruleReferences")
projects Project_Rule[] @relation(name: "rulesInProject")
teams Team[] @relation(name: "teamRules")
dateCreated DateTime @default(now())
dateUpdated DateTime? @updatedAt
dateDeleted DateTime?
createdByUserId String
createdBy User @relation(name: "ruleCreator", fields: [createdByUserId], references: [userId])
updatedByUserId String?
updatedBy User? @relation(name: "ruleUpdater", fields: [updatedByUserId], references: [userId])
deletedByUserId String?
deletedBy User? @relation(name: "ruleDeletor", fields: [deletedByUserId], references: [userId])
ruleId String @id @default(uuid())
ruleCode String
ruleContent String
imageFileIds String[]
rulesetId String
ruleset Ruleset @relation(fields: [rulesetId], references: [rulesetId])
parentRuleId String?
parentRule Rule? @relation(name: "subRules", fields: [parentRuleId], references: [ruleId])
subRules Rule[] @relation(name: "subRules")
referencedRule Rule[] @relation(name: "ruleReferences")
referencedBy Rule[] @relation(name: "ruleReferences")
projects Project_Rule[] @relation(name: "rulesInProject")
teams Team[] @relation(name: "teamRules")
isComplete Boolean @default(false)
completedByUserId String?
completedBy User? @relation(name: "ruleCompleter", fields: [completedByUserId], references: [userId])
completedInProjectId String?
completedInProject Project? @relation(name: "ruleCompletedInProject", fields: [completedInProjectId], references: [projectId])
dateCreated DateTime @default(now())
dateUpdated DateTime? @updatedAt
dateDeleted DateTime?
createdByUserId String
createdBy User @relation(name: "ruleCreator", fields: [createdByUserId], references: [userId])
updatedByUserId String?
updatedBy User? @relation(name: "ruleUpdater", fields: [updatedByUserId], references: [userId])
deletedByUserId String?
deletedBy User? @relation(name: "ruleDeletor", fields: [deletedByUserId], references: [userId])

@@unique([rulesetId, ruleCode])
@@index([parentRuleId, rulesetId, ruleCode])
}

model Rule_Status_Change {
historyId String @id @default(uuid())
projectRule Project_Rule @relation(name: "ruleStatusHistory", fields: [projectRuleId], references: [projectRuleId])
projectRuleId String
dateCreated DateTime @default(now())
createdByUserId String
createdBy User @relation(name: "ruleStatusCreator", fields: [createdByUserId], references: [userId])
dateDeleted DateTime?
deletedByUserId String?
deletedBy User? @relation(name: "ruleStatusDeletor", fields: [deletedByUserId], references: [userId])
newStatus Rule_Completion
note String
}

model Project_Rule {
projectRuleId String @id @default(uuid())
projectRuleId String @id @default(uuid())
ruleId String
rule Rule @relation(name: "rulesInProject", fields: [ruleId], references: [ruleId])
rule Rule @relation(name: "rulesInProject", fields: [ruleId], references: [ruleId])
projectId String
project Project @relation(name: "projectsForRule", fields: [projectId], references: [projectId])
currentStatus Rule_Completion
statusHistory Rule_Status_Change[] @relation(name: "ruleStatusHistory")
dateCreated DateTime @default(now())
project Project @relation(name: "projectsForRule", fields: [projectId], references: [projectId])
dateCreated DateTime @default(now())
createdByUserId String
createdBy User @relation(name: "projectRuleCreator", fields: [createdByUserId], references: [userId])
createdBy User @relation(name: "projectRuleCreator", fields: [createdByUserId], references: [userId])
dateDeleted DateTime?
deletedByUserId String?
deletedBy User? @relation(name: "projectRuleDeletor", fields: [deletedByUserId], references: [userId])
deletedBy User? @relation(name: "projectRuleDeletor", fields: [deletedByUserId], references: [userId])

@@unique([ruleId, projectId])
}
Expand Down
Loading
Loading