Installation
Install npm package with yarn add medusa-plugin-promotion or npm i medusa-plugin-promotion
Peer dependencies are @medusajs/medusa medusa-interfaces typeorm
Application apply
In folder src/subscribers create file promotions-handler.ts to subscribe event CREATED,UPDATED, of cart
Step 1
Add InjectionDepen interface
interface InjectionDepen {
eventBusService: EventBusService
promotionService: PromotionService
cartService: CartService
orderService: OrderService
cartRepository: typeof CartRepository
manager: EntityManager
}
Step 2
Create class 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) => {
})
eventBusService.subscribe(CartService.Events.UPDATED, async (data: Cart) => {
})
}
}
export default PromotionsHandler
Promotion method
export class PromotionService extends TransactionBaseService {
async create(data: PromotionCreateValidator) {}
async update(data: PromotionUpdateValidator) {}
async delete(data: PromotionDeleteValidator) {}
async addAction(data: AddPromotionActionValidator) {}
async updateAction(data: UpdatePromotionActionValidator) {}
async deleteAction(data: DeletePromotionActionValidator) {}
async addCondition(data: DeletePromotionActionValidator) {}
async updateCondition(data: UpdatePromotionConditionValidator) {}
async deleteCondition(data: DeletePromotionConditionValidator) {}
async setResource(data: SetPromotionConditionResource) {}
async resolveResource(resourceName: string, resourceId: string) {}
async retrieve(id: string, relations: string[] = []) {}
async listPromotionForCart(cart: Cart) {}
async list(query: ListPromotionQuery | ListPromotionQuery[]) {}
hasReachedLimit(promotion: Promotion): boolean {}
hasNotStarted(promotion: Promotion): boolean {}
hasExpired(promotion: Promotion): boolean {}
async isValidForRegion(promotion: Promotion, region_id: string): Promise<boolean> {}
isDisabled(promotion: Promotion): boolean {}
async isValidForCard(cart: Cart, promotion: Promotion): Promise<boolean> {}
async resetAdjustmentOfPromotionUsed(cart: Cart) {}
async applyPromotions(cart: Cart, promotions: Promotion[]) {}
}