Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 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
1 change: 1 addition & 0 deletions apps/backend/src/donationItems/donationItems.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ import { Donation } from '../donations/donations.entity';
imports: [TypeOrmModule.forFeature([DonationItem, Donation]), AuthModule],
controllers: [DonationItemsController],
providers: [DonationItemsService],
exports: [DonationItemsService],
})
export class DonationItemsModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { IsNumber, Min, IsBoolean } from 'class-validator';

export class ConfirmDonationItemDetailsDto {
@IsNumber()
itemId!: number;
Comment thread
dburkhart07 marked this conversation as resolved.

@IsNumber(
{ maxDecimalPlaces: 2 },
{ message: 'Oz per item must have at most 2 decimal places' },
)
@Min(0.01, { message: 'Oz per item must be at least 0.01' })
ozPerItem!: number;

@IsNumber(
{ maxDecimalPlaces: 2 },
{ message: 'Estimated value must have at most 2 decimal places' },
)
@Min(0.01, { message: 'Estimated value must be at least 0.01' })
estimatedValue!: number;

@IsBoolean()
foodRescue!: boolean;
}
35 changes: 35 additions & 0 deletions apps/backend/src/donations/donations.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { mock } from 'jest-mock-extended';
import { Donation } from './donations.entity';
import { CreateDonationDto } from './dtos/create-donation.dto';
import { DonationStatus, RecurrenceEnum } from './types';
import { ConfirmDonationItemDetailsDto } from '../donationItems/dtos/confirm-donation-item-details.dto';

const mockDonationService = mock<DonationService>();

Expand Down Expand Up @@ -120,4 +121,38 @@ describe('DonationsController', () => {
expect(mockDonationService.fulfill).toHaveBeenCalledWith(donationId);
});
});

describe('PATCH /:donationId/item-details', () => {
it('calls confirmDonationItemDetails with the correct donationId and body, returns result', async () => {
const donationId = 1;
const body: ConfirmDonationItemDetailsDto[] = [
{
itemId: 1,
ozPerItem: 5.0,
estimatedValue: 10.0,
foodRescue: true,
},
{
itemId: 2,
ozPerItem: 8.0,
estimatedValue: 15.0,
foodRescue: false,
},
];

mockDonationService.confirmDonationItemDetails.mockResolvedValueOnce(
donation1 as Donation,
);

const result = await controller.confirmDonationItemDetails(
donationId,
body,
);

expect(result).toEqual(donation1);
expect(
mockDonationService.confirmDonationItemDetails,
).toHaveBeenCalledWith(donationId, body);
});
});
});
11 changes: 11 additions & 0 deletions apps/backend/src/donations/donations.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ import {
Patch,
Param,
ParseIntPipe,
ParseArrayPipe,
} from '@nestjs/common';
import { ApiBody } from '@nestjs/swagger';
import { Donation } from './donations.entity';
import { DonationService } from './donations.service';
import { RecurrenceEnum } from './types';
import { CreateDonationDto } from './dtos/create-donation.dto';
import { ConfirmDonationItemDetailsDto } from '../donationItems/dtos/confirm-donation-item-details.dto';

@Controller('donations')
export class DonationsController {
Expand Down Expand Up @@ -77,4 +79,13 @@ export class DonationsController {
): Promise<Donation> {
return this.donationService.fulfill(donationId);
}

@Patch('/:donationId/item-details')
async confirmDonationItemDetails(
@Param('donationId', ParseIntPipe) donationId: number,
@Body(new ParseArrayPipe({ items: ConfirmDonationItemDetailsDto }))
body: ConfirmDonationItemDetailsDto[],
): Promise<Donation> {
return this.donationService.confirmDonationItemDetails(donationId, body);
}
}
8 changes: 7 additions & 1 deletion apps/backend/src/donations/donations.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@ import { DonationsController } from './donations.controller';
import { AuthModule } from '../auth/auth.module';
import { FoodManufacturer } from '../foodManufacturers/manufacturers.entity';
import { DonationsSchedulerService } from './donations.scheduler';
import { DonationItem } from '../donationItems/donationItems.entity';
import { DonationItemsModule } from '../donationItems/donationItems.module';

@Module({
imports: [TypeOrmModule.forFeature([Donation, FoodManufacturer]), AuthModule],
imports: [
TypeOrmModule.forFeature([Donation, FoodManufacturer, DonationItem]),
AuthModule,
DonationItemsModule,
],
controllers: [DonationsController],
providers: [DonationService, DonationsSchedulerService],
})
Expand Down
Loading
Loading