0.0.1 • Published 4 months ago
@kvytech/medusa-plugin-promotion v0.0.1
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
// 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 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[]) {}
}
0.0.1
4 months ago