add payment link func.
This commit is contained in:
1 parent
283f8fbe54
commit
c4164e4b66
12 files changed
+171
-4
No files matched your search
@@ -341,4 +341,68 @@ describe("/admin/draft-orders", () => {
|
|||||||
expect(response.data.count).toEqual(0);
|
expect(response.data.count).toEqual(0);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("DELETE /admin/draft-orders/:id", () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
try {
|
||||||
|
await adminSeeder(dbConnection);
|
||||||
|
await draftOrderSeeder(dbConnection);
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
const manager = dbConnection.manager;
|
||||||
|
await manager.query(`DELETE FROM "line_item"`);
|
||||||
|
await manager.query(`DELETE FROM "money_amount"`);
|
||||||
|
await manager.query(`DELETE FROM "product_variant"`);
|
||||||
|
await manager.query(`DELETE FROM "product"`);
|
||||||
|
await manager.query(`DELETE FROM "shipping_method"`);
|
||||||
|
await manager.query(`DELETE FROM "shipping_option"`);
|
||||||
|
await manager.query(`DELETE FROM "discount"`);
|
||||||
|
await manager.query(`DELETE FROM "payment_provider"`);
|
||||||
|
await manager.query(`DELETE FROM "payment_session"`);
|
||||||
|
await manager.query(`UPDATE "payment" SET order_id=NULL`);
|
||||||
|
await manager.query(`DELETE FROM "order"`);
|
||||||
|
await manager.query(`UPDATE "draft_order" SET order_id=NULL`);
|
||||||
|
await manager.query(`DELETE FROM "draft_order"`);
|
||||||
|
await manager.query(`DELETE FROM "cart"`);
|
||||||
|
await manager.query(`DELETE FROM "payment"`);
|
||||||
|
await manager.query(`DELETE FROM "customer"`);
|
||||||
|
await manager.query(`DELETE FROM "address"`);
|
||||||
|
|
||||||
|
await manager.query(
|
||||||
|
`UPDATE "country" SET region_id=NULL WHERE iso_2 = 'us'`
|
||||||
|
);
|
||||||
|
await manager.query(
|
||||||
|
`UPDATE "country" SET region_id=NULL WHERE iso_2 = 'de'`
|
||||||
|
);
|
||||||
|
await manager.query(`DELETE FROM "region"`);
|
||||||
|
await manager.query(`DELETE FROM "user"`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("lists draft orders", async () => {
|
||||||
|
const api = useApi();
|
||||||
|
|
||||||
|
const response = await api
|
||||||
|
.delete("/admin/draft-orders/test-draft-order", {
|
||||||
|
headers: {
|
||||||
|
Authorization: "Bearer test_token",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(response.status).toEqual(200);
|
||||||
|
|
||||||
|
expect(response.data).toEqual({
|
||||||
|
id: "test-draft-order",
|
||||||
|
object: "draft-order",
|
||||||
|
deleted: true,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -40,7 +40,7 @@ export default async (req, res) => {
|
|||||||
.allow(0)
|
.allow(0)
|
||||||
.optional(),
|
.optional(),
|
||||||
})
|
})
|
||||||
.required(),
|
.optional(),
|
||||||
metadata: Validator.object().optional(),
|
metadata: Validator.object().optional(),
|
||||||
requires_shipping: Validator.boolean().default(true),
|
requires_shipping: Validator.boolean().default(true),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
export default async (req, res) => {
|
||||||
|
const { id } = req.params
|
||||||
|
|
||||||
|
try {
|
||||||
|
const draftOrderService = req.scope.resolve("draftOrderService")
|
||||||
|
await draftOrderService.delete(id)
|
||||||
|
res.json({
|
||||||
|
id,
|
||||||
|
object: "draft-order",
|
||||||
|
deleted: true,
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,11 @@ export default app => {
|
|||||||
|
|
||||||
route.post("/:id", middlewares.wrap(require("./update-draft-order").default))
|
route.post("/:id", middlewares.wrap(require("./update-draft-order").default))
|
||||||
|
|
||||||
|
route.delete(
|
||||||
|
"/:id",
|
||||||
|
middlewares.wrap(require("./delete-draft-order").default)
|
||||||
|
)
|
||||||
|
|
||||||
route.delete(
|
route.delete(
|
||||||
"/:id/line-items/:line_id",
|
"/:id/line-items/:line_id",
|
||||||
middlewares.wrap(require("./delete-line-item").default)
|
middlewares.wrap(require("./delete-line-item").default)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export default async (req, res) => {
|
|||||||
const schema = Validator.object().keys({
|
const schema = Validator.object().keys({
|
||||||
name: Validator.string(),
|
name: Validator.string(),
|
||||||
swap_link_template: Validator.string(),
|
swap_link_template: Validator.string(),
|
||||||
|
payment_link_template: Validator.string(),
|
||||||
default_currency_code: Validator.string(),
|
default_currency_code: Validator.string(),
|
||||||
currencies: Validator.array().items(Validator.string()),
|
currencies: Validator.array().items(Validator.string()),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ export class draftOrders1613384784316 implements MigrationInterface {
|
|||||||
await queryRunner.query(`ALTER TABLE "draft_order" ADD CONSTRAINT "FK_5bd11d0e2a9628128e2c26fd0a6" FOREIGN KEY ("cart_id") REFERENCES "cart"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
await queryRunner.query(`ALTER TABLE "draft_order" ADD CONSTRAINT "FK_5bd11d0e2a9628128e2c26fd0a6" FOREIGN KEY ("cart_id") REFERENCES "cart"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||||
await queryRunner.query(`ALTER TABLE "draft_order" ADD CONSTRAINT "FK_8f6dd6c49202f1466ebf21e77da" FOREIGN KEY ("order_id") REFERENCES "order"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
await queryRunner.query(`ALTER TABLE "draft_order" ADD CONSTRAINT "FK_8f6dd6c49202f1466ebf21e77da" FOREIGN KEY ("order_id") REFERENCES "order"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||||
await queryRunner.query(`ALTER TABLE "order" ADD CONSTRAINT "FK_727b872f86c7378474a8fa46147" FOREIGN KEY ("draft_order_id") REFERENCES "draft_order"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
await queryRunner.query(`ALTER TABLE "order" ADD CONSTRAINT "FK_727b872f86c7378474a8fa46147" FOREIGN KEY ("draft_order_id") REFERENCES "draft_order"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "store" ADD "payment_link_template" character varying`);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
@@ -41,6 +42,7 @@ export class draftOrders1613384784316 implements MigrationInterface {
|
|||||||
await queryRunner.query(`DROP INDEX "IDX_e87cc617a22ef4edce5601edab"`);
|
await queryRunner.query(`DROP INDEX "IDX_e87cc617a22ef4edce5601edab"`);
|
||||||
await queryRunner.query(`DROP TABLE "draft_order"`);
|
await queryRunner.query(`DROP TABLE "draft_order"`);
|
||||||
await queryRunner.query(`DROP TYPE "draft_order_status_enum"`);
|
await queryRunner.query(`DROP TYPE "draft_order_status_enum"`);
|
||||||
|
await queryRunner.query(`ALTER TABLE "store" DROP COLUMN "payment_link_template"`);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import {MigrationInterface, QueryRunner} from "typeorm";
|
||||||
|
|
||||||
|
export class paymentLinkTemplate1613634008478 implements MigrationInterface {
|
||||||
|
name = 'paymentLinkTemplate1613634008478'
|
||||||
|
|
||||||
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "store" ADD "payment_link_template" character varying`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||||
|
await queryRunner.query(`ALTER TABLE "store" DROP COLUMN "payment_link_template"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -49,7 +49,7 @@ export class DraftOrder {
|
|||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
cart_id: string
|
cart_id: string
|
||||||
|
|
||||||
@OneToOne(() => Cart)
|
@OneToOne(() => Cart, { onDelete: "CASCADE" })
|
||||||
@JoinColumn({ name: "cart_id" })
|
@JoinColumn({ name: "cart_id" })
|
||||||
cart: Cart
|
cart: Cart
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ export class Store {
|
|||||||
@Column({ nullable: true })
|
@Column({ nullable: true })
|
||||||
swap_link_template: string
|
swap_link_template: string
|
||||||
|
|
||||||
|
@Column({ nullable: true })
|
||||||
|
payment_link_template: string
|
||||||
|
|
||||||
@CreateDateColumn({ type: "timestamptz" })
|
@CreateDateColumn({ type: "timestamptz" })
|
||||||
created_at: Date
|
created_at: Date
|
||||||
|
|
||||||
|
|||||||
@@ -229,6 +229,29 @@ class DraftOrderService extends BaseService {
|
|||||||
return draftOrder
|
return draftOrder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes draft order idempotently.
|
||||||
|
* @param {string} draftOrderId - id of draft order to delete
|
||||||
|
* @return {Promise} empty promise
|
||||||
|
*/
|
||||||
|
async delete(draftOrderId) {
|
||||||
|
return this.atomicPhase_(async manager => {
|
||||||
|
const draftOrderRepo = manager.getCustomRepository(
|
||||||
|
this.draftOrderRepository_
|
||||||
|
)
|
||||||
|
|
||||||
|
const draftOrder = await draftOrderRepo.findOne({
|
||||||
|
where: { id: draftOrderId },
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!draftOrder) return Promise.resolve()
|
||||||
|
|
||||||
|
await draftOrderRepo.remove(draftOrder)
|
||||||
|
|
||||||
|
return Promise.resolve()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
async listAndCount(
|
async listAndCount(
|
||||||
selector,
|
selector,
|
||||||
config = { skip: 0, take: 50, order: { created_at: "DESC" } }
|
config = { skip: 0, take: 50, order: { created_at: "DESC" } }
|
||||||
@@ -503,12 +526,25 @@ class DraftOrderService extends BaseService {
|
|||||||
|
|
||||||
draftOrder.status = "completed"
|
draftOrder.status = "completed"
|
||||||
draftOrder.order_id = result.id
|
draftOrder.order_id = result.id
|
||||||
console.log(draftOrder)
|
|
||||||
await draftOrderRepo.save(draftOrder)
|
await draftOrderRepo.save(draftOrder)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async registerCartCompletion(doId, orderId) {
|
||||||
|
return this.atomicPhase_(async manager => {
|
||||||
|
const draftOrderRepo = manager.getCustomRepository(
|
||||||
|
this.draftOrderRepository_
|
||||||
|
)
|
||||||
|
const draftOrder = await this.retrieve(doId)
|
||||||
|
|
||||||
|
draftOrder.status = "completed"
|
||||||
|
draftOrder.order_id = orderId
|
||||||
|
|
||||||
|
await draftOrderRepo.save(draftOrder)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default DraftOrderService
|
export default DraftOrderService
|
||||||
@@ -223,7 +223,14 @@ class PaymentProviderService extends BaseService {
|
|||||||
*/
|
*/
|
||||||
retrieveProvider(providerId) {
|
retrieveProvider(providerId) {
|
||||||
try {
|
try {
|
||||||
const provider = this.container_[`pp_${providerId}`]
|
let provider
|
||||||
|
if (providerId === "system") {
|
||||||
|
console.log(this.container_)
|
||||||
|
provider = this.container_[`systemPaymentProviderService`]
|
||||||
|
} else {
|
||||||
|
provider = this.container_[`pp_${providerId}`]
|
||||||
|
}
|
||||||
|
|
||||||
return provider
|
return provider
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new MedusaError(
|
throw new MedusaError(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ class OrderSubscriber {
|
|||||||
giftCardService,
|
giftCardService,
|
||||||
totalsService,
|
totalsService,
|
||||||
orderService,
|
orderService,
|
||||||
|
draftOrderService,
|
||||||
regionService,
|
regionService,
|
||||||
}) {
|
}) {
|
||||||
this.manager_ = manager
|
this.manager_ = manager
|
||||||
@@ -17,11 +18,15 @@ class OrderSubscriber {
|
|||||||
|
|
||||||
this.orderService_ = orderService
|
this.orderService_ = orderService
|
||||||
|
|
||||||
|
this.draftOrderService_ = draftOrderService
|
||||||
|
|
||||||
this.regionService_ = regionService
|
this.regionService_ = regionService
|
||||||
|
|
||||||
this.eventBus_ = eventBusService
|
this.eventBus_ = eventBusService
|
||||||
|
|
||||||
this.eventBus_.subscribe("order.placed", this.handleOrderPlaced)
|
this.eventBus_.subscribe("order.placed", this.handleOrderPlaced)
|
||||||
|
|
||||||
|
this.eventBus_.subscribe("order.placed", this.updateDraftOrder)
|
||||||
}
|
}
|
||||||
|
|
||||||
handleOrderPlaced = async data => {
|
handleOrderPlaced = async data => {
|
||||||
@@ -54,6 +59,21 @@ class OrderSubscriber {
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateDraftOrder = async data => {
|
||||||
|
const order = await this.orderService_.retrieve(data.id)
|
||||||
|
|
||||||
|
const draftOrder = await this.draftOrderService_.retrieveByCartId(
|
||||||
|
order.cart_id
|
||||||
|
)
|
||||||
|
|
||||||
|
if (draftOrder) {
|
||||||
|
await this.draftOrderService_.registerCartCompletion(
|
||||||
|
draftOrder.id,
|
||||||
|
order.id
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default OrderSubscriber
|
export default OrderSubscriber
|
||||||
Reference in new issue
Block a user