Category

Other

Version

0.0.1

Last updated

Jan 15, 2024, 04:00:10 AMa month ago

Installation

Install npm package with
Copy to clipboard
yarn add medusa-plugin-promotion
or
Copy to clipboard
npm i medusa-plugin-promotion
Peer dependencies are
Copy to clipboard
@medusajs/medusa
Copy to clipboard
medusa-interfaces
Copy to clipboard
typeorm

Application apply

In folder
Copy to clipboard
src/subscribers
create file
Copy to clipboard
promotions-handler.ts
to subscribe event
Copy to clipboard
CREATED
,
Copy to clipboard
UPDATED
, of cart

Step 1

Add
Copy to clipboard
InjectionDepen
interface
// src/subscribers/promotions-handler.ts
interface InjectionDepen {
//...
// Add more
eventBusService: EventBusService
promotionService: PromotionService
cartService: CartService
orderService: OrderService
cartRepository: typeof CartRepository
manager: EntityManager
}

Step 2

Create class
Copy to clipboard
PromotionHandler
and add property
class PromotionsHandler extends TransactionBaseService {
protected manager_: EntityManager
protected transactionManager_: EntityManager
cartService: CartService
eventBusService: EventBusService
promotionService: PromotionService
orderService: OrderService
cartRepository: typeof CartRepository
constructor({
manager,
eventBusService,
promotionService,
cartService,
orderService,
cartRepository,
}: InjectionDepen) {
super(arguments[0])
this.cartService = cartService
this.eventBusService = eventBusService
this.promotionService = promotionService
this.orderService = orderService
this.cartRepository = cartRepository
this.manager_ = manager
eventBusService.subscribe(CartService.Events.CREATED, async (data: Cart) => {
//Add logic handle apply promotion here
//You can call property of promotion service and use it here
//Example like : await this.promotionService.applyPromotions(cart, listPromotionAuto)
})
eventBusService.subscribe(CartService.Events.UPDATED, async (data: Cart) => {
//Add logic handle apply promotion here
//You can call property of promotion service and use it here
//Example like : await this.promotionService.applyPromotions(cart, listPromotionAuto)
})
}
}
export default PromotionsHandler

Promotion method

export class PromotionService extends TransactionBaseService {
//Create promotion
async create(data: PromotionCreateValidator) {}
//Update promotion
async update(data: PromotionUpdateValidator) {}
//Delete promotion
async delete(data: PromotionDeleteValidator) {}
//add action of promotion
async addAction(data: AddPromotionActionValidator) {}
//update action of promotion
async updateAction(data: UpdatePromotionActionValidator) {}
//delete action of promotion
async deleteAction(data: DeletePromotionActionValidator) {}
//add condition of promotion
async addCondition(data: DeletePromotionActionValidator) {}
//update condition of promotion
async updateCondition(data: UpdatePromotionConditionValidator) {}
//delete condition of promotion
async deleteCondition(data: DeletePromotionConditionValidator) {}
//set resource promotion condition
async setResource(data: SetPromotionConditionResource) {}
//resolve resource promotion condition
async resolveResource(resourceName: string, resourceId: string) {}
//retrieve promotion
async retrieve(id: string, relations: string[] = []) {}
//get list promotion of cart
async listPromotionForCart(cart: Cart) {}
//get list promotion
async list(query: ListPromotionQuery | ListPromotionQuery[]) {}
//Validate usage limit condition
hasReachedLimit(promotion: Promotion): boolean {}
//Validate start time of promotion
hasNotStarted(promotion: Promotion): boolean {}
//Validate expired of promotion
hasExpired(promotion: Promotion): boolean {}
//Validate region condition of promotion
async isValidForRegion(promotion: Promotion, region_id: string): Promise<boolean> {}
//Validate promotion is enable or disable
isDisabled(promotion: Promotion): boolean {}
//Validate promotion with setting condition
async isValidForCard(cart: Cart, promotion: Promotion): Promise<boolean> {}
//Remove all adjustment created by promotion of cart
async resetAdjustmentOfPromotionUsed(cart: Cart) {}
//Apply promotion for cart
async applyPromotions(cart: Cart, promotions: Promotion[]) {}
}

Build your own plugins

Develop your own plugins with our API to speed up your processes.

Make your plugin available via npm for it to be shared in our Plugin Library with the broader Medusa community.