Files
medusa-store/packages/medusa/src/models/sales-channel.ts
Frane Polić 1d7888afca feat(medusa, link-modules): sales channel <> product module link (#5450)
* feat: sales channel joiner config

* feat: product sales channel link config, SC list method

* feat: migration

* fix: refactor list SC

* refactor: SC repo api

* chore: changeset

* feat: add dedicated FF

* feat: product<> sc join entity

* fix: update case

* fix: add FF on in the repository, fix tests

* fix: assign id when FF is on

* fix: target table

* feat: product service - fetch SC with RQ

* feat: admin list products & SC with isolated product domain

* feat: get admin product

* feat: store endpoints

* fix: remove duplicate import

* fix: remove "name" prop

* feat: refactor

* fix: product seeder if FF is on

* fix: env

* refactor: workflow product handlers to handle remote links

* fix: condition

* fix: use correct method

* fix: build

* wip: update FF

* fix: update FF in the handlers

* chore: migrate to medusav2 FF

* chore: uncomment test

* fix: product factory

* fix: unlinking SC and product

* fix: use module name variable

* refactor: cleanup query definitions

* fix: add constraint

* chore: rename prop

* fix: add hook

* fix: address comments

* fix: temp sc filtering

* fix: use RQ to filter by SC

* fix: add sc to filter to list

---------

Co-authored-by: Riqwan Thamir <rmthamir@gmail.com>
2023-12-15 13:43:00 +01:00

114 lines
3.1 KiB
TypeScript

import { BeforeInsert, Column, JoinTable, ManyToMany, OneToMany } from "typeorm"
import { FeatureFlagEntity } from "../utils/feature-flag-decorators"
import { SoftDeletableEntity } from "../interfaces"
import { DbAwareColumn, generateEntityId } from "../utils"
import { SalesChannelLocation } from "./sales-channel-location"
import { Product } from "./product"
@FeatureFlagEntity("sales_channels")
export class SalesChannel extends SoftDeletableEntity {
@Column()
name: string
@Column({ type: "varchar", nullable: true })
description: string | null
@Column({ default: false })
is_disabled: boolean
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: Record<string, unknown> | null
@ManyToMany(() => Product)
@JoinTable({
name: "product_sales_channel",
inverseJoinColumn: {
name: "product_id",
referencedColumnName: "id",
},
joinColumn: {
name: "sales_channel_id",
referencedColumnName: "id",
},
})
products: Product[]
@OneToMany(
() => SalesChannelLocation,
(scLocation) => scLocation.sales_channel,
{
cascade: ["soft-remove", "remove"],
}
)
locations: SalesChannelLocation[]
/**
* @apiIgnore
*/
@BeforeInsert()
private beforeInsert(): void {
this.id = generateEntityId(this.id, "sc")
}
}
/**
* @schema SalesChannel
* title: "Sales Channel"
* description: "A Sales Channel is a method a business offers its products for purchase for the customers. For example, a Webshop can be a sales channel, and a mobile app can be another."
* type: object
* required:
* - created_at
* - deleted_at
* - description
* - id
* - is_disabled
* - name
* - updated_at
* properties:
* id:
* description: The sales channel's ID
* type: string
* example: sc_01G8X9A7ESKAJXG2H0E6F1MW7A
* name:
* description: The name of the sales channel.
* type: string
* example: Market
* description:
* description: The description of the sales channel.
* nullable: true
* type: string
* example: Multi-vendor market
* is_disabled:
* description: Specify if the sales channel is enabled or disabled.
* type: boolean
* default: false
* locations:
* description: The details of the stock locations related to the sales channel.
* type: array
* x-expandable: "locations"
* items:
* $ref: "#/components/schemas/SalesChannelLocation"
* created_at:
* description: The date with timezone at which the resource was created.
* type: string
* format: date-time
* updated_at:
* description: The date with timezone at which the resource was updated.
* type: string
* format: date-time
* deleted_at:
* description: The date with timezone at which the resource was deleted.
* nullable: true
* type: string
* format: date-time
* metadata:
* description: An optional key-value map with additional details
* nullable: true
* type: object
* example: {car: "white"}
* externalDocs:
* description: "Learn about the metadata attribute, and how to delete and update it."
* url: "https://docs.medusajs.com/development/entities/overview#metadata-attribute"
*/