npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kvytech/medusa-plugin-promotion

v0.0.1

Published

Install npm package with `yarn add medusa-plugin-promotion` or `npm i medusa-plugin-promotion`

Downloads

5

Readme

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[]) {}

}