Skip to content

Commit

Permalink
Merge pull request #8377 from amplication/amplication-amplication-plu…
Browse files Browse the repository at this point in the history
…gin-api

feat(plugin-api): add generator name configuration to plugin
  • Loading branch information
overbit committed May 10, 2024
2 parents 1f5d5fe + e84dabd commit 56369fe
Show file tree
Hide file tree
Showing 13 changed files with 125 additions and 381 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,5 @@ src/schema.graphql

**/prisma/migrations/dev/
.nx

schema.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Plugin" ADD COLUMN "codeGeneratorName" TEXT NOT NULL DEFAULT 'data-service-generator';
27 changes: 14 additions & 13 deletions packages/amplication-plugin-api/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,20 @@ generator client {
}

model Plugin {
createdAt DateTime @default(now())
description String?
downloads Int?
github String?
icon String?
id String @id @default(cuid())
name String?
npm String?
pluginId String? @unique
taggedVersions Json?
categories Json? @default("[]")
updatedAt DateTime @updatedAt
website String?
categories Json? @default("[]")
codeGeneratorName String @default("data-service-generator")
createdAt DateTime @default(now())
description String?
downloads Int?
github String?
icon String?
id String @id @default(cuid())
name String?
npm String?
pluginId String? @unique
taggedVersions Json?
updatedAt DateTime @updatedAt
website String?
}

