search stored items
This commit is contained in:
parent
8ba00eb9e2
commit
69e0bac7b3
@ -149,17 +149,6 @@ export class AppStorageController {
|
||||
return this.service.removeFromSet(set, storage);
|
||||
}
|
||||
|
||||
@Get('room/:roomId')
|
||||
@ApiParam({ name: 'roomId', description: 'Room ID' })
|
||||
@ApiOperation({ summary: 'Get storages in room' })
|
||||
@ApiOkResponse({ type: StorageResponseDto, isArray: true })
|
||||
async getStorages(
|
||||
@CurrentRoom() room: Room,
|
||||
@Query() { includeWithSets }: StorageWithSetsQueryDto,
|
||||
) {
|
||||
return this.service.getStoragesInRoom(room.id, includeWithSets);
|
||||
}
|
||||
|
||||
@Get('set/room/:roomId')
|
||||
@ApiParam({ name: 'roomId', description: 'Room ID' })
|
||||
@ApiOperation({ summary: 'Get storage sets in room' })
|
||||
@ -181,6 +170,17 @@ export class AppStorageController {
|
||||
return this.service.createStorageSet(user, room, body);
|
||||
}
|
||||
|
||||
@Get('room/:roomId')
|
||||
@ApiParam({ name: 'roomId', description: 'Room ID' })
|
||||
@ApiOperation({ summary: 'Get storages in room' })
|
||||
@ApiOkResponse({ type: StorageResponseDto, isArray: true })
|
||||
async getStorages(
|
||||
@CurrentRoom() room: Room,
|
||||
@Query() { includeWithSets }: StorageWithSetsQueryDto,
|
||||
) {
|
||||
return this.service.getStoragesInRoom(room.id, includeWithSets);
|
||||
}
|
||||
|
||||
@Post('room/:roomId')
|
||||
@ApiParam({ name: 'roomId', description: 'Room ID' })
|
||||
@ApiBody({ type: StorageCreateRequestDto })
|
||||
@ -203,7 +203,33 @@ export class AppStorageController {
|
||||
return this.service.getExpiringOrExpiredItems(user);
|
||||
}
|
||||
|
||||
@Get('expiring/building/:buildingId')
|
||||
@Get('search')
|
||||
@ApiOperation({
|
||||
summary: 'Search for stored items',
|
||||
})
|
||||
@ApiOkResponse({ type: StorageStoredItemResponseDto, isArray: true })
|
||||
async searchForStoredItems(
|
||||
@LoggedInUser() user: User,
|
||||
@Query() query: StorageItemRequestQueryDto,
|
||||
) {
|
||||
return this.service.searchForStoredItems(query, user);
|
||||
}
|
||||
|
||||
@Get('building/:buildingId/search')
|
||||
@ApiParam({ name: 'buildingId', description: 'Building ID' })
|
||||
@ApiOperation({
|
||||
summary: 'Search for stored items in building',
|
||||
})
|
||||
@ApiOkResponse({ type: StorageStoredItemResponseDto, isArray: true })
|
||||
async searchForStoredItemsInBuilding(
|
||||
@LoggedInUser() user: User,
|
||||
@CurrentBuilding() building: Building,
|
||||
@Query() query: StorageItemRequestQueryDto,
|
||||
) {
|
||||
return this.service.searchForStoredItems(query, user, building.id);
|
||||
}
|
||||
|
||||
@Get('building/:buildingId/expiring')
|
||||
@ApiParam({ name: 'buildingId', description: 'Building ID' })
|
||||
@ApiOperation({ summary: 'Get expiring and expired items in building' })
|
||||
@ApiOkResponse({ type: StorageStoredItemResponseDto, isArray: true })
|
||||
|
@ -159,6 +159,21 @@ export class AppStorageService {
|
||||
);
|
||||
}
|
||||
|
||||
async searchForStoredItems(
|
||||
search: StorageItemRequestQueryDto,
|
||||
user: User,
|
||||
buildingId?: number,
|
||||
) {
|
||||
const foundItems = await this.storageService.searchForStoredItem(
|
||||
search,
|
||||
user.sub,
|
||||
buildingId,
|
||||
);
|
||||
return foundItems.map((storedItem) =>
|
||||
this.formatStoredItem(storedItem, true),
|
||||
);
|
||||
}
|
||||
|
||||
async createStoredItem(
|
||||
user: User,
|
||||
item: Item,
|
||||
|
@ -1,14 +1,16 @@
|
||||
import { ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { IsString, ValidateIf } from 'class-validator';
|
||||
import { IsString, MinLength, ValidateIf } from 'class-validator';
|
||||
|
||||
export class StorageItemRequestQueryDto {
|
||||
@ApiPropertyOptional()
|
||||
@IsString()
|
||||
@MinLength(2)
|
||||
@ValidateIf((obj) => !obj.barcode)
|
||||
searchTerm?: string;
|
||||
|
||||
@ApiPropertyOptional()
|
||||
@IsString()
|
||||
@MinLength(2)
|
||||
@ValidateIf((obj) => !obj.searchTerm)
|
||||
barcode?: string;
|
||||
}
|
||||
|
@ -62,15 +62,15 @@ export class StoredItem {
|
||||
transactions?: StoredItemTransaction[];
|
||||
|
||||
@ApiPropertyOptional()
|
||||
@Column({ nullable: true, type: 'datetime' })
|
||||
@Column({ nullable: true, type: 'datetime', default: null })
|
||||
expiresAt?: Date;
|
||||
|
||||
@ApiPropertyOptional()
|
||||
@Column({ nullable: true, type: 'datetime' })
|
||||
@Column({ nullable: true, type: 'datetime', default: null })
|
||||
acquiredAt?: Date;
|
||||
|
||||
@ApiPropertyOptional()
|
||||
@Column({ nullable: true, type: 'datetime' })
|
||||
@Column({ nullable: true, type: 'datetime', default: null })
|
||||
consumedAt?: Date;
|
||||
|
||||
@ApiProperty()
|
||||
|
@ -173,6 +173,7 @@ export class StorageService {
|
||||
async getItemsInStorage(storageId: number, relations = []) {
|
||||
return this.storedItemRepository.find({
|
||||
where: {
|
||||
consumedAt: null,
|
||||
storage: {
|
||||
id: storageId,
|
||||
},
|
||||
@ -181,6 +182,42 @@ export class StorageService {
|
||||
});
|
||||
}
|
||||
|
||||
async searchForStoredItem(
|
||||
search: { searchTerm?: string; barcode?: string },
|
||||
sub: string,
|
||||
buildingId?: number,
|
||||
) {
|
||||
return this.storedItemRepository.find({
|
||||
where: {
|
||||
consumedAt: null,
|
||||
item: {
|
||||
[search.barcode ? 'barcode' : 'displayName']:
|
||||
search.barcode || ILike(`%${search.searchTerm}%`),
|
||||
},
|
||||
...(buildingId
|
||||
? {
|
||||
building: { id: buildingId },
|
||||
}
|
||||
: {
|
||||
building: {
|
||||
groups: {
|
||||
members: {
|
||||
sub,
|
||||
},
|
||||
},
|
||||
},
|
||||
}),
|
||||
},
|
||||
take: 10,
|
||||
relations: [
|
||||
'item',
|
||||
'storage',
|
||||
'storage.room',
|
||||
...(!buildingId ? ['building'] : []),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
async searchForItem(searchTerm: string, sub: string) {
|
||||
const displayName = ILike(`%${searchTerm}%`);
|
||||
return this.itemRepository.find({
|
||||
@ -283,6 +320,7 @@ export class StorageService {
|
||||
// 8 days
|
||||
return this.storedItemRepository.find({
|
||||
where: {
|
||||
consumedAt: null,
|
||||
expiresAt: LessThanOrEqual(new Date(Date.now() + 691200000)),
|
||||
building: {
|
||||
id: buildingId,
|
||||
@ -300,6 +338,7 @@ export class StorageService {
|
||||
// 8 days
|
||||
return this.storedItemRepository.find({
|
||||
where: {
|
||||
consumedAt: null,
|
||||
expiresAt: LessThanOrEqual(new Date(Date.now() + 691200000)),
|
||||
building: {
|
||||
groups: {
|
||||
|
Loading…
Reference in New Issue
Block a user