* 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>
114 lines
3.1 KiB
TypeScript
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"
|
|
*/
|