model PluginVersion {
Expand Down
10 changes: 9 additions & 1 deletion packages/amplication-plugin-api/src/plugin/base/Plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,21 @@ https://docs.amplication.com/how-to/custom-code
import { ObjectType, Field, Int } from "@nestjs/graphql";
import { ApiProperty } from "@nestjs/swagger";
import { IsJSONValue } from "@app/custom-validators";
import { IsOptional, IsDate, IsString, IsInt } from "class-validator";
import { IsOptional, IsString, IsDate, IsInt } from "class-validator";
import { GraphQLJSON } from "graphql-type-json";
import type { JsonValue } from "type-fest";
import { Type } from "class-transformer";

@ObjectType()
class Plugin {
@ApiProperty({
required: true,
type: String,
})
@IsString()
@Field(() => String)
codeGeneratorName!: string;

@ApiProperty({
required: true,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,24 @@ import { InputJsonValue } from "../../types";

@InputType()
class PluginCreateInput {
@ApiProperty({
required: false,
})
@IsJSONValue()
@IsOptional()
@Field(() => GraphQLJSON, {
nullable: true,
})
categories?: InputJsonValue;

@ApiProperty({
required: true,
type: String,
})
@IsString()
@Field(() => String)
codeGeneratorName!: string;

@ApiProperty({
required: false,
type: String,
Expand Down Expand Up @@ -115,13 +133,6 @@ class PluginCreateInput {
nullable: true,
})
website?: string | null;

@ApiProperty({
required: true,
})
@IsJSONValue()
@Field(() => GraphQLJSON)
categories!: InputJsonValue;
}

export { PluginCreateInput as PluginCreateInput };
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,28 @@ import { SortOrder } from "../../util/SortOrder";
description: undefined,
})
class PluginOrderByInput {
@ApiProperty({
required: false,
enum: ["asc", "desc"],
})
@IsOptional()
@IsEnum(SortOrder)
@Field(() => SortOrder, {
nullable: true,
})
categories?: SortOrder;

@ApiProperty({
required: false,
enum: ["asc", "desc"],
})
@IsOptional()
@IsEnum(SortOrder)
@Field(() => SortOrder, {
nullable: true,
})
codeGeneratorName?: SortOrder;

@ApiProperty({
required: false,
enum: ["asc", "desc"],
Expand Down Expand Up @@ -150,14 +172,6 @@ class PluginOrderByInput {
nullable: true,
})
website?: SortOrder;

@ApiProperty({
required: true,
enum: ["asc", "desc"],
})
@IsEnum(SortOrder)
@Field(() => SortOrder)
categories?: SortOrder;
}

export { PluginOrderByInput as PluginOrderByInput };
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@ import { InputJsonValue } from "../../types";

@InputType()
class PluginUpdateInput {
@ApiProperty({
required: false,
type: String,
})
@IsString()
@IsOptional()
@Field(() => String, {
nullable: true,
})
codeGeneratorName?: string;

@ApiProperty({
required: false,
type: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,34 @@ import { ApiProperty } from "@nestjs/swagger";
import { JsonFilter } from "../../util/JsonFilter";
import { Type } from "class-transformer";
import { IsOptional } from "class-validator";
import { StringFilter } from "../../util/StringFilter";
import { StringNullableFilter } from "../../util/StringNullableFilter";
import { IntNullableFilter } from "../../util/IntNullableFilter";
import { StringFilter } from "../../util/StringFilter";

@InputType()
class PluginWhereInput {
@ApiProperty({
required: false,
type: JsonFilter,
})
@Type(() => JsonFilter)
@IsOptional()
@Field(() => JsonFilter, {
nullable: true,
})
categories?: JsonFilter;

@ApiProperty({
required: false,
type: StringFilter,
})
@Type(() => StringFilter)
@IsOptional()
@Field(() => StringFilter, {
nullable: true,
})
codeGeneratorName?: StringFilter;

@ApiProperty({
required: false,
type: StringNullableFilter,
Expand Down Expand Up @@ -129,14 +151,6 @@ class PluginWhereInput {
nullable: true,
})
website?: StringNullableFilter;

@ApiProperty({
required: true,
type: JsonFilter,
})
@Type(() => JsonFilter)
@Field(() => JsonFilter)
categories?: JsonFilter;
}

export { PluginWhereInput as PluginWhereInput };
29 changes: 15 additions & 14 deletions packages/amplication-plugin-api/src/plugin/github-plugin.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
NpmTags,
PluginData,
PluginList,
PluginYml,
PluginCatalogEntryYml,
} from "./plugin.types";
import { AMPLICATION_GITHUB_URL, emptyPlugin } from "./plugin.constants";
import { AmplicationLogger } from "@amplication/util/nestjs/logging";
Expand Down Expand Up @@ -106,7 +106,7 @@ export class GitPluginService {

const pluginConfig = await response.text();

const fileYml: PluginYml = yaml.load(pluginConfig) as PluginYml;
const fileYml = yaml.load(pluginConfig) as PluginCatalogEntryYml;

const pluginId = pluginList[index]["name"].replace(".yml", "");

Expand All @@ -115,7 +115,7 @@ export class GitPluginService {
++index;

yield {
plugin: {
pluginCatalogEntry: {
...fileYml,
pluginId,
},
Expand Down Expand Up @@ -150,23 +150,24 @@ export class GitPluginService {
const pluginsArr: Plugin[] = [];

for await (const pluginConfig of this.getPluginConfig(pluginCatalog)) {
if (!(pluginConfig as PluginData).plugin.pluginId) continue;
if (!(pluginConfig as PluginData).pluginCatalogEntry.pluginId) continue;

const { npm, plugin, downloads } = pluginConfig;
const { npm, pluginCatalogEntry, downloads } = pluginConfig;
pluginsArr.push({
id: "",
id: undefined,
createdAt: npm.time ? new Date(npm.time.created) : new Date(),
description: plugin.description,
github: plugin.github,
icon: plugin.icon,
name: plugin.name,
npm: plugin.npm,
pluginId: plugin.pluginId,
description: pluginCatalogEntry.description,
github: pluginCatalogEntry.github,
icon: pluginCatalogEntry.icon,
name: pluginCatalogEntry.name,
npm: pluginCatalogEntry.npm,
pluginId: pluginCatalogEntry.pluginId,
taggedVersions: npm["dist-tags"],
website: plugin.website,
website: pluginCatalogEntry.website,
updatedAt: npm.time ? new Date(npm.time.modified) : new Date(),
downloads: downloads,
categories: plugin.categories,
categories: pluginCatalogEntry.categories,
codeGeneratorName: pluginCatalogEntry.generator,
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export const AMPLICATION_GITHUB_URL =
export const NPM_DOWNLOADS_API = "https://api.npmjs.org/downloads/point/";

export const emptyPlugin: PluginData = {
plugin: {
pluginCatalogEntry: {
id: "",
name: "",
description: "",
Expand All @@ -20,6 +20,7 @@ export const emptyPlugin: PluginData = {
categories: "[]",
resourceTypes: "",
pluginId: "",
generator: "",
},
npm: {
"dist-tags": {},
Expand Down
24 changes: 4 additions & 20 deletions packages/amplication-plugin-api/src/plugin/plugin.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,6 @@ interface PluginsDataObj {
};
}

const setPluginData = (plugin) => ({
description: plugin.description,
github: plugin.github,
icon: plugin.icon,
name: plugin.name,
npm: plugin.npm,
website: plugin.website,
taggedVersions: plugin.taggedVersions,
pluginId: plugin.pluginId,
createdAt: plugin.createdAt,
updatedAt: plugin.updatedAt,
categories: plugin.categories,
downloads: plugin.downloads,
});

@Injectable()
export class PluginService extends PluginServiceBase {
constructor(
Expand All @@ -58,16 +43,15 @@ export class PluginService extends PluginServiceBase {
throw pluginsList;
}

const pluginsAndCategories = pluginsList.reduce(
(pluginsDataObj: PluginsDataObj, plugin: PluginCreateInput) => {
const pluginData = setPluginData(plugin);
const pluginsAndCategories: PluginsDataObj = pluginsList.reduce(
(pluginsDataObj: PluginsDataObj, plugin: Plugin) => {
pluginsDataObj.pluginsData.push(plugin);

pluginsDataObj.pluginsData.push(pluginData);
const pluginUpdate = this.prisma.plugin.update({
where: {
pluginId: plugin.pluginId,
},
data: pluginData,
data: plugin,
});
pluginsDataObj.pluginUpdate.push(pluginUpdate);

Expand Down
5 changes: 3 additions & 2 deletions packages/amplication-plugin-api/src/plugin/plugin.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ export interface NpmDownloads {
}

export interface PluginData {
plugin: PluginYml;
pluginCatalogEntry: PluginCatalogEntryYml;
npm: NpmTags;
downloads: number;
}

export interface PluginYml {
export interface PluginCatalogEntryYml {
id: string;
name: string;
description: string;
Expand All @@ -30,6 +30,7 @@ export interface PluginYml {
categories: string;
resourceTypes: string;
pluginId?: string;
generator: string;
}

export interface PluginList {
Expand Down

0 comments on commit 56369fe

Please sign in to comment.