[SSF 227] - Volunteer archive and edit orders backend#193
Conversation
Yurika-Kan
left a comment
There was a problem hiding this comment.
looking pretty good~ crucial questions about donation status setting tho!
| donationItemId?: number; | ||
|
|
||
| @IsInt() | ||
| @Min(1) |
There was a problem hiding this comment.
in the case that we want to omit an item from being part of the update, we would want this value to be 0~ this contradicts the service logic that treats 0 as a legal drop
There was a problem hiding this comment.
the way i intend for this to be used in the frontend is this:
- passing in an allocationId means you want to edit an existing allocations quantity to a new number (just decrease it, not delete it)
- passing in a donationItemId means you want to add a new allocation to the order
both cases above require the allocated quantity to be at minimum 1.
all allocations not included in here (which will happen if they are set to 0), will then be free'd.
Yurika-Kan
left a comment
There was a problem hiding this comment.
taking care of new order status~
side effects of adding new enum CLOSED:
- in [request.service.ts:309-315], this method updateRequestStatus decides request status (done when all associated orders = DELIVERED). however now with CLOSED (order) introduced, there can be a case where all orders are DELIVERED but one is CLOSED, resulting in that associated request never reaching closed status. we want to close a food request if all of its associated orders are either DELIVERED or CLOSED. can we update that logic here?
`
const allDelivered = orders.every(
(order) => order.status === OrderStatus.DELIVERED,
);
request.status = allDelivered
? FoodRequestStatus.CLOSED
: FoodRequestStatus.ACTIVE;`
|
|
||
| await this.allocationsService.freeAllByOrder(orderId, transactionManager); | ||
|
|
||
| await this.donationService.recheckDonationAllocationStatus( |
There was a problem hiding this comment.
Will there ever be a case where the donation should instead be fulfilled instead of MATCHED/AVAILABLE? Trying to think about this case but not sure
There was a problem hiding this comment.
i dont think so. if we close a request, that means the donation pertaining to it has donation items being asked for, putting this donation in matched always. closing an order will then make it so that, all the donation items are now free, and the order becomes available, or it just becomes matched. there is no way for those donation items to somehow become delivered to a pantry, and then potentially fulfilled by closing an order.
Yurika-Kan
left a comment
There was a problem hiding this comment.
even tho a CLOSED order now counts as complete ie delivering the remaining orders will close the request, manually closing an order should not close the request when
there is only one order to that active request --> close order => request stays active
there is a DELIVERED order A and PENDING order B both to same request--> close B --> request stays active
|
so in close order, drop the updaterequeststatus call and in updaterequeststatus compute it over nonclosed orders only so nothing is blocked by any closed orders |
ℹ️ Issue
Closes #227
📝 Description
NOTE: For editing allocations, the way I designed it was that the dto would take in an allocationId or donationItemId. Should the allocationId be provided, it would be an edited allocation that already exists in the order. Should it be a donationItemId, it is a new allocation to be created for that order. Finally, all existing allocations that are do not get their ids provided will be assumed to be deleted. I made sure to check that all the donationItemIds involved in the editing are part of the donations from the food manufacturers, and all donations affected as assessed to see if they'ev either beomce matched or available as a result to gaining or losing allocations.
✔️ Verification
🏕️ (Optional) Future Work / Notes
We will have to account for this setup in our frontend implementation so that no allocations with a 0 quantity for the order get sent to the backend.