Merge pull request #884 from Tria-plc/testfixes

Card called GET /warehouse-inventory (staff perm) → 403 swallowed as
This commit is contained in:
Hagernesh Tadesse
2026-07-21 17:21:42 +03:00
committed by GitHub
4 changed files with 36 additions and 2 deletions

View File

@@ -556,6 +556,12 @@ export class WarehouseInventoryController {
return this.inventoryService.bookingContainerWeights(bookingId);
}
@Get('bookings/:bookingId/location')
@ApiOperation({ summary: "Warehouse location of a booking's inventory (customer portal)" })
bookingLocation(@Param('bookingId', ParseUUIDPipe) bookingId: string) {
return this.inventoryService.bookingLocation(bookingId);
}
@Post(':id/deliver')
@BookingStaff(FREIGHT_PERMS.warehouseInventory.deliver)
@ApiOperation({ summary: 'Deliver import goods to the customer + capture proof of delivery' })

View File

@@ -1030,6 +1030,28 @@ export class WarehouseInventoryService {
return this.findAll({ ...filter, status: 'READY_FOR_LOADING' });
}
/**
* Warehouse location rows for one booking, trimmed for the customer portal:
* no staff guard on the route, so only location fields leave the API —
* never notes, fees or inspection internals.
*/
async bookingLocation(bookingId: string) {
const items = await this.inventoryRepository.findAll({
where: { bookingId },
relations: { warehouse: true, yard: true, zone: true },
order: { createdAt: 'DESC' },
});
return items.map((i) => ({
id: i.id,
bookingId: i.bookingId,
status: i.status,
arrivedAt: i.arrivedAt ?? null,
warehouse: i.warehouse ? { id: i.warehouse.id, name: i.warehouse.name, code: i.warehouse.code } : null,
yard: i.yard ? { id: i.yard.id, name: i.yard.name, code: i.yard.code } : null,
zone: i.zone ? { id: i.zone.id, name: i.zone.name, code: i.zone.code } : null,
}));
}
async findById(id: string): Promise<WarehouseInventory> {
const item = await this.inventoryRepository.findById(id, {
relations: { warehouse: { facility: true }, yard: true, zone: true },

View File

@@ -23,8 +23,8 @@ function Row({ label, value }: { label: string; value: React.ReactNode }) {
export function WarehouseLocationCard({ bookingId }: WarehouseLocationCardProps) {
const { data, isLoading } = useQuery({
queryKey: ["warehouse-inventory", bookingId],
queryFn: () => warehouseService.listInventory({ bookingId }),
queryKey: ["warehouse-inventory", "booking-location", bookingId],
queryFn: () => warehouseService.bookingLocation(bookingId),
});
const items = data ?? [];

View File

@@ -49,6 +49,12 @@ export const warehouseService = {
return data?.data ?? data ?? [];
},
/** Customer-safe location endpoint — the plain list is staff-only (403 for portal users). */
bookingLocation: async (bookingId: string): Promise<WarehouseInventoryItem[]> => {
const { data } = await client.get(`/warehouse-inventory/bookings/${bookingId}/location`);
return data?.data ?? data ?? [];
},
bookingSchedule: async (bookingId: string): Promise<BookingScheduleView> => {
const { data } = await client.get(`/warehouse-inventory/booking-schedule/${bookingId}`);
return data?.data ?? data ?? { schedule: null, wagon: null };