@merkaly/api 0.5.2 → 0.5.4

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.
Files changed (48) hide show
  1. package/dist/abstract.repository.d.ts +31 -14
  2. package/dist/abstract.transition.d.ts +9 -0
  3. package/dist/abstract.transition.js +24 -0
  4. package/dist/finance/payment/index.d.ts +1 -0
  5. package/dist/finance/payment/index.js +1 -0
  6. package/dist/finance/payment/payment.entity.d.ts +2 -6
  7. package/dist/finance/payment/payment.enum.d.ts +2 -6
  8. package/dist/finance/payment/payment.enum.js +1 -5
  9. package/dist/finance/payment/payment.transition.d.ts +6 -0
  10. package/dist/finance/payment/payment.transition.js +14 -0
  11. package/dist/finance/payment/payment.validator.d.ts +2 -3
  12. package/dist/finance/payment/payment.validator.js +2 -9
  13. package/dist/finance/refund/index.d.ts +1 -0
  14. package/dist/finance/refund/index.js +1 -0
  15. package/dist/finance/refund/refund.transition.d.ts +6 -0
  16. package/dist/finance/refund/refund.transition.js +23 -0
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +1 -0
  19. package/dist/inventory/catalog/product/index.d.ts +0 -1
  20. package/dist/inventory/catalog/product/index.js +0 -1
  21. package/dist/inventory/catalog/product/product.entity.d.ts +0 -2
  22. package/dist/inventory/catalog/product/product.validator.d.ts +1 -2
  23. package/dist/inventory/catalog/product/product.validator.js +7 -9
  24. package/dist/inventory/stock/transfer/index.d.ts +1 -0
  25. package/dist/inventory/stock/transfer/index.js +1 -0
  26. package/dist/inventory/stock/transfer/transfer.status.enum.d.ts +0 -1
  27. package/dist/inventory/stock/transfer/transfer.status.enum.js +0 -1
  28. package/dist/inventory/stock/transfer/transfer.transition.d.ts +6 -0
  29. package/dist/inventory/stock/transfer/transfer.transition.js +11 -0
  30. package/dist/order/purchase/transaction/index.d.ts +1 -0
  31. package/dist/order/purchase/transaction/index.js +1 -0
  32. package/dist/order/purchase/transaction/transaction.enum.d.ts +0 -1
  33. package/dist/order/purchase/transaction/transaction.enum.js +0 -1
  34. package/dist/order/purchase/transaction/transaction.transition.d.ts +6 -0
  35. package/dist/order/purchase/transaction/transaction.transition.js +11 -0
  36. package/dist/order/purchase/transaction/transaction.validator.js +2 -0
  37. package/dist/order/sale/item/item.validator.js +1 -1
  38. package/dist/order/sale/transaction/index.d.ts +1 -0
  39. package/dist/order/sale/transaction/index.js +1 -0
  40. package/dist/order/sale/transaction/transaction.enum.d.ts +0 -1
  41. package/dist/order/sale/transaction/transaction.enum.js +0 -1
  42. package/dist/order/sale/transaction/transaction.transition.d.ts +6 -0
  43. package/dist/order/sale/transaction/transaction.transition.js +11 -0
  44. package/dist/order/sale/transaction/transaction.validator.d.ts +0 -1
  45. package/dist/order/sale/transaction/transaction.validator.js +2 -7
  46. package/package.json +8 -91
  47. package/dist/inventory/catalog/product/product.status.enum.d.ts +0 -8
  48. package/dist/inventory/catalog/product/product.status.enum.js +0 -9
@@ -3,8 +3,8 @@ import { LoggerService } from './';
3
3
  import { MongoService } from './mongo.service.js';
4
4
  import { AbstractEntity } from './abstract.entity.js';
5
5
  import { AbstractSchema } from './abstract.schema.js';
6
- import { AbstractValidator, ReadValidator, SearchValidator } from './abstract.validator.js';
7
- import type { ClientSession, Document, FilterQuery, Model, RootFilterQuery, UpdateQuery } from 'mongoose';
6
+ import { AbstractValidator, SearchValidator } from './abstract.validator.js';
7
+ import type { ClientSession, Document, FilterQuery, Model, PopulateOptions, RootFilterQuery, UpdateQuery } from 'mongoose';
8
8
  type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
9
9
  type SystemKeys = '_id' | 'createdAt' | 'updatedAt' | 'deletedAt' | keyof Document;
10
10
  export type CreateEntityArgs<T> = {
@@ -14,14 +14,31 @@ export type CreateEntityArgs<T> = {
14
14
  -readonly [Q in K]: T[K];
15
15
  }> extends true ? K : never]: T[K] extends AbstractEntity ? CreateEntityArgs<T[K]> : T[K];
16
16
  };
