Skip to content

Commit 13e6268

Browse files
authored
Merge pull request #15 from oslabs-beta/inventory
inventory
2 parents 455c21e + 409ff8f commit 13e6268

File tree

7 files changed

+114
-35
lines changed

7 files changed

+114
-35
lines changed

examples_new/microservices/inventory/src/__test__/inventory.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ it('fails if item id or units are missing', async () => {
2020
});
2121
it('success if there is itemid and units', async () => {
2222
const itemId = '6581bbc692686e6e68d25d7d';
23-
await global.createItem(itemId);
23+
const sellerId = '6581bbc692686e6e68d25xxx';
24+
await global.createItem(itemId, sellerId);
2425
const response = await request(app)
2526
.get('/api/inventory/getItemInventory')
2627
.send({
2728
itemId: itemId,
2829
})
2930
.expect(200);
30-
// console.log(response);
31+
console.log(response);
3132
expect(response.body.units).toEqual(50);
3233
});
3334
//testing updateItemInventory route, fail if id or units are missing
@@ -47,7 +48,8 @@ it('fails if item id or units are missing when trying to update', async () => {
4748
});
4849
it('successful updated the item with updated units', async () => {
4950
const itemId = '6581bbc692686e6e68d25d7d';
50-
await global.createItem(itemId);
51+
const sellerId = '6581bbc692686e6e68d25xxx';
52+
await global.createItem(itemId, sellerId);
5153

5254
const response = await request(app)
5355
.patch('/api/inventory/updateItemInventory')

examples_new/microservices/inventory/src/controllers/inventory-controllers.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import axios from 'axios';
33
import { Inventory } from '../models/Inventory';
44
import { BadRequestError, CurrentUserRequest, Events } from '@chronosrx/common';
55

6-
export const getItemInventory = async (req: Request, res: Response) => {
6+
export const getAllItems = async (req: Request, res: Response) => {
77
console.log(req.body);
88
const { itemId, units } = req.body;
9-
const exsitingItem = await Inventory.findOne({ itemId });
9+
const exsitingItem = await Inventory.find({ itemId });
1010
if (!exsitingItem) {
1111
throw new BadRequestError('Item with that ID does not exist');
1212
}
@@ -17,7 +17,16 @@ export const getItemInventory = async (req: Request, res: Response) => {
1717
// payload: newInventory,
1818
// },
1919
// });
20+
res.status(200).send(exsitingItem);
21+
};
2022

23+
export const getMyItems = async (req: Request, res: Response) => {
24+
console.log(req.body);
25+
const { sellerId } = req.body;
26+
const exsitingItem = await Inventory.find({ sellerId });
27+
if (!exsitingItem) {
28+
throw new BadRequestError('Could not find items with that sellerId');
29+
}
2130
res.status(200).send(exsitingItem);
2231
};
2332

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,47 @@
11
import mongoose from 'mongoose';
2-
//define type of objects that is being passed into build method
2+
33
interface InventoryAttrs {
4-
itemId: string;
5-
units: number;
4+
id: string;
5+
itemName: string;
6+
sellerId: string; // some user's id)
7+
unitPrice: number;
68
}
7-
9+
// define item attributes
810
interface InventoryModel extends mongoose.Model<InventoryDoc> {
911
build(attrs: InventoryAttrs): InventoryDoc;
1012
}
11-
//create inventory data in the database in this shape
13+
//create item data in the database with these types;
1214
interface InventoryDoc extends mongoose.Document {
13-
itemId: string;
15+
itemName: string;
16+
sellerId: mongoose.Types.ObjectId;
17+
unitPrice: number;
1418
units: number;
1519
}
16-
//create the Schema in mongoose with defined requirements
17-
const inventorySchema = new mongoose.Schema(
20+
// create the Schema in mongoose with defines requirements
21+
const InventorySchema = new mongoose.Schema(
1822
{
19-
itemId: {
23+
itemName: {
2024
type: String,
2125
required: true,
22-
unique: true,
26+
// unique: true,
27+
},
28+
sellerId: {
29+
type: mongoose.Types.ObjectId,
30+
required: true,
31+
ref: 'User',
32+
},
33+
unitPrice: {
34+
type: Number,
35+
required: true,
2336
},
2437
units: {
2538
type: Number,
2639
required: true,
40+
default: 1,
2741
},
2842
},
2943
{
30-
//anytime we create Json formatted data, transform the user document as following
44+
//anytime we create JSON formatted data, transform item using following rules
3145
toJSON: {
3246
transform(doc, ret) {
3347
ret.id = ret._id;
@@ -37,14 +51,14 @@ const inventorySchema = new mongoose.Schema(
3751
},
3852
}
3953
);
40-
41-
inventorySchema.statics.build = (attrs: InventoryAttrs) => {
54+
InventorySchema.statics.build = (attrs: InventoryAttrs) => {
55+
//returning item document with (attrs) passed in
4256
return new Inventory({
43-
itemId: attrs.itemId,
44-
units: attrs.units,
57+
_id: new mongoose.Types.ObjectId(attrs.id),
58+
itemName: attrs.itemName,
59+
sellerId: attrs.sellerId,
60+
unitPrice: attrs.unitPrice,
4561
});
4662
};
47-
48-
const Inventory = mongoose.model<InventoryDoc, InventoryModel>('Inventory', inventorySchema);
49-
63+
const Inventory = mongoose.model<InventoryDoc, InventoryModel>('Inventory', InventorySchema);
5064
export { Inventory };
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import mongoose from 'mongoose';
2+
3+
//define attrs
4+
interface UserAttrs {
5+
username: string;
6+
id: string;
7+
}
8+
// add a method 'build' to the UserModel
9+
// mongoose has built-in Model class that takes 'UserDoc'
10+
interface UserModel extends mongoose.Model<UserDoc> {
11+
build(attrs: UserAttrs): UserDoc;
12+
}
13+
//create user data in the database in this shape
14+
interface UserDoc extends mongoose.Document {
15+
username: string;
16+
}
17+
//create the Schema in mongoose with defined requirements
18+
const userSchema = new mongoose.Schema(
19+
{
20+
username: {
21+
type: String,
22+
required: true,
23+
unique: true,
24+
},
25+
},
26+
{
27+
//anytime we create Json formatted data, transform the user document as following
28+
toJSON: {
29+
transform(doc, ret) {
30+
ret.id = ret._id;
31+
delete ret._id;
32+
delete ret.__v;
33+
},
34+
},
35+
}
36+
);
37+
38+
userSchema.statics.build = (attrs: UserAttrs) => {
39+
//returning user document with (attrs) passed in
40+
return new User({
41+
_id: attrs.id,
42+
username: attrs.username,
43+
});
44+
};
45+
46+
const User = mongoose.model<UserDoc, UserModel>('User', userSchema);
47+
48+
export { User };

examples_new/microservices/inventory/src/routes/event-router.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
import { Events } from '@chronosrx/common';
1+
import { EventTypes, Events } from '@chronosrx/common';
22
import express from 'express';
33
import { Inventory } from '../models/Inventory';
4+
import { User } from '../models/user';
45

56
const router = express.Router();
67

78
router.post('/', async (req, res) => {
8-
const { event } = req.body;
9-
// console.log('Event received:', event);
9+
const event: Events = req.body.event;
10+
console.log(event);
1011
switch (event.type) {
11-
case Events.ITEM_CREATED:
12-
console.log(event);
12+
case EventTypes.USER_CREATED:
13+
// console.log(event);
14+
const newUser = User.build(event.payload);
15+
await newUser.save();
16+
break;
17+
case EventTypes.ITEM_CREATED:
1318
const newInventory = Inventory.build(event.payload);
1419
await newInventory.save();
15-
break;
1620
default:
1721
res.send({});
1822
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import express from 'express';
2-
import { getItemInventory, updateItemInventory } from '../controllers/inventory-controllers';
2+
import { getAllItems, updateItemInventory, getMyItems } from '../controllers/inventory-controllers';
33

44
const router = express.Router();
55

@@ -8,7 +8,8 @@ const router = express.Router();
88

99
// });
1010

11-
router.get('/getItemInventory', getItemInventory);
11+
router.get('/getAllItems', getAllItems);
12+
router.get('/getMyItems', getMyItems);
1213
router.patch('/updateItemInventory', updateItemInventory);
1314

1415
export default router;

examples_new/microservices/inventory/src/test/setup.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { MongoMemoryServer } from 'mongodb-memory-server';
22
import mongoose from 'mongoose';
3-
import { app } from '../app';
4-
import request from 'supertest';
53
import { Inventory } from '../models/Inventory';
64

75
declare global {
8-
function createItem(itemId: string): void;
6+
function createItem(itemId: string, sellerId: string): void;
97
}
108

119
let mongo: any;
@@ -35,10 +33,13 @@ afterAll(async () => {
3533
await mongoose.connection.close();
3634
});
3735

38-
global.createItem = async itemId => {
36+
global.createItem = async (itemId, sellerId) => {
3937
const data = Inventory.build({
4038
itemId: itemId,
39+
itemName: 'crap',
40+
sellerId: sellerId,
4141
units: 50,
42+
unitPrice: 5,
4243
});
4344
await data.save();
4445
};

0 commit comments

Comments
 (0)