Skip to content

Commit

Permalink
feat: support find owner by device id (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
sirily11 authored Feb 12, 2022
1 parent 8d75f1a commit 0f0d47e
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,44 @@ export class StorageManagementOwnerService extends BaseMongoDBService<schema.ISt
configs.Configurations.numberPerPage
);
}

/**
* Get owner by device id. Will return a full owner object
* @param deviceId device's id
* @return storage owner
*/
async getOwnerByDevice(
deviceId: string
): Promise<schema.IStorageOwner | undefined> {
const pipelines = [
{
$lookup: {
from: "storage_management_item",
localField: "user_id",
foreignField: "owner_id",
as: "items",
},
},
{
$unwind: {
path: "$items",
preserveNullAndEmptyArrays: true,
},
},
{
$match: {
"items.qr_code": deviceId,
},
},
{ $limit: 1 },
];

const result = await this.model.aggregate(pipelines);

if (result && result.length > 0) {
return result[0];
}

return undefined;
}
}
40 changes: 40 additions & 0 deletions packages/etd-services/src/tests/mongodb/storage/owner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,44 @@ describe("Given a storage owner", () => {
const result = await plugin.getListOfUsers(1);
expect(result.results.length).toBe(0);
});

test("When calling get owner by device id", async () => {
const service = new StorageManagementOwnerService();
const result = await service.getOwnerByDevice(mockData.MockDeviceID);
expect(result).toBeUndefined();
});

test("When calling get owner by device id", async () => {
await schema.StorageOwnerModel.create(mockData.MockUser);
await schema.StorageOwnerModel.create(mockData.MockUser2);
await schema.StorageItemModel.create(mockData.MockStorageItem);
await schema.StorageItemModel.create(mockData.MockStorageItem2);
const service = new StorageManagementOwnerService();
const result = await service.getOwnerByDevice(
mockData.MockStorageItem.qr_code
);
expect(result).toBeDefined();
expect(result!.user_name).toBe(mockData.MockUser.user_name);
expect(result!.user_id).toBe(mockData.MockUser.user_id);
});

test("When calling get owner by device id", async () => {
await schema.StorageOwnerModel.create(mockData.MockUser);
await schema.StorageOwnerModel.create(mockData.MockUser2);
await schema.StorageItemModel.create(mockData.MockStorageItem);
await schema.StorageItemModel.create(mockData.MockStorageItem2);
await schema.StorageItemModel.create(mockData.MockStorageItem3);
const service = new StorageManagementOwnerService();
let result = await service.getOwnerByDevice(
mockData.MockStorageItem.qr_code
);
expect(result).toBeDefined();
expect(result!.user_name).toBe(mockData.MockUser.user_name);
expect(result!.user_id).toBe(mockData.MockUser.user_id);

result = await service.getOwnerByDevice(mockData.MockStorageItem3.qr_code);
expect(result).toBeDefined();
expect(result!.user_name).toBe(mockData.MockUser2.user_name);
expect(result!.user_id).toBe(mockData.MockUser2.user_id);
});
});

0 comments on commit 0f0d47e

Please sign in to comment.