17
- export interface ReadOptions<E extends AbstractEntity = AbstractEntity> {
18
- validator?: ReadValidator<E>;
17
+ export type EntityLocator<E extends AbstractEntity = AbstractEntity> = string | RootFilterQuery<E>;
18
+ export type JoinOptions = string[] | PopulateOptions[];
19
+ export interface ReadMethodOptions {
20
+ join?: JoinOptions;
19
21
  session?: ClientSession;
20
22
  }
21
- export interface SaveOptions<E extends AbstractEntity> {
22
- param?: string | RootFilterQuery<E>;
23
+ export interface CreateMethodOptions<P extends AbstractValidator = AbstractValidator> {
24
+ join?: JoinOptions;
25
+ payload: P;
26
+ session?: ClientSession;
27
+ }
28
+ export interface UpdateMethodOptions<P extends AbstractValidator = AbstractValidator> {
29
+ join?: JoinOptions;
30
+ payload: P;
31
+ session?: ClientSession;
32
+ }
33
+ export interface DeleteMethodOptions {
34
+ join?: JoinOptions;
35
+ session?: ClientSession;
36
+ }
37
+ export interface SaveMethodOptions<E extends AbstractEntity> {
38
+ join?: JoinOptions;
39
+ param?: EntityLocator<E>;
23
40
  payload: UpdateQuery<E>;
24
- validator?: ReadValidator;
41
+ session?: ClientSession;
25
42
  }
26
43
  export declare abstract class AbstractRepository<E extends AbstractEntity = AbstractEntity> {
27
44
  protected abstract readonly $schema: AbstractSchema<E>;
@@ -35,8 +52,8 @@ export declare abstract class AbstractRepository<E extends AbstractEntity = Abst
35
52
  private sanitizePaths;
36
53
  private removeNonDeclaredSchemas;
37
54
  private applyPopulate;
38
- count(filters?: FilterQuery<E>): Promise<number>;
39
- search(validator?: SearchValidator<E>): Promise<{
55
+ count(filters?: FilterQuery<E>, session?: ClientSession): Promise<number>;
56
+ search(validator?: SearchValidator<E>, session?: ClientSession): Promise<{
40
57
  data: import("mongoose").IfAny<E, any, Document<unknown, {}, E, {}, {}> & (import("mongoose").Require_id<E> extends infer T ? T extends import("mongoose").Require_id<E> ? T extends {
41
58
  __v?: infer U;
42
59
  } ? T : T & {
@@ -46,15 +63,15 @@ export declare abstract class AbstractRepository<E extends AbstractEntity = Abst
46
63
  pages: number;
47
64
  total: number;
48
65
  }>;
49
- read(param: string | RootFilterQuery<E>, options?: ReadOptions<E>): Promise<E>;
66
+ read(locator: EntityLocator<E>, options?: ReadMethodOptions): Promise<E>;
50
67
  private hasUpdateOperators;
51
- protected save({ param, payload, validator }: SaveOptions<E>): Promise<import("mongoose").IfAny<E, any, Document<unknown, {}, E, {}, {}> & (import("mongoose").Require_id<E> extends infer T ? T extends import("mongoose").Require_id<E> ? T extends {
68
+ protected save({ param, payload, join, session }: SaveMethodOptions<E>): Promise<import("mongoose").IfAny<E, any, Document<unknown, {}, E, {}, {}> & (import("mongoose").Require_id<E> extends infer T ? T extends import("mongoose").Require_id<E> ? T extends {
52
69
  __v?: infer U;
53
70
  } ? T : T & {
54
71
  __v: number;
55
72
  } : never : never)>>;
56
- abstract create(payload: AbstractValidator, validator?: ReadValidator, doc?: Document<string, object, E>): Promise<E>;
57
- abstract update(param: string | RootFilterQuery<E>, payload: AbstractValidator, validator?: ReadValidator): Promise<E>;
58
- delete(param: string | RootFilterQuery<E>): Promise<void>;
73
+ abstract create(options: CreateMethodOptions<AbstractValidator>): Promise<E>;
74
+ abstract update(locator: EntityLocator<E>, options: UpdateMethodOptions<AbstractValidator>): Promise<E>;
75
+ delete(locator: EntityLocator<E>, options?: DeleteMethodOptions): Promise<void>;
59
76
  }
60
77
  export {};
@@ -0,0 +1,9 @@
1
+ export declare abstract class AbstractTransition<S extends string, E = unknown> {
2
+ private $current: S;
3
+ constructor(current: S);
4
+ protected abstract readonly $states: Readonly<Record<S, readonly S[]>>;
5
+ canTransition(from: S, to: S): boolean;
6
+ readonly nextStates: readonly S[];
7
+ readonly prevStates: S[];
8
+ readonly isTerminal: boolean;
9
+ }
@@ -0,0 +1,24 @@
1
+ export class AbstractTransition {
2
+ constructor(current) {
3
+ this.$current = current;
4
+ }
5
+
6
+ canTransition(from, to) {
7
+ const allowed = this.$states[from] ?? [];
8
+ return allowed.includes(to);
9
+ }
10
+
11
+ get nextStates() {
12
+ return this.$states[this.$current] ?? [];
13
+ }
14
+
15
+ get prevStates() {
16
+ return Object.entries(this.$states)
17
+ .filter(([, next]) => next.includes(this.$current))
18
+ .map(([prev]) => prev);
19
+ }
20
+
21
+ get isTerminal() {
22
+ return (this.$states[this.$current] ?? []).length === 0;
23
+ }
24
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './payment.entity';
2
2
  export * from './payment.enum';
3
3
  export * from './payment.validator';
4
+ export * from './payment.transition';
@@ -1,2 +1,3 @@
1
1
  export * from './payment.enum.js';
2
2
  export * from './payment.validator.js';
3
+ export * from './payment.transition.js';
@@ -1,19 +1,15 @@
1
1
  import { PurchaseTransactionEntity } from '../../order/purchase/transaction';
2
2
  import { SaleTransactionEntity } from '../../order/sale/transaction';
3
3
  import { AbstractEntity, MongoEntity } from '../..';
4
- import { FinancePaymentTypeEnum, FinancePaymentMethodEnum, FinancePaymentStatusEnum } from './payment.enum.js';
5
- import type { FinanceRefundEntity } from '../refund';
4
+ import { FinancePaymentMethodEnum, FinancePaymentStatusEnum, FinancePaymentTypeEnum } from './payment.enum.js';
6
5
  export declare class FinancePaymentEntity extends AbstractEntity {
7
6
  type: FinancePaymentTypeEnum;
8
7
  target: string;
9
8
  order: MongoEntity<SaleTransactionEntity | PurchaseTransactionEntity>;
10
9
  status: FinancePaymentStatusEnum;
11
- date: Date;
12
10
  total: number;
13
11
  fee: number;
14
- method: FinancePaymentMethodEnum;
15
- refunds: MongoEntity<FinanceRefundEntity>[];
12
+ method?: FinancePaymentMethodEnum;
16
13
  sequence: number;
17
14
  readonly number: string;
18
- readonly refundedTotal: number;
19
15
  }
@@ -1,12 +1,8 @@
1
1
  export declare enum FinancePaymentStatusEnum {
2
- OPEN = "OPEN",
3
2
  PENDING = "PENDING",
4
- FAILED = "FAILED",
5
- DISPUTED = "DISPUTED",
6
3
  PAID = "PAID",
7
- PARTIALLY_REFUNDED = "PARTIALLY_REFUNDED",
8
- REFUNDED = "REFUNDED",
9
- CANCELLED = "CANCELLED"
4
+ CANCELLED = "CANCELLED",
5
+ REFUNDED = "REFUNDED"
10
6
  }
11
7
  export declare enum FinancePaymentMethodEnum {
12
8
  CARD = "CARD",
@@ -1,13 +1,9 @@
1
1
  export var FinancePaymentStatusEnum;
2
2
  (function (FinancePaymentStatusEnum) {
3
- FinancePaymentStatusEnum["OPEN"] = "OPEN";
4
3
  FinancePaymentStatusEnum["PENDING"] = "PENDING";
5
- FinancePaymentStatusEnum["FAILED"] = "FAILED";
6
- FinancePaymentStatusEnum["DISPUTED"] = "DISPUTED";
7
4
  FinancePaymentStatusEnum["PAID"] = "PAID";
8
- FinancePaymentStatusEnum["PARTIALLY_REFUNDED"] = "PARTIALLY_REFUNDED";
9
- FinancePaymentStatusEnum["REFUNDED"] = "REFUNDED";
10
5
  FinancePaymentStatusEnum["CANCELLED"] = "CANCELLED";
6
+ FinancePaymentStatusEnum["REFUNDED"] = "REFUNDED";
11
7
  })(FinancePaymentStatusEnum || (FinancePaymentStatusEnum = {}));
12
8
  export var FinancePaymentMethodEnum;
13
9
  (function (FinancePaymentMethodEnum) {
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../abstract.transition.js';
2
+ import { FinancePaymentStatusEnum } from './payment.enum.js';
3
+
4
+ export declare class FinancePaymentTransition extends AbstractTransition<FinancePaymentStatusEnum, unknown> {
5
+ protected readonly $states: Readonly<Record<FinancePaymentStatusEnum, readonly FinancePaymentStatusEnum[]>>;
6
+ }
@@ -0,0 +1,14 @@
1
+ import { AbstractTransition } from '../../abstract.transition.js';
2
+ import * as payment_enum_1 from './payment.enum.js';
3
+
4
+ export class FinancePaymentTransition extends AbstractTransition {
5
+ $states = {
6
+ [payment_enum_1.FinancePaymentStatusEnum.PENDING]: [
7
+ payment_enum_1.FinancePaymentStatusEnum.PAID,
8
+ payment_enum_1.FinancePaymentStatusEnum.CANCELLED,
9
+ ],
10
+ [payment_enum_1.FinancePaymentStatusEnum.PAID]: [payment_enum_1.FinancePaymentStatusEnum.REFUNDED],
11
+ [payment_enum_1.FinancePaymentStatusEnum.REFUNDED]: [],
12
+ [payment_enum_1.FinancePaymentStatusEnum.CANCELLED]: [],
13
+ };
14
+ }
@@ -7,9 +7,8 @@ export declare class ReadFinancePaymentValidator extends ReadValidator<FinancePa
7
7
  }
8
8
  export declare class SaveFinancePaymentValidator extends AbstractValidator {
9
9
  orderType: FinancePaymentTypeEnum;
10
- target: string;
11
10
  order?: string;
12
- method: FinancePaymentMethodEnum;
11
+ method?: FinancePaymentMethodEnum;
13
12
  total?: number;
14
- status: FinancePaymentStatusEnum;
13
+ status?: FinancePaymentStatusEnum;
15
14
  }
@@ -16,7 +16,6 @@ export class ReadFinancePaymentValidator extends abstract_validator_1.ReadValida
16
16
  }
17
17
  export class SaveFinancePaymentValidator extends abstract_validator_1.AbstractValidator {
18
18
  orderType;
19
- target;
20
19
  order;
21
20
  method;
22
21
  total;
@@ -27,12 +26,6 @@ __decorate([
27
26
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
28
27
  __metadata("design:type", String)
29
28
  ], SaveFinancePaymentValidator.prototype, "orderType", void 0);
30
- __decorate([
31
- (0, class_validator_1.IsString)(),
32
- (0, class_validator_1.Length)(0, 255),
33
- (0, class_validator_1.IsOptional)({ groups: ['update'] }),
34
- __metadata("design:type", String)
35
- ], SaveFinancePaymentValidator.prototype, "target", void 0);
36
29
  __decorate([
37
30
  (0, class_validator_1.IsMongoId)(),
38
31
  (0, class_validator_1.IsOptional)(),
@@ -40,7 +33,7 @@ __decorate([
40
33
  ], SaveFinancePaymentValidator.prototype, "order", void 0);
41
34
  __decorate([
42
35
  (0, class_validator_1.IsEnum)(payment_enum_1.FinancePaymentMethodEnum),
43
- (0, class_validator_1.IsOptional)({ groups: ['update'] }),
36
+ (0, class_validator_1.IsOptional)(),
44
37
  __metadata("design:type", String)
45
38
  ], SaveFinancePaymentValidator.prototype, "method", void 0);
46
39
  __decorate([
@@ -50,6 +43,6 @@ __decorate([
50
43
  ], SaveFinancePaymentValidator.prototype, "total", void 0);
51
44
  __decorate([
52
45
  (0, class_validator_1.IsEnum)(payment_enum_1.FinancePaymentStatusEnum),
53
- (0, class_validator_1.IsDefined)({ groups: ['update:status'] }),
46
+ (0, class_validator_1.IsOptional)(),
54
47
  __metadata("design:type", String)
55
48
  ], SaveFinancePaymentValidator.prototype, "status", void 0);
@@ -1,3 +1,4 @@
1
1
  export * from './refund.entity';
2
2
  export * from './refund.enum';
3
3
  export * from './refund.validator';
4
+ export * from './refund.transition';
@@ -1,2 +1,3 @@
1
1
  export * from './refund.enum.js';
2
2
  export * from './refund.validator.js';
3
+ export * from './refund.transition.js';
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../abstract.transition.js';
2
+ import { FinanceRefundStatusEnum } from './refund.enum.js';
3
+
4
+ export declare class FinanceRefundTransition extends AbstractTransition<FinanceRefundStatusEnum, unknown> {
5
+ protected readonly $states: Readonly<Record<FinanceRefundStatusEnum, readonly FinanceRefundStatusEnum[]>>;
6
+ }
@@ -0,0 +1,23 @@
1
+ import { AbstractTransition } from '../../abstract.transition.js';
2
+ import * as refund_enum_1 from './refund.enum.js';
3
+
4
+ export class FinanceRefundTransition extends AbstractTransition {
5
+ $states = {
6
+ [refund_enum_1.FinanceRefundStatusEnum.PENDING]: [
7
+ refund_enum_1.FinanceRefundStatusEnum.APPROVED,
8
+ refund_enum_1.FinanceRefundStatusEnum.REJECTED,
9
+ refund_enum_1.FinanceRefundStatusEnum.CANCELLED,
10
+ ],
11
+ [refund_enum_1.FinanceRefundStatusEnum.APPROVED]: [
12
+ refund_enum_1.FinanceRefundStatusEnum.PROCESSING,
13
+ refund_enum_1.FinanceRefundStatusEnum.CANCELLED,
14
+ ],
15
+ [refund_enum_1.FinanceRefundStatusEnum.PROCESSING]: [
16
+ refund_enum_1.FinanceRefundStatusEnum.COMPLETED,
17
+ refund_enum_1.FinanceRefundStatusEnum.CANCELLED,
18
+ ],
19
+ [refund_enum_1.FinanceRefundStatusEnum.COMPLETED]: [],
20
+ [refund_enum_1.FinanceRefundStatusEnum.REJECTED]: [],
21
+ [refund_enum_1.FinanceRefundStatusEnum.CANCELLED]: [],
22
+ };
23
+ }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './abstract.entity';
2
+ export * from './abstract.transition';
2
3
  export * from './abstract.validator';
3
4
  export * from './abstract.repository';
4
5
  export * from './not-equal-to.decorator';
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './abstract.transition.js';
1
2
  export * from './abstract.validator.js';
2
3
  export * from './not-equal-to.decorator.js';
3
4
  export * from './address.validator.js';
@@ -1,3 +1,2 @@
1
1
  export * from './product.entity';
2
2
  export * from './product.validator';
3
- export * from './product.status.enum';
@@ -1,2 +1 @@
1
1
  export * from './product.validator.js';
2
- export * from './product.status.enum.js';
@@ -1,5 +1,4 @@
1
1
  import { AssetEntity } from '../../../assets/asset';
2
- import { CatalogProductStatus } from './';
3
2
  import { AbstractEntity } from '../../..';
4
3
  import { CatalogAttributeEntity } from '../attribute';
5
4
  import type { CatalogBrandEntity } from '../brand';
@@ -25,7 +24,6 @@ export declare class CatalogProductEntity extends AbstractEntity {
25
24
  unit: string;
26
25
  };
27
26
  hashtags: string[];
28
- status: CatalogProductStatus;
29
27
  variants: MongoEntity<CatalogVariantEntity>[];
30
28
  readonly hasVariants: boolean;
31
29
  readonly stock: number;
@@ -1,5 +1,4 @@
1
1
  import { CatalogProductEntity } from './';
2
- import { CatalogProductStatus } from './';
3
2
  import { AbstractValidator, ReadValidator, SearchValidator } from '../../..';
4
3
  export declare class SearchCatalogProductValidator extends SearchValidator<CatalogProductEntity> {
5
4
  }
@@ -15,6 +14,7 @@ export declare class SaveCatalogProductValidator extends AbstractValidator {
15
14
  sku: string;
16
15
  description: string;
17
16
  price: number;
17
+ stock: number;
18
18
  measure: {
19
19
  amount: number;
20
20
  kind: string;
@@ -25,5 +25,4 @@ export declare class SaveCatalogProductValidator extends AbstractValidator {
25
25
  brand: string;
26
26
  hashtags: string[];
27
27
  attributes: ProductAttributeValidator[];
28
- status: CatalogProductStatus;
29
28
  }
@@ -9,7 +9,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import * as class_transformer_1 from "class-transformer";
11
11
  import * as class_validator_1 from "class-validator";
12
- import * as product_status_enum_1 from './product.status.enum.js';
13
12
  import * as abstract_validator_1 from '../../..';
14
13
  export class SearchCatalogProductValidator extends abstract_validator_1.SearchValidator {
15
14
  }
@@ -38,7 +37,6 @@ export class SaveCatalogProductValidator extends abstract_validator_1.AbstractVa
38
37
  this.name = entity.name;
39
38
  this.description = entity.description;
40
39
  this.price = entity.price;
41
- this.status = entity.status;
42
40
  this.category = (0, abstract_validator_1.toId)(entity.category);
43
41
  this.brand = (0, abstract_validator_1.toId)(entity.brand);
44
42
  this.measure.amount = entity.measure?.amount;
@@ -49,13 +47,13 @@ export class SaveCatalogProductValidator extends abstract_validator_1.AbstractVa
49
47
  sku;
50
48
  description;
51
49
  price;
50
+ stock;
52
51
  measure = { amount: 0, kind: '', unit: '' };
53
52
  pictures = [];
54
53
  category;
55
54
  brand;
56
55
  hashtags = [];
57
56
  attributes = [];
58
- status = product_status_enum_1.CatalogProductStatus.Draft;
59
57
  }
60
58
  __decorate([
61
59
  (0, class_validator_1.IsString)(),
@@ -81,6 +79,12 @@ __decorate([
81
79
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
82
80
  __metadata("design:type", Number)
83
81
  ], SaveCatalogProductValidator.prototype, "price", void 0);
82
+ __decorate([
83
+ (0, class_validator_1.IsInt)({ groups: ['create'] }),
84
+ (0, class_validator_1.Min)(0, { groups: ['create'] }),
85
+ (0, class_validator_1.IsOptional)({ groups: ['create'] }),
86
+ __metadata("design:type", Number)
87
+ ], SaveCatalogProductValidator.prototype, "stock", void 0);
84
88
  __decorate([
85
89
  (0, class_validator_1.IsObject)(),
86
90
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
@@ -116,9 +120,3 @@ __decorate([
116
120
  (0, class_validator_1.IsOptional)({ groups: ['update'] }),
117
121
  __metadata("design:type", Array)
118
122
  ], SaveCatalogProductValidator.prototype, "attributes", void 0);
119
- __decorate([
120
- (0, class_transformer_1.Transform)(({ value }) => value?.toString().toLowerCase()),
121
- (0, class_validator_1.IsEnum)(product_status_enum_1.CatalogProductStatus),
122
- (0, class_validator_1.IsOptional)({ groups: ['update'] }),
123
- __metadata("design:type", String)
124
- ], SaveCatalogProductValidator.prototype, "status", void 0);
@@ -1,3 +1,4 @@
1
1
  export * from './transfer.entity';
2
2
  export * from './transfer.status.enum';
3
3
  export * from './transfer.validator';
4
+ export * from './transfer.transition';
@@ -1,2 +1,3 @@
1
1
  export * from './transfer.status.enum.js';
2
2
  export * from './transfer.validator.js';
3
+ export * from './transfer.transition.js';
@@ -1,6 +1,5 @@
1
1
  export declare enum TransferStatusEnum {
2
2
  PENDING = "PENDING",
3
- IN_TRANSIT = "IN_TRANSIT",
4
3
  PAUSED = "PAUSED",
5
4
  COMPLETED = "COMPLETED",
6
5
  CANCELLED = "CANCELLED"
@@ -1,7 +1,6 @@
1
1
  export var TransferStatusEnum;
2
2
  (function (TransferStatusEnum) {
3
3
  TransferStatusEnum["PENDING"] = "PENDING";
4
- TransferStatusEnum["IN_TRANSIT"] = "IN_TRANSIT";
5
4
  TransferStatusEnum["PAUSED"] = "PAUSED";
6
5
  TransferStatusEnum["COMPLETED"] = "COMPLETED";
7
6
  TransferStatusEnum["CANCELLED"] = "CANCELLED";
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import { TransferStatusEnum as Status } from './transfer.status.enum.js';
3
+
4
+ export declare class StockTransferTransition extends AbstractTransition<Status, unknown> {
5
+ protected readonly $states: Readonly<Record<Status, readonly Status[]>>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import * as transfer_status_enum_1 from './transfer.status.enum.js';
3
+
4
+ export class StockTransferTransition extends AbstractTransition {
5
+ $states = {
6
+ [transfer_status_enum_1.TransferStatusEnum.PENDING]: [transfer_status_enum_1.TransferStatusEnum.PAUSED, transfer_status_enum_1.TransferStatusEnum.COMPLETED, transfer_status_enum_1.TransferStatusEnum.CANCELLED],
7
+ [transfer_status_enum_1.TransferStatusEnum.PAUSED]: [transfer_status_enum_1.TransferStatusEnum.PENDING, transfer_status_enum_1.TransferStatusEnum.COMPLETED, transfer_status_enum_1.TransferStatusEnum.CANCELLED],
8
+ [transfer_status_enum_1.TransferStatusEnum.COMPLETED]: [],
9
+ [transfer_status_enum_1.TransferStatusEnum.CANCELLED]: [],
10
+ };
11
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './transaction.entity';
2
2
  export * from './transaction.validator';
3
3
  export * from './transaction.enum';
4
+ export * from './transaction.transition';
@@ -1,2 +1,3 @@
1
1
  export * from './transaction.validator.js';
2
2
  export * from './transaction.enum.js';
3
+ export * from './transaction.transition.js';
@@ -1,5 +1,4 @@
1
1
  export declare enum PurchaseTransactionStatusEnum {
2
- DRAFT = "DRAFT",
3
2
  REQUESTED = "REQUESTED",
4
3
  PAUSED = "PAUSED",
5
4
  RECEIVED = "RECEIVED",
@@ -1,6 +1,5 @@
1
1
  export var PurchaseTransactionStatusEnum;
2
2
  (function (PurchaseTransactionStatusEnum) {
3
- PurchaseTransactionStatusEnum["DRAFT"] = "DRAFT";
4
3
  PurchaseTransactionStatusEnum["REQUESTED"] = "REQUESTED";
5
4
  PurchaseTransactionStatusEnum["PAUSED"] = "PAUSED";
6
5
  PurchaseTransactionStatusEnum["RECEIVED"] = "RECEIVED";
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import { PurchaseTransactionStatusEnum as Status } from './transaction.enum.js';
3
+
4
+ export declare class PurchaseTransactionTransition extends AbstractTransition<Status, unknown> {
5
+ protected readonly $states: Readonly<Record<Status, readonly Status[]>>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import * as transaction_enum_1 from './transaction.enum.js';
3
+
4
+ export class PurchaseTransactionTransition extends AbstractTransition {
5
+ $states = {
6
+ [transaction_enum_1.PurchaseTransactionStatusEnum.REQUESTED]: [transaction_enum_1.PurchaseTransactionStatusEnum.PAUSED, transaction_enum_1.PurchaseTransactionStatusEnum.RECEIVED, transaction_enum_1.PurchaseTransactionStatusEnum.CANCELLED],
7
+ [transaction_enum_1.PurchaseTransactionStatusEnum.PAUSED]: [transaction_enum_1.PurchaseTransactionStatusEnum.REQUESTED, transaction_enum_1.PurchaseTransactionStatusEnum.CANCELLED],
8
+ [transaction_enum_1.PurchaseTransactionStatusEnum.RECEIVED]: [],
9
+ [transaction_enum_1.PurchaseTransactionStatusEnum.CANCELLED]: [],
10
+ };
11
+ }
@@ -28,7 +28,9 @@ export class SavePurchaseTransactionValidator extends abstract_validator_1.Abstr
28
28
  total: item.total,
29
29
  variant: (0, abstract_validator_1.toId)(item.variant),
30
30
  }));
31
+ const transfer = entity.transfer;
31
32
  this.notes = entity.notes;
33
+ this.warehouse = (0, abstract_validator_1.toId)(transfer?.destination);
32
34
  this.vendor = (0, abstract_validator_1.toId)(entity.vendor);
33
35
  }
34
36
  items = [];
@@ -15,7 +15,7 @@ export class SaleItemValidator {
15
15
  notes;
16
16
  price = 0;
17
17
  get total() {
18
- return Math.trunc(this.quantity * this.price);
18
+ return Math.trunc(this.quantity * this.price) || 0;
19
19
  }
20
20
  }
21
21
  __decorate([
@@ -1,3 +1,4 @@
1
1
  export * from './transaction.entity';
2
2
  export * from './transaction.validator';
3
3
  export * from './transaction.enum';
4
+ export * from './transaction.transition';
@@ -1,2 +1,3 @@
1
1
  export * from './transaction.validator.js';
2
2
  export * from './transaction.enum.js';
3
+ export * from './transaction.transition.js';
@@ -1,5 +1,4 @@
1
1
  export declare enum SaleTransactionStatusEnum {
2
- PENDING = "PENDING",
3
2
  PROCESSING = "PROCESSING",
4
3
  PAUSED = "PAUSED",
5
4
  COMPLETED = "COMPLETED",
@@ -1,6 +1,5 @@
1
1
  export var SaleTransactionStatusEnum;
2
2
  (function (SaleTransactionStatusEnum) {
3
- SaleTransactionStatusEnum["PENDING"] = "PENDING";
4
3
  SaleTransactionStatusEnum["PROCESSING"] = "PROCESSING";
5
4
  SaleTransactionStatusEnum["PAUSED"] = "PAUSED";
6
5
  SaleTransactionStatusEnum["COMPLETED"] = "COMPLETED";
@@ -0,0 +1,6 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import { SaleTransactionStatusEnum as Status } from './transaction.enum.js';
3
+
4
+ export declare class SaleTransactionTransition extends AbstractTransition<Status, unknown> {
5
+ protected readonly $states: Readonly<Record<Status, readonly Status[]>>;
6
+ }
@@ -0,0 +1,11 @@
1
+ import { AbstractTransition } from '../../../abstract.transition.js';
2
+ import * as transaction_enum_1 from './transaction.enum.js';
3
+
4
+ export class SaleTransactionTransition extends AbstractTransition {
5
+ $states = {
6
+ [transaction_enum_1.SaleTransactionStatusEnum.PROCESSING]: [transaction_enum_1.SaleTransactionStatusEnum.PAUSED, transaction_enum_1.SaleTransactionStatusEnum.COMPLETED, transaction_enum_1.SaleTransactionStatusEnum.CANCELLED],
7
+ [transaction_enum_1.SaleTransactionStatusEnum.PAUSED]: [transaction_enum_1.SaleTransactionStatusEnum.PROCESSING, transaction_enum_1.SaleTransactionStatusEnum.CANCELLED],
8
+ [transaction_enum_1.SaleTransactionStatusEnum.COMPLETED]: [],
9
+ [transaction_enum_1.SaleTransactionStatusEnum.CANCELLED]: [],
10
+ };
11
+ }
@@ -9,7 +9,6 @@ export declare class SaveSaleTransactionValidator extends AbstractValidator {
9
9
  constructor(entity?: SaleTransactionEntity);
10
10
  items: SaleItemValidator[];
11
11
  notes: string;
12
- user: string;
13
12
  customer?: string;
14
13
  warehouse: string;
15
14
  get total(): number;
@@ -27,13 +27,13 @@ export class SaveSaleTransactionValidator extends abstract_validator_1.AbstractV
27
27
  total: item.total,
28
28
  variant: (0, abstract_validator_1.toId)(item.variant),
29
29
  }));
30
+ const transfer = entity.transfer;
31
+ this.warehouse = (0, abstract_validator_1.toId)(transfer?.origin);
30
32
  this.notes = entity.notes;
31
33
  this.customer = (0, abstract_validator_1.toId)(entity.customer);
32
- this.user = (0, abstract_validator_1.toId)(entity.user);
33
34
  }
34
35
  items = [];
35
36
  notes;
36
- user;
37
37
  customer;
38
38
  warehouse;
39
39
  get total() {
@@ -54,11 +54,6 @@ __decorate([
54
54
  (0, class_validator_1.IsOptional)(),
55
55
  __metadata("design:type", String)
56
56
  ], SaveSaleTransactionValidator.prototype, "notes", void 0);
57
- __decorate([
58
- (0, class_validator_1.IsMongoId)(),
59
- (0, class_validator_1.IsOptional)({ groups: ['update'] }),
60
- __metadata("design:type", String)
61
- ], SaveSaleTransactionValidator.prototype, "user", void 0);
62
57
  __decorate([
63
58
  (0, class_validator_1.IsMongoId)(),
64
59
  (0, class_validator_1.IsOptional)(),
package/package.json CHANGED
@@ -1,101 +1,18 @@
1
1
  {
2
2
  "name": "@merkaly/api",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "type": "module",
5
5
  "description": "Shared TypeScript interfaces and enums for Merkaly API",
6
6
  "exports": {
7
- "./inventory/catalog/product": {
8
- "types": "./dist/inventory/catalog/product/index.d.ts",
9
- "default": "./dist/inventory/catalog/product/index.js"
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
10
  },
11
- "./inventory/catalog/category": {
12
- "types": "./dist/inventory/catalog/category/index.d.ts",
13
- "default": "./dist/inventory/catalog/category/index.js"
11
+ "./*": {
12
+ "types": "./dist/*/index.d.ts",
13
+ "default": "./dist/*/index.js"
14
14
  },
15
- "./inventory/catalog/brand": {
16
- "types": "./dist/inventory/catalog/brand/index.d.ts",
17
- "default": "./dist/inventory/catalog/brand/index.js"
18
- },
19
- "./inventory/catalog/attribute": {
20
- "types": "./dist/inventory/catalog/attribute/index.d.ts",
21
- "default": "./dist/inventory/catalog/attribute/index.js"
22
- },
23
- "./inventory/catalog/collection": {
24
- "types": "./dist/inventory/catalog/collection/index.d.ts",
25
- "default": "./dist/inventory/catalog/collection/index.js"
26
- },
27
- "./inventory/catalog/variant": {
28
- "types": "./dist/inventory/catalog/variant/index.d.ts",
29
- "default": "./dist/inventory/catalog/variant/index.js"
30
- },
31
- "./inventory/configuration/measurement": {
32
- "types": "./dist/inventory/configuration/measurement/index.d.ts",
33
- "default": "./dist/inventory/configuration/measurement/index.js"
34
- },
35
- "./inventory/configuration/unit": {
36
- "types": "./dist/inventory/configuration/unit/index.d.ts",
37
- "default": "./dist/inventory/configuration/unit/index.js"
38
- },
39
- "./inventory/stock/warehouse": {
40
- "types": "./dist/inventory/stock/warehouse/index.d.ts",
41
- "default": "./dist/inventory/stock/warehouse/index.js"
42
- },
43
- "./inventory/stock/transfer": {
44
- "types": "./dist/inventory/stock/transfer/index.d.ts",
45
- "default": "./dist/inventory/stock/transfer/index.js"
46
- },
47
- "./order/sale/transaction": {
48
- "types": "./dist/order/sale/transaction/index.d.ts",
49
- "default": "./dist/order/sale/transaction/index.js"
50
- },
51
- "./order/sale/customer": {
52
- "types": "./dist/order/sale/customer/index.d.ts",
53
- "default": "./dist/order/sale/customer/index.js"
54
- },
55
- "./order/sale/item": {
56
- "types": "./dist/order/sale/item/index.d.ts",
57
- "default": "./dist/order/sale/item/index.js"
58
- },
59
- "./order/purchase/transaction": {
60
- "types": "./dist/order/purchase/transaction/index.d.ts",
61
- "default": "./dist/order/purchase/transaction/index.js"
62
- },
63
- "./order/purchase/vendor": {
64
- "types": "./dist/order/purchase/vendor/index.d.ts",
65
- "default": "./dist/order/purchase/vendor/index.js"
66
- },
67
- "./order/purchase/item": {
68
- "types": "./dist/order/purchase/item/index.d.ts",
69
- "default": "./dist/order/purchase/item/index.js"
70
- },
71
- "./finance/payment": {
72
- "types": "./dist/finance/payment/index.d.ts",
73
- "default": "./dist/finance/payment/index.js"
74
- },
75
- "./finance/invoice": {
76
- "types": "./dist/finance/invoice/index.d.ts",
77
- "default": "./dist/finance/invoice/index.js"
78
- },
79
- "./finance/refund": {
80
- "types": "./dist/finance/refund/index.d.ts",
81
- "default": "./dist/finance/refund/index.js"
82
- },
83
- "./finance/tax": {
84
- "types": "./dist/finance/tax/index.d.ts",
85
- "default": "./dist/finance/tax/index.js"
86
- },
87
- "./finance/subscription": {
88
- "types": "./dist/finance/subscription/index.d.ts",
89
- "default": "./dist/finance/subscription/index.js"
90
- },
91
- "./account/user": {
92
- "types": "./dist/account/user/index.d.ts",
93
- "default": "./dist/account/user/index.js"
94
- },
95
- "./account/address": {
96
- "types": "./dist/account/address/index.d.ts",
97
- "default": "./dist/account/address/index.js"
98
- }
15
+ "./package.json": "./package.json"
99
16
  },
100
17
  "files": [
101
18
  "dist"
@@ -1,8 +0,0 @@
1
- export declare enum CatalogProductStatus {
2
- Draft = "draft",
3
- Published = "published",
4
- Archived = "archived",
5
- OutOfStock = "out_of_stock",
6
- Discontinued = "discontinued",
7
- ComingSoon = "coming_soon"
8
- }
@@ -1,9 +0,0 @@
1
- export var CatalogProductStatus;
2
- (function (CatalogProductStatus) {
3
- CatalogProductStatus["Draft"] = "draft";
4
- CatalogProductStatus["Published"] = "published";
5
- CatalogProductStatus["Archived"] = "archived";
6
- CatalogProductStatus["OutOfStock"] = "out_of_stock";
7
- CatalogProductStatus["Discontinued"] = "discontinued";
8
- CatalogProductStatus["ComingSoon"] = "coming_soon";
9
- })(CatalogProductStatus || (CatalogProductStatus = {}));