From 75ee747ab8aa7b3fa551052559c0d6c1704aee3e Mon Sep 17 00:00:00 2001 From: Johannes Obermair Date: Mon, 18 Dec 2023 14:14:34 +0100 Subject: [PATCH 1/2] Add fixtures for public uploads to Demo Showcase how public upload fixtures (e.g., for uploaded profile pictures) could be implemented in an application. --- demo/api/src/db/fixtures/fixtures.console.ts | 6 +++++ demo/api/src/db/fixtures/fixtures.module.ts | 4 +++- .../public-uploads-fixture.service.ts | 22 +++++++++++++++++++ packages/api/cms-api/src/index.ts | 1 + 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 demo/api/src/db/fixtures/generators/public-uploads-fixture.service.ts diff --git a/demo/api/src/db/fixtures/fixtures.console.ts b/demo/api/src/db/fixtures/fixtures.console.ts index da6f567a1f..667c0f56e9 100644 --- a/demo/api/src/db/fixtures/fixtures.console.ts +++ b/demo/api/src/db/fixtures/fixtures.console.ts @@ -25,6 +25,7 @@ import slugify from "slugify"; import { generateLinks } from "./generators/links.generator"; import { ManyImagesTestPageGenerator } from "./generators/many-images-test-page.generator"; +import { PublicUploadsFixtureService } from "./generators/public-uploads-fixture.service"; export interface PageTreeNodesFixtures { home?: PageTreeNodeInterface; @@ -54,6 +55,7 @@ export class FixturesConsole { private readonly orm: MikroORM, @InjectRepository(Page) private readonly pagesRepository: EntityRepository, @InjectRepository(Link) private readonly linksRepository: EntityRepository, + private readonly publicUploadsFixtureService: PublicUploadsFixtureService, ) {} @Command({ @@ -261,5 +263,9 @@ export class FixturesConsole { } console.log(`Generated ${pagesCount} lorem ipsum pages for ${domain}`); } + + await this.publicUploadsFixtureService.generatePublicUploads(); + + await this.orm.em.flush(); } } diff --git a/demo/api/src/db/fixtures/fixtures.module.ts b/demo/api/src/db/fixtures/fixtures.module.ts index d792c4412f..4eb2038882 100644 --- a/demo/api/src/db/fixtures/fixtures.module.ts +++ b/demo/api/src/db/fixtures/fixtures.module.ts @@ -5,8 +5,10 @@ import { LinksModule } from "@src/links/links.module"; import { PagesModule } from "@src/pages/pages.module"; import { ConsoleModule } from "nestjs-console"; +import { PublicUploadsFixtureService } from "./generators/public-uploads-fixture.service"; + @Module({ imports: [ConfigModule, ConsoleModule, PagesModule, LinksModule], - providers: [FixturesConsole], + providers: [FixturesConsole, PublicUploadsFixtureService], }) export class FixturesModule {} diff --git a/demo/api/src/db/fixtures/generators/public-uploads-fixture.service.ts b/demo/api/src/db/fixtures/generators/public-uploads-fixture.service.ts new file mode 100644 index 0000000000..17c75f7e1f --- /dev/null +++ b/demo/api/src/db/fixtures/generators/public-uploads-fixture.service.ts @@ -0,0 +1,22 @@ +import { download, PublicUpload, PublicUploadsService } from "@comet/cms-api"; +import { Injectable } from "@nestjs/common"; +import path from "path"; + +@Injectable() +export class PublicUploadsFixtureService { + constructor(private readonly publicUploadsService: PublicUploadsService) {} + + async generatePublicUploads(): Promise { + console.log("Generating public uploads..."); + + const images = ["01.jpg", "02.jpg", "03.jpg", "04.jpg", "05.jpg"]; + const publicUploads: PublicUpload[] = []; + + for (const image of images) { + const file = await download(path.resolve(`./src/db/fixtures/generators/images/${image}`)); + publicUploads.push(await this.publicUploadsService.upload(file)); + } + + return publicUploads; + } +} diff --git a/packages/api/cms-api/src/index.ts b/packages/api/cms-api/src/index.ts index e896afb9bf..c4bf0415b0 100644 --- a/packages/api/cms-api/src/index.ts +++ b/packages/api/cms-api/src/index.ts @@ -139,6 +139,7 @@ export { PageTreeNodeCategory, PageTreeNodeInterface, PageTreeNodeVisibility, Sc export { PageExists, PageExistsConstraint } from "./page-tree/validators/page-exists.validator"; export { PublicUpload } from "./public-upload/entities/public-upload.entity"; export { PublicUploadModule } from "./public-upload/public-upload.module"; +export { PublicUploadsService } from "./public-upload/public-uploads.service"; export { RedirectGenerationType, RedirectSourceTypeValues } from "./redirects/redirects.enum"; export { RedirectsModule } from "./redirects/redirects.module"; export { createRedirectsResolver } from "./redirects/redirects.resolver"; From 2e5c0886f5c49d2b2dc4c33a34e534a31f6a5c65 Mon Sep 17 00:00:00 2001 From: Johannes Obermair Date: Tue, 19 Dec 2023 09:16:37 +0100 Subject: [PATCH 2/2] Add changeset --- .changeset/eighty-tools-fail.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/eighty-tools-fail.md diff --git a/.changeset/eighty-tools-fail.md b/.changeset/eighty-tools-fail.md new file mode 100644 index 0000000000..d2d04fdd21 --- /dev/null +++ b/.changeset/eighty-tools-fail.md @@ -0,0 +1,7 @@ +--- +"@comet/cms-api": minor +--- + +Add `PublicUploadsService` to public API + +The service can be used to programmatically create public uploads, such as when creating fixtures.