@lodashventure/medusa-banner 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const reorder_banners_1 = require("../../../../workflows/reorder-banners");
5
+ const POST = async (req, res) => {
6
+ const { ids } = req.body;
7
+ const { result: reorderedBanners } = await (0, reorder_banners_1.reorderBannersWorkflow)(req.scope).run({
8
+ input: {
9
+ ids,
10
+ },
11
+ });
12
+ res.json({
13
+ reorderedBanners,
14
+ });
15
+ };
16
+ exports.POST = POST;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2Jhbm5lcnMvcmVvcmRlci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSwyRUFBK0U7QUFFeEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFrRCxFQUNsRCxHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFFekIsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sSUFBQSx3Q0FBc0IsRUFDL0QsR0FBRyxDQUFDLEtBQUssQ0FDVixDQUFDLEdBQUcsQ0FBQztRQUNKLEtBQUssRUFBRTtZQUNMLEdBQUc7U0FDSjtLQUNGLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxnQkFBZ0I7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBakJXLFFBQUEsSUFBSSxRQWlCZiJ9
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = exports.POST = void 0;
4
+ exports.GET = GET;
5
+ const upload_banners_1 = require("../../../workflows/upload-banners");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const framework_1 = require("@medusajs/framework");
8
+ const banner_1 = require("../../../modules/banner");
9
+ const delete_banners_1 = require("../../../workflows/delete-banners");
10
+ const POST = async (req, res) => {
11
+ const inputFiles = req.files;
12
+ if (!inputFiles?.length) {
13
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No files were uploaded");
14
+ }
15
+ const { result: files } = await (0, upload_banners_1.uploadBannersWorkflow)(req.scope).run({
16
+ input: {
17
+ files: inputFiles?.map((f) => ({
18
+ /**
19
+ * docs: https://github.com/expressjs/multer/issues/1104#issuecomment-1152987772
20
+ */
21
+ filename: Buffer.from(f.originalname, "latin1").toString("utf-8"),
22
+ mimeType: f.mimetype,
23
+ content: f.buffer.toString("binary"),
24
+ access: "public",
25
+ })),
26
+ },
27
+ });
28
+ res.json({
29
+ files,
30
+ });
31
+ };
32
+ exports.POST = POST;
33
+ async function GET(req, res) {
34
+ const bannerService = await framework_1.container.resolve(banner_1.BANNER_MODULE);
35
+ const [banners, count] = await bannerService.listAndCountBanners({}, {
36
+ order: {
37
+ order: "DESC",
38
+ },
39
+ });
40
+ res.json({
41
+ banners,
42
+ count,
43
+ });
44
+ }
45
+ const DELETE = async (req, res) => {
46
+ const { ids } = req.body;
47
+ const { result: deletedBanners } = await (0, delete_banners_1.deleteBannersWorkflow)(req.scope).run({
48
+ input: {
49
+ ids,
50
+ },
51
+ });
52
+ res.json({
53
+ deletedBanners,
54
+ });
55
+ };
56
+ exports.DELETE = DELETE;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2Jhbm5lcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK0NBLGtCQWtCQztBQTdERCxzRUFBMEU7QUFDMUUscURBQXdEO0FBQ3hELG1EQUFnRDtBQUNoRCxvREFBd0Q7QUFDeEQsc0VBQTBFO0FBT25FLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFFN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix3QkFBd0IsQ0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBcUIsRUFBQyxHQUFHLENBQUMsS0FBWSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzFFLEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3Qjs7bUJBRUc7Z0JBQ0gsUUFBUSxFQUFHLE1BQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUMxRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUMsQ0FBQztTQUNKO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLEtBQUs7S0FDTixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUE5QlcsUUFBQSxJQUFJLFFBOEJmO0FBRUssS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBK0IsRUFDL0IsR0FBbUI7SUFFbkIsTUFBTSxhQUFhLEdBQUcsTUFBTSxxQkFBUyxDQUFDLE9BQU8sQ0FBc0Isc0JBQWEsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxhQUFhLENBQUMsbUJBQW1CLENBQzlELEVBQUUsRUFDRjtRQUNFLEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxNQUFNO1NBQ2Q7S0FDRixDQUNGLENBQUM7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTztRQUNQLEtBQUs7S0FDTixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUN6QixHQUFrRCxFQUNsRCxHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFFekIsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsc0NBQXFCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FDM0U7UUFDRSxLQUFLLEVBQUU7WUFDTCxHQUFHO1NBQ0o7S0FDRixDQUNGLENBQUM7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsY0FBYztLQUNmLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQWpCVyxRQUFBLE1BQU0sVUFpQmpCIn0=
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const http_1 = require("@medusajs/framework/http");
7
+ const multer_1 = __importDefault(require("multer"));
8
+ const upload = (0, multer_1.default)({
9
+ storage: multer_1.default.memoryStorage(),
10
+ });
11
+ exports.default = (0, http_1.defineMiddlewares)({
12
+ routes: [
13
+ /**
14
+ * docs: https://docs.medusajs.com/learn/fundamentals/api-routes/parse-body#configure-file-uploads
15
+ */
16
+ {
17
+ method: "POST",
18
+ matcher: "/admin/banners",
19
+ middlewares: [
20
+ // @ts-ignore
21
+ upload.array("files"),
22
+ ],
23
+ },
24
+ {
25
+ method: "DELETE",
26
+ matcher: "/admin/banners",
27
+ middlewares: [],
28
+ },
29
+ ],
30
+ });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBQTZEO0FBQzdELG9EQUE0QjtBQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0NBQ2hDLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047O1dBRUc7UUFDSDtZQUNFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixXQUFXLEVBQUU7Z0JBQ1gsYUFBYTtnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNGO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsUUFBUTtZQUNoQixPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFdBQVcsRUFBRSxFQUFFO1NBQ2hCO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BANNER_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.BANNER_MODULE = "banner";
10
+ exports.default = (0, utils_1.Module)(exports.BANNER_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9iYW5uZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQW1EO0FBQ25ELHdEQUE0QztBQUUvQixRQUFBLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFFdEMsa0JBQWUsSUFBQSxjQUFNLEVBQUMscUJBQWEsRUFBRTtJQUNuQyxPQUFPLEVBQUUsaUJBQW1CO0NBQzdCLENBQUMsQ0FBQyJ9
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250414061948 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250414061948 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`create table if not exists "banner" ("id" text not null, "url" text not null, "order" integer not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "banner_pkey" primary key ("id"));`);
8
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_banner_deleted_at" ON "banner" (deleted_at) WHERE deleted_at IS NULL;`);
9
+ }
10
+ async down() {
11
+ this.addSql(`drop table if exists "banner" cascade;`);
12
+ }
13
+ }
14
+ exports.Migration20250414061948 = Migration20250414061948;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA0MTQwNjE5NDguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9iYW5uZXIvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MDQxNDA2MTk0OC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsd1JBQXdSLENBQUMsQ0FBQztRQUN0UyxJQUFJLENBQUMsTUFBTSxDQUFDLHVHQUF1RyxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0NBRUY7QUFYRCwwREFXQyJ9
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const Banner = utils_1.model.define("banner", {
5
+ id: utils_1.model.id().primaryKey(),
6
+ url: utils_1.model.text(),
7
+ order: utils_1.model.number(),
8
+ });
9
+ exports.default = Banner;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvYmFubmVyL21vZGVscy9iYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBa0Q7QUFFbEQsTUFBTSxNQUFNLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7SUFDcEMsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsR0FBRyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDakIsS0FBSyxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsTUFBTSxDQUFDIn0=
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const banner_1 = __importDefault(require("./models/banner"));
8
+ class BannerModuleService extends (0, utils_1.MedusaService)({
9
+ Banner: banner_1.default,
10
+ }) {
11
+ }
12
+ exports.default = BannerModuleService;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2Jhbm5lci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQTBEO0FBQzFELDZEQUFxQztBQUVyQyxNQUFNLG1CQUFvQixTQUFRLElBQUEscUJBQWEsRUFBQztJQUM5QyxNQUFNLEVBQU4sZ0JBQU07Q0FDUCxDQUFDO0NBQUc7QUFFTCxrQkFBZSxtQkFBbUIsQ0FBQyJ9
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteBannersWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
6
+ const banner_1 = require("../modules/banner");
7
+ const deleteBannersStep = (0, workflows_sdk_1.createStep)("delete-banners", async ({ ids }, { container }) => {
8
+ const logger = container.resolve("logger");
9
+ const bannerModuleService = container.resolve(banner_1.BANNER_MODULE);
10
+ if (!ids.length) {
11
+ throw new Error("At least one banner ID is required");
12
+ }
13
+ logger.info(`Deleting ${ids.length} banners`);
14
+ await (0, core_flows_1.deleteFilesWorkflow)().run({
15
+ input: { ids: ids },
16
+ });
17
+ await bannerModuleService.deleteBanners(ids);
18
+ return new workflows_sdk_1.StepResponse(ids, ids);
19
+ });
20
+ exports.deleteBannersWorkflow = (0, workflows_sdk_1.createWorkflow)("delete-banners", (deleteInput) => {
21
+ const post = deleteBannersStep(deleteInput);
22
+ return new workflows_sdk_1.WorkflowResponse(post);
23
+ });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWJhbm5lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2RlbGV0ZS1iYW5uZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUsyQztBQUMzQyw0REFBa0U7QUFFbEUsOENBQWtEO0FBTWxELE1BQU0saUJBQWlCLEdBQUcsSUFBQSwwQkFBVSxFQUNsQyxnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUE4QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sbUJBQW1CLEdBQ3ZCLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQWEsQ0FBQyxDQUFDO0lBRW5DLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUM7SUFFOUMsTUFBTSxJQUFBLGdDQUFtQixHQUFFLENBQUMsR0FBRyxDQUFDO1FBQzlCLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7S0FDcEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFN0MsT0FBTyxJQUFJLDRCQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSxxQkFBcUIsR0FBRyxJQUFBLDhCQUFjLEVBQ2pELGdCQUFnQixFQUNoQixDQUFDLFdBQXVDLEVBQUUsRUFBRTtJQUMxQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUksZ0NBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUNGLENBQUMifQ==
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reorderBannersWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const banner_1 = require("../modules/banner");
6
+ const reorderBannersStep = (0, workflows_sdk_1.createStep)("reorder-banners", async ({ ids }, { container }) => {
7
+ const logger = container.resolve("logger");
8
+ const bannerModuleService = container.resolve(banner_1.BANNER_MODULE);
9
+ if (!ids.length) {
10
+ throw new Error("At least one banner ID is required");
11
+ }
12
+ const banners = await bannerModuleService.listBanners();
13
+ if (banners.length !== ids.length) {
14
+ throw new Error("Banner IDs and banners length does not match");
15
+ }
16
+ await bannerModuleService.updateBanners(ids.map((id, index) => ({ id, order: ids.length - index })));
17
+ return new workflows_sdk_1.StepResponse(ids, ids);
18
+ });
19
+ exports.reorderBannersWorkflow = (0, workflows_sdk_1.createWorkflow)("reorder-banners", (reorderInput) => {
20
+ const post = reorderBannersStep(reorderInput);
21
+ return new workflows_sdk_1.WorkflowResponse(post);
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVvcmRlci1iYW5uZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9yZW9yZGVyLWJhbm5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzJDO0FBQzNDLDhDQUFrRDtBQVFsRCxNQUFNLGtCQUFrQixHQUFHLElBQUEsMEJBQVUsRUFDbkMsaUJBQWlCLEVBQ2pCLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBK0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLG1CQUFtQixHQUN2QixTQUFTLENBQUMsT0FBTyxDQUFDLHNCQUFhLENBQUMsQ0FBQztJQUVuQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsQ0FBQyxhQUFhLENBQ3JDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDNUQsQ0FBQztJQUVGLE9BQU8sSUFBSSw0QkFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQ0YsQ0FBQztBQUVXLFFBQUEsc0JBQXNCLEdBQUcsSUFBQSw4QkFBYyxFQUNsRCxpQkFBaUIsRUFDakIsQ0FBQyxZQUF5QyxFQUFFLEVBQUU7SUFDNUMsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUMsT0FBTyxJQUFJLGdDQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FDRixDQUFDIn0=
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uploadBannersWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const banner_1 = require("../modules/banner");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const uploadBannersStep = (0, workflows_sdk_1.createStep)("upload-banners", async ({ files }, { container }) => {
8
+ const logger = container.resolve("logger");
9
+ const bannerModuleService = container.resolve(banner_1.BANNER_MODULE);
10
+ if (files.length === 0) {
11
+ throw new Error("at least 1 file is required");
12
+ }
13
+ logger.info(`Uploading ${files.length} banners`);
14
+ const { result } = await (0, core_flows_1.uploadFilesWorkflow)().run({
15
+ input: {
16
+ files: files.map((file) => ({
17
+ ...file,
18
+ filename: `${file.filename.replace(/ /g, "_")}`,
19
+ })),
20
+ },
21
+ });
22
+ if (result.some((file) => !file.id || !file.url)) {
23
+ throw new Error(`some files don't have an id or url`);
24
+ }
25
+ const [maxOrderBanner] = await bannerModuleService.listBanners({}, { take: 1, order: { order: "DESC" } });
26
+ const maxOrder = maxOrderBanner?.order ?? 0;
27
+ const banners = await bannerModuleService.createBanners(result.map((banner, index) => ({
28
+ id: banner.id,
29
+ url: banner.url,
30
+ order: maxOrder + index + 1,
31
+ })));
32
+ return new workflows_sdk_1.StepResponse(banners, banners);
33
+ }, async (banners, { container }) => {
34
+ const logger = container.resolve("logger");
35
+ const bannerModuleService = container.resolve(banner_1.BANNER_MODULE);
36
+ if (banners) {
37
+ // delete files
38
+ await (0, core_flows_1.deleteFilesWorkflow)().run({
39
+ input: {
40
+ ids: banners.map((banner) => banner.id),
41
+ },
42
+ });
43
+ // delete banners
44
+ await bannerModuleService.deleteBanners(banners.map((banner) => banner.id));
45
+ }
46
+ else {
47
+ logger.warn(`Banner not found`);
48
+ }
49
+ });
50
+ exports.uploadBannersWorkflow = (0, workflows_sdk_1.createWorkflow)("upload-banners", (bannerInput) => {
51
+ const post = uploadBannersStep(bannerInput);
52
+ return new workflows_sdk_1.WorkflowResponse(post);
53
+ });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWJhbm5lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3VwbG9hZC1iYW5uZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUsyQztBQUMzQyw4Q0FBa0Q7QUFFbEQsNERBSXFDO0FBTXJDLE1BQU0saUJBQWlCLEdBQUcsSUFBQSwwQkFBVSxFQUNsQyxnQkFBZ0IsRUFDaEIsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUE4QixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sbUJBQW1CLEdBQ3ZCLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQWEsQ0FBQyxDQUFDO0lBRW5DLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUMsQ0FBQztJQUVqRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLGdDQUFtQixHQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2pELEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixHQUFHLElBQUk7Z0JBQ1AsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2FBQ2hELENBQUMsQ0FBQztTQUNKO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLFdBQVcsQ0FDNUQsRUFBRSxFQUNGLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDdEMsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLGNBQWMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBRTVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDYixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7UUFDZixLQUFLLEVBQUUsUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDO0tBQzVCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFFRixPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxFQUVELEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQy9CLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxtQkFBbUIsR0FDdkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBYSxDQUFDLENBQUM7SUFFbkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLGVBQWU7UUFDZixNQUFNLElBQUEsZ0NBQW1CLEdBQUUsQ0FBQyxHQUFHLENBQUM7WUFDOUIsS0FBSyxFQUFFO2dCQUNMLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2FBQ3hDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsaUJBQWlCO1FBQ2pCLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQ25DLENBQUM7SUFDSixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUM7QUFFVyxRQUFBLHFCQUFxQixHQUFHLElBQUEsOEJBQWMsRUFDakQsZ0JBQWdCLEVBQ2hCLENBQUMsV0FBdUMsRUFBRSxFQUFFO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQ0YsQ0FBQyJ9
package/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Medusa Plugin Banner
2
+
3
+ ## How to install
4
+ 1. add the plugin to your medusa backend
5
+ ```bash
6
+ yarn add medusa-banner
7
+ ```
8
+ 2. configure your medusa backend `medusa-config.ts`
9
+ ```ts
10
+ module.exports = defineConfig({
11
+ // ... rest of the config
12
+ plugins: [
13
+ // ... rest of the plugins
14
+ {
15
+ resolve: "medusa-banner",
16
+ options: {},
17
+ },
18
+ ],
19
+ modules: [
20
+ // ... rest of the modules
21
+ {
22
+ resolve: "medusa-banner/modules/banner",
23
+ options: {},
24
+ },
25
+ ]
26
+ });
27
+ ```
28
+
29
+ 3. run the migrations in your medusa core backend
30
+ ```bash
31
+ yarn medusa db:migrate
32
+ ```
33
+
34
+ 4. all done now just start your medusa backend
35
+ `yarn dev` `yarn start` or whatever you use to start your backend
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@lodashventure/medusa-banner",
3
+ "version": "0.0.1",
4
+ "description": "A starter for Medusa plugins.",
5
+ "author": "Medusa (https://medusajs.com)",
6
+ "license": "MIT",
7
+ "files": [
8
+ ".medusa/server"
9
+ ],
10
+ "exports": {
11
+ "./package.json": "./package.json",
12
+ "./workflows": "./.medusa/server/src/workflows/index.js",
13
+ "./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
14
+ "./modules/*": "./.medusa/server/src/modules/*/index.js",
15
+ "./providers/*": "./.medusa/server/src/providers/*/index.js",
16
+ "./admin": "./.medusa/server/src/admin/index.mjs",
17
+ "./*": "./.medusa/server/src/*.js"
18
+ },
19
+ "keywords": [
20
+ "medusa",
21
+ "plugin",
22
+ "medusa-plugin-other",
23
+ "medusa-plugin",
24
+ "medusa-v2"
25
+ ],
26
+ "scripts": {
27
+ "build": "medusa plugin:build",
28
+ "dev": "medusa plugin:develop",
29
+ "prepublishOnly": "medusa plugin:build"
30
+ },
31
+ "devDependencies": {
32
+ "@medusajs/admin-sdk": "2.10.0",
33
+ "@medusajs/cli": "2.10.0",
34
+ "@medusajs/framework": "2.10.0",
35
+ "@medusajs/icons": "^2.10.0",
36
+ "@medusajs/medusa": "2.10.0",
37
+ "@medusajs/test-utils": "2.10.0",
38
+ "@medusajs/ui": "4.0.4",
39
+ "@mikro-orm/cli": "6.4.3",
40
+ "@mikro-orm/core": "6.4.3",
41
+ "@mikro-orm/knex": "6.4.3",
42
+ "@mikro-orm/migrations": "6.4.3",
43
+ "@mikro-orm/postgresql": "6.4.3",
44
+ "@swc/core": "1.5.7",
45
+ "@types/multer": "^1.4.12",
46
+ "@types/node": "^20.0.0",
47
+ "@types/react": "^18.3.2",
48
+ "@types/react-dom": "^18.2.25",
49
+ "awilix": "^8.0.1",
50
+ "pg": "^8.13.0",
51
+ "prop-types": "^15.8.1",
52
+ "react": "^18.2.0",
53
+ "react-dom": "^18.2.0",
54
+ "ts-node": "^10.9.2",
55
+ "typescript": "^5.6.2",
56
+ "vite": "^5.2.11",
57
+ "yalc": "^1.0.0-pre.53"
58
+ },
59
+ "peerDependencies": {
60
+ "@medusajs/admin-sdk": "2.10.0",
61
+ "@medusajs/cli": "2.10.0",
62
+ "@medusajs/framework": "2.10.0",
63
+ "@medusajs/icons": "^2.10.0",
64
+ "@medusajs/medusa": "2.10.0",
65
+ "@medusajs/test-utils": "2.10.0",
66
+ "@medusajs/ui": "4.0.3",
67
+ "@mikro-orm/cli": "6.4.3",
68
+ "@mikro-orm/core": "6.4.3",
69
+ "@mikro-orm/knex": "6.4.3",
70
+ "@mikro-orm/migrations": "6.4.3",
71
+ "@mikro-orm/postgresql": "6.4.3",
72
+ "@tanstack/react-query": "*",
73
+ "awilix": "^8.0.1",
74
+ "pg": "^8.13.0"
75
+ },
76
+ "engines": {
77
+ "node": ">=20"
78
+ },
79
+ "dependencies": {
80
+ "@dnd-kit/core": "^6.3.1",
81
+ "lucide-react": "^0.486.0",
82
+ "react-dropzone": "^14.3.8"
83
+ }
84
+ }