From 413b2850bf00c90fc39559299f7b18bfe60e5cd5 Mon Sep 17 00:00:00 2001 From: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Date: Tue, 5 Jul 2022 14:40:10 +0200 Subject: [PATCH] feat(medusa): SC service (#1784) * add sales channel service and empty api index * add integration testing file * add tyeps * remove ts directive * add sales channel test * update import * remove unused import * fix tests --- .../api/__tests__/admin/sales-channels.js | 42 ++++++++++++ .../api/routes/admin/sales-channels/index.ts | 41 ++++++++++++ packages/medusa/src/services/sales-channel.ts | 65 +++++++++++++++++++ packages/medusa/src/types/sales-channels.ts | 7 ++ 4 files changed, 155 insertions(+) create mode 100644 integration-tests/api/__tests__/admin/sales-channels.js create mode 100644 packages/medusa/src/api/routes/admin/sales-channels/index.ts create mode 100644 packages/medusa/src/services/sales-channel.ts create mode 100644 packages/medusa/src/types/sales-channels.ts diff --git a/integration-tests/api/__tests__/admin/sales-channels.js b/integration-tests/api/__tests__/admin/sales-channels.js new file mode 100644 index 0000000000..44f849906e --- /dev/null +++ b/integration-tests/api/__tests__/admin/sales-channels.js @@ -0,0 +1,42 @@ +const path = require("path") + +const { useApi } = require("../../../helpers/use-api") +const { useDb } = require("../../../helpers/use-db") +const adminSeeder = require("../../helpers/admin-seeder") +const startServerWithEnvironment = + require("../../../helpers/start-server-with-environment").default + +jest.setTimeout(30000) + +describe("sales channels", () => { + let medusaProcess + let dbConnection + + beforeAll(async () => { + const cwd = path.resolve(path.join(__dirname, "..", "..")) + const [process, connection] = await startServerWithEnvironment({ + cwd, + env: { MEDUSA_FF_SALES_CHANNELS: true }, + }) + dbConnection = connection + medusaProcess = process + }) + + afterAll(async () => { + const db = useDb() + await db.shutdown() + + medusaProcess.kill() + }) + + describe("GET /admin/sales-channels", () => { + it("is true", () => { + // dummy test to ensure test suite passes + expect(true).toBeTruthy() + }) + }) + describe("POST /admin/sales-channels", () => {}) + describe("GET /admin/sales-channels/:id", () => {}) + describe("POST /admin/sales-channels/:id", () => {}) + describe("DELETE /admin/sales-channels/:id", () => {}) +}) diff --git a/packages/medusa/src/api/routes/admin/sales-channels/index.ts b/packages/medusa/src/api/routes/admin/sales-channels/index.ts new file mode 100644 index 0000000000..7befc43306 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/sales-channels/index.ts @@ -0,0 +1,41 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import { Router } from "express" +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" +import middlewares from "../../../middlewares" +import "reflect-metadata" +import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled" +import { SalesChannel } from "../../../../models/sales-channel" + +const route = Router() + +export default (app) => { + app.use("/sales-channels", isFeatureFlagEnabled("sales_channels"), route) + + route.get("/:id", (req, res) => {}) + + route.get("/", (req, res) => {}) + + route.post("/", (req, res) => {}) + + route.post("/:id", (req, res) => {}) + + route.delete("/:id", (req, res) => {}) + + return app +} + +export type AdminSalesChanenlRes = { + sales_channel: SalesChannel +} + +export type AdminSalesChannelDeleteRes = DeleteResponse + +export type AdminSalesChannelListRes = PaginatedResponse & { + sales_channels: SalesChannel[] +} + +// export * from './' +// export * from './' +// export * from './' +// export * from './' +// export * from './' diff --git a/packages/medusa/src/services/sales-channel.ts b/packages/medusa/src/services/sales-channel.ts new file mode 100644 index 0000000000..3f38aa7efb --- /dev/null +++ b/packages/medusa/src/services/sales-channel.ts @@ -0,0 +1,65 @@ +import { EntityManager } from "typeorm" +import { TransactionBaseService } from "../interfaces" +import { SalesChannel } from "../models/sales-channel" +import { SalesChannelRepository } from "../repositories/sales-channel" +import { FindConfig, QuerySelector } from "../types/common" +import { + CreateSalesChannelInput, + UpdateSalesChannelInput, +} from "../types/sales-channels" +import EventBusService from "./event-bus" + +type InjectedDependencies = { + salesChannelRepository: typeof SalesChannelRepository + eventBusService: EventBusService + manager: EntityManager +} + +class SalesChannelService extends TransactionBaseService { + protected manager_: EntityManager + protected transactionManager_: EntityManager | undefined + + protected readonly salesChannelRepository_: typeof SalesChannelRepository + protected readonly eventBusService_: EventBusService + + constructor({ + salesChannelRepository, + eventBusService, + manager, + }: InjectedDependencies) { + // eslint-disable-next-line prefer-rest-params + super(arguments[0]) + + this.manager_ = manager + this.salesChannelRepository_ = salesChannelRepository + this.eventBusService_ = eventBusService + } + + async retrieve(id: string): Promise { + throw new Error("Method not implemented.") + } + + async listAndCount( + selector: QuerySelector = {}, + config: FindConfig = { relations: [], skip: 0, take: 10 } + ): Promise<[SalesChannel[], number]> { + throw new Error("Method not implemented.") + } + + async create(data: CreateSalesChannelInput): Promise { + throw new Error("Method not implemented.") + } + + async update( + id: string, + data: UpdateSalesChannelInput + ): Promise { + throw new Error("Method not implemented.") + } + + async delete(id: string): Promise { + throw new Error("Method not implemented.") + } +} + +export default SalesChannelService diff --git a/packages/medusa/src/types/sales-channels.ts b/packages/medusa/src/types/sales-channels.ts new file mode 100644 index 0000000000..8f7d822b48 --- /dev/null +++ b/packages/medusa/src/types/sales-channels.ts @@ -0,0 +1,7 @@ +export type CreateSalesChannelInput = { + name: string + description?: string + is_disabled?: boolean +} + +export type UpdateSalesChannelInput = Partial