diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/index.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/index.ts__tmpl__ index 2e1dad99..41f4800c 100644 --- a/packages/stack/src/schematics/api-crud/files/data-access/src/index.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/index.ts__tmpl__ @@ -1,6 +1,11 @@ export * from './lib/dto/admin-create-<%= dasherize(modelName) %>.input' export * from './lib/dto/admin-list-<%= dasherize(modelName) %>.input' export * from './lib/dto/admin-update-<%= dasherize(modelName) %>.input' +export * from './lib/dto/user-create-<%= dasherize(modelName) %>.input' +export * from './lib/dto/user-list-<%= dasherize(modelName) %>.input' +export * from './lib/dto/user-update-<%= dasherize(modelName) %>.input' export * from './lib/models/<%= dasherize(modelName) %>.model' export * from './lib/<%= projectName %>.module' -export * from './lib/<%= projectName %>.service' +export * from './lib/<%= projectName %>-admin.service' +export * from './lib/<%= projectName %>-public.service' +export * from './lib/<%= projectName %>-user.service' diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.service.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-admin.service.ts__tmpl__ similarity index 97% rename from packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.service.ts__tmpl__ rename to packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-admin.service.ts__tmpl__ index 3a896a41..4d28b15f 100644 --- a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.service.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-admin.service.ts__tmpl__ @@ -6,7 +6,7 @@ import { AdminList<%= classify(modelName) %>Input } from './dto/admin-list-<%= d import { AdminUpdate<%= classify(modelName) %>Input } from './dto/admin-update-<%= dasherize(modelName) %>.input' @Injectable() -export class <%= classify(projectName) %>Service { +export class <%= classify(projectName) %>AdminService { constructor(private readonly data: <%= classify(apiAppName) %>CoreDataAccessService) {} admin<%= classify(pluralModelName) %>(adminId: string, input?: AdminList<%= classify(modelName) %>Input) { diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-public.service.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-public.service.ts__tmpl__ new file mode 100644 index 00000000..08a01d09 --- /dev/null +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-public.service.ts__tmpl__ @@ -0,0 +1,7 @@ +import { Injectable } from '@nestjs/common' +import { <%= classify(apiAppName) %>CoreDataAccessService } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' + +@Injectable() +export class <%= classify(projectName) %>PublicService { + constructor(private readonly data: <%= classify(apiAppName) %>CoreDataAccessService) {} +} diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-user.service.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-user.service.ts__tmpl__ new file mode 100644 index 00000000..da7a1fc1 --- /dev/null +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__-user.service.ts__tmpl__ @@ -0,0 +1,48 @@ +import { Injectable } from '@nestjs/common' +import { <%= classify(apiAppName) %>CoreDataAccessService, CorePaging, CorePagingInput } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' + +import { UserCreate<%= classify(modelName) %>Input } from './dto/user-create-<%= dasherize(modelName) %>.input' +import { UserList<%= classify(modelName) %>Input } from './dto/user-list-<%= dasherize(modelName) %>.input' +import { UserUpdate<%= classify(modelName) %>Input } from './dto/user-update-<%= dasherize(modelName) %>.input' + +@Injectable() +export class <%= classify(projectName) %>UserService { + constructor(private readonly data: <%= classify(apiAppName) %>CoreDataAccessService) {} + + user<%= classify(pluralModelName) %>(userId: string, input?: UserList<%= classify(modelName) %>Input) { + return this.data.<%= camelize(modelName) %>.findMany({ + take: input?.limit, + skip: input?.skip, + }) + } + + async userCount<%= classify(pluralModelName) %>(userId: string, input?: UserList<%= classify(modelName) %>Input): Promise { + const total = await this.data.<%= camelize(modelName) %>.count() + return { + limit: input?.limit, + skip: input?.skip, + total, + } + } + + user<%= classify(modelName) %>(userId: string, <%= camelize(modelName) %>Id) { + return this.data.<%= camelize(modelName) %>.findUnique({ where: { id: <%= camelize(modelName) %>Id } }) + } + + userCreate<%= classify(modelName) %>(userId: string, input: UserCreate<%= classify(modelName) %>Input) { + return this.data.<%= camelize(modelName) %>.create({ + data: { <%= nameField %>: input.<%= nameField %> }, + }) + } + + userUpdate<%= classify(modelName) %>(userId: string, <%= camelize(modelName) %>Id, input: UserUpdate<%= classify(modelName) %>Input) { + return this.data.<%= camelize(modelName) %>.update({ + where: { id: <%= camelize(modelName) %>Id }, + data: { <%= nameField %>: input.<%= nameField %> }, + }) + } + + userDelete<%= classify(modelName) %>(userId: string, <%= camelize(modelName) %>Id) { + return this.data.<%= camelize(modelName) %>.delete({ where: { id: <%= camelize(modelName) %>Id } }) + } +} diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.module.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.module.ts__tmpl__ index 813e7571..a55060c9 100644 --- a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.module.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/__projectName__.module.ts__tmpl__ @@ -1,11 +1,13 @@ import { Module } from '@nestjs/common' import { <%= classify(apiAppName) %>CoreDataAccessModule } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' -import { <%= classify(projectName) %>Service } from './<%= projectName %>.service' +import { <%= classify(projectName) %>AdminService } from './<%= projectName %>-admin.service' +import { <%= classify(projectName) %>PublicService } from './<%= projectName %>-public.service' +import { <%= classify(projectName) %>UserService } from './<%= projectName %>-user.service' @Module({ imports: [<%= classify(apiAppName) %>CoreDataAccessModule], - providers: [<%= classify(projectName) %>Service], - exports: [<%= classify(projectName) %>Service], + providers: [<%= classify(projectName) %>AdminService, <%= classify(projectName) %>PublicService, <%= classify(projectName) %>UserService], + exports: [<%= classify(projectName) %>AdminService, <%= classify(projectName) %>PublicService, <%= classify(projectName) %>UserService], }) export class <%= classify(projectName) %>Module {} diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-create-__modelName__.input.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-create-__modelName__.input.ts__tmpl__ new file mode 100644 index 00000000..e62c1c61 --- /dev/null +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-create-__modelName__.input.ts__tmpl__ @@ -0,0 +1,8 @@ +import { Field, InputType } from '@nestjs/graphql' + +@InputType() +export class UserCreate<%= classify(modelName) %>Input { + @Field() + <%= nameField %>: string +} + diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-list-__modelName__.input.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-list-__modelName__.input.ts__tmpl__ new file mode 100644 index 00000000..2899f608 --- /dev/null +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-list-__modelName__.input.ts__tmpl__ @@ -0,0 +1,9 @@ +import { Field, InputType } from '@nestjs/graphql' +import { CorePagingInput } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' + +@InputType() +export class UserList<%= classify(modelName) %>Input extends CorePagingInput { + @Field({ nullable: true }) + <%= nameField %>?: string +} + diff --git a/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-update-__modelName__.input.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-update-__modelName__.input.ts__tmpl__ new file mode 100644 index 00000000..38ffc8bc --- /dev/null +++ b/packages/stack/src/schematics/api-crud/files/data-access/src/lib/dto/user-update-__modelName__.input.ts__tmpl__ @@ -0,0 +1,8 @@ +import { Field, InputType } from '@nestjs/graphql' + +@InputType() +export class UserUpdate<%= classify(modelName) %>Input { + @Field({ nullable: true }) + <%= nameField %>?: string +} + diff --git a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-admin.resolver.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-admin.resolver.ts__tmpl__ index def5deee..3d53b4c5 100644 --- a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-admin.resolver.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-admin.resolver.ts__tmpl__ @@ -4,7 +4,7 @@ import { AdminCreate<%= classify(modelName) %>Input, AdminList<%= classify(modelName) %>Input, AdminUpdate<%= classify(modelName) %>Input, - <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService, + <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessAdminService, <%= classify(modelName) %>, } from '@<%= npmScope %>/<%= apiAppName %>/<%= dasherize(modelName) %>/data-access' import { CorePaging } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' @@ -17,7 +17,7 @@ import { User } from '@<%= npmScope %>/<%= apiAppName %>/user/data-access' @Resolver() @UseGuards(GqlAuthAdminGuard) export class <%= classify(projectName) %>AdminResolver { - constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService) {} + constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessAdminService) {} @Query(() => [<%= classify(modelName) %>], { nullable: true }) admin<%= classify(pluralModelName) %>( diff --git a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-public.resolver.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-public.resolver.ts__tmpl__ index 9397ccdb..9431cc36 100644 --- a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-public.resolver.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-public.resolver.ts__tmpl__ @@ -1,7 +1,7 @@ import { Resolver } from '@nestjs/graphql' -import { <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService, <%= classify(modelName) %> } from '@<%= npmScope %>/<%= apiAppName %>/<%= dasherize(modelName) %>/data-access' +import { <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessPublicService, <%= classify(modelName) %> } from '@<%= npmScope %>/<%= apiAppName %>/<%= dasherize(modelName) %>/data-access' @Resolver(() => <%= classify(modelName) %>) export class <%= classify(projectName) %>PublicResolver { - constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService) {} + constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessPublicService) {} } diff --git a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-user.resolver.ts__tmpl__ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-user.resolver.ts__tmpl__ index 912cbc5f..c78de512 100644 --- a/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-user.resolver.ts__tmpl__ +++ b/packages/stack/src/schematics/api-crud/files/feature/src/lib/__projectName__-user.resolver.ts__tmpl__ @@ -1,10 +1,61 @@ +import { Args, Mutation, Query, Resolver } from '@nestjs/graphql' import { UseGuards } from '@nestjs/common' -import { Resolver } from '@nestjs/graphql' -import { <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService } from '@<%= npmScope %>/<%= apiAppName %>/<%= dasherize(modelName) %>/data-access' -import { GqlAuthGuard } from '@<%= npmScope %>/<%= apiAppName %>/auth/util' +import { + UserCreate<%= classify(modelName) %>Input, + UserList<%= classify(modelName) %>Input, + UserUpdate<%= classify(modelName) %>Input, + <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessUserService, + <%= classify(modelName) %>, +} from '@<%= npmScope %>/<%= apiAppName %>/<%= dasherize(modelName) %>/data-access' +import { CorePaging } from '@<%= npmScope %>/<%= apiAppName %>/core/data-access' +import { + CtxUser, + GqlAuthGuard, +} from '@<%= npmScope %>/<%= apiAppName %>/auth/util' +import { User } from '@<%= npmScope %>/<%= apiAppName %>/user/data-access' @Resolver() @UseGuards(GqlAuthGuard) export class <%= classify(projectName) %>UserResolver { - constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessService) {} + constructor(private readonly service: <%= classify(apiAppName) %><%= classify(modelName) %>DataAccessUserService) {} + + @Query(() => [<%= classify(modelName) %>], { nullable: true }) + user<%= classify(pluralModelName) %>( + @CtxUser() user: User, + @Args({ name: 'input', type: () => UserList<%= classify(modelName) %>Input, nullable: true }) input?: UserList<%= classify(modelName) %>Input, + ) { + return this.service.user<%= classify(pluralModelName) %>(user.id, input) + } + + @Query(() => CorePaging, { nullable: true }) + userCount<%= classify(pluralModelName) %>( + @CtxUser() user: User, + @Args({ name: 'input', type: () => UserList<%= classify(modelName) %>Input, nullable: true }) input?: UserList<%= classify(modelName) %>Input, + ) { + return this.service.userCount<%= classify(pluralModelName) %>(user.id, input) + } + + @Query(() => <%= classify(modelName) %>, { nullable: true }) + user<%= classify(modelName) %>(@CtxUser() user: User, @Args('<%= camelize(modelName) %>Id') <%= camelize(modelName) %>Id: string) { + return this.service.user<%= classify(modelName) %>(user.id, <%= camelize(modelName) %>Id) + } + + @Mutation(() => <%= classify(modelName) %>, { nullable: true }) + userCreate<%= classify(modelName) %>(@CtxUser() user: User,@Args('input') input: UserCreate<%= classify(modelName) %>Input,) { + return this.service.userCreate<%= classify(modelName) %>(user.id, input) + } + + @Mutation(() => <%= classify(modelName) %>, { nullable: true }) + userUpdate<%= classify(modelName) %>( + @CtxUser() user: User, + @Args('<%= camelize(modelName) %>Id') <%= camelize(modelName) %>Id: string, + @Args('input') input: UserUpdate<%= classify(modelName) %>Input, + ) { + return this.service.userUpdate<%= classify(modelName) %>(user.id, <%= camelize(modelName) %>Id, input) + } + + @Mutation(() => <%= classify(modelName) %>, { nullable: true }) + userDelete<%= classify(modelName) %>(@CtxUser() user: User, @Args('<%= camelize(modelName) %>Id') <%= camelize(modelName) %>Id: string) { + return this.service.userDelete<%= classify(modelName) %>(user.id, <%= camelize(modelName) %>Id) + } } diff --git a/packages/stack/src/schematics/web-crud/files/sdk/src/graphql/feature-__modelName__.graphql__tmpl__ b/packages/stack/src/schematics/web-crud/files/sdk/src/graphql/feature-__modelName__.graphql__tmpl__ index 7cffaf30..4778652e 100644 --- a/packages/stack/src/schematics/web-crud/files/sdk/src/graphql/feature-__modelName__.graphql__tmpl__ +++ b/packages/stack/src/schematics/web-crud/files/sdk/src/graphql/feature-__modelName__.graphql__tmpl__ @@ -43,3 +43,42 @@ mutation AdminDelete<%= classify(modelName) %>($<%= camelize(modelName) %>Id: St ...<%= classify(modelName) %>Details } } + +query User<%= classify(pluralModelName) %>($input: UserList<%= classify(modelName) %>Input) { + items: user<%= classify(pluralModelName) %>(input: $input) { + ...<%= classify(modelName) %>Details + } + count: userCount<%= classify(pluralModelName) %>(input: $input) { + ...CorePagingDetails + } +} + +query UserCount<%= classify(pluralModelName) %>($input: UserList<%= classify(modelName) %>Input) { + count: userCount<%= classify(pluralModelName) %>(input: $input) { + ...CorePagingDetails + } +} + +query User<%= classify(modelName) %>($<%= camelize(modelName) %>Id: String!) { + item: user<%= classify(modelName) %>(<%= camelize(modelName) %>Id: $<%= camelize(modelName) %>Id) { + ...<%= classify(modelName) %>Details + } +} + +mutation UserCreate<%= classify(modelName) %>($input: UserCreate<%= classify(modelName) %>Input!) { + created: userCreate<%= classify(modelName) %>(input: $input) { + ...<%= classify(modelName) %>Details + } +} + +mutation UserUpdate<%= classify(modelName) %>($<%= camelize(modelName) %>Id: String!, $input: UserUpdate<%= classify(modelName) %>Input!) { + updated: userUpdate<%= classify(modelName) %>(<%= camelize(modelName) %>Id: $<%= camelize(modelName) %>Id, input: $input) { + ...<%= classify(modelName) %>Details + } +} + +mutation UserDelete<%= classify(modelName) %>($<%= camelize(modelName) %>Id: String!) { + deleted: userDelete<%= classify(modelName) %>(<%= camelize(modelName) %>Id: $<%= camelize(modelName) %>Id) { + ...<%= classify(modelName) %>Details + } +}