@tabletennisshop/common 1.0.52 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/enums/event-subject.enum.d.ts +24 -0
- package/build/enums/event-subject.enum.js +28 -0
- package/build/events/CartEventInterface.d.ts +16 -0
- package/build/events/CartEventInterface.js +2 -0
- package/build/events/ListenerAbstract.d.ts +18 -0
- package/build/events/ListenerAbstract.js +36 -0
- package/build/events/OrderEventInterface.d.ts +16 -0
- package/build/events/OrderEventInterface.js +2 -0
- package/build/events/PublisherAbstract.d.ts +13 -0
- package/build/events/PublisherAbstract.js +20 -0
- package/build/events/RatingEventInterface.d.ts +16 -0
- package/build/events/RatingEventInterface.js +2 -0
- package/build/events/UserEventInterface.d.ts +18 -0
- package/build/events/UserEventInterface.js +2 -0
- package/build/index.d.ts +6 -3
- package/build/index.js +6 -3
- package/build/middlewares/check-type.middleware.d.ts +2 -0
- package/build/middlewares/check-type.middleware.js +16 -0
- package/build/middlewares/current-user-middleware.d.ts +1 -0
- package/build/models/order.model.d.ts +0 -3
- package/build/models/order.model.js +0 -2
- package/build/models/user.model.d.ts +2 -3
- package/build/models/user.model.js +1 -5
- package/package.json +2 -1
- package/build/models/address.schema.d.ts +0 -17
- package/build/models/address.schema.js +0 -13
- package/build/models/vendor-purchased.model.d.ts +0 -20
- package/build/models/vendor-purchased.model.js +0 -24
- package/build/models/vendor.model.d.ts +0 -15
- package/build/models/vendor.model.js +0 -19
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum SubjectsEnum {
|
|
2
|
+
UserCreated = "user:created",
|
|
3
|
+
UserUpdated = "user:updated",
|
|
4
|
+
UserDeleted = "user:deleted",
|
|
5
|
+
ProductCreated = "product:created",
|
|
6
|
+
ProductUpdated = "product:updated",
|
|
7
|
+
ProductDeleted = "product:deleted",
|
|
8
|
+
OrderCreated = "order:created",
|
|
9
|
+
OrderUpdated = "order:updated",
|
|
10
|
+
OrderDeleted = "order:deleted",
|
|
11
|
+
TokenCreated = "token:created",
|
|
12
|
+
TokenUpdated = "token:updated",
|
|
13
|
+
TokenDeleted = "token:deleted",
|
|
14
|
+
TokenExpired = "token:expired",
|
|
15
|
+
CartCreated = "cart:created",
|
|
16
|
+
CartUpdated = "cart:updated",
|
|
17
|
+
CartDeleted = "cart:deleted",
|
|
18
|
+
RatingCreated = "rating:created",
|
|
19
|
+
RatingUpdated = "rating:updated",
|
|
20
|
+
RatingDeleted = "rating:deleted",
|
|
21
|
+
InventoryCreated = "inventory:created",
|
|
22
|
+
InventoryUpdated = "inventory:updated",
|
|
23
|
+
InventoryDeleted = "inventory:deleted"
|
|
24
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubjectsEnum = void 0;
|
|
4
|
+
var SubjectsEnum;
|
|
5
|
+
(function (SubjectsEnum) {
|
|
6
|
+
SubjectsEnum["UserCreated"] = "user:created";
|
|
7
|
+
SubjectsEnum["UserUpdated"] = "user:updated";
|
|
8
|
+
SubjectsEnum["UserDeleted"] = "user:deleted";
|
|
9
|
+
SubjectsEnum["ProductCreated"] = "product:created";
|
|
10
|
+
SubjectsEnum["ProductUpdated"] = "product:updated";
|
|
11
|
+
SubjectsEnum["ProductDeleted"] = "product:deleted";
|
|
12
|
+
SubjectsEnum["OrderCreated"] = "order:created";
|
|
13
|
+
SubjectsEnum["OrderUpdated"] = "order:updated";
|
|
14
|
+
SubjectsEnum["OrderDeleted"] = "order:deleted";
|
|
15
|
+
SubjectsEnum["TokenCreated"] = "token:created";
|
|
16
|
+
SubjectsEnum["TokenUpdated"] = "token:updated";
|
|
17
|
+
SubjectsEnum["TokenDeleted"] = "token:deleted";
|
|
18
|
+
SubjectsEnum["TokenExpired"] = "token:expired";
|
|
19
|
+
SubjectsEnum["CartCreated"] = "cart:created";
|
|
20
|
+
SubjectsEnum["CartUpdated"] = "cart:updated";
|
|
21
|
+
SubjectsEnum["CartDeleted"] = "cart:deleted";
|
|
22
|
+
SubjectsEnum["RatingCreated"] = "rating:created";
|
|
23
|
+
SubjectsEnum["RatingUpdated"] = "rating:updated";
|
|
24
|
+
SubjectsEnum["RatingDeleted"] = "rating:deleted";
|
|
25
|
+
SubjectsEnum["InventoryCreated"] = "inventory:created";
|
|
26
|
+
SubjectsEnum["InventoryUpdated"] = "inventory:updated";
|
|
27
|
+
SubjectsEnum["InventoryDeleted"] = "inventory:deleted";
|
|
28
|
+
})(SubjectsEnum || (exports.SubjectsEnum = SubjectsEnum = {}));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SubjectsEnum } from "../enums/event-subject.enum";
|
|
2
|
+
import { ICartAttrs } from "../models/cart.model";
|
|
3
|
+
export interface CartCreatedEventInterface {
|
|
4
|
+
subject: SubjectsEnum.CartCreated;
|
|
5
|
+
data: ICartAttrs;
|
|
6
|
+
}
|
|
7
|
+
export interface CartUpdatedEventInterface {
|
|
8
|
+
subject: SubjectsEnum.CartUpdated;
|
|
9
|
+
data: Partial<ICartAttrs>;
|
|
10
|
+
}
|
|
11
|
+
export interface CartDeletedEventInterface {
|
|
12
|
+
subject: SubjectsEnum.CartDeleted;
|
|
13
|
+
data: {
|
|
14
|
+
id: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Message, Stan } from "node-nats-streaming";
|
|
2
|
+
import { SubjectsEnum } from "../enums/event-subject.enum";
|
|
3
|
+
interface Event {
|
|
4
|
+
subject: SubjectsEnum;
|
|
5
|
+
data: any;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class ListenerAbstract<T extends Event> {
|
|
8
|
+
abstract subject: T['subject'];
|
|
9
|
+
abstract queueGroupName: string;
|
|
10
|
+
abstract onMessage(data: T['data'], msg: any): void;
|
|
11
|
+
protected client: Stan;
|
|
12
|
+
protected ackWait: number;
|
|
13
|
+
constructor(client: Stan);
|
|
14
|
+
subscriptionOptions(): import("node-nats-streaming").SubscriptionOptions;
|
|
15
|
+
listen(): void;
|
|
16
|
+
parseMessage(msg: Message): any;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ListenerAbstract = void 0;
|
|
4
|
+
class ListenerAbstract {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.ackWait = 5 * 1000; // 5 seconds
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
subscriptionOptions() {
|
|
10
|
+
return this.client
|
|
11
|
+
.subscriptionOptions()
|
|
12
|
+
.setDeliverAllAvailable() // When the listener starts, it will receive all messages that have ever been published to the subject, not just new ones. Useful for replaying events.
|
|
13
|
+
.setManualAckMode(true) // Handle ACK Mode Manually
|
|
14
|
+
.setAckWait(this.ackWait) // Wait 5 seconds before resending the message
|
|
15
|
+
// Assigns a durable name to the subscription.
|
|
16
|
+
// This allows the server to remember the last acknowledged message for this listener,
|
|
17
|
+
// so if it disconnects and reconnects,
|
|
18
|
+
// it will only receive new messages (not ones it already processed).
|
|
19
|
+
.setDurableName(this.queueGroupName);
|
|
20
|
+
}
|
|
21
|
+
listen() {
|
|
22
|
+
const subcriptions = this.client.subscribe(this.subject, this.queueGroupName, this.subscriptionOptions());
|
|
23
|
+
subcriptions.on("message", (msg) => {
|
|
24
|
+
console.log(`Message received: ${this.subject} / ${this.queueGroupName}`);
|
|
25
|
+
const parsedData = this.parseMessage(msg);
|
|
26
|
+
this.onMessage(parsedData, msg);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
parseMessage(msg) {
|
|
30
|
+
const data = msg.getData();
|
|
31
|
+
return typeof data === 'string'
|
|
32
|
+
? JSON.parse(data)
|
|
33
|
+
: JSON.parse(data.toString('utf8'));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ListenerAbstract = ListenerAbstract;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SubjectsEnum } from "../enums/event-subject.enum";
|
|
2
|
+
import { OrderAttrs } from "../models/order.model";
|
|
3
|
+
export interface OrderCreatedEventInterface {
|
|
4
|
+
subject: SubjectsEnum.OrderCreated;
|
|
5
|
+
data: OrderAttrs;
|
|
6
|
+
}
|
|
7
|
+
export interface OrderUpdatedEventInterface {
|
|
8
|
+
subject: SubjectsEnum.OrderUpdated;
|
|
9
|
+
data: Partial<OrderAttrs>;
|
|
10
|
+
}
|
|
11
|
+
export interface OrderDeletedEventInterface {
|
|
12
|
+
subject: SubjectsEnum.OrderDeleted;
|
|
13
|
+
data: {
|
|
14
|
+
id: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Stan } from 'node-nats-streaming';
|
|
2
|
+
import { SubjectsEnum } from '../enums/event-subject.enum';
|
|
3
|
+
interface Event {
|
|
4
|
+
subject: SubjectsEnum;
|
|
5
|
+
data: any;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class PublisherAbstract<T extends Event> {
|
|
8
|
+
abstract subject: T['subject'];
|
|
9
|
+
protected client: Stan;
|
|
10
|
+
constructor(client: Stan);
|
|
11
|
+
publish(data: T['data']): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PublisherAbstract = void 0;
|
|
4
|
+
class PublisherAbstract {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
publish(data) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
this.client.publish(this.subject, JSON.stringify(data), (err) => {
|
|
11
|
+
if (err) {
|
|
12
|
+
return reject(err);
|
|
13
|
+
}
|
|
14
|
+
console.log('Event published to subject', this.subject);
|
|
15
|
+
resolve();
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.PublisherAbstract = PublisherAbstract;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SubjectsEnum } from "../enums/event-subject.enum";
|
|
2
|
+
import { IRatingAttrs } from "../models/rating.model";
|
|
3
|
+
export interface RatingCreatedEventInterface {
|
|
4
|
+
subject: SubjectsEnum.RatingCreated;
|
|
5
|
+
data: IRatingAttrs;
|
|
6
|
+
}
|
|
7
|
+
export interface RatingUpdatedEventInterface {
|
|
8
|
+
subject: SubjectsEnum.RatingUpdated;
|
|
9
|
+
data: Partial<IRatingAttrs>;
|
|
10
|
+
}
|
|
11
|
+
export interface RatingDeletedEventInterface {
|
|
12
|
+
subject: SubjectsEnum.RatingDeleted;
|
|
13
|
+
data: {
|
|
14
|
+
id: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SubjectsEnum } from "../enums/event-subject.enum";
|
|
2
|
+
import { UserAttrs } from "../models/user.model";
|
|
3
|
+
type OptionalUser = Partial<UserAttrs>;
|
|
4
|
+
export interface UserUpdatedEventInterface {
|
|
5
|
+
subject: SubjectsEnum.UserUpdated;
|
|
6
|
+
data: OptionalUser;
|
|
7
|
+
}
|
|
8
|
+
export interface UserDeletedEventInterface {
|
|
9
|
+
subject: SubjectsEnum.UserDeleted;
|
|
10
|
+
data: {
|
|
11
|
+
id: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface UserCreatedEventInterface {
|
|
15
|
+
subject: SubjectsEnum.UserCreated;
|
|
16
|
+
data: UserAttrs;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
package/build/index.d.ts
CHANGED
|
@@ -12,16 +12,19 @@ export * from './models/racket.model';
|
|
|
12
12
|
export * from './models/rating.model';
|
|
13
13
|
export * from './models/shirt.model';
|
|
14
14
|
export * from './models/sponge.model';
|
|
15
|
-
export * from './models/address.schema';
|
|
16
15
|
export * from './models/order.model';
|
|
17
16
|
export * from './models/cart.model';
|
|
18
17
|
export * from './models/inventory.model';
|
|
19
18
|
export * from './models/status-timestamp.schema';
|
|
20
|
-
export * from './models/vendor.model';
|
|
21
|
-
export * from './models/vendor-purchased.model';
|
|
22
19
|
export * from './helper/password';
|
|
23
20
|
export * from './enums/product-type.enum';
|
|
24
21
|
export * from './enums/order-status.enum';
|
|
25
22
|
export * from './enums/payment-method.enum';
|
|
26
23
|
export * from './enums/user-status.enum';
|
|
27
24
|
export * from './enums/user.enum';
|
|
25
|
+
export * from './events/CartEventInterface';
|
|
26
|
+
export * from './events/ListenerAbstract';
|
|
27
|
+
export * from './events/OrderEventInterface';
|
|
28
|
+
export * from './events/PublisherAbstract';
|
|
29
|
+
export * from './events/RatingEventInterface';
|
|
30
|
+
export * from './events/UserEventInterface';
|
package/build/index.js
CHANGED
|
@@ -28,16 +28,19 @@ __exportStar(require("./models/racket.model"), exports);
|
|
|
28
28
|
__exportStar(require("./models/rating.model"), exports);
|
|
29
29
|
__exportStar(require("./models/shirt.model"), exports);
|
|
30
30
|
__exportStar(require("./models/sponge.model"), exports);
|
|
31
|
-
__exportStar(require("./models/address.schema"), exports);
|
|
32
31
|
__exportStar(require("./models/order.model"), exports);
|
|
33
32
|
__exportStar(require("./models/cart.model"), exports);
|
|
34
33
|
__exportStar(require("./models/inventory.model"), exports);
|
|
35
34
|
__exportStar(require("./models/status-timestamp.schema"), exports);
|
|
36
|
-
__exportStar(require("./models/vendor.model"), exports);
|
|
37
|
-
__exportStar(require("./models/vendor-purchased.model"), exports);
|
|
38
35
|
__exportStar(require("./helper/password"), exports);
|
|
39
36
|
__exportStar(require("./enums/product-type.enum"), exports);
|
|
40
37
|
__exportStar(require("./enums/order-status.enum"), exports);
|
|
41
38
|
__exportStar(require("./enums/payment-method.enum"), exports);
|
|
42
39
|
__exportStar(require("./enums/user-status.enum"), exports);
|
|
43
40
|
__exportStar(require("./enums/user.enum"), exports);
|
|
41
|
+
__exportStar(require("./events/CartEventInterface"), exports);
|
|
42
|
+
__exportStar(require("./events/ListenerAbstract"), exports);
|
|
43
|
+
__exportStar(require("./events/OrderEventInterface"), exports);
|
|
44
|
+
__exportStar(require("./events/PublisherAbstract"), exports);
|
|
45
|
+
__exportStar(require("./events/RatingEventInterface"), exports);
|
|
46
|
+
__exportStar(require("./events/UserEventInterface"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CheckType = void 0;
|
|
4
|
+
const CheckType = (roles) => {
|
|
5
|
+
return (req, res, next) => {
|
|
6
|
+
const currentUser = req.currentUser;
|
|
7
|
+
if (!currentUser) {
|
|
8
|
+
throw new Error("Not Authorized");
|
|
9
|
+
}
|
|
10
|
+
if (!currentUser.type || !roles.includes(currentUser.type)) {
|
|
11
|
+
throw new Error("Not Authorized");
|
|
12
|
+
}
|
|
13
|
+
next();
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
exports.CheckType = CheckType;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Document, Model, Types } from 'mongoose';
|
|
2
|
-
import { IAddress } from './address.schema';
|
|
3
2
|
import { OrderStatusEnum } from '../enums/order-status.enum';
|
|
4
3
|
import { IStatusTimestamps } from './status-timestamp.schema';
|
|
5
4
|
import { PaymentMethodEnum } from '../enums/payment-method.enum';
|
|
@@ -11,7 +10,6 @@ export interface IOrderProduct {
|
|
|
11
10
|
}
|
|
12
11
|
export interface OrderAttrs {
|
|
13
12
|
user_id: Types.ObjectId;
|
|
14
|
-
address: IAddress;
|
|
15
13
|
products: IOrderProduct[];
|
|
16
14
|
status: OrderStatusEnum;
|
|
17
15
|
statusTimestamps: IStatusTimestamps;
|
|
@@ -19,7 +17,6 @@ export interface OrderAttrs {
|
|
|
19
17
|
}
|
|
20
18
|
export interface OrderDoc extends Document {
|
|
21
19
|
user_id: Types.ObjectId;
|
|
22
|
-
address: IAddress;
|
|
23
20
|
products: IOrderProduct[];
|
|
24
21
|
status: OrderStatusEnum;
|
|
25
22
|
statusTimestamps: IStatusTimestamps;
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OrderModel = void 0;
|
|
4
4
|
const mongoose_1 = require("mongoose");
|
|
5
|
-
const address_schema_1 = require("./address.schema");
|
|
6
5
|
const order_status_enum_1 = require("../enums/order-status.enum");
|
|
7
6
|
const status_timestamp_schema_1 = require("./status-timestamp.schema");
|
|
8
7
|
const payment_method_enum_1 = require("../enums/payment-method.enum");
|
|
9
8
|
const OrderSchema = new mongoose_1.Schema({
|
|
10
9
|
user_id: { type: mongoose_1.Schema.Types.ObjectId, ref: 'User', required: true }, // FK to User
|
|
11
|
-
address: { type: address_schema_1.AddressSchema, required: true },
|
|
12
10
|
products: {
|
|
13
11
|
type: [
|
|
14
12
|
{
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { Model, Document } from 'mongoose';
|
|
2
|
-
import { IAddress } from './address.schema';
|
|
3
2
|
import { UserStatusEnum } from '../enums/user-status.enum';
|
|
4
3
|
export interface UserAttrs {
|
|
5
4
|
username: string;
|
|
6
5
|
email: string;
|
|
7
6
|
password: string;
|
|
8
7
|
full_name: string;
|
|
9
|
-
|
|
8
|
+
address: string;
|
|
10
9
|
type: string;
|
|
11
10
|
status: UserStatusEnum;
|
|
12
11
|
}
|
|
@@ -15,7 +14,7 @@ interface UserDoc extends Document {
|
|
|
15
14
|
email: string;
|
|
16
15
|
password: string;
|
|
17
16
|
full_name: string;
|
|
18
|
-
|
|
17
|
+
address: string;
|
|
19
18
|
type: string;
|
|
20
19
|
status: UserStatusEnum;
|
|
21
20
|
createdAt: Date;
|
|
@@ -13,17 +13,13 @@ exports.UserModel = void 0;
|
|
|
13
13
|
const mongoose_1 = require("mongoose");
|
|
14
14
|
const password_1 = require("../helper/password");
|
|
15
15
|
const user_enum_1 = require("../enums/user.enum");
|
|
16
|
-
const address_schema_1 = require("./address.schema");
|
|
17
16
|
const user_status_enum_1 = require("../enums/user-status.enum");
|
|
18
17
|
const UserSchema = new mongoose_1.Schema({
|
|
19
18
|
username: { type: String, required: true, unique: true, minlength: 5 },
|
|
20
19
|
email: { type: String, required: true, unique: true },
|
|
21
20
|
password: { type: String, required: true, minlength: 4 },
|
|
22
21
|
full_name: { type: String, required: true },
|
|
23
|
-
|
|
24
|
-
type: [address_schema_1.AddressSchema], // Use the AddressSchema defined in address.schema.ts
|
|
25
|
-
required: true
|
|
26
|
-
},
|
|
22
|
+
address: { type: String, required: true },
|
|
27
23
|
type: { type: String, enum: Object.values(user_enum_1.UserEnum), required: true },
|
|
28
24
|
status: { type: String, enum: Object.values(user_status_enum_1.UserStatusEnum), required: true }
|
|
29
25
|
}, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tabletennisshop/common",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.55",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"express-validator": "^7.2.1",
|
|
30
30
|
"jsonwebtoken": "^9.0.2",
|
|
31
31
|
"mongoose": "^8.15.1",
|
|
32
|
+
"node-nats-streaming": "^0.3.2",
|
|
32
33
|
"uninstall": "^0.0.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Schema } from "mongoose";
|
|
2
|
-
export interface IAddress {
|
|
3
|
-
province: string;
|
|
4
|
-
district: string;
|
|
5
|
-
ward: string;
|
|
6
|
-
address: string;
|
|
7
|
-
phone_number: string;
|
|
8
|
-
}
|
|
9
|
-
export declare const AddressSchema: Schema<IAddress, import("mongoose").Model<IAddress, any, any, any, import("mongoose").Document<unknown, any, IAddress, any> & IAddress & {
|
|
10
|
-
_id: import("mongoose").Types.ObjectId;
|
|
11
|
-
} & {
|
|
12
|
-
__v: number;
|
|
13
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IAddress, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IAddress>, {}> & import("mongoose").FlatRecord<IAddress> & {
|
|
14
|
-
_id: import("mongoose").Types.ObjectId;
|
|
15
|
-
} & {
|
|
16
|
-
__v: number;
|
|
17
|
-
}>;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AddressSchema = void 0;
|
|
4
|
-
//This is subdocument schema
|
|
5
|
-
const mongoose_1 = require("mongoose");
|
|
6
|
-
exports.AddressSchema = new mongoose_1.Schema({
|
|
7
|
-
province: { type: String, required: true },
|
|
8
|
-
district: { type: String, required: true },
|
|
9
|
-
ward: { type: String, required: true },
|
|
10
|
-
address: { type: String, required: true },
|
|
11
|
-
phone_number: { type: String, required: true },
|
|
12
|
-
}, { _id: false } //This schema don't need Address Schema
|
|
13
|
-
);
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Types, Document, Model } from 'mongoose';
|
|
2
|
-
export interface IVendorPurchase {
|
|
3
|
-
vendor_id: Types.ObjectId;
|
|
4
|
-
products: {
|
|
5
|
-
product_id: Types.ObjectId;
|
|
6
|
-
serials?: string[];
|
|
7
|
-
price: number;
|
|
8
|
-
quantity: number;
|
|
9
|
-
}[];
|
|
10
|
-
date: Date;
|
|
11
|
-
}
|
|
12
|
-
interface VendorPurchaseDoc extends IVendorPurchase, Document {
|
|
13
|
-
createdAt: Date;
|
|
14
|
-
updatedAt: Date;
|
|
15
|
-
}
|
|
16
|
-
interface VendorPurchaseModel extends Model<VendorPurchaseDoc> {
|
|
17
|
-
build(attrs: IVendorPurchase): VendorPurchaseDoc;
|
|
18
|
-
}
|
|
19
|
-
export declare const VendorPurchaseModel: VendorPurchaseModel;
|
|
20
|
-
export {};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VendorPurchaseModel = void 0;
|
|
4
|
-
const mongoose_1 = require("mongoose");
|
|
5
|
-
const VendorPurchaseSchema = new mongoose_1.Schema({
|
|
6
|
-
vendor_id: { type: mongoose_1.Schema.Types.ObjectId, ref: 'Vendor', required: true },
|
|
7
|
-
products: {
|
|
8
|
-
type: [{
|
|
9
|
-
product_id: { type: mongoose_1.Schema.Types.ObjectId, ref: 'Product', required: true },
|
|
10
|
-
serials: { type: [String], required: false },
|
|
11
|
-
price: { type: Number, required: true },
|
|
12
|
-
quantity: { type: Number, required: true },
|
|
13
|
-
}],
|
|
14
|
-
required: true
|
|
15
|
-
},
|
|
16
|
-
date: { type: Date, required: true },
|
|
17
|
-
}, {
|
|
18
|
-
collection: 'vendor_purchase',
|
|
19
|
-
timestamps: true,
|
|
20
|
-
});
|
|
21
|
-
VendorPurchaseSchema.statics.build = (attrs) => {
|
|
22
|
-
return new exports.VendorPurchaseModel(attrs);
|
|
23
|
-
};
|
|
24
|
-
exports.VendorPurchaseModel = (0, mongoose_1.model)('VendorPurchase', VendorPurchaseSchema);
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Document, Model } from "mongoose";
|
|
2
|
-
import { IAddress } from "./address.schema";
|
|
3
|
-
export interface VendorAttrs {
|
|
4
|
-
name: string;
|
|
5
|
-
addresses: IAddress[];
|
|
6
|
-
}
|
|
7
|
-
interface VendorDoc extends Document {
|
|
8
|
-
name: string;
|
|
9
|
-
addresses: IAddress[];
|
|
10
|
-
}
|
|
11
|
-
interface VendorModel extends Model<VendorDoc> {
|
|
12
|
-
build(attr: VendorAttrs): VendorDoc;
|
|
13
|
-
}
|
|
14
|
-
export declare const VendorModel: VendorModel;
|
|
15
|
-
export {};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VendorModel = void 0;
|
|
4
|
-
const mongoose_1 = require("mongoose");
|
|
5
|
-
const address_schema_1 = require("./address.schema");
|
|
6
|
-
const VendorSchema = new mongoose_1.Schema({
|
|
7
|
-
name: { type: String, required: true },
|
|
8
|
-
addresses: {
|
|
9
|
-
type: [address_schema_1.AddressSchema],
|
|
10
|
-
required: true
|
|
11
|
-
}
|
|
12
|
-
}, {
|
|
13
|
-
timestamps: true,
|
|
14
|
-
collection: "vendor"
|
|
15
|
-
});
|
|
16
|
-
VendorSchema.statics.build = (attrs) => {
|
|
17
|
-
return new exports.VendorModel(attrs);
|
|
18
|
-
};
|
|
19
|
-
exports.VendorModel = (0, mongoose_1.model)('Vendor', VendorSchema);
|