Skip to content

Commit 89e745f

Browse files
committed
Merge branch 'develop' into Weekly-Availability-Times
2 parents 99d4ee0 + 25d6c4c commit 89e745f

17 files changed

Lines changed: 58 additions & 21 deletions

File tree

src/backend/src/controllers/projects.controllers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import { getOrganizationId } from '../utils/utils';
99
export default class ProjectsController {
1010
static async getAllProjects(req: Request, res: Response, next: NextFunction) {
1111
try {
12+
const includeDeleted = req.params.deleted === 'true';
1213
const organizationId = getOrganizationId(req.headers);
13-
const projects: Project[] = await ProjectsService.getAllProjects(organizationId);
14+
const projects: Project[] = await ProjectsService.getAllProjects(organizationId, includeDeleted);
1415
res.status(200).json(projects);
1516
} catch (error: unknown) {
1617
next(error);

src/backend/src/routes/projects.routes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import ProjectsController from '../controllers/projects.controllers';
1212

1313
const projectRouter = express.Router();
1414

15-
projectRouter.get('/', ProjectsController.getAllProjects);
15+
projectRouter.get('/:deleted', ProjectsController.getAllProjects);
1616

1717
/* Link Types */
1818
projectRouter.get('/link-types', ProjectsController.getAllLinkTypes);

src/backend/src/services/projects.services.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,19 @@ export default class ProjectsService {
3636
/**
3737
* Get all the non deleted projects in the database for the given organization.
3838
* @param organizationId the id of the organization the user is currently in
39+
* @param includeDeleted whether or not to include deleted projects
3940
* @returns all the projects
4041
*/
41-
static async getAllProjects(organizationId: string): Promise<Project[]> {
42-
const projects = await prisma.project.findMany({
43-
where: { wbsElement: { dateDeleted: null, organizationId } },
44-
...getProjectQueryArgs(organizationId)
45-
});
42+
static async getAllProjects(organizationId: string, includeDeleted: boolean): Promise<Project[]> {
43+
const projects = includeDeleted
44+
? await prisma.project.findMany({
45+
where: { wbsElement: { organizationId } },
46+
...getProjectQueryArgs(organizationId)
47+
})
48+
: await prisma.project.findMany({
49+
where: { wbsElement: { dateDeleted: null, organizationId } },
50+
...getProjectQueryArgs(organizationId)
51+
});
4652
return projects.map(projectTransformer);
4753
}
4854

src/backend/src/transformers/cars.transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export const carTransformer = (car: Prisma.CarGetPayload<CarQueryArgs>): Car =>
2121
descriptionBullets: car.wbsElement.descriptionBullets.map(descBulletConverter),
2222
materials: car.wbsElement.materials.map(materialTransformer),
2323
assemblies: car.wbsElement.assemblies.map(assemblyTransformer),
24-
changes: []
24+
changes: [],
25+
deleted: car.wbsElement.dateDeleted !== null
2526
};
2627
};

src/backend/src/transformers/projects.transformer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const projectTransformer = (project: Prisma.ProjectGetPayload<ProjectQueryArgs>)
4141
detail: change.detail,
4242
dateImplemented: change.dateImplemented
4343
})),
44+
deleted: wbsElement.dateDeleted !== null,
4445
favoritedBy: project.favoritedBy.map(userTransformer),
4546
teams: project.teams.map(teamTransformer),
4647
summary: project.summary,
@@ -85,7 +86,8 @@ const projectTransformer = (project: Prisma.ProjectGetPayload<ProjectQueryArgs>)
8586
stage: (workPackage.stage || undefined) as WorkPackageStage,
8687
materials: workPackage.wbsElement?.materials.map(materialTransformer),
8788
assemblies: workPackage.wbsElement?.assemblies.map(assemblyTransformer),
88-
blocking: workPackage.wbsElement.blocking.map((blocking) => wbsNumOf(blocking.wbsElement))
89+
blocking: workPackage.wbsElement.blocking.map((blocking) => wbsNumOf(blocking.wbsElement)),
90+
deleted: workPackage.wbsElement.dateDeleted !== null
8991
};
9092
})
9193
};

src/backend/src/transformers/teams.transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ const teamTransformer = (team: Prisma.TeamGetPayload<TeamQueryArgs>): Team => {
1919
wbsNum: wbsNumOf(project.wbsElement),
2020
name: project.wbsElement.name,
2121
status: calculateProjectStatus(project),
22-
workPackages: project.workPackages.map(workPackageTransformer)
22+
workPackages: project.workPackages.map(workPackageTransformer),
23+
deleted: project.wbsElement.dateDeleted !== null
2324
})),
2425
leads: team.leads.map(userTransformer),
2526
userArchived: team.userArchived ? userTransformer(team.userArchived) : undefined,

src/backend/src/transformers/work-packages.transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ const workPackageTransformer = (wpInput: Prisma.Work_PackageGetPayload<WorkPacka
3636
teamTypes: wpInput.project.teams.flatMap((team) => team.teamType ?? []),
3737
projectName: wpInput.project.wbsElement.name,
3838
stage: (wpInput.stage as WorkPackageStage) || undefined,
39-
blocking: wpInput.wbsElement.blocking.map((wp) => wbsNumOf(wp.wbsElement))
39+
blocking: wpInput.wbsElement.blocking.map((wp) => wbsNumOf(wp.wbsElement)),
40+
deleted: wpInput.wbsElement.dateDeleted !== null
4041
};
4142
};
4243

src/frontend/src/apis/projects.api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import { CreateSingleProjectPayload, EditSingleProjectPayload } from '../utils/t
1313
/**
1414
* Fetches all projects.
1515
*/
16-
export const getAllProjects = () => {
17-
return axios.get<Project[]>(apiUrls.projects(), {
16+
export const getAllProjects = (includeDeleted: boolean) => {
17+
return axios.get<Project[]>(apiUrls.allProjects(includeDeleted), {
1818
transformResponse: (data) => JSON.parse(data).map(projectTransformer)
1919
});
2020
};

src/frontend/src/hooks/projects.hooks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ import { useCurrentUser } from './users.hooks';
2626
/**
2727
* Custom React Hook to supply all projects.
2828
*/
29-
export const useAllProjects = () => {
29+
export const useAllProjects = (includeDeleted: boolean = false) => {
3030
return useQuery<Project[], Error>(['projects'], async () => {
31-
const { data } = await getAllProjects();
31+
const { data } = await getAllProjects(includeDeleted);
3232
return data;
3333
});
3434
};

src/frontend/src/pages/GanttPage/GanttChartComponents/GanttTaskBar/GanttTaskBarEditView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ export const GanttTaskBarEditView = ({
114114
teamTypes: [],
115115
changes: [],
116116
materials: [],
117-
assemblies: []
117+
assemblies: [],
118+
deleted: false
118119
};
119120
addWorkPackage(workPackage);
120121

0 commit comments

Comments
 (0)