Refactor(medusa): Create a BaseEntity and SoftDeletableEntity base class for common columns (#1315)

* refactor(medusa): Move some column to a base entity to make it easier to add new models without forgetting some columns

* styles(medusa): Cleanup models

* fix(medusa): typings due to model typings update

* feat(medusa): Cleanup models

* fix(medusa): A model must not return the generateId as part of the entity

* fix(medusa): Plugin integration snapshot

* fix(medusa): Typings from discount-rule-migration scripts

* refactor(medusa): Introduct BaseEntity/SoftDeletableEntity that the entity extends

* styles(medusa): Fix models linting

* test(medusa): Fix integration plugin tests

* feat(medusa): Create generateEntityId standalong function utility and update config to properly supprt ts spec files

* feat(medusa): Update entities to use the new utils to generate and apply the id

* test(medusa): Fix test suits

* feat(medusa): Improve generateEntityId utility
This commit is contained in:
Adrien de Peretti authored and GitHub committed 2022-05-23 14:27:58 +02:00
1 parent 2f08167480
commit 3503651ff2
90 files changed
+789 -1597

No files matched your search

+1
View File
@@ -5,6 +5,7 @@ module.exports = {
name: "api", name: "api",
testEnvironment: `node`, testEnvironment: `node`,
rootDir: "./", rootDir: "./",
testTimeout: 10000,
testPathIgnorePatterns: [ testPathIgnorePatterns: [
`/examples/`, `/examples/`,
`/www/`, `/www/`,
+6
View File
@@ -9,6 +9,12 @@ module.exports = {
// useCoverage ? `jest-junit` : [] // useCoverage ? `jest-junit` : []
// ) // )
// : [`default`].concat(useCoverage ? `jest-junit` : []), // : [`default`].concat(useCoverage ? `jest-junit` : []),
globals: {
'ts-jest': {
tsConfig: 'tsconfig.spec.json',
isolatedModules: false
}
},
transform: { transform: {
"^.+\\.[jt]s?$": `../../jest-transformer.js`, "^.+\\.[jt]s?$": `../../jest-transformer.js`,
}, },
+2 -1
View File
@@ -21,7 +21,7 @@
"@babel/core": "^7.14.3", "@babel/core": "^7.14.3",
"@babel/preset-typescript": "^7.13.0", "@babel/preset-typescript": "^7.13.0",
"@types/express": "^4.17.13", "@types/express": "^4.17.13",
"@types/jest": "^27.0.3", "@types/jest": "^27.5.0",
"@types/jsonwebtoken": "^8.5.5", "@types/jsonwebtoken": "^8.5.5",
"babel-preset-medusa-package": "^1.1.19", "babel-preset-medusa-package": "^1.1.19",
"cross-env": "^5.2.1", "cross-env": "^5.2.1",
@@ -32,6 +32,7 @@
"prettier": "^1.19.1", "prettier": "^1.19.1",
"sqlite3": "^5.0.2", "sqlite3": "^5.0.2",
"supertest": "^4.0.2", "supertest": "^4.0.2",
"ts-jest": "^28.0.1",
"typescript": "^4.4.4" "typescript": "^4.4.4"
}, },
"scripts": { "scripts": {
@@ -56,5 +56,5 @@ export class AdminUpdateUserRequest {
@IsObject() @IsObject()
@IsOptional() @IsOptional()
metadata?: JSON metadata?: Record<string, unknown>
} }
@@ -0,0 +1,21 @@
import {
CreateDateColumn,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../../utils/db-aware-column"
/**
* Base abstract entity for all entities
*/
export abstract class BaseEntity {
@PrimaryColumn()
id: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
}
@@ -0,0 +1,8 @@
import { BaseEntity } from "./base-entity"
import { DeleteDateColumn } from "typeorm"
import { resolveDbType } from "../../utils/db-aware-column"
export abstract class SoftDeletableEntity extends BaseEntity {
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date | null
}
+10 -27
View File
@@ -27,28 +27,22 @@
*/ */
import { import {
Entity,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn,
PrimaryColumn,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Customer } from "./customer" import { Customer } from "./customer"
import { Country } from "./country" import { Country } from "./country"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Address { export class Address extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column({ type: "varchar", nullable: true }) @Column({ type: "varchar", nullable: true })
customer_id: string | null customer_id: string | null
@@ -91,22 +85,11 @@ export class Address {
@Column({ type: "varchar", nullable: true }) @Column({ type: "varchar", nullable: true })
phone: string | null phone: string | null
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date | null
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "addr")
const id = ulid()
this.id = `addr_${id}`
} }
} }
+7 -28
View File
@@ -1,21 +1,11 @@
import { import { BeforeInsert, Column, Entity, PrimaryColumn } from "typeorm"
BeforeInsert,
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { ulid } from "ulid"
import { BatchJobStatus } from "../types/batch-job" import { BatchJobStatus } from "../types/batch-job"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class BatchJob { export class BatchJob extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ type: "text" }) @DbAwareColumn({ type: "text" })
type: string type: string
@@ -31,20 +21,9 @@ export class BatchJob {
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
result: Record<string, unknown> result: Record<string, unknown>
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date | null
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "batch")
const id = ulid()
this.id = `batch_${id}`
} }
} }
+12 -31
View File
@@ -86,8 +86,6 @@ import {
AfterLoad, AfterLoad,
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
@@ -96,10 +94,7 @@ import {
ManyToOne, ManyToOne,
OneToMany, OneToMany,
OneToOne, OneToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { Address } from "./address" import { Address } from "./address"
import { Customer } from "./customer" import { Customer } from "./customer"
@@ -110,6 +105,8 @@ import { Payment } from "./payment"
import { PaymentSession } from "./payment-session" import { PaymentSession } from "./payment-session"
import { Region } from "./region" import { Region } from "./region"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum CartType { export enum CartType {
DEFAULT = "default", DEFAULT = "default",
@@ -120,10 +117,7 @@ export enum CartType {
} }
@Entity() @Entity()
export class Cart { export class Cart extends SoftDeletableEntity {
@PrimaryColumn()
id: string
readonly object = "cart" readonly object = "cart"
@Column({ nullable: true }) @Column({ nullable: true })
@@ -227,23 +221,14 @@ export class Cart {
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
payment_authorized_at: Date payment_authorized_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
context: any context: Record<string, unknown>
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: Record<string, unknown>
shipping_total?: number shipping_total?: number
discount_total?: number discount_total?: number
@@ -254,19 +239,15 @@ export class Cart {
refundable_amount?: number refundable_amount?: number
gift_card_total?: number gift_card_total?: number
@BeforeInsert()
private beforeInsert(): undefined | void {
if (this.id) {
return
}
const id = ulid()
this.id = `cart_${id}`
}
@AfterLoad() @AfterLoad()
private afterLoad(): void { private afterLoad(): void {
if (this.payment_sessions) { if (this.payment_sessions) {
this.payment_session = this.payment_sessions.find((p) => p.is_selected)! this.payment_session = this.payment_sessions.find((p) => p.is_selected)!
} }
} }
@BeforeInsert()
private beforeInsert(): void {
this.id = generateEntityId(this.id, "cart")
}
} }
+11 -33
View File
@@ -1,57 +1,35 @@
import { import {
BeforeInsert,
Column,
Entity, Entity,
Index, Index,
BeforeInsert,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { ClaimItem } from "./claim-item" import { ClaimItem } from "./claim-item"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ClaimImage { export class ClaimImage extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column() @Column()
claim_item_id: string claim_item_id: string
@ManyToOne( @ManyToOne(() => ClaimItem, (ci) => ci.images)
() => ClaimItem,
ci => ci.images
)
@JoinColumn({ name: "claim_item_id" }) @JoinColumn({ name: "claim_item_id" })
claim_item: ClaimItem claim_item: ClaimItem
@Column() @Column()
url: string url: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "cimg")
const id = ulid()
this.id = `cimg_${id}`
} }
} }
+14 -36
View File
@@ -1,26 +1,23 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
Column, Column,
PrimaryColumn, Entity,
Index, Index,
JoinColumn,
JoinTable,
ManyToMany, ManyToMany,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
JoinColumn,
JoinTable,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { LineItem } from "./line-item" import { LineItem } from "./line-item"
import { ClaimImage } from "./claim-image" import { ClaimImage } from "./claim-image"
import { ClaimTag } from "./claim-tag" import { ClaimTag } from "./claim-tag"
import { ClaimOrder } from "./claim-order" import { ClaimOrder } from "./claim-order"
import { ProductVariant } from "./product-variant" import { ProductVariant } from "./product-variant"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum ClaimReason { export enum ClaimReason {
MISSING_ITEM = "missing_item", MISSING_ITEM = "missing_item",
@@ -30,25 +27,17 @@ export enum ClaimReason {
} }
@Entity() @Entity()
export class ClaimItem { export class ClaimItem extends SoftDeletableEntity {
@PrimaryColumn() @OneToMany(() => ClaimImage, (ci) => ci.claim_item, {
id: string cascade: ["insert", "remove"],
})
@OneToMany(
() => ClaimImage,
ci => ci.claim_item,
{ cascade: ["insert", "remove"] }
)
images: ClaimImage[] images: ClaimImage[]
@Index() @Index()
@Column() @Column()
claim_order_id: string claim_order_id: string
@ManyToOne( @ManyToOne(() => ClaimOrder, (co) => co.claim_items)
() => ClaimOrder,
co => co.claim_items
)
@JoinColumn({ name: "claim_order_id" }) @JoinColumn({ name: "claim_order_id" })
claim_order: ClaimOrder claim_order: ClaimOrder
@@ -91,23 +80,12 @@ export class ClaimItem {
}) })
tags: ClaimTag[] tags: ClaimTag[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "citm")
const id = ulid()
this.id = `citm_${id}`
} }
} }
+24 -46
View File
@@ -1,19 +1,17 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
Column, Column,
PrimaryColumn, CreateDateColumn,
DeleteDateColumn,
Entity,
Index, Index,
OneToOne, JoinColumn,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
JoinColumn, OneToOne,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Fulfillment } from "./fulfillment" import { Fulfillment } from "./fulfillment"
import { LineItem } from "./line-item" import { LineItem } from "./line-item"
@@ -22,6 +20,8 @@ import { Order } from "./order"
import { Return } from "./return" import { Return } from "./return"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { Address } from "./address" import { Address } from "./address"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum ClaimType { export enum ClaimType {
REFUND = "refund", REFUND = "refund",
@@ -47,10 +47,7 @@ export enum ClaimFulfillmentStatus {
} }
@Entity() @Entity()
export class ClaimOrder { export class ClaimOrder extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ @DbAwareColumn({
type: "enum", type: "enum",
enum: ClaimPaymentStatus, enum: ClaimPaymentStatus,
@@ -65,17 +62,10 @@ export class ClaimOrder {
}) })
fulfillment_status: ClaimFulfillmentStatus fulfillment_status: ClaimFulfillmentStatus
@OneToMany( @OneToMany(() => ClaimItem, (ci) => ci.claim_order)
() => ClaimItem,
ci => ci.claim_order
)
claim_items: ClaimItem[] claim_items: ClaimItem[]
@OneToMany( @OneToMany(() => LineItem, (li) => li.claim_order, { cascade: ["insert"] })
() => LineItem,
li => li.claim_order,
{ cascade: ["insert"] }
)
additional_items: LineItem[] additional_items: LineItem[]
@DbAwareColumn({ type: "enum", enum: ClaimType }) @DbAwareColumn({ type: "enum", enum: ClaimType })
@@ -85,17 +75,11 @@ export class ClaimOrder {
@Column() @Column()
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (o) => o.claims)
() => Order,
o => o.claims
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@OneToOne( @OneToOne(() => Return, (ret) => ret.claim_order)
() => Return,
ret => ret.claim_order
)
return_order: Return return_order: Return
@Index() @Index()
@@ -106,18 +90,14 @@ export class ClaimOrder {
@JoinColumn({ name: "shipping_address_id" }) @JoinColumn({ name: "shipping_address_id" })
shipping_address: Address shipping_address: Address
@OneToMany( @OneToMany(() => ShippingMethod, (method) => method.claim_order, {
() => ShippingMethod, cascade: ["insert"],
method => method.claim_order, })
{ cascade: ["insert"] }
)
shipping_methods: ShippingMethod[] shipping_methods: ShippingMethod[]
@OneToMany( @OneToMany(() => Fulfillment, (fulfillment) => fulfillment.claim_order, {
() => Fulfillment, cascade: ["insert"],
fulfillment => fulfillment.claim_order, })
{ cascade: ["insert"] }
)
fulfillments: Fulfillment[] fulfillments: Fulfillment[]
@Column({ type: "int", nullable: true }) @Column({ type: "int", nullable: true })
@@ -136,19 +116,17 @@ export class ClaimOrder {
deleted_at: Date deleted_at: Date
@Column({ type: "boolean", nullable: true }) @Column({ type: "boolean", nullable: true })
no_notification: Boolean no_notification: boolean
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "claim")
const id = ulid()
this.id = `claim_${id}`
} }
} }
+8 -33
View File
@@ -1,45 +1,20 @@
import { import { BeforeInsert, Column, Entity, Index } from "typeorm"
Entity, import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
BeforeInsert, import { DbAwareColumn } from "../utils/db-aware-column"
DeleteDateColumn, import { generateEntityId } from "../utils/generate-entity-id"
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
Index,
ManyToOne,
OneToMany,
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity() @Entity()
export class ClaimTag { export class ClaimTag extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column() @Column()
value: string value: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ctag")
const id = ulid()
this.id = `ctag_${id}`
} }
} }
+1 -1
View File
@@ -1,4 +1,4 @@
import { Entity, Column, PrimaryColumn } from "typeorm" import { Column, Entity, PrimaryColumn } from "typeorm"
@Entity() @Entity()
export class Currency { export class Currency {
@@ -1,27 +1,21 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
ManyToOne, ManyToOne,
PrimaryColumn,
Unique, Unique,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { Cart } from "./cart" import { Cart } from "./cart"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
@Unique(["shipping_option_id", "cart_id"]) @Unique(["shipping_option_id", "cart_id"])
export class CustomShippingOption { export class CustomShippingOption extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column({ type: "int" }) @Column({ type: "int" })
price: number price: number
@@ -41,23 +35,12 @@ export class CustomShippingOption {
@JoinColumn({ name: "cart_id" }) @JoinColumn({ name: "cart_id" })
cart: Cart cart: Cart
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "cso")
const id = ulid()
this.id = `cso_${id}`
} }
} }
+8 -33
View File
@@ -1,24 +1,12 @@
import { import { BeforeInsert, Column, Entity, Index, ManyToMany } from "typeorm"
BeforeInsert,
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
Index,
ManyToMany,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { Customer } from "./customer" import { Customer } from "./customer"
import { PriceList } from "./price-list" import { PriceList } from "./price-list"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class CustomerGroup { export class CustomerGroup extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true, where: "deleted_at IS NULL" }) @Index({ unique: true, where: "deleted_at IS NULL" })
@Column() @Column()
name: string name: string
@@ -33,24 +21,11 @@ export class CustomerGroup {
}) })
price_lists: PriceList[] price_lists: PriceList[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "cgrp")
return
}
const id = ulid()
this.id = `cgrp_${id}`
} }
} }
+12 -31
View File
@@ -1,30 +1,24 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
Column, Column,
PrimaryColumn, Entity,
OneToOne, Index,
OneToMany,
JoinColumn, JoinColumn,
ManyToMany,
JoinTable, JoinTable,
ManyToMany,
OneToMany,
OneToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Address } from "./address" import { Address } from "./address"
import { CustomerGroup } from "./customer-group" import { CustomerGroup } from "./customer-group"
import { Order } from "./order" import { Order } from "./order"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Customer { export class Customer extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true }) @Index({ unique: true })
@Column() @Column()
email: string email: string
@@ -74,25 +68,12 @@ export class Customer {
}) })
groups: CustomerGroup[] groups: CustomerGroup[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "cus")
return
}
const id = ulid()
this.id = `cus_${id}`
} }
} }
@@ -33,7 +33,7 @@ export class DiscountConditionCustomerGroup {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -33,7 +33,7 @@ export class DiscountConditionProductCollection {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -33,7 +33,7 @@ export class DiscountConditionProductTag {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -33,7 +33,7 @@ export class DiscountConditionProductType {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -33,7 +33,7 @@ export class DiscountConditionProduct {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -1,26 +1,23 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
JoinTable, JoinTable,
ManyToMany, ManyToMany,
ManyToOne, ManyToOne,
PrimaryColumn,
Unique, Unique,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { CustomerGroup } from "./customer-group" import { CustomerGroup } from "./customer-group"
import { DiscountRule } from "./discount-rule" import { DiscountRule } from "./discount-rule"
import { Product } from "./product" import { Product } from "./product"
import { ProductCollection } from "./product-collection" import { ProductCollection } from "./product-collection"
import { ProductTag } from "./product-tag" import { ProductTag } from "./product-tag"
import { ProductType } from "./product-type" import { ProductType } from "./product-type"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum DiscountConditionType { export enum DiscountConditionType {
PRODUCTS = "products", PRODUCTS = "products",
@@ -37,10 +34,7 @@ export enum DiscountConditionOperator {
@Entity() @Entity()
@Unique("dctypeuniq", ["type", "operator", "discount_rule_id"]) @Unique("dctypeuniq", ["type", "operator", "discount_rule_id"])
export class DiscountCondition { export class DiscountCondition extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ @DbAwareColumn({
type: "enum", type: "enum",
enum: DiscountConditionType, enum: DiscountConditionType,
@@ -131,26 +125,12 @@ export class DiscountCondition {
}) })
customer_groups: CustomerGroup[] customer_groups: CustomerGroup[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "discon")
return
}
const id = ulid()
this.id = `discon_${id}`
} }
} }
+8 -29
View File
@@ -1,16 +1,8 @@
import { import { BeforeInsert, Column, Entity, OneToMany } from "typeorm"
BeforeInsert, import { DbAwareColumn } from "../utils/db-aware-column"
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
OneToMany,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { DiscountCondition } from "./discount-condition" import { DiscountCondition } from "./discount-condition"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum DiscountRuleType { export enum DiscountRuleType {
FIXED = "fixed", FIXED = "fixed",
@@ -24,10 +16,7 @@ export enum AllocationType {
} }
@Entity() @Entity()
export class DiscountRule { export class DiscountRule extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column({ nullable: true }) @Column({ nullable: true })
description: string description: string
@@ -50,22 +39,12 @@ export class DiscountRule {
@OneToMany(() => DiscountCondition, (conditions) => conditions.discount_rule) @OneToMany(() => DiscountCondition, (conditions) => conditions.discount_rule)
conditions: DiscountCondition[] conditions: DiscountCondition[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
const id = ulid() this.id = generateEntityId(this.id, "dru")
this.id = `dru_${id}`
} }
} }
+8 -25
View File
@@ -1,27 +1,21 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
JoinTable, JoinTable,
ManyToMany, ManyToMany,
ManyToOne, ManyToOne,
PrimaryColumn,
UpdateDateColumn
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { DiscountRule } from "./discount-rule" import { DiscountRule } from "./discount-rule"
import { Region } from "./region" import { Region } from "./region"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Discount { export class Discount extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true, where: "deleted_at IS NULL" }) @Index({ unique: true, where: "deleted_at IS NULL" })
@Column() @Column()
code: string code: string
@@ -79,25 +73,14 @@ export class Discount {
@Column({ default: 0 }) @Column({ default: 0 })
usage_count: number usage_count: number
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private upperCaseCode(): void {
if (this.id) { if (this.id) return
return
} this.id = generateEntityId(this.id, "disc")
const id = ulid()
this.id = `disc_${id}`
this.code = this.code.toUpperCase() this.code = this.code.toUpperCase()
} }
} }
+5 -19
View File
@@ -1,16 +1,13 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
Entity, Entity,
Generated, Generated,
Index, Index,
JoinColumn, JoinColumn,
OneToOne, OneToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { import {
DbAwareColumn, DbAwareColumn,
resolveDbGenerationStrategy, resolveDbGenerationStrategy,
@@ -19,6 +16,7 @@ import {
import { manualAutoIncrement } from "../utils/manual-auto-increment" import { manualAutoIncrement } from "../utils/manual-auto-increment"
import { Cart } from "./cart" import { Cart } from "./cart"
import { Order } from "./order" import { Order } from "./order"
import { generateEntityId } from "../utils/generate-entity-id"
enum DraftOrderStatus { enum DraftOrderStatus {
OPEN = "open", OPEN = "open",
@@ -26,10 +24,7 @@ enum DraftOrderStatus {
} }
@Entity() @Entity()
export class DraftOrder { export class DraftOrder extends BaseEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ type: "enum", enum: DraftOrderStatus, default: "open" }) @DbAwareColumn({ type: "enum", enum: DraftOrderStatus, default: "open" })
status: DraftOrderStatus status: DraftOrderStatus
@@ -57,12 +52,6 @@ export class DraftOrder {
@Column({ nullable: true, type: resolveDbType("timestamptz") }) @Column({ nullable: true, type: resolveDbType("timestamptz") })
canceled_at: Date canceled_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
completed_at: Date completed_at: Date
@@ -70,17 +59,14 @@ export class DraftOrder {
no_notification_order: boolean no_notification_order: boolean
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private async beforeInsert(): Promise<void> { private async beforeInsert(): Promise<void> {
if (!this.id) { this.id = generateEntityId(this.id, "dorder")
const id = ulid()
this.id = `dorder_${id}`
}
if (process.env.NODE_ENV === "development" && !this.display_id) { if (process.env.NODE_ENV === "development" && !this.display_id) {
const disId = await manualAutoIncrement("draft_order") const disId = await manualAutoIncrement("draft_order")
+1 -17
View File
@@ -1,20 +1,4 @@
import { import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"
Entity,
Generated,
RelationId,
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { Fulfillment } from "./fulfillment" import { Fulfillment } from "./fulfillment"
import { LineItem } from "./line-item" import { LineItem } from "./line-item"
@@ -1,4 +1,4 @@
import { Entity, Column, PrimaryColumn, OneToOne, JoinColumn } from "typeorm" import { Column, Entity, PrimaryColumn } from "typeorm"
@Entity() @Entity()
export class FulfillmentProvider { export class FulfillmentProvider {
+22 -52
View File
@@ -1,22 +1,13 @@
import { import {
Entity,
RelationId,
BeforeInsert, BeforeInsert,
Column, Column,
Entity,
Index, Index,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
OneToMany,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order" import { Order } from "./order"
import { FulfillmentProvider } from "./fulfillment-provider" import { FulfillmentProvider } from "./fulfillment-provider"
@@ -24,20 +15,16 @@ import { FulfillmentItem } from "./fulfillment-item"
import { Swap } from "./swap" import { Swap } from "./swap"
import { ClaimOrder } from "./claim-order" import { ClaimOrder } from "./claim-order"
import { TrackingLink } from "./tracking-link" import { TrackingLink } from "./tracking-link"
import { BaseEntity } from "../interfaces/models/base-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Fulfillment { export class Fulfillment extends BaseEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column({ nullable: true }) @Column({ nullable: true })
claim_order_id: string claim_order_id: string
@ManyToOne( @ManyToOne(() => ClaimOrder, (co) => co.fulfillments)
() => ClaimOrder,
co => co.fulfillments
)
@JoinColumn({ name: "claim_order_id" }) @JoinColumn({ name: "claim_order_id" })
claim_order: ClaimOrder claim_order: ClaimOrder
@@ -45,10 +32,7 @@ export class Fulfillment {
@Column({ nullable: true }) @Column({ nullable: true })
swap_id: string swap_id: string
@ManyToOne( @ManyToOne(() => Swap, (swap) => swap.fulfillments)
() => Swap,
swap => swap.fulfillments
)
@JoinColumn({ name: "swap_id" }) @JoinColumn({ name: "swap_id" })
swap: Swap swap: Swap
@@ -56,15 +40,12 @@ export class Fulfillment {
@Column({ nullable: true }) @Column({ nullable: true })
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (o) => o.fulfillments)
() => Order,
o => o.fulfillments
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@Column({ type: "boolean", nullable: true }) @Column({ type: "boolean", nullable: true })
no_notification: Boolean no_notification: boolean
@Index() @Index()
@Column() @Column()
@@ -74,25 +55,22 @@ export class Fulfillment {
@JoinColumn({ name: "provider_id" }) @JoinColumn({ name: "provider_id" })
provider: FulfillmentProvider provider: FulfillmentProvider
@OneToMany( @OneToMany(() => FulfillmentItem, (i) => i.fulfillment, {
() => FulfillmentItem, eager: true,
i => i.fulfillment, cascade: true,
{ eager: true, cascade: true } })
)
items: FulfillmentItem[] items: FulfillmentItem[]
@OneToMany( @OneToMany(() => TrackingLink, (tl) => tl.fulfillment, {
() => TrackingLink, cascade: ["insert"],
tl => tl.fulfillment, })
{ cascade: ["insert"] }
)
tracking_links: TrackingLink[] tracking_links: TrackingLink[]
@DbAwareColumn({ type: "jsonb", default: [] }) @DbAwareColumn({ type: "jsonb", default: [] })
tracking_numbers: string[] tracking_numbers: string[]
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
shipped_at: Date shipped_at: Date
@@ -100,23 +78,15 @@ export class Fulfillment {
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date canceled_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ful")
const id = ulid()
this.id = `ful_${id}`
} }
} }
@@ -1,19 +1,19 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
Index,
CreateDateColumn,
Column, Column,
PrimaryColumn, CreateDateColumn,
ManyToOne, Entity,
Unique, Index,
JoinColumn, JoinColumn,
ManyToOne,
PrimaryColumn,
Unique,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType } from "../utils/db-aware-column" import { resolveDbType } from "../utils/db-aware-column"
import { GiftCard } from "./gift-card" import { GiftCard } from "./gift-card"
import { Order } from "./order" import { Order } from "./order"
import { generateEntityId } from "../utils/generate-entity-id"
@Unique("gcuniq", ["gift_card_id", "order_id"]) @Unique("gcuniq", ["gift_card_id", "order_id"])
@Entity() @Entity()
@@ -43,10 +43,8 @@ export class GiftCardTransaction {
created_at: Date created_at: Date
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "gct")
const id = ulid()
this.id = `gct_${id}`
} }
} }
+10 -27
View File
@@ -1,26 +1,20 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
Index,
Column, Column,
PrimaryColumn, Entity,
ManyToOne, Index,
JoinColumn, JoinColumn,
ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Region } from "./region" import { Region } from "./region"
import { Order } from "./order" import { Order } from "./order"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class GiftCard { export class GiftCard extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true }) @Index({ unique: true })
@Column() @Column()
code: string code: string
@@ -56,23 +50,12 @@ export class GiftCard {
}) })
ends_at: Date ends_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "gift")
const id = ulid()
this.id = `gift_${id}`
} }
} }
+9 -10
View File
@@ -1,13 +1,13 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
CreateDateColumn,
Index,
Column, Column,
CreateDateColumn,
Entity,
Index,
PrimaryColumn, PrimaryColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class IdempotencyKey { export class IdempotencyKey {
@@ -28,7 +28,7 @@ export class IdempotencyKey {
request_method: string request_method: string
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
request_params: any request_params: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
request_path: string request_path: string
@@ -37,14 +37,13 @@ export class IdempotencyKey {
response_code: number response_code: number
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
response_body: any response_body: Record<string, unknown>
@Column({ default: "started" }) @Column({ default: "started" })
recovery_point: string recovery_point: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
const id = ulid() this.id = generateEntityId(this.id, "ikey")
this.id = `ikey_${id}`
} }
} }
+8 -29
View File
@@ -1,40 +1,19 @@
import { import { BeforeInsert, Column, Entity } from "typeorm"
Entity, import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
BeforeInsert, import { DbAwareColumn } from "../utils/db-aware-column"
DeleteDateColumn, import { generateEntityId } from "../utils/generate-entity-id"
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity() @Entity()
export class Image { export class Image extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
url: string url: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "img")
const id = ulid()
this.id = `img_${id}`
} }
} }
+7 -33
View File
@@ -1,24 +1,11 @@
import { import { BeforeInsert, Column, CreateDateColumn, Entity, Index } from "typeorm"
BeforeInsert, import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
Column,
CreateDateColumn,
DeleteDateColumn,
Entity,
JoinColumn,
ManyToOne,
PrimaryColumn,
UpdateDateColumn,
Index,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { UserRoles } from "./user" import { UserRoles } from "./user"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Invite { export class Invite extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true, where: "deleted_at IS NULL" }) @Index({ unique: true, where: "deleted_at IS NULL" })
@Column() @Column()
user_email: string user_email: string
@@ -40,24 +27,11 @@ export class Invite {
@CreateDateColumn({ type: resolveDbType("timestamptz") }) @CreateDateColumn({ type: resolveDbType("timestamptz") })
expires_at: Date expires_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert(): void { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "invite")
return
}
const id = ulid()
this.id = `invite_${id}`
} }
} }
@@ -6,12 +6,11 @@ import {
ManyToOne, ManyToOne,
JoinColumn, JoinColumn,
PrimaryColumn, PrimaryColumn,
OneToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { Discount } from "./discount" import { Discount } from "./discount"
import { LineItem } from "./line-item" import { LineItem } from "./line-item"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
@Index(["discount_id", "item_id"], { @Index(["discount_id", "item_id"], {
@@ -26,11 +25,7 @@ export class LineItemAdjustment {
@Column() @Column()
item_id: string item_id: string
@ManyToOne( @ManyToOne(() => LineItem, (li) => li.adjustments, { onDelete: "CASCADE" })
() => LineItem,
(li) => li.adjustments,
{ onDelete: "CASCADE" }
)
@JoinColumn({ name: "item_id" }) @JoinColumn({ name: "item_id" })
item: LineItem item: LineItem
@@ -49,12 +44,10 @@ export class LineItemAdjustment {
amount: number amount: number
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "lia")
const id = ulid()
this.id = `lia_${id}`
} }
} }
@@ -7,10 +7,10 @@ import {
ManyToOne, ManyToOne,
Unique, Unique,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { TaxLine } from "./tax-line" import { TaxLine } from "./tax-line"
import { LineItem } from "./line-item" import { LineItem } from "./line-item"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
@Unique(["item_id", "code"]) @Unique(["item_id", "code"])
@@ -24,9 +24,7 @@ export class LineItemTaxLine extends TaxLine {
item: LineItem item: LineItem
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "litl")
const id = ulid()
this.id = `litl_${id}`
} }
} }
+14 -25
View File
@@ -1,18 +1,14 @@
import { import {
Entity,
OneToMany,
BeforeInsert, BeforeInsert,
CreateDateColumn,
UpdateDateColumn,
Check, Check,
Index,
Column, Column,
PrimaryColumn, Entity,
ManyToOne, Index,
JoinColumn, JoinColumn,
ManyToOne,
OneToMany,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { LineItemTaxLine } from "./line-item-tax-line" import { LineItemTaxLine } from "./line-item-tax-line"
import { Swap } from "./swap" import { Swap } from "./swap"
@@ -21,16 +17,15 @@ import { Order } from "./order"
import { ClaimOrder } from "./claim-order" import { ClaimOrder } from "./claim-order"
import { ProductVariant } from "./product-variant" import { ProductVariant } from "./product-variant"
import { LineItemAdjustment } from "./line-item-adjustment" import { LineItemAdjustment } from "./line-item-adjustment"
import { BaseEntity } from "../interfaces/models/base-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Check(`"fulfilled_quantity" <= "quantity"`) @Check(`"fulfilled_quantity" <= "quantity"`)
@Check(`"shipped_quantity" <= "fulfilled_quantity"`) @Check(`"shipped_quantity" <= "fulfilled_quantity"`)
@Check(`"returned_quantity" <= "quantity"`) @Check(`"returned_quantity" <= "quantity"`)
@Check(`"quantity" > 0`) @Check(`"quantity" > 0`)
@Entity() @Entity()
export class LineItem { export class LineItem extends BaseEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column({ nullable: true }) @Column({ nullable: true })
cart_id: string cart_id: string
@@ -66,7 +61,9 @@ export class LineItem {
@OneToMany(() => LineItemTaxLine, (tl) => tl.item, { cascade: ["insert"] }) @OneToMany(() => LineItemTaxLine, (tl) => tl.item, { cascade: ["insert"] })
tax_lines: LineItemTaxLine[] tax_lines: LineItemTaxLine[]
@OneToMany(() => LineItemAdjustment, (lia) => lia.item, { cascade: ["insert"] }) @OneToMany(() => LineItemAdjustment, (lia) => lia.item, {
cascade: ["insert"],
})
adjustments: LineItemAdjustment[] adjustments: LineItemAdjustment[]
@Column() @Column()
@@ -116,22 +113,14 @@ export class LineItem {
@Column({ nullable: true, type: "int" }) @Column({ nullable: true, type: "int" })
shipped_quantity: number shipped_quantity: number
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
refundable: number | null refundable: number | null
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "item")
const id = ulid()
this.id = `item_${id}`
} }
} }
+6 -30
View File
@@ -1,27 +1,20 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
ManyToOne, ManyToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType } from "../utils/db-aware-column"
import { Currency } from "./currency" import { Currency } from "./currency"
import { PriceList } from "./price-list" import { PriceList } from "./price-list"
import { ProductVariant } from "./product-variant" import { ProductVariant } from "./product-variant"
import { Region } from "./region" import { Region } from "./region"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class MoneyAmount { export class MoneyAmount extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
currency_code: string currency_code: string
@@ -52,13 +45,9 @@ export class MoneyAmount {
@Column({ nullable: true }) @Column({ nullable: true })
variant_id: string variant_id: string
@ManyToOne( @ManyToOne(() => ProductVariant, (variant) => variant.prices, {
() => ProductVariant,
(variant) => variant.prices,
{
onDelete: "CASCADE", onDelete: "CASCADE",
} })
)
@JoinColumn({ name: "variant_id" }) @JoinColumn({ name: "variant_id" })
variant: ProductVariant variant: ProductVariant
@@ -70,22 +59,9 @@ export class MoneyAmount {
@JoinColumn({ name: "region_id" }) @JoinColumn({ name: "region_id" })
region: Region region: Region
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@BeforeInsert() @BeforeInsert()
private beforeInsert(): undefined | void { private beforeInsert(): undefined | void {
if (this.id) { this.id = generateEntityId(this.id, "ma")
return
}
const id = ulid()
this.id = `ma_${id}`
} }
} }
+8 -25
View File
@@ -1,24 +1,18 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn,
UpdateDateColumn,
Index, Index,
JoinColumn, JoinColumn,
PrimaryColumn,
ManyToOne, ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { User } from "./user" import { User } from "./user"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Note { export class Note extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
value: string value: string
@@ -37,23 +31,12 @@ export class Note {
@JoinColumn({ name: "author_id" }) @JoinColumn({ name: "author_id" })
author: User author: User
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "note")
const id = ulid()
this.id = `note_${id}`
} }
} }
@@ -1,4 +1,4 @@
import { Entity, Column, PrimaryColumn } from "typeorm" import { Column, Entity, PrimaryColumn } from "typeorm"
@Entity() @Entity()
export class NotificationProvider { export class NotificationProvider {
+11 -27
View File
@@ -1,26 +1,21 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn, Entity,
UpdateDateColumn,
Index, Index,
PrimaryColumn,
OneToMany,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
OneToMany,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { Customer } from "./customer" import { Customer } from "./customer"
import { NotificationProvider } from "./notification-provider" import { NotificationProvider } from "./notification-provider"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Notification { export class Notification extends BaseEntity {
@PrimaryColumn()
id: string
@Column({ nullable: true }) @Column({ nullable: true })
event_name: string event_name: string
@@ -44,7 +39,7 @@ export class Notification {
to: string to: string
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
parent_id: string parent_id: string
@@ -53,10 +48,7 @@ export class Notification {
@JoinColumn({ name: "parent_id" }) @JoinColumn({ name: "parent_id" })
parent_notification: Notification parent_notification: Notification
@OneToMany( @OneToMany(() => Notification, (noti) => noti.parent_notification)
() => Notification,
noti => noti.parent_notification
)
resends: Notification[] resends: Notification[]
@Column({ nullable: true }) @Column({ nullable: true })
@@ -66,17 +58,9 @@ export class Notification {
@JoinColumn({ name: "provider_id" }) @JoinColumn({ name: "provider_id" })
provider: NotificationProvider provider: NotificationProvider
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "noti")
const id = ulid()
this.id = `noti_${id}`
} }
} }
+5 -23
View File
@@ -1,22 +1,6 @@
import { import { BeforeInsert, Column, Entity, Index, PrimaryColumn } from "typeorm"
Entity,
Index,
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
RelationId,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Oauth { export class Oauth {
@@ -37,12 +21,10 @@ export class Oauth {
uninstall_url: string uninstall_url: string
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
data: any data: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "oauth")
const id = ulid()
this.id = `oauth_${id}`
} }
} }
+5 -19
View File
@@ -1,7 +1,6 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
Entity, Entity,
Generated, Generated,
Index, Index,
@@ -11,10 +10,8 @@ import {
ManyToOne, ManyToOne,
OneToMany, OneToMany,
OneToOne, OneToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { import {
DbAwareColumn, DbAwareColumn,
resolveDbGenerationStrategy, resolveDbGenerationStrategy,
@@ -38,6 +35,7 @@ import { Region } from "./region"
import { Return } from "./return" import { Return } from "./return"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { Swap } from "./swap" import { Swap } from "./swap"
import { generateEntityId } from "../utils/generate-entity-id"
export enum OrderStatus { export enum OrderStatus {
PENDING = "pending", PENDING = "pending",
@@ -70,10 +68,7 @@ export enum PaymentStatus {
} }
@Entity() @Entity()
export class Order { export class Order extends BaseEntity {
@PrimaryColumn()
id: string
readonly object = "order" readonly object = "order"
@DbAwareColumn({ type: "enum", enum: OrderStatus, default: "pending" }) @DbAwareColumn({ type: "enum", enum: OrderStatus, default: "pending" })
@@ -218,14 +213,8 @@ export class Order {
@Column({ nullable: true, type: resolveDbType("timestamptz") }) @Column({ nullable: true, type: resolveDbType("timestamptz") })
canceled_at: Date canceled_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ type: "boolean", nullable: true }) @Column({ type: "boolean", nullable: true })
no_notification: boolean no_notification: boolean
@@ -249,10 +238,7 @@ export class Order {
@BeforeInsert() @BeforeInsert()
private async beforeInsert(): Promise<void> { private async beforeInsert(): Promise<void> {
if (!this.id) { this.id = generateEntityId(this.id, "order")
const id = ulid()
this.id = `order_${id}`
}
if (process.env.NODE_ENV === "development" && !this.display_id) { if (process.env.NODE_ENV === "development" && !this.display_id) {
const disId = await manualAutoIncrement("order") const disId = await manualAutoIncrement("order")
@@ -1,4 +1,4 @@
import { Entity, Column, PrimaryColumn, OneToOne, JoinColumn } from "typeorm" import { Column, Entity, PrimaryColumn } from "typeorm"
@Entity() @Entity()
export class PaymentProvider { export class PaymentProvider {
+10 -23
View File
@@ -1,18 +1,16 @@
import { import {
Entity,
CreateDateColumn,
UpdateDateColumn,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
PrimaryColumn, Entity,
ManyToOne, Index,
JoinColumn, JoinColumn,
ManyToOne,
Unique, Unique,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { Cart } from "./cart" import { Cart } from "./cart"
import { generateEntityId } from "../utils/generate-entity-id"
export enum PaymentSessionStatus { export enum PaymentSessionStatus {
AUTHORIZED = "authorized", AUTHORIZED = "authorized",
@@ -24,10 +22,7 @@ export enum PaymentSessionStatus {
@Unique("OneSelected", ["cart_id", "is_selected"]) @Unique("OneSelected", ["cart_id", "is_selected"])
@Entity() @Entity()
export class PaymentSession { export class PaymentSession extends BaseEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column() @Column()
cart_id: string cart_id: string
@@ -47,22 +42,14 @@ export class PaymentSession {
status: string status: string
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ps")
const id = ulid()
this.id = `ps_${id}`
} }
} }
+13 -30
View File
@@ -1,29 +1,23 @@
import { import {
Entity,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn, Entity,
UpdateDateColumn, Index,
PrimaryColumn,
OneToOne,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
OneToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Swap } from "./swap" import { Swap } from "./swap"
import { Currency } from "./currency" import { Currency } from "./currency"
import { Cart } from "./cart" import { Cart } from "./cart"
import { Order } from "./order" import { Order } from "./order"
import { DraftOrder } from "./draft-order" import { BaseEntity } from "../interfaces/models/base-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Payment { export class Payment extends BaseEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column({ nullable: true }) @Column({ nullable: true })
swap_id: string swap_id: string
@@ -44,10 +38,7 @@ export class Payment {
@Column({ nullable: true }) @Column({ nullable: true })
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (order) => order.payments)
() => Order,
order => order.payments
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@@ -69,7 +60,7 @@ export class Payment {
provider_id: string provider_id: string
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
captured_at: Date captured_at: Date
@@ -77,23 +68,15 @@ export class Payment {
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date canceled_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "pay")
const id = ulid()
this.id = `pay_${id}`
} }
} }
+4 -23
View File
@@ -1,26 +1,20 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
JoinTable, JoinTable,
ManyToMany, ManyToMany,
OneToMany, OneToMany,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { PriceListStatus, PriceListType } from "../types/price-list" import { PriceListStatus, PriceListType } from "../types/price-list"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { CustomerGroup } from "./customer-group" import { CustomerGroup } from "./customer-group"
import { MoneyAmount } from "./money-amount" import { MoneyAmount } from "./money-amount"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class PriceList { export class PriceList extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
name: string name: string
@@ -63,22 +57,9 @@ export class PriceList {
}) })
prices: MoneyAmount[] prices: MoneyAmount[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@BeforeInsert() @BeforeInsert()
private beforeInsert(): undefined | void { private beforeInsert(): undefined | void {
if (this.id) { this.id = generateEntityId(this.id, "pl")
return
}
const id = ulid()
this.id = `pl_${id}`
} }
} }
@@ -1,26 +1,13 @@
import { import { BeforeInsert, Column, Entity, Index, OneToMany } from "typeorm"
Entity,
BeforeInsert,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
ManyToMany,
Index,
OneToMany,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import _ from "lodash" import _ from "lodash"
import { Product } from "./product" import { Product } from "./product"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ProductCollection { export class ProductCollection extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
title: string title: string
@@ -28,30 +15,17 @@ export class ProductCollection {
@Column({ nullable: true }) @Column({ nullable: true })
handle: string handle: string
@OneToMany( @OneToMany(() => Product, (product) => product.collection)
() => Product,
product => product.collection
)
products: Product[] products: Product[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private createHandleIfNotProvided(): void {
if (this.id) return if (this.id) return
const id = ulid()
this.id = `pcol_${id}`
this.id = generateEntityId(this.id, "pcol")
if (!this.handle) { if (!this.handle) {
this.handle = _.kebabCase(this.title) this.handle = _.kebabCase(this.title)
} }
@@ -1,25 +1,19 @@
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
ManyToOne, ManyToOne,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { ProductOption } from "./product-option" import { ProductOption } from "./product-option"
import { ProductVariant } from "./product-variant" import { ProductVariant } from "./product-variant"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ProductOptionValue { export class ProductOptionValue extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
value: string value: string
@@ -41,25 +35,12 @@ export class ProductOptionValue {
@JoinColumn({ name: "variant_id" }) @JoinColumn({ name: "variant_id" })
variant: ProductVariant variant: ProductVariant
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert(): void | undefined { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "optval")
return
}
const id = ulid()
this.id = `optval_${id}`
} }
} }
+12 -35
View File
@@ -1,62 +1,39 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
DeleteDateColumn, Column,
CreateDateColumn, Entity,
UpdateDateColumn, JoinColumn,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
Column,
PrimaryColumn,
JoinColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Product } from "./product" import { Product } from "./product"
import { ProductOptionValue } from "./product-option-value" import { ProductOptionValue } from "./product-option-value"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ProductOption { export class ProductOption extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
title: string title: string
@OneToMany( @OneToMany(() => ProductOptionValue, (value) => value.option)
() => ProductOptionValue,
value => value.option
)
values: ProductOptionValue[] values: ProductOptionValue[]
@Column() @Column()
product_id: string product_id: string
@ManyToOne( @ManyToOne(() => Product, (product) => product.options)
() => Product,
product => product.options
)
@JoinColumn({ name: "product_id" }) @JoinColumn({ name: "product_id" })
product: Product product: Product
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "opt")
const id = ulid()
this.id = `opt_${id}`
} }
} }
+8 -29
View File
@@ -1,40 +1,19 @@
import { import { BeforeInsert, Column, Entity } from "typeorm"
Entity, import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
BeforeInsert, import { DbAwareColumn } from "../utils/db-aware-column"
DeleteDateColumn, import { generateEntityId } from "../utils/generate-entity-id"
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity() @Entity()
export class ProductTag { export class ProductTag extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
value: string value: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ptag")
const id = ulid()
this.id = `ptag_${id}`
} }
} }
@@ -1,6 +1,5 @@
import { import {
Entity, Entity,
DeleteDateColumn,
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
ManyToOne, ManyToOne,
@@ -36,7 +35,7 @@ export class ProductTaxRate {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
@@ -1,13 +1,12 @@
import { import {
Entity,
DeleteDateColumn,
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, Entity,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
PrimaryColumn, PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { ProductType } from "./product-type" import { ProductType } from "./product-type"
import { TaxRate } from "./tax-rate" import { TaxRate } from "./tax-rate"
@@ -35,7 +34,7 @@ export class ProductTypeTaxRate {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
+8 -29
View File
@@ -1,40 +1,19 @@
import { import { BeforeInsert, Column, Entity } from "typeorm"
Entity, import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
BeforeInsert, import { DbAwareColumn } from "../utils/db-aware-column"
DeleteDateColumn, import { generateEntityId } from "../utils/generate-entity-id"
CreateDateColumn,
UpdateDateColumn,
Column,
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity() @Entity()
export class ProductType { export class ProductType extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
value: string value: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ptyp")
const id = ulid()
this.id = `ptyp_${id}`
} }
} }
+11 -32
View File
@@ -1,30 +1,22 @@
import { import {
Entity,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn,
PrimaryColumn,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
OneToMany,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Product } from "./product" import { Product } from "./product"
import { MoneyAmount } from "./money-amount" import { MoneyAmount } from "./money-amount"
import { ProductOptionValue } from "./product-option-value" import { ProductOptionValue } from "./product-option-value"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ProductVariant { export class ProductVariant extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
title: string title: string
@@ -99,25 +91,12 @@ export class ProductVariant {
}) })
options: ProductOptionValue[] options: ProductOptionValue[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) { this.id = generateEntityId(this.id, "variant")
return
}
const id = ulid()
this.id = `variant_${id}`
} }
} }
+11 -32
View File
@@ -2,8 +2,6 @@ import _ from "lodash"
import { import {
BeforeInsert, BeforeInsert,
Column, Column,
CreateDateColumn,
DeleteDateColumn,
Entity, Entity,
Index, Index,
JoinColumn, JoinColumn,
@@ -11,11 +9,8 @@ import {
ManyToMany, ManyToMany,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { Image } from "./image" import { Image } from "./image"
import { ProductCollection } from "./product-collection" import { ProductCollection } from "./product-collection"
import { ProductOption } from "./product-option" import { ProductOption } from "./product-option"
@@ -23,6 +18,8 @@ import { ProductTag } from "./product-tag"
import { ProductType } from "./product-type" import { ProductType } from "./product-type"
import { ProductVariant } from "./product-variant" import { ProductVariant } from "./product-variant"
import { ShippingProfile } from "./shipping-profile" import { ShippingProfile } from "./shipping-profile"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum Status { export enum Status {
DRAFT = "draft", DRAFT = "draft",
@@ -32,10 +29,7 @@ export enum Status {
} }
@Entity() @Entity()
export class Product { export class Product extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
title: string title: string
@@ -72,17 +66,12 @@ export class Product {
@Column({ nullable: true }) @Column({ nullable: true })
thumbnail: string thumbnail: string
@OneToMany( @OneToMany(() => ProductOption, (productOption) => productOption.product)
() => ProductOption,
(productOption) => productOption.product
)
options: ProductOption[] options: ProductOption[]
@OneToMany( @OneToMany(() => ProductVariant, (variant) => variant.product, {
() => ProductVariant, cascade: true,
(variant) => variant.product, })
{ cascade: true }
)
variants: ProductVariant[] variants: ProductVariant[]
@Index() @Index()
@@ -151,24 +140,14 @@ export class Product {
@Column({ nullable: true }) @Column({ nullable: true })
external_id: string external_id: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return if (this.id) return
const id = ulid()
this.id = `prod_${id}`
this.id = generateEntityId(this.id, "prod")
if (!this.handle) { if (!this.handle) {
this.handle = _.kebabCase(this.title) this.handle = _.kebabCase(this.title)
} }
+8 -26
View File
@@ -3,19 +3,14 @@ import {
BeforeInsert, BeforeInsert,
Column, Column,
Index, Index,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
ManyToOne, ManyToOne,
JoinColumn, JoinColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency"
import { Cart } from "./cart"
import { Order } from "./order" import { Order } from "./order"
import { generateEntityId } from "../utils/generate-entity-id"
export enum RefundReason { export enum RefundReason {
DISCOUNT = "discount", DISCOUNT = "discount",
@@ -26,18 +21,12 @@ export enum RefundReason {
} }
@Entity() @Entity()
export class Refund { export class Refund extends BaseEntity {
@PrimaryColumn()
id: string
@Index() @Index()
@Column() @Column()
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (order) => order.payments)
() => Order,
order => order.payments
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@@ -50,22 +39,15 @@ export class Refund {
@DbAwareColumn({ type: "enum", enum: RefundReason }) @DbAwareColumn({ type: "enum", enum: RefundReason })
reason: string reason: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
const id = ulid() this.id = generateEntityId(this.id, "ref")
this.id = `ref_${id}`
} }
} }
+10 -27
View File
@@ -1,19 +1,13 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, JoinColumn,
UpdateDateColumn, JoinTable,
PrimaryColumn,
ManyToMany, ManyToMany,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
JoinTable,
JoinColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency" import { Currency } from "./currency"
import { TaxRate } from "./tax-rate" import { TaxRate } from "./tax-rate"
@@ -21,12 +15,12 @@ import { Country } from "./country"
import { PaymentProvider } from "./payment-provider" import { PaymentProvider } from "./payment-provider"
import { FulfillmentProvider } from "./fulfillment-provider" import { FulfillmentProvider } from "./fulfillment-provider"
import { TaxProvider } from "./tax-provider" import { TaxProvider } from "./tax-provider"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Region { export class Region extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
name: string name: string
@@ -96,23 +90,12 @@ export class Region {
}) })
fulfillment_providers: FulfillmentProvider[] fulfillment_providers: FulfillmentProvider[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "reg")
const id = ulid()
this.id = `reg_${id}`
} }
} }
+2 -18
View File
@@ -1,20 +1,4 @@
import { import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm"
Entity,
Generated,
RelationId,
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { ReturnReason } from "./return-reason" import { ReturnReason } from "./return-reason"
@@ -60,7 +44,7 @@ export class ReturnItem {
note: string note: string
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
+13 -31
View File
@@ -1,24 +1,18 @@
import { import {
Entity,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn, JoinColumn,
PrimaryColumn,
ManyToOne, ManyToOne,
OneToMany, OneToMany,
JoinColumn
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class ReturnReason { export class ReturnReason extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Index({ unique: true }) @Index({ unique: true })
@Column() @Column()
value: string value: string
@@ -32,35 +26,23 @@ export class ReturnReason {
@Column({ nullable: true }) @Column({ nullable: true })
parent_return_reason_id: string parent_return_reason_id: string
@ManyToOne(() => ReturnReason, {cascade: ['soft-remove']} @ManyToOne(() => ReturnReason, { cascade: ["soft-remove"] })
)
@JoinColumn({ name: "parent_return_reason_id" }) @JoinColumn({ name: "parent_return_reason_id" })
parent_return_reason: ReturnReason parent_return_reason: ReturnReason
@OneToMany( @OneToMany(
() => ReturnReason, () => ReturnReason,
return_reason => return_reason.parent_return_reason, (return_reason) => return_reason.parent_return_reason,
{ cascade: ["insert", 'soft-remove'] } { cascade: ["insert", "soft-remove"] }
) )
return_reason_children: ReturnReason[] return_reason_children: ReturnReason[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "rr")
const id = ulid()
this.id = `rr_${id}`
} }
} }
+24 -53
View File
@@ -1,28 +1,22 @@
import { import {
Entity,
Index,
RelationId,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
OneToMany,
OneToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order" import { Order } from "./order"
import { Swap } from "./swap" import { Swap } from "./swap"
import { ClaimOrder } from "./claim-order" import { ClaimOrder } from "./claim-order"
import { ReturnItem } from "./return-item" import { ReturnItem } from "./return-item"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { BaseEntity } from "../interfaces/models/base-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum ReturnStatus { export enum ReturnStatus {
REQUESTED = "requested", REQUESTED = "requested",
@@ -32,10 +26,7 @@ export enum ReturnStatus {
} }
@Entity() @Entity()
export class Return { export class Return extends BaseEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ @DbAwareColumn({
type: "enum", type: "enum",
enum: ReturnStatus, enum: ReturnStatus,
@@ -43,21 +34,17 @@ export class Return {
}) })
status: ReturnStatus status: ReturnStatus
@OneToMany( @OneToMany(() => ReturnItem, (item) => item.return_order, {
() => ReturnItem, eager: true,
item => item.return_order, cascade: ["insert"],
{ eager: true, cascade: ["insert"] } })
)
items: ReturnItem[] items: ReturnItem[]
@Index() @Index()
@Column({ nullable: true }) @Column({ nullable: true })
swap_id: string swap_id: string
@OneToOne( @OneToOne(() => Swap, (swap) => swap.return_order)
() => Swap,
swap => swap.return_order
)
@JoinColumn({ name: "swap_id" }) @JoinColumn({ name: "swap_id" })
swap: Swap swap: Swap
@@ -65,10 +52,7 @@ export class Return {
@Column({ nullable: true }) @Column({ nullable: true })
claim_order_id: string claim_order_id: string
@OneToOne( @OneToOne(() => ClaimOrder, (co) => co.return_order)
() => ClaimOrder,
co => co.return_order
)
@JoinColumn({ name: "claim_order_id" }) @JoinColumn({ name: "claim_order_id" })
claim_order: ClaimOrder claim_order: ClaimOrder
@@ -76,22 +60,17 @@ export class Return {
@Column({ nullable: true }) @Column({ nullable: true })
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (o) => o.returns)
() => Order,
o => o.returns
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@OneToOne( @OneToOne(() => ShippingMethod, (method) => method.return_order, {
() => ShippingMethod, cascade: true,
method => method.return_order, })
{ cascade: true }
)
shipping_method: ShippingMethod shipping_method: ShippingMethod
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
shipping_data: any shipping_data: Record<string, unknown>
@Column({ type: "int" }) @Column({ type: "int" })
refund_amount: number refund_amount: number
@@ -99,26 +78,18 @@ export class Return {
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
received_at: Date received_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "boolean", nullable: true }) @Column({ type: "boolean", nullable: true })
no_notification: Boolean no_notification: boolean
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "ret")
const id = ulid()
this.id = `ret_${id}`
} }
} }
@@ -7,10 +7,10 @@ import {
ManyToOne, ManyToOne,
Unique, Unique,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { TaxLine } from "./tax-line" import { TaxLine } from "./tax-line"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
@Unique(["shipping_method_id", "code"]) @Unique(["shipping_method_id", "code"])
@@ -24,9 +24,7 @@ export class ShippingMethodTaxLine extends TaxLine {
shipping_method: ShippingMethod shipping_method: ShippingMethod
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "smtl")
const id = ulid()
this.id = `smtl_${id}`
} }
} }
+11 -13
View File
@@ -1,16 +1,15 @@
import { import {
Entity,
Check,
BeforeInsert, BeforeInsert,
Check,
Column, Column,
PrimaryColumn, Entity,
ManyToOne,
OneToOne,
OneToMany,
JoinColumn,
Index, Index,
JoinColumn,
ManyToOne,
OneToMany,
OneToOne,
PrimaryColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { ClaimOrder } from "./claim-order" import { ClaimOrder } from "./claim-order"
@@ -20,6 +19,7 @@ import { Swap } from "./swap"
import { Return } from "./return" import { Return } from "./return"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { ShippingMethodTaxLine } from "./shipping-method-tax-line" import { ShippingMethodTaxLine } from "./shipping-method-tax-line"
import { generateEntityId } from "../utils/generate-entity-id"
@Check( @Check(
`"claim_order_id" IS NOT NULL OR "order_id" IS NOT NULL OR "cart_id" IS NOT NULL OR "swap_id" IS NOT NULL OR "return_id" IS NOT NULL` `"claim_order_id" IS NOT NULL OR "order_id" IS NOT NULL OR "cart_id" IS NOT NULL OR "swap_id" IS NOT NULL OR "return_id" IS NOT NULL`
@@ -87,13 +87,11 @@ export class ShippingMethod {
price: number price: number
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "sm")
const id = ulid()
this.id = `sm_${id}`
} }
} }
@@ -1,24 +1,17 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
Column, Column,
Index,
DeleteDateColumn, DeleteDateColumn,
CreateDateColumn, Entity,
UpdateDateColumn, Index,
RelationId,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
PrimaryColumn,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { generateEntityId } from "../utils/generate-entity-id"
export enum RequirementType { export enum RequirementType {
MIN_SUBTOTAL = "min_subtotal", MIN_SUBTOTAL = "min_subtotal",
@@ -48,10 +41,8 @@ export class ShippingOptionRequirement {
deleted_at: Date deleted_at: Date
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "sor")
const id = ulid()
this.id = `sor_${id}`
} }
} }
+16 -39
View File
@@ -1,28 +1,21 @@
import { import {
Entity,
Check,
Index,
BeforeInsert, BeforeInsert,
Check,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn,
RelationId,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
OneToMany,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { ShippingProfile } from "./shipping-profile" import { ShippingProfile } from "./shipping-profile"
import { Region } from "./region" import { Region } from "./region"
import { FulfillmentProvider } from "./fulfillment-provider" import { FulfillmentProvider } from "./fulfillment-provider"
import { ShippingOptionRequirement } from "./shipping-option-requirement" import { ShippingOptionRequirement } from "./shipping-option-requirement"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum ShippingOptionPriceType { export enum ShippingOptionPriceType {
FLAT_RATE = "flat_rate", FLAT_RATE = "flat_rate",
@@ -31,10 +24,7 @@ export enum ShippingOptionPriceType {
@Check(`"amount" >= 0`) @Check(`"amount" >= 0`)
@Entity() @Entity()
export class ShippingOption { export class ShippingOption extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
name: string name: string
@@ -74,33 +64,20 @@ export class ShippingOption {
@Column({ default: false }) @Column({ default: false })
admin_only: boolean admin_only: boolean
@OneToMany( @OneToMany(() => ShippingOptionRequirement, (req) => req.shipping_option, {
() => ShippingOptionRequirement, cascade: ["insert"],
req => req.shipping_option, })
{ cascade: ["insert"] }
)
requirements: ShippingOptionRequirement[] requirements: ShippingOptionRequirement[]
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "so")
const id = ulid()
this.id = `so_${id}`
} }
} }
+10 -38
View File
@@ -1,18 +1,10 @@
import { import { BeforeInsert, Column, Entity, OneToMany } from "typeorm"
Entity, import { DbAwareColumn } from "../utils/db-aware-column"
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToMany,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { Product } from "./product" import { Product } from "./product"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum ShippingProfileType { export enum ShippingProfileType {
DEFAULT = "default", DEFAULT = "default",
@@ -21,45 +13,25 @@ export enum ShippingProfileType {
} }
@Entity() @Entity()
export class ShippingProfile { export class ShippingProfile extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column() @Column()
name: string name: string
@DbAwareColumn({ type: "enum", enum: ShippingProfileType }) @DbAwareColumn({ type: "enum", enum: ShippingProfileType })
type: ShippingProfileType type: ShippingProfileType
@OneToMany( @OneToMany(() => Product, (product) => product.profile)
() => Product,
product => product.profile
)
products: Product[] products: Product[]
@OneToMany( @OneToMany(() => ShippingOption, (so) => so.profile)
() => ShippingOption,
so => so.profile
)
shipping_options: ShippingOption[] shipping_options: ShippingOption[]
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "sp")
const id = ulid()
this.id = `sp_${id}`
} }
} }
@@ -1,13 +1,12 @@
import { import {
Entity,
DeleteDateColumn,
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, Entity,
ManyToOne,
JoinColumn, JoinColumn,
ManyToOne,
PrimaryColumn, PrimaryColumn,
UpdateDateColumn,
} from "typeorm" } from "typeorm"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { TaxRate } from "./tax-rate" import { TaxRate } from "./tax-rate"
@@ -35,7 +34,7 @@ export class ShippingTaxRate {
updated_at: Date updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
+5 -21
View File
@@ -1,21 +1,6 @@
import { import { BeforeInsert, Column, Entity, PrimaryColumn } from "typeorm"
Entity,
RelationId,
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class StagedJob { export class StagedJob {
@@ -26,11 +11,10 @@ export class StagedJob {
event_name: string event_name: string
@DbAwareColumn({ type: "jsonb" }) @DbAwareColumn({ type: "jsonb" })
data: any data: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
const id = ulid() this.id = generateEntityId(this.id, "job")
this.id = `job_${id}`
} }
} }
+10 -26
View File
@@ -1,29 +1,20 @@
import { import {
Entity,
RelationId,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, JoinTable,
ManyToMany,
ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { BaseEntity } from "../interfaces/models/base-entity"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" import { DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency" import { Currency } from "./currency"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class Store { export class Store extends BaseEntity {
@PrimaryColumn()
id: string
@Column({ default: "Medusa Store" }) @Column({ default: "Medusa Store" })
name: string name: string
@@ -57,19 +48,12 @@ export class Store {
@Column({ nullable: true }) @Column({ nullable: true })
invite_link_template: string invite_link_template: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
const id = ulid() this.id = generateEntityId(this.id, "store")
this.id = `store_${id}`
} }
} }
+26 -64
View File
@@ -1,21 +1,14 @@
import { import {
Entity,
Index,
BeforeInsert, BeforeInsert,
Column, Column,
DeleteDateColumn, Entity,
CreateDateColumn, Index,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, ManyToOne,
OneToMany,
OneToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order" import { Order } from "./order"
import { Fulfillment } from "./fulfillment" import { Fulfillment } from "./fulfillment"
@@ -25,6 +18,8 @@ import { Return } from "./return"
import { Cart } from "./cart" import { Cart } from "./cart"
import { Payment } from "./payment" import { Payment } from "./payment"
import { ShippingMethod } from "./shipping-method" import { ShippingMethod } from "./shipping-method"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { generateEntityId } from "../utils/generate-entity-id"
export enum SwapFulfillmentStatus { export enum SwapFulfillmentStatus {
NOT_FULFILLED = "not_fulfilled", NOT_FULFILLED = "not_fulfilled",
@@ -47,10 +42,7 @@ export enum SwapPaymentStatus {
} }
@Entity() @Entity()
export class Swap { export class Swap extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ type: "enum", enum: SwapFulfillmentStatus }) @DbAwareColumn({ type: "enum", enum: SwapFulfillmentStatus })
fulfillment_status: SwapFulfillmentStatus fulfillment_status: SwapFulfillmentStatus
@@ -61,39 +53,22 @@ export class Swap {
@Column({ type: "string" }) @Column({ type: "string" })
order_id: string order_id: string
@ManyToOne( @ManyToOne(() => Order, (o) => o.swaps)
() => Order,
(o) => o.swaps
)
@JoinColumn({ name: "order_id" }) @JoinColumn({ name: "order_id" })
order: Order order: Order
@OneToMany( @OneToMany(() => LineItem, (item) => item.swap, { cascade: ["insert"] })
() => LineItem,
(item) => item.swap,
{ cascade: ["insert"] }
)
additional_items: LineItem[] additional_items: LineItem[]
@OneToOne( @OneToOne(() => Return, (ret) => ret.swap, { cascade: ["insert"] })
() => Return,
(ret) => ret.swap,
{ cascade: ["insert"] }
)
return_order: Return return_order: Return
@OneToMany( @OneToMany(() => Fulfillment, (fulfillment) => fulfillment.swap, {
() => Fulfillment, cascade: ["insert"],
(fulfillment) => fulfillment.swap, })
{ cascade: ["insert"] }
)
fulfillments: Fulfillment[] fulfillments: Fulfillment[]
@OneToOne( @OneToOne(() => Payment, (p) => p.swap, { cascade: ["insert"] })
() => Payment,
(p) => p.swap,
{ cascade: ["insert"] }
)
payment: Payment payment: Payment
@Column({ type: "int", nullable: true }) @Column({ type: "int", nullable: true })
@@ -106,11 +81,9 @@ export class Swap {
@JoinColumn({ name: "shipping_address_id" }) @JoinColumn({ name: "shipping_address_id" })
shipping_address: Address shipping_address: Address
@OneToMany( @OneToMany(() => ShippingMethod, (method) => method.swap, {
() => ShippingMethod, cascade: ["insert"],
(method) => method.swap, })
{ cascade: ["insert"] }
)
shipping_methods: ShippingMethod[] shipping_methods: ShippingMethod[]
@Column({ nullable: true }) @Column({ nullable: true })
@@ -123,35 +96,24 @@ export class Swap {
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
confirmed_at: Date confirmed_at: Date
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: resolveDbType("timestamptz"), nullable: true }) @Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date canceled_at: Date
@Column({ type: "boolean", nullable: true }) @Column({ type: "boolean", nullable: true })
no_notification: Boolean no_notification: boolean
@Column({ type: "boolean", default: false }) @Column({ type: "boolean", default: false })
allow_backorder: Boolean allow_backorder: boolean
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "swap")
const id = ulid()
this.id = `swap_${id}`
} }
} }
+5 -18
View File
@@ -1,15 +1,8 @@
import { import { Column } from "typeorm"
CreateDateColumn, import { BaseEntity } from "../interfaces/models/base-entity"
UpdateDateColumn, import { DbAwareColumn } from "../utils/db-aware-column"
Column,
PrimaryColumn,
} from "typeorm"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
export class TaxLine {
@PrimaryColumn()
id: string
export class TaxLine extends BaseEntity {
@Column({ type: "real" }) @Column({ type: "real" })
rate: number rate: number
@@ -19,14 +12,8 @@ export class TaxLine {
@Column({ type: "varchar", nullable: true }) @Column({ type: "varchar", nullable: true })
code: string | null code: string | null
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
} }
/** /**
+1 -1
View File
@@ -1,4 +1,4 @@
import { Entity, Column, PrimaryColumn } from "typeorm" import { Column, Entity, PrimaryColumn } from "typeorm"
@Entity() @Entity()
export class TaxProvider { export class TaxProvider {
+10 -23
View File
@@ -1,28 +1,23 @@
import { import {
Entity,
BeforeInsert, BeforeInsert,
CreateDateColumn,
UpdateDateColumn,
Column, Column,
PrimaryColumn, Entity,
ManyToOne,
ManyToMany,
JoinColumn, JoinColumn,
JoinTable, JoinTable,
ManyToMany,
ManyToOne,
} from "typeorm" } from "typeorm"
import { ulid } from "ulid" import { DbAwareColumn } from "../utils/db-aware-column"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Region } from "./region" import { Region } from "./region"
import { Product } from "./product" import { Product } from "./product"
import { ProductType } from "./product-type" import { ProductType } from "./product-type"
import { ShippingOption } from "./shipping-option" import { ShippingOption } from "./shipping-option"
import { BaseEntity } from "../interfaces/models/base-entity"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class TaxRate { export class TaxRate extends BaseEntity {
@PrimaryColumn()
id: string
@Column({ type: "real", nullable: true }) @Column({ type: "real", nullable: true })
rate: number | null rate: number | null
@@ -39,14 +34,8 @@ export class TaxRate {
@JoinColumn({ name: "region_id" }) @JoinColumn({ name: "region_id" })
region: Region region: Region
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@ManyToMany(() => Product) @ManyToMany(() => Product)
@JoinTable({ @JoinTable({
@@ -96,10 +85,8 @@ export class TaxRate {
shipping_option_count?: number shipping_option_count?: number
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "txr")
const id = ulid()
this.id = `txr_${id}`
} }
} }
+11 -42
View File
@@ -1,29 +1,12 @@
import { import { BeforeInsert, Column, Entity, JoinColumn, ManyToOne } from "typeorm"
Entity,
Index,
BeforeInsert,
Column,
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Fulfillment } from "./fulfillment" import { Fulfillment } from "./fulfillment"
import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
import { DbAwareColumn } from "../utils/db-aware-column"
import { generateEntityId } from "../utils/generate-entity-id"
@Entity() @Entity()
export class TrackingLink { export class TrackingLink extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@Column({ nullable: true }) @Column({ nullable: true })
url: string url: string
@@ -33,33 +16,19 @@ export class TrackingLink {
@Column() @Column()
fulfillment_id: string fulfillment_id: string
@ManyToOne( @ManyToOne(() => Fulfillment, (ful) => ful.tracking_links)
() => Fulfillment,
ful => ful.tracking_links
)
@JoinColumn({ name: "fulfillment_id" }) @JoinColumn({ name: "fulfillment_id" })
fulfillment: Fulfillment fulfillment: Fulfillment
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true }) @Column({ nullable: true })
idempotency_key: string idempotency_key: string
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "tlink")
const id = ulid()
this.id = `tlink_${id}`
} }
} }
+8 -30
View File
@@ -1,15 +1,7 @@
import { import { BeforeInsert, Column, Entity, Index } from "typeorm"
Entity, import { DbAwareColumn } from "../utils/db-aware-column"
BeforeInsert, import { SoftDeletableEntity } from "../interfaces/models/soft-deletable-entity"
CreateDateColumn, import { generateEntityId } from "../utils/generate-entity-id"
UpdateDateColumn,
DeleteDateColumn,
Index,
Column,
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
export enum UserRoles { export enum UserRoles {
ADMIN = "admin", ADMIN = "admin",
@@ -18,10 +10,7 @@ export enum UserRoles {
} }
@Entity() @Entity()
export class User { export class User extends SoftDeletableEntity {
@PrimaryColumn()
id: string
@DbAwareColumn({ @DbAwareColumn({
type: "enum", type: "enum",
enum: UserRoles, enum: UserRoles,
@@ -46,23 +35,12 @@ export class User {
@Column({ nullable: true }) @Column({ nullable: true })
api_token: string api_token: string
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@DbAwareColumn({ type: "jsonb", nullable: true }) @DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any metadata: Record<string, unknown>
@BeforeInsert() @BeforeInsert()
private beforeInsert() { private beforeInsert(): void {
if (this.id) return this.id = generateEntityId(this.id, "usr")
const id = ulid()
this.id = `usr_${id}`
} }
} }
@@ -1,12 +1,13 @@
import { EntityRepository, Repository } from "typeorm" import { EntityRepository, Repository } from "typeorm"
import { LineItemTaxLine } from "../models/line-item-tax-line" import { LineItemTaxLine } from "../models/line-item-tax-line"
import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"
@EntityRepository(LineItemTaxLine) @EntityRepository(LineItemTaxLine)
export class LineItemTaxLineRepository extends Repository<LineItemTaxLine> { export class LineItemTaxLineRepository extends Repository<LineItemTaxLine> {
async upsertLines(lines: LineItemTaxLine[]): Promise<LineItemTaxLine[]> { async upsertLines(lines: LineItemTaxLine[]): Promise<LineItemTaxLine[]> {
const insertResult = await this.createQueryBuilder() const insertResult = await this.createQueryBuilder()
.insert() .insert()
.values(lines) .values(lines as QueryDeepPartialEntity<LineItemTaxLine>[])
.orUpdate({ .orUpdate({
conflict_target: ["item_id", "code"], conflict_target: ["item_id", "code"],
overwrite: ["rate", "name", "updated_at"], overwrite: ["rate", "name", "updated_at"],
@@ -13,6 +13,7 @@ import {
PriceListPriceCreateInput, PriceListPriceCreateInput,
PriceListPriceUpdateInput, PriceListPriceUpdateInput,
} from "../types/price-list" } from "../types/price-list"
import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"
type Price = Partial< type Price = Partial<
Omit<MoneyAmount, "created_at" | "updated_at" | "deleted_at"> Omit<MoneyAmount, "created_at" | "updated_at" | "deleted_at">
@@ -84,7 +85,7 @@ export class MoneyAmountRepository extends Repository<MoneyAmount> {
.insert() .insert()
.orIgnore(true) .orIgnore(true)
.into(MoneyAmount) .into(MoneyAmount)
.values(toInsert) .values(toInsert as QueryDeepPartialEntity<MoneyAmount>[])
.execute() .execute()
if (overrideExisting) { if (overrideExisting) {
@@ -1,5 +1,6 @@
import { EntityRepository, Repository } from "typeorm" import { EntityRepository, Repository } from "typeorm"
import { ShippingMethodTaxLine } from "../models/shipping-method-tax-line" import { ShippingMethodTaxLine } from "../models/shipping-method-tax-line"
import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"
@EntityRepository(ShippingMethodTaxLine) @EntityRepository(ShippingMethodTaxLine)
export class ShippingMethodTaxLineRepository extends Repository<ShippingMethodTaxLine> { export class ShippingMethodTaxLineRepository extends Repository<ShippingMethodTaxLine> {
@@ -8,7 +9,7 @@ export class ShippingMethodTaxLineRepository extends Repository<ShippingMethodTa
): Promise<ShippingMethodTaxLine[]> { ): Promise<ShippingMethodTaxLine[]> {
const insertResult = await this.createQueryBuilder() const insertResult = await this.createQueryBuilder()
.insert() .insert()
.values(lines) .values(lines as QueryDeepPartialEntity<ShippingMethodTaxLine>[])
.orUpdate({ .orUpdate({
conflict_target: ["shipping_method_id", "code"], conflict_target: ["shipping_method_id", "code"],
overwrite: ["rate", "name", "updated_at"], overwrite: ["rate", "name", "updated_at"],
@@ -1,5 +1,7 @@
import dotenv from "dotenv" import dotenv from "dotenv"
import { createConnection } from "typeorm" import { createConnection } from "typeorm"
import { QueryDeepPartialEntity } from "typeorm/query-builder/QueryPartialEntity"
import Logger from "../loaders/logger" import Logger from "../loaders/logger"
import { import {
DiscountCondition, DiscountCondition,
@@ -8,6 +10,7 @@ import {
} from "../models/discount-condition" } from "../models/discount-condition"
import { DiscountConditionProduct } from "../models/discount-condition-product" import { DiscountConditionProduct } from "../models/discount-condition-product"
import { DiscountRule } from "../models/discount-rule" import { DiscountRule } from "../models/discount-rule"
import { DiscountConditionRepository } from "../repositories/discount-condition"
dotenv.config() dotenv.config()
const typeormConfig = { const typeormConfig = {
@@ -48,18 +51,18 @@ const migrate = async function ({ typeormConfig }): Promise<void> {
.offset(offset) .offset(offset)
.getRawMany() .getRawMany()
const discountConditionRepo = manager
.getCustomRepository(DiscountConditionRepository)
await manager await manager
.createQueryBuilder() .createQueryBuilder()
.insert() .insert()
.into(DiscountCondition) .into(DiscountCondition)
.values( .values(
discountRules.map((dr) => discountRules.map((dr) => discountConditionRepo.create({
Object.assign(new DiscountCondition(), {
type: DiscountConditionType.PRODUCTS, type: DiscountConditionType.PRODUCTS,
operator: DiscountConditionOperator.IN, operator: DiscountConditionOperator.IN,
discount_rule_id: dr.dr_id, discount_rule_id: dr.dr_id,
}) }) as QueryDeepPartialEntity<DiscountCondition>)
)
) )
.orIgnore() .orIgnore()
.execute() .execute()
+6 -3
View File
@@ -21,7 +21,7 @@ import {
FilterableCartProps, FilterableCartProps,
LineItemUpdate, LineItemUpdate,
} from "../types/cart" } from "../types/cart"
import { FindConfig, TotalField } from "../types/common" import { AddressPayload, FindConfig, TotalField } from "../types/common"
import { buildQuery, setMetadata, validateId } from "../utils" import { buildQuery, setMetadata, validateId } from "../utils"
import CustomShippingOptionService from "./custom-shipping-option" import CustomShippingOptionService from "./custom-shipping-option"
import CustomerService from "./customer" import CustomerService from "./customer"
@@ -404,6 +404,9 @@ class CartService extends TransactionBaseService<CartService> {
typeof data[remainingField] !== "undefined" && typeof data[remainingField] !== "undefined" &&
remainingField !== "object" remainingField !== "object"
) { ) {
/* TODO: See how to fix the error TS2590 properly while keeping the DeepPartial type */
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
rawCart[remainingField] = data[remainingField] rawCart[remainingField] = data[remainingField]
} }
} }
@@ -915,7 +918,7 @@ class CartService extends TransactionBaseService<CartService> {
*/ */
protected async updateBillingAddress_( protected async updateBillingAddress_(
cart: Cart, cart: Cart,
addressOrId: Partial<Address> | string, addressOrId: AddressPayload | Partial<Address> | string,
addrRepo: AddressRepository addrRepo: AddressRepository
): Promise<void> { ): Promise<void> {
let address: Address let address: Address
@@ -955,7 +958,7 @@ class CartService extends TransactionBaseService<CartService> {
*/ */
protected async updateShippingAddress_( protected async updateShippingAddress_(
cart: Cart, cart: Cart,
addressOrId: Partial<Address> | string, addressOrId: AddressPayload | Partial<Address> | string,
addrRepo: AddressRepository addrRepo: AddressRepository
): Promise<void> { ): Promise<void> {
let address: Address let address: Address
@@ -238,8 +238,6 @@ class PriceListService extends BaseService {
} }
await priceListRepo.remove(priceList) await priceListRepo.remove(priceList)
return Promise.resolve()
}) })
} }
@@ -141,7 +141,7 @@ class CartCompletionStrategy implements ICartCompletionStrategy {
const swapId = cart.metadata?.swap_id const swapId = cart.metadata?.swap_id
let swap = await swapService let swap = await swapService
.withTransaction(manager) .withTransaction(manager)
.registerCartCompletion(swapId) .registerCartCompletion(swapId as string)
swap = await swapService swap = await swapService
.withTransaction(manager) .withTransaction(manager)
+1 -1
View File
@@ -29,7 +29,7 @@ export type LineItemUpdate = {
title?: string title?: string
unit_price?: number unit_price?: number
quantity?: number quantity?: number
metadata?: object metadata?: Record<string, unknown>
region_id?: string region_id?: string
variant_id?: string variant_id?: string
} }
+1 -1
View File
@@ -8,7 +8,7 @@ export interface CreateNoteInput {
resource_id: string resource_id: string
author_id?: string author_id?: string
author?: User author?: User
metadata?: JSON metadata?: Record<string, unknown>
} }
export type selector = { export type selector = {
+2 -2
View File
@@ -16,7 +16,7 @@ export type ProviderShippingMethodTaxLine = {
rate: number rate: number
name: string name: string
code: string | null code: string | null
metadata?: JSON metadata?: Record<string, unknown>
shipping_method_id: string shipping_method_id: string
} }
@@ -28,7 +28,7 @@ export type ProviderLineItemTaxLine = {
name: string name: string
code: string | null code: string | null
item_id: string item_id: string
metadata?: JSON metadata?: Record<string, unknown>
} }
/** /**
+2 -2
View File
@@ -8,7 +8,7 @@ export interface CreateUserInput {
last_name?: string last_name?: string
api_token?: string api_token?: string
role?: UserRoles role?: UserRoles
metadata?: JSON metadata?: Record<string, unknown>
} }
export interface UpdateUserInput { export interface UpdateUserInput {
@@ -18,7 +18,7 @@ export interface UpdateUserInput {
readonly password_hash?: string readonly password_hash?: string
api_token?: string api_token?: string
role?: UserRoles role?: UserRoles
metadata?: JSON metadata?: Record<string, unknown>
} }
export enum UserRole { export enum UserRole {
@@ -0,0 +1,26 @@
import { generateEntityId } from "../generate-entity-id"
import { Entity, PrimaryColumn } from "typeorm"
@Entity()
class GenerateIdSpecEntity {
@PrimaryColumn()
id: string
}
describe("generateAndApplyEntityId", () => {
it('should return the id if already set', () => {
const entity = new GenerateIdSpecEntity()
entity.id = "fakeId"
const generatedId = generateEntityId(entity.id, "prefix")
expect(generatedId).toBe(entity.id)
})
it('should return the new generated id if not set already', () => {
const entity = new GenerateIdSpecEntity()
entity.id = generateEntityId(entity.id, "prefix")
expect(entity.id).toBeTruthy()
expect(entity.id).toEqual(expect.stringMatching(/prefix_*/))
})
})
@@ -0,0 +1,16 @@
import { ulid } from "ulid"
/**
* Generate a composed id based on the input parameters and return either the is if it exists or the generated one.
* @param idProperty
* @param prefix
*/
export function generateEntityId(idProperty: string, prefix?: string): string {
if (idProperty) {
return idProperty
}
const id = ulid()
prefix = prefix ? `${prefix}_` : ''
return `${prefix}${id}`
}
+10
View File
@@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"include": [
"./src/**/*",
"index.d.ts",
"./src/**/__tests__",
"./src/**/__mocks__"
],
"exclude": ["node_modules"]
}
+115 -1
View File
@@ -4556,6 +4556,13 @@
terminal-link "^2.0.0" terminal-link "^2.0.0"
v8-to-istanbul "^8.1.0" v8-to-istanbul "^8.1.0"
"@jest/schemas@^28.0.2":
version "28.0.2"
resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613"
integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==
dependencies:
"@sinclair/typebox" "^0.23.3"
"@jest/source-map@^25.5.0": "@jest/source-map@^25.5.0":
version "25.5.0" version "25.5.0"
resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz" resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-25.5.0.tgz"
@@ -4741,6 +4748,18 @@
"@types/yargs" "^16.0.0" "@types/yargs" "^16.0.0"
chalk "^4.0.0" chalk "^4.0.0"
"@jest/types@^28.0.2":
version "28.0.2"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.0.2.tgz#70b9538c1863fb060b2f438ca008b5563d00c5b4"
integrity sha512-hi3jUdm9iht7I2yrV5C4s3ucCJHUP8Eh3W6rQ1s4n/Qw9rQgsda4eqCt+r3BKRi7klVmZfQlMx1nGlzNMP2d8A==
dependencies:
"@jest/schemas" "^28.0.2"
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^3.0.0"
"@types/node" "*"
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
"@jsdevtools/ono@^7.1.3": "@jsdevtools/ono@^7.1.3":
version "7.1.3" version "7.1.3"
resolved "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz" resolved "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz"
@@ -5985,6 +6004,11 @@
resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz"
integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
"@sinclair/typebox@^0.23.3":
version "0.23.5"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d"
integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==
"@sindresorhus/is@^0.14.0": "@sindresorhus/is@^0.14.0":
version "0.14.0" version "0.14.0"
resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz"
@@ -7624,6 +7648,14 @@
jest-diff "^27.0.0" jest-diff "^27.0.0"
pretty-format "^27.0.0" pretty-format "^27.0.0"
"@types/jest@^27.5.0":
version "27.5.0"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.0.tgz#e04ed1824ca6b1dd0438997ba60f99a7405d4c7b"
integrity sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==
dependencies:
jest-matcher-utils "^27.0.0"
pretty-format "^27.0.0"
"@types/js-levenshtein@^1.1.0": "@types/js-levenshtein@^1.1.0":
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz" resolved "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz"
@@ -7745,6 +7777,11 @@
resolved "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz"
integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A== integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==
"@types/node@^17.0.31":
version "17.0.31"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d"
integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==
"@types/node@^8.5.7": "@types/node@^8.5.7":
version "8.10.66" version "8.10.66"
resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz"
@@ -8028,6 +8065,13 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@types/yargs-parser" "*"
"@types/yargs@^17.0.8":
version "17.0.10"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a"
integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==
dependencies:
"@types/yargs-parser" "*"
"@types/yoga-layout@1.9.2": "@types/yoga-layout@1.9.2":
version "1.9.2" version "1.9.2"
resolved "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz" resolved "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz"
@@ -12707,6 +12751,11 @@ diff-sequences@^27.4.0:
resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz"
integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==
diff-sequences@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
diff@^4.0.1: diff@^4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
@@ -15782,6 +15831,11 @@ graceful-fs@^4.2.4:
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
graceful-fs@^4.2.9:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
grapheme-splitter@^1.0.4: grapheme-splitter@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
@@ -17767,6 +17821,16 @@ jest-diff@^27.0.0, jest-diff@^27.4.6:
jest-get-type "^27.4.0" jest-get-type "^27.4.0"
pretty-format "^27.4.6" pretty-format "^27.4.6"
jest-diff@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==
dependencies:
chalk "^4.0.0"
diff-sequences "^27.5.1"
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
jest-docblock@^25.3.0: jest-docblock@^25.3.0:
version "25.3.0" version "25.3.0"
resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz" resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-25.3.0.tgz"
@@ -17910,6 +17974,11 @@ jest-get-type@^27.4.0:
resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz" resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz"
integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==
jest-get-type@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==
jest-haste-map@^25.5.1: jest-haste-map@^25.5.1:
version "25.5.1" version "25.5.1"
resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz" resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-25.5.1.tgz"
@@ -18085,6 +18154,16 @@ jest-matcher-utils@^26.6.2:
jest-get-type "^26.3.0" jest-get-type "^26.3.0"
pretty-format "^26.6.2" pretty-format "^26.6.2"
jest-matcher-utils@^27.0.0:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
dependencies:
chalk "^4.0.0"
jest-diff "^27.5.1"
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
jest-matcher-utils@^27.4.6: jest-matcher-utils@^27.4.6:
version "27.4.6" version "27.4.6"
resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz" resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz"
@@ -18555,6 +18634,18 @@ jest-util@^27.4.2:
graceful-fs "^4.2.4" graceful-fs "^4.2.4"
picomatch "^2.2.3" picomatch "^2.2.3"
jest-util@^28.0.0:
version "28.0.2"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.0.2.tgz#8e22cdd6e0549e0a393055f0e2da7eacc334b143"
integrity sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==
dependencies:
"@jest/types" "^28.0.2"
"@types/node" "*"
chalk "^4.0.0"
ci-info "^3.2.0"
graceful-fs "^4.2.9"
picomatch "^2.2.3"
jest-validate@^25.5.0: jest-validate@^25.5.0:
version "25.5.0" version "25.5.0"
resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz" resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz"
@@ -23193,6 +23284,15 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.4.6:
ansi-styles "^5.0.0" ansi-styles "^5.0.0"
react-is "^17.0.1" react-is "^17.0.1"
pretty-format@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
dependencies:
ansi-regex "^5.0.1"
ansi-styles "^5.0.0"
react-is "^17.0.1"
pretty-hrtime@^1.0.3: pretty-hrtime@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"
@@ -27071,6 +27171,20 @@ ts-jest@^26.5.6:
semver "7.x" semver "7.x"
yargs-parser "20.x" yargs-parser "20.x"
ts-jest@^28.0.1:
version "28.0.1"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.1.tgz#626b4d7d5c386f88f4813d959ffc4ca0a8ffef96"
integrity sha512-PbkbitaT/9ZYAqqzk3UYTvCq080Seo46T3m/AdwcZ0D8WH2uBhG6PvA8oOAWsZIknzPQU66fYobvFCL8IqIhmg==
dependencies:
bs-logger "0.x"
fast-json-stable-stringify "2.x"
jest-util "^28.0.0"
json5 "2.x"
lodash.memoize "4.x"
make-error "1.x"
semver "7.x"
yargs-parser "^20.x"
ts-node@^9: ts-node@^9:
version "9.1.1" version "9.1.1"
resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz"
@@ -28761,7 +28875,7 @@ yargs-parser@18.x, yargs-parser@^18.1.2:
camelcase "^5.0.0" camelcase "^5.0.0"
decamelize "^1.2.0" decamelize "^1.2.0"
yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.7: yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.7, yargs-parser@^20.x:
version "20.2.9" version "20.2.9"
resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==