From dfdc2a97b019930317b696298fa6186ffac87580 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sun, 8 Mar 2026 18:06:45 -0400 Subject: [PATCH 1/8] fixed bugs --- apps/frontend/src/components/forms/requestFormModal.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index 07216c6a..d09ff76b 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -53,10 +53,11 @@ const FoodRequestFormModal: React.FC = ({ if (isOpen && previousRequest) { setSelectedItems(previousRequest.requestedItems || []); setRequestedSize(previousRequest.requestedSize || ''); - setAdditionalNotes( - previousRequest.additionalInformation || - 'No additional information supplied', - ); + setAdditionalNotes(previousRequest.additionalInformation || ''); + } else { + setSelectedItems([]); + setRequestedSize(''); + setAdditionalNotes(''); } }, [isOpen, previousRequest]); From ca9919eae74f74c3ef96ca926a7e0807480bc0f0 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sun, 8 Mar 2026 18:13:56 -0400 Subject: [PATCH 2/8] reset error state --- apps/frontend/src/components/forms/requestFormModal.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index d09ff76b..8a514710 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -59,6 +59,7 @@ const FoodRequestFormModal: React.FC = ({ setRequestedSize(''); setAdditionalNotes(''); } + setAlert({ isError: true, message: '' }); }, [isOpen, previousRequest]); const handleSubmit = async () => { From 30f43c5e8a2b1e86cc27270aee669efe929a8018 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sun, 8 Mar 2026 19:05:01 -0400 Subject: [PATCH 3/8] order mgmt changs --- apps/backend/src/config/migrations.ts | 2 ++ .../1773009000618-AddAssigneeToOrders.ts | 20 +++++++++++++++++++ apps/backend/src/orders/order.entity.ts | 5 +++++ apps/backend/src/orders/order.service.ts | 10 +++++++--- .../src/containers/adminOrderManagement.tsx | 10 ++++------ apps/frontend/src/types/types.ts | 5 +++++ 6 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts diff --git a/apps/backend/src/config/migrations.ts b/apps/backend/src/config/migrations.ts index 85684cd7..2ecd043e 100644 --- a/apps/backend/src/config/migrations.ts +++ b/apps/backend/src/config/migrations.ts @@ -33,6 +33,7 @@ import { UpdateOrderEntity1769990652833 } from '../migrations/1769990652833-Upda import { DonationItemFoodTypeNotNull1771524930613 } from '../migrations/1771524930613-DonationItemFoodTypeNotNull'; import { MoveRequestFieldsToOrders1770571145350 } from '../migrations/1770571145350-MoveRequestFieldsToOrders'; import { RenameDonationMatchingStatus1771260403657 } from '../migrations/1771260403657-RenameDonationMatchingStatus'; +import { AddAssigneeToOrders1773009000618 } from '../migrations/1773009000618-AddAssigneeToOrders'; const schemaMigrations = [ User1725726359198, @@ -70,6 +71,7 @@ const schemaMigrations = [ DonationItemFoodTypeNotNull1771524930613, MoveRequestFieldsToOrders1770571145350, RenameDonationMatchingStatus1771260403657, + AddAssigneeToOrders1773009000618, ]; export default schemaMigrations; diff --git a/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts b/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts new file mode 100644 index 00000000..fb9e3ee0 --- /dev/null +++ b/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddAssigneeToOrders1773009000618 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE orders + ADD COLUMN assignee_id INT, + ADD CONSTRAINT fk_assignee_id + FOREIGN KEY (assignee_id) REFERENCES users(user_id) ON DELETE SET NULL + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE orders + DROP CONSTRAINT IF EXISTS fk_assignee_id, + DROP COLUMN assignee_id + `); + } +} diff --git a/apps/backend/src/orders/order.entity.ts b/apps/backend/src/orders/order.entity.ts index 6a7636be..f5f1465a 100644 --- a/apps/backend/src/orders/order.entity.ts +++ b/apps/backend/src/orders/order.entity.ts @@ -11,6 +11,7 @@ import { FoodRequest } from '../foodRequests/request.entity'; import { FoodManufacturer } from '../foodManufacturers/manufacturers.entity'; import { OrderStatus } from './types'; import { Allocation } from '../allocations/allocations.entity'; +import { User } from '../users/user.entity'; @Entity('orders') export class Order { @@ -95,4 +96,8 @@ export class Order { nullable: true, }) shippingCost!: number | null; + + @ManyToOne(() => User, { nullable: true }) + @JoinColumn({ name: 'assignee_id', referencedColumnName: 'id' }) + assignee!: User | null; } diff --git a/apps/backend/src/orders/order.service.ts b/apps/backend/src/orders/order.service.ts index 601b7ba4..c3e910f6 100644 --- a/apps/backend/src/orders/order.service.ts +++ b/apps/backend/src/orders/order.service.ts @@ -29,9 +29,10 @@ export class OrdersService { async getAll(filters?: { status?: string; pantryNames?: string[] }) { const qb = this.repo .createQueryBuilder('order') - .leftJoinAndSelect('order.request', 'request') - .leftJoinAndSelect('request.pantry', 'pantry') - .leftJoinAndSelect('pantry.volunteers', 'volunteers') + .leftJoin('order.request', 'request') + .leftJoin('request.pantry', 'pantry') + .leftJoin('pantry.volunteers', 'volunteers') + .leftJoin('order.assignee', 'assignee') .select([ 'order.orderId', 'order.status', @@ -43,6 +44,9 @@ export class OrdersService { 'volunteers.id', 'volunteers.firstName', 'volunteers.lastName', + 'assignee.id', + 'assignee.firstName', + 'assignee.lastName', ]); if (filters?.status) { diff --git a/apps/frontend/src/containers/adminOrderManagement.tsx b/apps/frontend/src/containers/adminOrderManagement.tsx index 772861e4..84dfd589 100644 --- a/apps/frontend/src/containers/adminOrderManagement.tsx +++ b/apps/frontend/src/containers/adminOrderManagement.tsx @@ -664,9 +664,8 @@ const OrderStatusSection: React.FC = ({ alignItems="center" justifyContent="center" > - {volunteers && volunteers.length > 0 ? ( + {order.assignee ? ( = ({ color="white" p={2} > - {/* TODO: Change logic later to only get one volunteer */} - {volunteers[0].firstName.charAt(0).toUpperCase()} - {volunteers[0].lastName.charAt(0).toUpperCase()} + {order.assignee?.firstName.charAt(0).toUpperCase()} + {order.assignee?.lastName.charAt(0).toUpperCase()} ) : ( No Assignees @@ -706,7 +704,7 @@ const OrderStatusSection: React.FC = ({ {/* TODO: IMPLEMENT WHAT GOES HERE */} diff --git a/apps/frontend/src/types/types.ts b/apps/frontend/src/types/types.ts index 2cc47fbb..10af3ffb 100644 --- a/apps/frontend/src/types/types.ts +++ b/apps/frontend/src/types/types.ts @@ -361,6 +361,11 @@ export interface OrderSummary { }[]; }; }; + assignee: { + id: number; + firstName: string; + lastName: string; + } | null; } export enum ApplicationStatus { From 2f493a28e9bb5882a78710301354fe7734cb0056 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sun, 8 Mar 2026 19:14:57 -0400 Subject: [PATCH 4/8] Revert "Merge branch 'main' into sk/SSF-150-food-request-bugs" This reverts commit 40a660844521ddba7d8f66f66f433ed0592a6c47, reversing changes made to ca9919eae74f74c3ef96ca926a7e0807480bc0f0. --- apps/backend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/README.md b/apps/backend/README.md index 54446294..ebe04a3c 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -71,6 +71,6 @@ We have a few environment variables that we utilize to access several AWS servic 1. Create a **separate** Postgres database (for example `securing-safe-food-test`). 2. Add a `DATABASE_NAME_TEST` entry (and optionally `DATABASE_HOST/PORT/USERNAME/PASSWORD`) to your `.env` so the test data source can connect to that database. -3. Run the backend test suite with `yarn test`. **NOTE**: `npx jest` will not work because our tests need to run sequentially. Having them run in parallel will result in tests interfering with each other, and then failing. `yarn test` ensures each test suite finishes before moving onto the next +3. Run the backend test suite with `npx jest`. Each spec builds up the database and tables, tears it all down, and runs all the migrations on each tests. This ensures that we always have the most up to date data that we test with. From f8f66800076a7c08778544fd94433143eff796f1 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sun, 8 Mar 2026 19:20:36 -0400 Subject: [PATCH 5/8] revert accidental changes --- apps/backend/README.md | 2 +- apps/backend/src/config/migrations.ts | 2 -- .../1773009000618-AddAssigneeToOrders.ts | 20 ------------------- apps/backend/src/orders/order.entity.ts | 5 ----- apps/backend/src/orders/order.service.ts | 10 +++------- .../src/containers/adminOrderManagement.tsx | 10 ++++++---- apps/frontend/src/types/types.ts | 5 ----- 7 files changed, 10 insertions(+), 44 deletions(-) delete mode 100644 apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts diff --git a/apps/backend/README.md b/apps/backend/README.md index ebe04a3c..54446294 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -71,6 +71,6 @@ We have a few environment variables that we utilize to access several AWS servic 1. Create a **separate** Postgres database (for example `securing-safe-food-test`). 2. Add a `DATABASE_NAME_TEST` entry (and optionally `DATABASE_HOST/PORT/USERNAME/PASSWORD`) to your `.env` so the test data source can connect to that database. -3. Run the backend test suite with `npx jest`. +3. Run the backend test suite with `yarn test`. **NOTE**: `npx jest` will not work because our tests need to run sequentially. Having them run in parallel will result in tests interfering with each other, and then failing. `yarn test` ensures each test suite finishes before moving onto the next Each spec builds up the database and tables, tears it all down, and runs all the migrations on each tests. This ensures that we always have the most up to date data that we test with. diff --git a/apps/backend/src/config/migrations.ts b/apps/backend/src/config/migrations.ts index 2ecd043e..85684cd7 100644 --- a/apps/backend/src/config/migrations.ts +++ b/apps/backend/src/config/migrations.ts @@ -33,7 +33,6 @@ import { UpdateOrderEntity1769990652833 } from '../migrations/1769990652833-Upda import { DonationItemFoodTypeNotNull1771524930613 } from '../migrations/1771524930613-DonationItemFoodTypeNotNull'; import { MoveRequestFieldsToOrders1770571145350 } from '../migrations/1770571145350-MoveRequestFieldsToOrders'; import { RenameDonationMatchingStatus1771260403657 } from '../migrations/1771260403657-RenameDonationMatchingStatus'; -import { AddAssigneeToOrders1773009000618 } from '../migrations/1773009000618-AddAssigneeToOrders'; const schemaMigrations = [ User1725726359198, @@ -71,7 +70,6 @@ const schemaMigrations = [ DonationItemFoodTypeNotNull1771524930613, MoveRequestFieldsToOrders1770571145350, RenameDonationMatchingStatus1771260403657, - AddAssigneeToOrders1773009000618, ]; export default schemaMigrations; diff --git a/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts b/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts deleted file mode 100644 index fb9e3ee0..00000000 --- a/apps/backend/src/migrations/1773009000618-AddAssigneeToOrders.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AddAssigneeToOrders1773009000618 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE orders - ADD COLUMN assignee_id INT, - ADD CONSTRAINT fk_assignee_id - FOREIGN KEY (assignee_id) REFERENCES users(user_id) ON DELETE SET NULL - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE orders - DROP CONSTRAINT IF EXISTS fk_assignee_id, - DROP COLUMN assignee_id - `); - } -} diff --git a/apps/backend/src/orders/order.entity.ts b/apps/backend/src/orders/order.entity.ts index f5f1465a..6a7636be 100644 --- a/apps/backend/src/orders/order.entity.ts +++ b/apps/backend/src/orders/order.entity.ts @@ -11,7 +11,6 @@ import { FoodRequest } from '../foodRequests/request.entity'; import { FoodManufacturer } from '../foodManufacturers/manufacturers.entity'; import { OrderStatus } from './types'; import { Allocation } from '../allocations/allocations.entity'; -import { User } from '../users/user.entity'; @Entity('orders') export class Order { @@ -96,8 +95,4 @@ export class Order { nullable: true, }) shippingCost!: number | null; - - @ManyToOne(() => User, { nullable: true }) - @JoinColumn({ name: 'assignee_id', referencedColumnName: 'id' }) - assignee!: User | null; } diff --git a/apps/backend/src/orders/order.service.ts b/apps/backend/src/orders/order.service.ts index c3e910f6..601b7ba4 100644 --- a/apps/backend/src/orders/order.service.ts +++ b/apps/backend/src/orders/order.service.ts @@ -29,10 +29,9 @@ export class OrdersService { async getAll(filters?: { status?: string; pantryNames?: string[] }) { const qb = this.repo .createQueryBuilder('order') - .leftJoin('order.request', 'request') - .leftJoin('request.pantry', 'pantry') - .leftJoin('pantry.volunteers', 'volunteers') - .leftJoin('order.assignee', 'assignee') + .leftJoinAndSelect('order.request', 'request') + .leftJoinAndSelect('request.pantry', 'pantry') + .leftJoinAndSelect('pantry.volunteers', 'volunteers') .select([ 'order.orderId', 'order.status', @@ -44,9 +43,6 @@ export class OrdersService { 'volunteers.id', 'volunteers.firstName', 'volunteers.lastName', - 'assignee.id', - 'assignee.firstName', - 'assignee.lastName', ]); if (filters?.status) { diff --git a/apps/frontend/src/containers/adminOrderManagement.tsx b/apps/frontend/src/containers/adminOrderManagement.tsx index 84dfd589..772861e4 100644 --- a/apps/frontend/src/containers/adminOrderManagement.tsx +++ b/apps/frontend/src/containers/adminOrderManagement.tsx @@ -664,8 +664,9 @@ const OrderStatusSection: React.FC = ({ alignItems="center" justifyContent="center" > - {order.assignee ? ( + {volunteers && volunteers.length > 0 ? ( = ({ color="white" p={2} > - {order.assignee?.firstName.charAt(0).toUpperCase()} - {order.assignee?.lastName.charAt(0).toUpperCase()} + {/* TODO: Change logic later to only get one volunteer */} + {volunteers[0].firstName.charAt(0).toUpperCase()} + {volunteers[0].lastName.charAt(0).toUpperCase()} ) : ( No Assignees @@ -704,7 +706,7 @@ const OrderStatusSection: React.FC = ({ {/* TODO: IMPLEMENT WHAT GOES HERE */} diff --git a/apps/frontend/src/types/types.ts b/apps/frontend/src/types/types.ts index 10af3ffb..2cc47fbb 100644 --- a/apps/frontend/src/types/types.ts +++ b/apps/frontend/src/types/types.ts @@ -361,11 +361,6 @@ export interface OrderSummary { }[]; }; }; - assignee: { - id: number; - firstName: string; - lastName: string; - } | null; } export enum ApplicationStatus { From 28726d62de9251912709cc83c7ca0dcb04a0d169 Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:33:44 -0400 Subject: [PATCH 6/8] fix bug --- apps/frontend/src/components/forms/requestFormModal.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index 81ce212f..f94a12d8 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -39,6 +39,7 @@ const FoodRequestFormModal: React.FC = ({ const [selectedFoodTypes, setSelectedFoodTypes] = useState([]); const [requestedSize, setRequestedSize] = useState(''); const [additionalNotes, setAdditionalNotes] = useState(''); + const [selectedItems, setSelectedItems] = useState([]); // For potential future use if we want to allow item-level selection const [alert, setAlert] = useState<{ isError: boolean; message: string; From c39fc3eafc929088708216ed69314e18bf680b4b Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Wed, 11 Mar 2026 17:59:22 -0400 Subject: [PATCH 7/8] fix bug --- apps/frontend/src/components/forms/requestFormModal.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index f94a12d8..4cbcb072 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -39,7 +39,6 @@ const FoodRequestFormModal: React.FC = ({ const [selectedFoodTypes, setSelectedFoodTypes] = useState([]); const [requestedSize, setRequestedSize] = useState(''); const [additionalNotes, setAdditionalNotes] = useState(''); - const [selectedItems, setSelectedItems] = useState([]); // For potential future use if we want to allow item-level selection const [alert, setAlert] = useState<{ isError: boolean; message: string; @@ -56,7 +55,7 @@ const FoodRequestFormModal: React.FC = ({ setRequestedSize(previousRequest.requestedSize || ''); setAdditionalNotes(previousRequest.additionalInformation || ''); } else { - setSelectedItems([]); + setSelectedFoodTypes([]); setRequestedSize(''); setAdditionalNotes(''); } From e58ee5c41f6e1d8a50fb69f4bd8b68fb795371ad Mon Sep 17 00:00:00 2001 From: skewalia <145241312+swarkewalia@users.noreply.github.com> Date: Sat, 14 Mar 2026 14:07:47 -0400 Subject: [PATCH 8/8] fixed alert --- .../src/components/forms/requestFormModal.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index 4cbcb072..bd6e276b 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -50,16 +50,18 @@ const FoodRequestFormModal: React.FC = ({ const isFormValid = requestedSize !== '' && selectedFoodTypes.length > 0; useEffect(() => { - if (isOpen && previousRequest) { - setSelectedFoodTypes(previousRequest.requestedFoodTypes || []); - setRequestedSize(previousRequest.requestedSize || ''); - setAdditionalNotes(previousRequest.additionalInformation || ''); - } else { - setSelectedFoodTypes([]); - setRequestedSize(''); - setAdditionalNotes(''); + if (isOpen) { + if (previousRequest) { + setSelectedFoodTypes(previousRequest.requestedFoodTypes || []); + setRequestedSize(previousRequest.requestedSize || ''); + setAdditionalNotes(previousRequest.additionalInformation || ''); + } else { + setSelectedFoodTypes([]); + setRequestedSize(''); + setAdditionalNotes(''); + } + setAlert({ isError: true, message: '' }); } - setAlert({ isError: true, message: '' }); }, [isOpen, previousRequest]); const handleSubmit = async () => {