diff --git a/admin-ui/package-lock.json b/admin-ui/package-lock.json
index 9457d6a..ad5e073 100644
--- a/admin-ui/package-lock.json
+++ b/admin-ui/package-lock.json
@@ -1,10 +1,10 @@
{
- "name": "my-app-45-admin",
+ "name": "my-app-75-admin",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "name": "my-app-45-admin",
+ "name": "my-app-75-admin",
"dependencies": {
"@apollo/client": "^3.3.18",
"@material-ui/core": "^4.11.4",
diff --git a/admin-ui/package.json b/admin-ui/package.json
index 5ecaa81..43f0804 100644
--- a/admin-ui/package.json
+++ b/admin-ui/package.json
@@ -1,5 +1,5 @@
{
- "name": "my-app-45-admin",
+ "name": "my-app-75-admin",
"private": true,
"dependencies": {
"@apollo/client": "^3.3.18",
diff --git a/admin-ui/public/index.html b/admin-ui/public/index.html
index 896a28f..2712554 100644
--- a/admin-ui/public/index.html
+++ b/admin-ui/public/index.html
@@ -21,7 +21,7 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
-
My app-45
+ My app-75
diff --git a/admin-ui/public/manifest.json b/admin-ui/public/manifest.json
index 9f673bd..cdb3465 100644
--- a/admin-ui/public/manifest.json
+++ b/admin-ui/public/manifest.json
@@ -1,6 +1,6 @@
{
- "short_name": "My app-45",
- "name": "My app-45",
+ "short_name": "My app-75",
+ "name": "My app-75",
"icons": [
{
"src": "favicon.ico",
diff --git a/admin-ui/src/App.tsx b/admin-ui/src/App.tsx
index f7a147e..9734697 100644
--- a/admin-ui/src/App.tsx
+++ b/admin-ui/src/App.tsx
@@ -10,14 +10,10 @@ import { UserList } from "./user/UserList";
import { UserCreate } from "./user/UserCreate";
import { UserEdit } from "./user/UserEdit";
import { UserShow } from "./user/UserShow";
-import { CategoryList } from "./category/CategoryList";
-import { CategoryCreate } from "./category/CategoryCreate";
-import { CategoryEdit } from "./category/CategoryEdit";
-import { CategoryShow } from "./category/CategoryShow";
-import { ProductList } from "./product/ProductList";
-import { ProductCreate } from "./product/ProductCreate";
-import { ProductEdit } from "./product/ProductEdit";
-import { ProductShow } from "./product/ProductShow";
+import { SdfdsfList } from "./sdfdsf/SdfdsfList";
+import { SdfdsfCreate } from "./sdfdsf/SdfdsfCreate";
+import { SdfdsfEdit } from "./sdfdsf/SdfdsfEdit";
+import { SdfdsfShow } from "./sdfdsf/SdfdsfShow";
const App = (): React.ReactElement => {
const [dataProvider, setDataProvider] = useState(null);
@@ -36,7 +32,7 @@ const App = (): React.ReactElement => {
return (
diff --git a/admin-ui/src/Login.tsx b/admin-ui/src/Login.tsx
index 05025cf..5d2a002 100644
--- a/admin-ui/src/Login.tsx
+++ b/admin-ui/src/Login.tsx
@@ -29,7 +29,7 @@ const Login = ({ theme }: { theme?: object }) => {
src="https://amplication.com/assets/graphql.png"
alt="GraphQL API"
/>
- Connect via GrpahQL
+ Connect via GraphQL
Connect to the server using GraphQL API with a complete and
understandable description of the data in your API
diff --git a/admin-ui/src/api/sdfdsf/DeleteSdfdsfArgs.ts b/admin-ui/src/api/sdfdsf/DeleteSdfdsfArgs.ts
new file mode 100644
index 0000000..5f8be0f
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/DeleteSdfdsfArgs.ts
@@ -0,0 +1,5 @@
+import { SdfdsfWhereUniqueInput } from "./SdfdsfWhereUniqueInput";
+
+export type DeleteSdfdsfArgs = {
+ where: SdfdsfWhereUniqueInput;
+};
diff --git a/admin-ui/src/api/sdfdsf/Sdfdsf.ts b/admin-ui/src/api/sdfdsf/Sdfdsf.ts
new file mode 100644
index 0000000..c42738d
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/Sdfdsf.ts
@@ -0,0 +1,5 @@
+export type Sdfdsf = {
+ createdAt: Date;
+ id: string;
+ updatedAt: Date;
+};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfCreateInput.ts b/admin-ui/src/api/sdfdsf/SdfdsfCreateInput.ts
new file mode 100644
index 0000000..b452615
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfCreateInput.ts
@@ -0,0 +1 @@
+export type SdfdsfCreateInput = {};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfFindManyArgs.ts b/admin-ui/src/api/sdfdsf/SdfdsfFindManyArgs.ts
new file mode 100644
index 0000000..75ebab0
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfFindManyArgs.ts
@@ -0,0 +1,9 @@
+import { SdfdsfWhereInput } from "./SdfdsfWhereInput";
+import { SdfdsfOrderByInput } from "./SdfdsfOrderByInput";
+
+export type SdfdsfFindManyArgs = {
+ where?: SdfdsfWhereInput;
+ orderBy?: SdfdsfOrderByInput;
+ skip?: number;
+ take?: number;
+};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfFindUniqueArgs.ts b/admin-ui/src/api/sdfdsf/SdfdsfFindUniqueArgs.ts
new file mode 100644
index 0000000..cd44bb3
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfFindUniqueArgs.ts
@@ -0,0 +1,5 @@
+import { SdfdsfWhereUniqueInput } from "./SdfdsfWhereUniqueInput";
+
+export type SdfdsfFindUniqueArgs = {
+ where: SdfdsfWhereUniqueInput;
+};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfOrderByInput.ts b/admin-ui/src/api/sdfdsf/SdfdsfOrderByInput.ts
new file mode 100644
index 0000000..fb45287
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfOrderByInput.ts
@@ -0,0 +1,7 @@
+import { SortOrder } from "../../util/SortOrder";
+
+export type SdfdsfOrderByInput = {
+ createdAt?: SortOrder;
+ id?: SortOrder;
+ updatedAt?: SortOrder;
+};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfUpdateInput.ts b/admin-ui/src/api/sdfdsf/SdfdsfUpdateInput.ts
new file mode 100644
index 0000000..82278df
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfUpdateInput.ts
@@ -0,0 +1 @@
+export type SdfdsfUpdateInput = {};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfWhereInput.ts b/admin-ui/src/api/sdfdsf/SdfdsfWhereInput.ts
new file mode 100644
index 0000000..3911348
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfWhereInput.ts
@@ -0,0 +1,5 @@
+import { StringFilter } from "../../util/StringFilter";
+
+export type SdfdsfWhereInput = {
+ id?: StringFilter;
+};
diff --git a/admin-ui/src/api/sdfdsf/SdfdsfWhereUniqueInput.ts b/admin-ui/src/api/sdfdsf/SdfdsfWhereUniqueInput.ts
new file mode 100644
index 0000000..45ee048
--- /dev/null
+++ b/admin-ui/src/api/sdfdsf/SdfdsfWhereUniqueInput.ts
@@ -0,0 +1,3 @@
+export type SdfdsfWhereUniqueInput = {
+ id: string;
+};
diff --git a/admin-ui/src/api/user/User.ts b/admin-ui/src/api/user/User.ts
index 208e9d6..798058f 100644
--- a/admin-ui/src/api/user/User.ts
+++ b/admin-ui/src/api/user/User.ts
@@ -1,10 +1,8 @@
export type User = {
createdAt: Date;
- email: string | null;
firstName: string | null;
id: string;
lastName: string | null;
- mobile: string;
roles: Array
;
updatedAt: Date;
username: string;
diff --git a/admin-ui/src/api/user/UserCreateInput.ts b/admin-ui/src/api/user/UserCreateInput.ts
index 432fdf9..2348030 100644
--- a/admin-ui/src/api/user/UserCreateInput.ts
+++ b/admin-ui/src/api/user/UserCreateInput.ts
@@ -1,8 +1,6 @@
export type UserCreateInput = {
- email?: string | null;
firstName?: string | null;
lastName?: string | null;
- mobile: string;
password: string;
roles: Array;
username: string;
diff --git a/admin-ui/src/api/user/UserOrderByInput.ts b/admin-ui/src/api/user/UserOrderByInput.ts
index ed728eb..36cee1e 100644
--- a/admin-ui/src/api/user/UserOrderByInput.ts
+++ b/admin-ui/src/api/user/UserOrderByInput.ts
@@ -2,11 +2,9 @@ import { SortOrder } from "../../util/SortOrder";
export type UserOrderByInput = {
createdAt?: SortOrder;
- email?: SortOrder;
firstName?: SortOrder;
id?: SortOrder;
lastName?: SortOrder;
- mobile?: SortOrder;
password?: SortOrder;
roles?: SortOrder;
updatedAt?: SortOrder;
diff --git a/admin-ui/src/api/user/UserUpdateInput.ts b/admin-ui/src/api/user/UserUpdateInput.ts
index f98e894..2ec7caf 100644
--- a/admin-ui/src/api/user/UserUpdateInput.ts
+++ b/admin-ui/src/api/user/UserUpdateInput.ts
@@ -1,8 +1,6 @@
export type UserUpdateInput = {
- email?: string | null;
firstName?: string | null;
lastName?: string | null;
- mobile?: string;
password?: string;
roles?: Array;
username?: string;
diff --git a/admin-ui/src/api/user/UserWhereInput.ts b/admin-ui/src/api/user/UserWhereInput.ts
index 2624825..22c10cb 100644
--- a/admin-ui/src/api/user/UserWhereInput.ts
+++ b/admin-ui/src/api/user/UserWhereInput.ts
@@ -2,10 +2,8 @@ import { StringNullableFilter } from "../../util/StringNullableFilter";
import { StringFilter } from "../../util/StringFilter";
export type UserWhereInput = {
- email?: StringNullableFilter;
firstName?: StringNullableFilter;
id?: StringFilter;
lastName?: StringNullableFilter;
- mobile?: StringFilter;
username?: StringFilter;
};
diff --git a/admin-ui/src/sdfdsf/SdfdsfCreate.tsx b/admin-ui/src/sdfdsf/SdfdsfCreate.tsx
new file mode 100644
index 0000000..d8b870f
--- /dev/null
+++ b/admin-ui/src/sdfdsf/SdfdsfCreate.tsx
@@ -0,0 +1,12 @@
+import * as React from "react";
+import { Create, SimpleForm, CreateProps } from "react-admin";
+
+export const SdfdsfCreate = (props: CreateProps): React.ReactElement => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/admin-ui/src/sdfdsf/SdfdsfEdit.tsx b/admin-ui/src/sdfdsf/SdfdsfEdit.tsx
new file mode 100644
index 0000000..79f77a1
--- /dev/null
+++ b/admin-ui/src/sdfdsf/SdfdsfEdit.tsx
@@ -0,0 +1,12 @@
+import * as React from "react";
+import { Edit, SimpleForm, EditProps } from "react-admin";
+
+export const SdfdsfEdit = (props: EditProps): React.ReactElement => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/admin-ui/src/sdfdsf/SdfdsfList.tsx b/admin-ui/src/sdfdsf/SdfdsfList.tsx
new file mode 100644
index 0000000..d796329
--- /dev/null
+++ b/admin-ui/src/sdfdsf/SdfdsfList.tsx
@@ -0,0 +1,21 @@
+import * as React from "react";
+import { List, Datagrid, ListProps, DateField, TextField } from "react-admin";
+import Pagination from "../Components/Pagination";
+
+export const SdfdsfList = (props: ListProps): React.ReactElement => {
+ return (
+
}
+ >
+
+
+
+
+
+
+ );
+};
diff --git a/admin-ui/src/sdfdsf/SdfdsfShow.tsx b/admin-ui/src/sdfdsf/SdfdsfShow.tsx
new file mode 100644
index 0000000..27d8567
--- /dev/null
+++ b/admin-ui/src/sdfdsf/SdfdsfShow.tsx
@@ -0,0 +1,20 @@
+import * as React from "react";
+import {
+ Show,
+ SimpleShowLayout,
+ ListProps,
+ DateField,
+ TextField,
+} from "react-admin";
+
+export const SdfdsfShow = (props: ListProps): React.ReactElement => {
+ return (
+
+
+
+
+
+
+
+ );
+};
diff --git a/admin-ui/src/sdfdsf/SdfdsfTitle.ts b/admin-ui/src/sdfdsf/SdfdsfTitle.ts
new file mode 100644
index 0000000..61ec7f7
--- /dev/null
+++ b/admin-ui/src/sdfdsf/SdfdsfTitle.ts
@@ -0,0 +1,7 @@
+import { Sdfdsf as TSdfdsf } from "../api/sdfdsf/Sdfdsf";
+
+export const SDFDSF_TITLE_FIELD = "id";
+
+export const SdfdsfTitle = (record: TSdfdsf) => {
+ return record.id;
+};
diff --git a/admin-ui/src/user/UserCreate.tsx b/admin-ui/src/user/UserCreate.tsx
index 9fc4820..8dd276a 100644
--- a/admin-ui/src/user/UserCreate.tsx
+++ b/admin-ui/src/user/UserCreate.tsx
@@ -15,10 +15,8 @@ export const UserCreate = (props: CreateProps): React.ReactElement => {
return (
-
-
{
return (
-
-
{
>
-
-
diff --git a/admin-ui/src/user/UserShow.tsx b/admin-ui/src/user/UserShow.tsx
index cc46b5f..dea7fef 100644
--- a/admin-ui/src/user/UserShow.tsx
+++ b/admin-ui/src/user/UserShow.tsx
@@ -12,11 +12,9 @@ export const UserShow = (props: ListProps): React.ReactElement => {
-
-
diff --git a/ampconfig.json b/ampconfig.json
index 5bc5f88..f6aff1c 100644
--- a/ampconfig.json
+++ b/ampconfig.json
@@ -1,10 +1,10 @@
{
- "dataServiceGeneratorVersion": "0.6.1",
+ "dataServiceGeneratorVersion": "0.6.3",
"appInfo": {
- "name": "My app-45",
+ "name": "My app-75",
"description": "",
- "version": "qpq3cyhw",
- "id": "ckp253vyk4601151bs6mjio6mex",
- "url": "https://app.amplication.com/ckp253vyk4601151bs6mjio6mex"
+ "version": "e39oruad",
+ "id": "ckpf93fhx39741bs6ulyffgp6",
+ "url": "https://app.amplication.com/ckpf93fhx39741bs6ulyffgp6"
}
}
diff --git a/server/package-lock.json b/server/package-lock.json
index 85c512e..3bcadcc 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -1,10 +1,10 @@
{
- "name": "my-app-45-server",
+ "name": "my-app-75-server",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "name": "my-app-45-server",
+ "name": "my-app-75-server",
"dependencies": {
"@nestjs/common": "^7.3.2",
"@nestjs/config": "^0.6.1",
diff --git a/server/package.json b/server/package.json
index f8219c7..ab24d34 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,5 +1,5 @@
{
- "name": "my-app-45-server",
+ "name": "my-app-75-server",
"private": true,
"scripts": {
"start": "nest start",
diff --git a/server/prisma/schema.prisma b/server/prisma/schema.prisma
index be7f93a..de2e62c 100644
--- a/server/prisma/schema.prisma
+++ b/server/prisma/schema.prisma
@@ -9,36 +9,17 @@ generator client {
model User {
createdAt DateTime @default(now())
- email String?
firstName String?
id String @id @default(cuid())
lastName String?
- mobile String
password String
roles String[]
updatedAt DateTime @updatedAt
username String @unique
}
-model Category {
- categories Category @relation(name: "categories")
- createdAt DateTime @default(now())
- description String?
- id String @id @default(cuid())
- image String?
- parentId Category? @relation(name: "categories", fields: [parentIdId], references: [id])
- parentIdId String?
- tile String?
- updatedAt DateTime @updatedAt
-}
-
-model Product {
- categoryIds String?
- createdAt DateTime @default(now())
- id String @id @default(cuid())
- image String?
- name String?
- size String?
- sku String?
- updatedAt DateTime @updatedAt
+model Sdfdsf {
+ createdAt DateTime @default(now())
+ id String @id @default(cuid())
+ updatedAt DateTime @updatedAt
}
\ No newline at end of file
diff --git a/server/scripts/seed.ts b/server/scripts/seed.ts
index 6c9b662..fbc67c4 100644
--- a/server/scripts/seed.ts
+++ b/server/scripts/seed.ts
@@ -28,7 +28,6 @@ async function seed(bcryptSalt: Salt) {
username: "admin",
password: await hash("admin", bcryptSalt),
roles: ["user"],
- mobile: "",
};
await client.user.upsert({
where: { username: data.username },
diff --git a/server/src/app.module.ts b/server/src/app.module.ts
index f0f1f50..41785fb 100644
--- a/server/src/app.module.ts
+++ b/server/src/app.module.ts
@@ -1,7 +1,6 @@
import { Module } from "@nestjs/common";
import { UserModule } from "./user/user.module";
-import { CategoryModule } from "./category/category.module";
-import { ProductModule } from "./product/product.module";
+import { SdfdsfModule } from "./sdfdsf/sdfdsf.module";
import { ACLModule } from "./auth/acl.module";
import { AuthModule } from "./auth/auth.module";
import { MorganModule } from "nest-morgan";
@@ -14,8 +13,7 @@ import { GraphQLModule } from "@nestjs/graphql";
controllers: [],
imports: [
UserModule,
- CategoryModule,
- ProductModule,
+ SdfdsfModule,
ACLModule,
AuthModule,
MorganModule,
diff --git a/server/src/auth/auth.resolver.ts b/server/src/auth/auth.resolver.ts
index 05b3a0b..cc752d9 100644
--- a/server/src/auth/auth.resolver.ts
+++ b/server/src/auth/auth.resolver.ts
@@ -1,8 +1,12 @@
-import { Args, Mutation, Resolver } from "@nestjs/graphql";
+import * as common from "@nestjs/common";
+import * as gqlBasicAuthGuard from "../auth/gqlBasicAuth.guard";
+import * as gqlACGuard from "../auth/gqlAC.guard";
+import { Args, Mutation, Resolver, Query } from "@nestjs/graphql";
import { ApolloError } from "apollo-server-express";
import { AuthService } from "./auth.service";
import { UserInfo } from "./UserInfo";
import { LoginArgs } from "./LoginArgs";
+import { UserData } from "./gqlUserData.decorator";
@Resolver(UserInfo)
export class AuthResolver {
@@ -18,4 +22,10 @@ export class AuthResolver {
}
return user;
}
+
+ @Query(() => UserInfo)
+ @common.UseGuards(gqlBasicAuthGuard.GqlBasicAuthGuard, gqlACGuard.GqlACGuard)
+ async userInfo(@UserData() userInfo: UserInfo): Promise {
+ return userInfo;
+ }
}
diff --git a/server/src/auth/gqlUserData.decorator.ts b/server/src/auth/gqlUserData.decorator.ts
new file mode 100644
index 0000000..4871099
--- /dev/null
+++ b/server/src/auth/gqlUserData.decorator.ts
@@ -0,0 +1,15 @@
+import { createParamDecorator, ExecutionContext } from "@nestjs/common";
+import { GqlExecutionContext } from "@nestjs/graphql";
+import { UserInfo } from "./UserInfo";
+
+/**
+ * Access the user data from the request object i.e `req.user`.
+ */
+export function getUser(executionContext: ExecutionContext): UserInfo {
+ const gqlExecutionContext = GqlExecutionContext.create(executionContext);
+ return gqlExecutionContext.getContext().req.user;
+}
+
+export const UserData = createParamDecorator((data, ctx: ExecutionContext) =>
+ getUser(ctx)
+);
diff --git a/server/src/grants.json b/server/src/grants.json
index 4d33df4..ba377e5 100644
--- a/server/src/grants.json
+++ b/server/src/grants.json
@@ -31,61 +31,31 @@
},
{
"role": "user",
- "resource": "Category",
+ "resource": "Sdfdsf",
"action": "read:own",
"attributes": "*"
},
{
"role": "user",
- "resource": "Category",
+ "resource": "Sdfdsf",
"action": "create:any",
"attributes": "*"
},
{
"role": "user",
- "resource": "Category",
+ "resource": "Sdfdsf",
"action": "update:any",
"attributes": "*"
},
{
"role": "user",
- "resource": "Category",
+ "resource": "Sdfdsf",
"action": "delete:any",
"attributes": "*"
},
{
"role": "user",
- "resource": "Category",
- "action": "read:any",
- "attributes": "*"
- },
- {
- "role": "user",
- "resource": "Product",
- "action": "read:own",
- "attributes": "*"
- },
- {
- "role": "user",
- "resource": "Product",
- "action": "create:any",
- "attributes": "*"
- },
- {
- "role": "user",
- "resource": "Product",
- "action": "update:any",
- "attributes": "*"
- },
- {
- "role": "user",
- "resource": "Product",
- "action": "delete:any",
- "attributes": "*"
- },
- {
- "role": "user",
- "resource": "Product",
+ "resource": "Sdfdsf",
"action": "read:any",
"attributes": "*"
}
diff --git a/server/src/sdfdsf/base/DeleteSdfdsfArgs.ts b/server/src/sdfdsf/base/DeleteSdfdsfArgs.ts
new file mode 100644
index 0000000..39122f7
--- /dev/null
+++ b/server/src/sdfdsf/base/DeleteSdfdsfArgs.ts
@@ -0,0 +1,10 @@
+import { ArgsType, Field } from "@nestjs/graphql";
+import { SdfdsfWhereUniqueInput } from "./SdfdsfWhereUniqueInput";
+
+@ArgsType()
+class DeleteSdfdsfArgs {
+ @Field(() => SdfdsfWhereUniqueInput, { nullable: false })
+ where!: SdfdsfWhereUniqueInput;
+}
+
+export { DeleteSdfdsfArgs };
diff --git a/server/src/sdfdsf/base/Sdfdsf.ts b/server/src/sdfdsf/base/Sdfdsf.ts
new file mode 100644
index 0000000..0ca3a43
--- /dev/null
+++ b/server/src/sdfdsf/base/Sdfdsf.ts
@@ -0,0 +1,31 @@
+import { ObjectType, Field } from "@nestjs/graphql";
+import { ApiProperty } from "@nestjs/swagger";
+import { IsDate, IsString } from "class-validator";
+import { Type } from "class-transformer";
+@ObjectType()
+class Sdfdsf {
+ @ApiProperty({
+ required: true,
+ })
+ @IsDate()
+ @Type(() => Date)
+ @Field(() => Date)
+ createdAt!: Date;
+
+ @ApiProperty({
+ required: true,
+ type: String,
+ })
+ @IsString()
+ @Field(() => String)
+ id!: string;
+
+ @ApiProperty({
+ required: true,
+ })
+ @IsDate()
+ @Type(() => Date)
+ @Field(() => Date)
+ updatedAt!: Date;
+}
+export { Sdfdsf };
diff --git a/server/src/sdfdsf/base/SdfdsfCreateInput.ts b/server/src/sdfdsf/base/SdfdsfCreateInput.ts
new file mode 100644
index 0000000..3b1959b
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfCreateInput.ts
@@ -0,0 +1,2 @@
+class SdfdsfCreateInput {}
+export { SdfdsfCreateInput };
diff --git a/server/src/sdfdsf/base/SdfdsfFindManyArgs.ts b/server/src/sdfdsf/base/SdfdsfFindManyArgs.ts
new file mode 100644
index 0000000..567bee7
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfFindManyArgs.ts
@@ -0,0 +1,42 @@
+import { ArgsType, Field } from "@nestjs/graphql";
+import { ApiProperty } from "@nestjs/swagger";
+import { SdfdsfWhereInput } from "./SdfdsfWhereInput";
+import { Type } from "class-transformer";
+import { SdfdsfOrderByInput } from "./SdfdsfOrderByInput";
+
+@ArgsType()
+class SdfdsfFindManyArgs {
+ @ApiProperty({
+ required: false,
+ type: () => SdfdsfWhereInput,
+ })
+ @Field(() => SdfdsfWhereInput, { nullable: true })
+ @Type(() => SdfdsfWhereInput)
+ where?: SdfdsfWhereInput;
+
+ @ApiProperty({
+ required: false,
+ type: SdfdsfOrderByInput,
+ })
+ @Field(() => SdfdsfOrderByInput, { nullable: true })
+ @Type(() => SdfdsfOrderByInput)
+ orderBy?: SdfdsfOrderByInput;
+
+ @ApiProperty({
+ required: false,
+ type: Number,
+ })
+ @Field(() => Number, { nullable: true })
+ @Type(() => Number)
+ skip?: number;
+
+ @ApiProperty({
+ required: false,
+ type: Number,
+ })
+ @Field(() => Number, { nullable: true })
+ @Type(() => Number)
+ take?: number;
+}
+
+export { SdfdsfFindManyArgs };
diff --git a/server/src/sdfdsf/base/SdfdsfFindUniqueArgs.ts b/server/src/sdfdsf/base/SdfdsfFindUniqueArgs.ts
new file mode 100644
index 0000000..1ef64e2
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfFindUniqueArgs.ts
@@ -0,0 +1,10 @@
+import { ArgsType, Field } from "@nestjs/graphql";
+import { SdfdsfWhereUniqueInput } from "./SdfdsfWhereUniqueInput";
+
+@ArgsType()
+class SdfdsfFindUniqueArgs {
+ @Field(() => SdfdsfWhereUniqueInput, { nullable: false })
+ where!: SdfdsfWhereUniqueInput;
+}
+
+export { SdfdsfFindUniqueArgs };
diff --git a/server/src/sdfdsf/base/SdfdsfOrderByInput.ts b/server/src/sdfdsf/base/SdfdsfOrderByInput.ts
new file mode 100644
index 0000000..8d40627
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfOrderByInput.ts
@@ -0,0 +1,38 @@
+import { InputType, Field } from "@nestjs/graphql";
+import { ApiProperty } from "@nestjs/swagger";
+import { SortOrder } from "../../util/SortOrder";
+
+@InputType({
+ isAbstract: true,
+ description: undefined,
+})
+class SdfdsfOrderByInput {
+ @ApiProperty({
+ required: false,
+ enum: ["Asc", "Desc"],
+ })
+ @Field(() => SortOrder, {
+ nullable: true,
+ })
+ createdAt?: SortOrder;
+
+ @ApiProperty({
+ required: false,
+ enum: ["Asc", "Desc"],
+ })
+ @Field(() => SortOrder, {
+ nullable: true,
+ })
+ id?: SortOrder;
+
+ @ApiProperty({
+ required: false,
+ enum: ["Asc", "Desc"],
+ })
+ @Field(() => SortOrder, {
+ nullable: true,
+ })
+ updatedAt?: SortOrder;
+}
+
+export { SdfdsfOrderByInput };
diff --git a/server/src/sdfdsf/base/SdfdsfUpdateInput.ts b/server/src/sdfdsf/base/SdfdsfUpdateInput.ts
new file mode 100644
index 0000000..d967168
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfUpdateInput.ts
@@ -0,0 +1,2 @@
+class SdfdsfUpdateInput {}
+export { SdfdsfUpdateInput };
diff --git a/server/src/sdfdsf/base/SdfdsfWhereInput.ts b/server/src/sdfdsf/base/SdfdsfWhereInput.ts
new file mode 100644
index 0000000..c59212b
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfWhereInput.ts
@@ -0,0 +1,19 @@
+import { InputType, Field } from "@nestjs/graphql";
+import { ApiProperty } from "@nestjs/swagger";
+import { StringFilter } from "../../util/StringFilter";
+import { Type } from "class-transformer";
+import { IsOptional } from "class-validator";
+@InputType()
+class SdfdsfWhereInput {
+ @ApiProperty({
+ required: false,
+ type: StringFilter,
+ })
+ @Type(() => StringFilter)
+ @IsOptional()
+ @Field(() => StringFilter, {
+ nullable: true,
+ })
+ id?: StringFilter;
+}
+export { SdfdsfWhereInput };
diff --git a/server/src/sdfdsf/base/SdfdsfWhereUniqueInput.ts b/server/src/sdfdsf/base/SdfdsfWhereUniqueInput.ts
new file mode 100644
index 0000000..219b31f
--- /dev/null
+++ b/server/src/sdfdsf/base/SdfdsfWhereUniqueInput.ts
@@ -0,0 +1,14 @@
+import { InputType, Field } from "@nestjs/graphql";
+import { ApiProperty } from "@nestjs/swagger";
+import { IsString } from "class-validator";
+@InputType()
+class SdfdsfWhereUniqueInput {
+ @ApiProperty({
+ required: true,
+ type: String,
+ })
+ @IsString()
+ @Field(() => String)
+ id!: string;
+}
+export { SdfdsfWhereUniqueInput };
diff --git a/server/src/sdfdsf/base/sdfdsf.controller.base.spec.ts b/server/src/sdfdsf/base/sdfdsf.controller.base.spec.ts
new file mode 100644
index 0000000..809caae
--- /dev/null
+++ b/server/src/sdfdsf/base/sdfdsf.controller.base.spec.ts
@@ -0,0 +1,142 @@
+import { Test } from "@nestjs/testing";
+import { INestApplication, HttpStatus, ExecutionContext } from "@nestjs/common";
+import request from "supertest";
+import { MorganModule } from "nest-morgan";
+import { ACGuard } from "nest-access-control";
+import { BasicAuthGuard } from "../../auth/basicAuth.guard";
+import { ACLModule } from "../../auth/acl.module";
+import { SdfdsfController } from "../sdfdsf.controller";
+import { SdfdsfService } from "../sdfdsf.service";
+
+const nonExistingId = "nonExistingId";
+const existingId = "existingId";
+const CREATE_INPUT = {
+ createdAt: new Date(),
+ id: "exampleId",
+ updatedAt: new Date(),
+};
+const CREATE_RESULT = {
+ createdAt: new Date(),
+ id: "exampleId",
+ updatedAt: new Date(),
+};
+const FIND_MANY_RESULT = [
+ {
+ createdAt: new Date(),
+ id: "exampleId",
+ updatedAt: new Date(),
+ },
+];
+const FIND_ONE_RESULT = {
+ createdAt: new Date(),
+ id: "exampleId",
+ updatedAt: new Date(),
+};
+
+const service = {
+ create() {
+ return CREATE_RESULT;
+ },
+ findMany: () => FIND_MANY_RESULT,
+ findOne: ({ where }: { where: { id: string } }) => {
+ switch (where.id) {
+ case existingId:
+ return FIND_ONE_RESULT;
+ case nonExistingId:
+ return null;
+ }
+ },
+};
+
+const basicAuthGuard = {
+ canActivate: (context: ExecutionContext) => {
+ const argumentHost = context.switchToHttp();
+ const request = argumentHost.getRequest();
+ request.user = {
+ roles: ["user"],
+ };
+ return true;
+ },
+};
+
+const acGuard = {
+ canActivate: () => {
+ return true;
+ },
+};
+
+describe("Sdfdsf", () => {
+ let app: INestApplication;
+
+ beforeAll(async () => {
+ const moduleRef = await Test.createTestingModule({
+ providers: [
+ {
+ provide: SdfdsfService,
+ useValue: service,
+ },
+ ],
+ controllers: [SdfdsfController],
+ imports: [MorganModule.forRoot(), ACLModule],
+ })
+ .overrideGuard(BasicAuthGuard)
+ .useValue(basicAuthGuard)
+ .overrideGuard(ACGuard)
+ .useValue(acGuard)
+ .compile();
+
+ app = moduleRef.createNestApplication();
+ await app.init();
+ });
+
+ test("POST /sdfdsfs", async () => {
+ await request(app.getHttpServer())
+ .post("/sdfdsfs")
+ .send(CREATE_INPUT)
+ .expect(HttpStatus.CREATED)
+ .expect({
+ ...CREATE_RESULT,
+ createdAt: CREATE_RESULT.createdAt.toISOString(),
+ updatedAt: CREATE_RESULT.updatedAt.toISOString(),
+ });
+ });
+
+ test("GET /sdfdsfs", async () => {
+ await request(app.getHttpServer())
+ .get("/sdfdsfs")
+ .expect(HttpStatus.OK)
+ .expect([
+ {
+ ...FIND_MANY_RESULT[0],
+ createdAt: FIND_MANY_RESULT[0].createdAt.toISOString(),
+ updatedAt: FIND_MANY_RESULT[0].updatedAt.toISOString(),
+ },
+ ]);
+ });
+
+ test("GET /sdfdsfs/:id non existing", async () => {
+ await request(app.getHttpServer())
+ .get(`${"/sdfdsfs"}/${nonExistingId}`)
+ .expect(404)
+ .expect({
+ statusCode: 404,
+ message: `No resource was found for {"${"id"}":"${nonExistingId}"}`,
+ error: "Not Found",
+ });
+ });
+
+ test("GET /sdfdsfs/:id existing", async () => {
+ await request(app.getHttpServer())
+ .get(`${"/sdfdsfs"}/${existingId}`)
+ .expect(HttpStatus.OK)
+ .expect({
+ ...FIND_ONE_RESULT,
+ createdAt: FIND_ONE_RESULT.createdAt.toISOString(),
+ updatedAt: FIND_ONE_RESULT.updatedAt.toISOString(),
+ });
+ });
+
+ afterAll(async () => {
+ await app.close();
+ });
+});
diff --git a/server/src/sdfdsf/base/sdfdsf.controller.base.ts b/server/src/sdfdsf/base/sdfdsf.controller.base.ts
new file mode 100644
index 0000000..a697228
--- /dev/null
+++ b/server/src/sdfdsf/base/sdfdsf.controller.base.ts
@@ -0,0 +1,229 @@
+import * as common from "@nestjs/common";
+import * as swagger from "@nestjs/swagger";
+import * as nestMorgan from "nest-morgan";
+import * as nestAccessControl from "nest-access-control";
+import * as basicAuthGuard from "../../auth/basicAuth.guard";
+import * as abacUtil from "../../auth/abac.util";
+import { isRecordNotFoundError } from "../../prisma.util";
+import * as errors from "../../errors";
+import { Request } from "express";
+import { plainToClass } from "class-transformer";
+import { SdfdsfService } from "../sdfdsf.service";
+import { SdfdsfCreateInput } from "./SdfdsfCreateInput";
+import { SdfdsfWhereInput } from "./SdfdsfWhereInput";
+import { SdfdsfWhereUniqueInput } from "./SdfdsfWhereUniqueInput";
+import { SdfdsfFindManyArgs } from "./SdfdsfFindManyArgs";
+import { SdfdsfUpdateInput } from "./SdfdsfUpdateInput";
+import { Sdfdsf } from "./Sdfdsf";
+
+export class SdfdsfControllerBase {
+ constructor(
+ protected readonly service: SdfdsfService,
+ protected readonly rolesBuilder: nestAccessControl.RolesBuilder
+ ) {}
+
+ @common.UseInterceptors(nestMorgan.MorganInterceptor("combined"))
+ @common.UseGuards(basicAuthGuard.BasicAuthGuard, nestAccessControl.ACGuard)
+ @common.Post()
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "create",
+ possession: "any",
+ })
+ @swagger.ApiCreatedResponse({ type: Sdfdsf })
+ @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException })
+ async create(
+ @common.Body() data: SdfdsfCreateInput,
+ @nestAccessControl.UserRoles() userRoles: string[]
+ ): Promise {
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "create",
+ possession: "any",
+ resource: "Sdfdsf",
+ });
+ const invalidAttributes = abacUtil.getInvalidAttributes(permission, data);
+ if (invalidAttributes.length) {
+ const properties = invalidAttributes
+ .map((attribute: string) => JSON.stringify(attribute))
+ .join(", ");
+ const roles = userRoles
+ .map((role: string) => JSON.stringify(role))
+ .join(",");
+ throw new errors.ForbiddenException(
+ `providing the properties: ${properties} on ${"Sdfdsf"} creation is forbidden for roles: ${roles}`
+ );
+ }
+ return await this.service.create({
+ data: data,
+ select: {
+ createdAt: true,
+ id: true,
+ updatedAt: true,
+ },
+ });
+ }
+
+ @common.UseInterceptors(nestMorgan.MorganInterceptor("combined"))
+ @common.UseGuards(basicAuthGuard.BasicAuthGuard, nestAccessControl.ACGuard)
+ @common.Get()
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "read",
+ possession: "any",
+ })
+ @swagger.ApiOkResponse({ type: [Sdfdsf] })
+ @swagger.ApiForbiddenResponse()
+ @swagger.ApiQuery({
+ type: () => SdfdsfFindManyArgs,
+ style: "deepObject",
+ explode: true,
+ })
+ async findMany(
+ @common.Req() request: Request,
+ @nestAccessControl.UserRoles() userRoles: string[]
+ ): Promise {
+ const args = plainToClass(SdfdsfFindManyArgs, request.query);
+
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "read",
+ possession: "any",
+ resource: "Sdfdsf",
+ });
+ const results = await this.service.findMany({
+ ...args,
+ select: {
+ createdAt: true,
+ id: true,
+ updatedAt: true,
+ },
+ });
+ return results.map((result) => permission.filter(result));
+ }
+
+ @common.UseInterceptors(nestMorgan.MorganInterceptor("combined"))
+ @common.UseGuards(basicAuthGuard.BasicAuthGuard, nestAccessControl.ACGuard)
+ @common.Get("/:id")
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "read",
+ possession: "own",
+ })
+ @swagger.ApiOkResponse({ type: Sdfdsf })
+ @swagger.ApiNotFoundResponse({ type: errors.NotFoundException })
+ @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException })
+ async findOne(
+ @common.Param() params: SdfdsfWhereUniqueInput,
+ @nestAccessControl.UserRoles() userRoles: string[]
+ ): Promise {
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "read",
+ possession: "own",
+ resource: "Sdfdsf",
+ });
+ const result = await this.service.findOne({
+ where: params,
+ select: {
+ createdAt: true,
+ id: true,
+ updatedAt: true,
+ },
+ });
+ if (result === null) {
+ throw new errors.NotFoundException(
+ `No resource was found for ${JSON.stringify(params)}`
+ );
+ }
+ return permission.filter(result);
+ }
+
+ @common.UseInterceptors(nestMorgan.MorganInterceptor("combined"))
+ @common.UseGuards(basicAuthGuard.BasicAuthGuard, nestAccessControl.ACGuard)
+ @common.Patch("/:id")
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "update",
+ possession: "any",
+ })
+ @swagger.ApiOkResponse({ type: Sdfdsf })
+ @swagger.ApiNotFoundResponse({ type: errors.NotFoundException })
+ @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException })
+ async update(
+ @common.Param() params: SdfdsfWhereUniqueInput,
+ @common.Body()
+ data: SdfdsfUpdateInput,
+ @nestAccessControl.UserRoles() userRoles: string[]
+ ): Promise {
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "update",
+ possession: "any",
+ resource: "Sdfdsf",
+ });
+ const invalidAttributes = abacUtil.getInvalidAttributes(permission, data);
+ if (invalidAttributes.length) {
+ const properties = invalidAttributes
+ .map((attribute: string) => JSON.stringify(attribute))
+ .join(", ");
+ const roles = userRoles
+ .map((role: string) => JSON.stringify(role))
+ .join(",");
+ throw new errors.ForbiddenException(
+ `providing the properties: ${properties} on ${"Sdfdsf"} update is forbidden for roles: ${roles}`
+ );
+ }
+ try {
+ return await this.service.update({
+ where: params,
+ data: data,
+ select: {
+ createdAt: true,
+ id: true,
+ updatedAt: true,
+ },
+ });
+ } catch (error) {
+ if (isRecordNotFoundError(error)) {
+ throw new errors.NotFoundException(
+ `No resource was found for ${JSON.stringify(params)}`
+ );
+ }
+ throw error;
+ }
+ }
+
+ @common.UseInterceptors(nestMorgan.MorganInterceptor("combined"))
+ @common.UseGuards(basicAuthGuard.BasicAuthGuard, nestAccessControl.ACGuard)
+ @common.Delete("/:id")
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "delete",
+ possession: "any",
+ })
+ @swagger.ApiOkResponse({ type: Sdfdsf })
+ @swagger.ApiNotFoundResponse({ type: errors.NotFoundException })
+ @swagger.ApiForbiddenResponse({ type: errors.ForbiddenException })
+ async delete(
+ @common.Param() params: SdfdsfWhereUniqueInput
+ ): Promise {
+ try {
+ return await this.service.delete({
+ where: params,
+ select: {
+ createdAt: true,
+ id: true,
+ updatedAt: true,
+ },
+ });
+ } catch (error) {
+ if (isRecordNotFoundError(error)) {
+ throw new errors.NotFoundException(
+ `No resource was found for ${JSON.stringify(params)}`
+ );
+ }
+ throw error;
+ }
+ }
+}
diff --git a/server/src/sdfdsf/base/sdfdsf.module.base.ts b/server/src/sdfdsf/base/sdfdsf.module.base.ts
new file mode 100644
index 0000000..b943248
--- /dev/null
+++ b/server/src/sdfdsf/base/sdfdsf.module.base.ts
@@ -0,0 +1,17 @@
+import { Module, forwardRef } from "@nestjs/common";
+import { MorganModule } from "nest-morgan";
+import { PrismaModule } from "nestjs-prisma";
+import { ACLModule } from "../../auth/acl.module";
+import { AuthModule } from "../../auth/auth.module";
+
+@Module({
+ imports: [
+ ACLModule,
+ forwardRef(() => AuthModule),
+ MorganModule,
+ PrismaModule,
+ ],
+
+ exports: [ACLModule, AuthModule, MorganModule, PrismaModule],
+})
+export class SdfdsfModuleBase {}
diff --git a/server/src/sdfdsf/base/sdfdsf.resolver.base.ts b/server/src/sdfdsf/base/sdfdsf.resolver.base.ts
new file mode 100644
index 0000000..7902254
--- /dev/null
+++ b/server/src/sdfdsf/base/sdfdsf.resolver.base.ts
@@ -0,0 +1,108 @@
+import * as common from "@nestjs/common";
+import * as graphql from "@nestjs/graphql";
+import * as apollo from "apollo-server-express";
+import * as nestAccessControl from "nest-access-control";
+import * as gqlBasicAuthGuard from "../../auth/gqlBasicAuth.guard";
+import * as gqlACGuard from "../../auth/gqlAC.guard";
+import * as gqlUserRoles from "../../auth/gqlUserRoles.decorator";
+import * as abacUtil from "../../auth/abac.util";
+import { isRecordNotFoundError } from "../../prisma.util";
+import { MetaQueryPayload } from "../../util/MetaQueryPayload";
+import { DeleteSdfdsfArgs } from "./DeleteSdfdsfArgs";
+import { SdfdsfFindManyArgs } from "./SdfdsfFindManyArgs";
+import { SdfdsfFindUniqueArgs } from "./SdfdsfFindUniqueArgs";
+import { Sdfdsf } from "./Sdfdsf";
+import { SdfdsfService } from "../sdfdsf.service";
+
+@graphql.Resolver(() => Sdfdsf)
+@common.UseGuards(gqlBasicAuthGuard.GqlBasicAuthGuard, gqlACGuard.GqlACGuard)
+export class SdfdsfResolverBase {
+ constructor(
+ protected readonly service: SdfdsfService,
+ protected readonly rolesBuilder: nestAccessControl.RolesBuilder
+ ) {}
+
+ @graphql.Query(() => MetaQueryPayload)
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "read",
+ possession: "any",
+ })
+ async _sdfdsfsMeta(
+ @graphql.Args() args: SdfdsfFindManyArgs
+ ): Promise {
+ const results = await this.service.count({
+ ...args,
+ skip: undefined,
+ take: undefined,
+ });
+ return {
+ count: results,
+ };
+ }
+
+ @graphql.Query(() => [Sdfdsf])
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "read",
+ possession: "any",
+ })
+ async sdfdsfs(
+ @graphql.Args() args: SdfdsfFindManyArgs,
+ @gqlUserRoles.UserRoles() userRoles: string[]
+ ): Promise {
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "read",
+ possession: "any",
+ resource: "Sdfdsf",
+ });
+ const results = await this.service.findMany(args);
+ return results.map((result) => permission.filter(result));
+ }
+
+ @graphql.Query(() => Sdfdsf, { nullable: true })
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "read",
+ possession: "own",
+ })
+ async sdfdsf(
+ @graphql.Args() args: SdfdsfFindUniqueArgs,
+ @gqlUserRoles.UserRoles() userRoles: string[]
+ ): Promise {
+ const permission = this.rolesBuilder.permission({
+ role: userRoles,
+ action: "read",
+ possession: "own",
+ resource: "Sdfdsf",
+ });
+ const result = await this.service.findOne(args);
+ if (result === null) {
+ return null;
+ }
+ return permission.filter(result);
+ }
+
+ @graphql.Mutation(() => Sdfdsf)
+ @nestAccessControl.UseRoles({
+ resource: "Sdfdsf",
+ action: "delete",
+ possession: "any",
+ })
+ async deleteSdfdsf(
+ @graphql.Args() args: DeleteSdfdsfArgs
+ ): Promise {
+ try {
+ // @ts-ignore
+ return await this.service.delete(args);
+ } catch (error) {
+ if (isRecordNotFoundError(error)) {
+ throw new apollo.ApolloError(
+ `No resource was found for ${JSON.stringify(args.where)}`
+ );
+ }
+ throw error;
+ }
+ }
+}
diff --git a/server/src/sdfdsf/base/sdfdsf.service.base.ts b/server/src/sdfdsf/base/sdfdsf.service.base.ts
new file mode 100644
index 0000000..1986809
--- /dev/null
+++ b/server/src/sdfdsf/base/sdfdsf.service.base.ts
@@ -0,0 +1,38 @@
+import { PrismaService } from "nestjs-prisma";
+import { Prisma, Sdfdsf } from "@prisma/client";
+
+export class SdfdsfServiceBase {
+ constructor(protected readonly prisma: PrismaService) {}
+
+ async count(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.count(args);
+ }
+
+ async findMany(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.findMany(args);
+ }
+ async findOne(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.findUnique(args);
+ }
+ async create(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.create(args);
+ }
+ async update(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.update(args);
+ }
+ async delete(
+ args: Prisma.SelectSubset
+ ): Promise {
+ return this.prisma.sdfdsf.delete(args);
+ }
+}
diff --git a/server/src/sdfdsf/sdfdsf.controller.ts b/server/src/sdfdsf/sdfdsf.controller.ts
new file mode 100644
index 0000000..02f32e0
--- /dev/null
+++ b/server/src/sdfdsf/sdfdsf.controller.ts
@@ -0,0 +1,18 @@
+import * as common from "@nestjs/common";
+import * as swagger from "@nestjs/swagger";
+import * as nestAccessControl from "nest-access-control";
+import { SdfdsfService } from "./sdfdsf.service";
+import { SdfdsfControllerBase } from "./base/sdfdsf.controller.base";
+
+@swagger.ApiBasicAuth()
+@swagger.ApiTags("sdfdsfs")
+@common.Controller("sdfdsfs")
+export class SdfdsfController extends SdfdsfControllerBase {
+ constructor(
+ protected readonly service: SdfdsfService,
+ @nestAccessControl.InjectRolesBuilder()
+ protected readonly rolesBuilder: nestAccessControl.RolesBuilder
+ ) {
+ super(service, rolesBuilder);
+ }
+}
diff --git a/server/src/sdfdsf/sdfdsf.module.ts b/server/src/sdfdsf/sdfdsf.module.ts
new file mode 100644
index 0000000..1e93aab
--- /dev/null
+++ b/server/src/sdfdsf/sdfdsf.module.ts
@@ -0,0 +1,13 @@
+import { Module } from "@nestjs/common";
+import { SdfdsfModuleBase } from "./base/sdfdsf.module.base";
+import { SdfdsfService } from "./sdfdsf.service";
+import { SdfdsfController } from "./sdfdsf.controller";
+import { SdfdsfResolver } from "./sdfdsf.resolver";
+
+@Module({
+ imports: [SdfdsfModuleBase],
+ controllers: [SdfdsfController],
+ providers: [SdfdsfService, SdfdsfResolver],
+ exports: [SdfdsfService],
+})
+export class SdfdsfModule {}
diff --git a/server/src/sdfdsf/sdfdsf.resolver.ts b/server/src/sdfdsf/sdfdsf.resolver.ts
new file mode 100644
index 0000000..96f711f
--- /dev/null
+++ b/server/src/sdfdsf/sdfdsf.resolver.ts
@@ -0,0 +1,20 @@
+import * as common from "@nestjs/common";
+import * as graphql from "@nestjs/graphql";
+import * as nestAccessControl from "nest-access-control";
+import * as gqlBasicAuthGuard from "../auth/gqlBasicAuth.guard";
+import * as gqlACGuard from "../auth/gqlAC.guard";
+import { SdfdsfResolverBase } from "./base/sdfdsf.resolver.base";
+import { Sdfdsf } from "./base/Sdfdsf";
+import { SdfdsfService } from "./sdfdsf.service";
+
+@graphql.Resolver(() => Sdfdsf)
+@common.UseGuards(gqlBasicAuthGuard.GqlBasicAuthGuard, gqlACGuard.GqlACGuard)
+export class SdfdsfResolver extends SdfdsfResolverBase {
+ constructor(
+ protected readonly service: SdfdsfService,
+ @nestAccessControl.InjectRolesBuilder()
+ protected readonly rolesBuilder: nestAccessControl.RolesBuilder
+ ) {
+ super(service, rolesBuilder);
+ }
+}
diff --git a/server/src/sdfdsf/sdfdsf.service.ts b/server/src/sdfdsf/sdfdsf.service.ts
new file mode 100644
index 0000000..9112af3
--- /dev/null
+++ b/server/src/sdfdsf/sdfdsf.service.ts
@@ -0,0 +1,10 @@
+import { Injectable } from "@nestjs/common";
+import { PrismaService } from "nestjs-prisma";
+import { SdfdsfServiceBase } from "./base/sdfdsf.service.base";
+
+@Injectable()
+export class SdfdsfService extends SdfdsfServiceBase {
+ constructor(protected readonly prisma: PrismaService) {
+ super(prisma);
+ }
+}
diff --git a/server/src/swagger.ts b/server/src/swagger.ts
index ded984b..15152b3 100644
--- a/server/src/swagger.ts
+++ b/server/src/swagger.ts
@@ -3,11 +3,11 @@ import { DocumentBuilder } from "@nestjs/swagger";
export const swaggerPath = "api";
export const swaggerDocumentOptions = new DocumentBuilder()
- .setTitle("My app-45")
+ .setTitle("My app-75")
.setDescription(
'\n\n## Congratulations! Your application is ready.\n\nPlease note that all endpoints are secured with HTTP basic authentication.\nBy default, your app comes with one user with the username "admin" and password "admin".\nLearn more in [our docs](https://docs.amplication.com)'
)
- .setVersion("qpq3cyhw")
+ .setVersion("e39oruad")
.addBasicAuth()
.build();
@@ -17,5 +17,5 @@ export const swaggerSetupOptions = {
},
customCssUrl: "../swagger/swagger.css",
customfavIcon: "../swagger/favicon.png",
- customSiteTitle: "My app-45",
+ customSiteTitle: "My app-75",
};
diff --git a/server/src/user/base/User.ts b/server/src/user/base/User.ts
index 65f783c..e3a5af3 100644
--- a/server/src/user/base/User.ts
+++ b/server/src/user/base/User.ts
@@ -12,17 +12,6 @@ class User {
@Field(() => Date)
createdAt!: Date;
- @ApiProperty({
- required: false,
- type: String,
- })
- @IsString()
- @IsOptional()
- @Field(() => String, {
- nullable: true,
- })
- email!: string | null;
-
@ApiProperty({
required: false,
type: String,
@@ -53,14 +42,6 @@ class User {
})
lastName!: string | null;
- @ApiProperty({
- required: true,
- type: String,
- })
- @IsString()
- @Field(() => String)
- mobile!: string;
-
@ApiProperty({
required: true,
type: [String],
diff --git a/server/src/user/base/UserCreateInput.ts b/server/src/user/base/UserCreateInput.ts
index ae5d745..6e217e9 100644
--- a/server/src/user/base/UserCreateInput.ts
+++ b/server/src/user/base/UserCreateInput.ts
@@ -3,17 +3,6 @@ import { ApiProperty } from "@nestjs/swagger";
import { IsString, IsOptional } from "class-validator";
@InputType()
class UserCreateInput {
- @ApiProperty({
- required: false,
- type: String,
- })
- @IsString()
- @IsOptional()
- @Field(() => String, {
- nullable: true,
- })
- email?: string | null;
-
@ApiProperty({
required: false,
type: String,
@@ -36,14 +25,6 @@ class UserCreateInput {
})
lastName?: string | null;
- @ApiProperty({
- required: true,
- type: String,
- })
- @IsString()
- @Field(() => String)
- mobile!: string;
-
@ApiProperty({
required: true,
type: String,
diff --git a/server/src/user/base/UserOrderByInput.ts b/server/src/user/base/UserOrderByInput.ts
index 6261184..5bc72a2 100644
--- a/server/src/user/base/UserOrderByInput.ts
+++ b/server/src/user/base/UserOrderByInput.ts
@@ -16,15 +16,6 @@ class UserOrderByInput {
})
createdAt?: SortOrder;
- @ApiProperty({
- required: false,
- enum: ["Asc", "Desc"],
- })
- @Field(() => SortOrder, {
- nullable: true,
- })
- email?: SortOrder;
-
@ApiProperty({
required: false,
enum: ["Asc", "Desc"],
@@ -52,15 +43,6 @@ class UserOrderByInput {
})
lastName?: SortOrder;
- @ApiProperty({
- required: false,
- enum: ["Asc", "Desc"],
- })
- @Field(() => SortOrder, {
- nullable: true,
- })
- mobile?: SortOrder;
-
@ApiProperty({
required: false,
enum: ["Asc", "Desc"],
diff --git a/server/src/user/base/UserUpdateInput.ts b/server/src/user/base/UserUpdateInput.ts
index 3d83a6a..39cfa90 100644
--- a/server/src/user/base/UserUpdateInput.ts
+++ b/server/src/user/base/UserUpdateInput.ts
@@ -3,17 +3,6 @@ import { ApiProperty } from "@nestjs/swagger";
import { IsString, IsOptional } from "class-validator";
@InputType()
class UserUpdateInput {
- @ApiProperty({
- required: false,
- type: String,
- })
- @IsString()
- @IsOptional()
- @Field(() => String, {
- nullable: true,
- })
- email?: string | null;
-
@ApiProperty({
required: false,
type: String,
@@ -36,17 +25,6 @@ class UserUpdateInput {
})
lastName?: string | null;
- @ApiProperty({
- required: false,
- type: String,
- })
- @IsString()
- @IsOptional()
- @Field(() => String, {
- nullable: true,
- })
- mobile?: string;
-
@ApiProperty({
required: false,
type: String,
diff --git a/server/src/user/base/UserWhereInput.ts b/server/src/user/base/UserWhereInput.ts
index 98820e7..8477a7f 100644
--- a/server/src/user/base/UserWhereInput.ts
+++ b/server/src/user/base/UserWhereInput.ts
@@ -6,17 +6,6 @@ import { IsOptional } from "class-validator";
import { StringFilter } from "../../util/StringFilter";
@InputType()
class UserWhereInput {
- @ApiProperty({
- required: false,
- type: StringNullableFilter,
- })
- @Type(() => StringNullableFilter)
- @IsOptional()
- @Field(() => StringNullableFilter, {
- nullable: true,
- })
- email?: StringNullableFilter;
-
@ApiProperty({
required: false,
type: StringNullableFilter,
@@ -50,17 +39,6 @@ class UserWhereInput {
})
lastName?: StringNullableFilter;
- @ApiProperty({
- required: false,
- type: StringFilter,
- })
- @Type(() => StringFilter)
- @IsOptional()
- @Field(() => StringFilter, {
- nullable: true,
- })
- mobile?: StringFilter;
-
@ApiProperty({
required: false,
type: StringFilter,
diff --git a/server/src/user/base/user.controller.base.spec.ts b/server/src/user/base/user.controller.base.spec.ts
index a1af5bf..ee70bfb 100644
--- a/server/src/user/base/user.controller.base.spec.ts
+++ b/server/src/user/base/user.controller.base.spec.ts
@@ -12,11 +12,9 @@ const nonExistingId = "nonExistingId";
const existingId = "existingId";
const CREATE_INPUT = {
createdAt: new Date(),
- email: "exampleEmail",
firstName: "exampleFirstName",
id: "exampleId",
lastName: "exampleLastName",
- mobile: "exampleMobile",
password: "examplePassword",
roles: ["exampleRoles"],
updatedAt: new Date(),
@@ -24,11 +22,9 @@ const CREATE_INPUT = {
};
const CREATE_RESULT = {
createdAt: new Date(),
- email: "exampleEmail",
firstName: "exampleFirstName",
id: "exampleId",
lastName: "exampleLastName",
- mobile: "exampleMobile",
password: "examplePassword",
roles: ["exampleRoles"],
updatedAt: new Date(),
@@ -37,11 +33,9 @@ const CREATE_RESULT = {
const FIND_MANY_RESULT = [
{
createdAt: new Date(),
- email: "exampleEmail",
firstName: "exampleFirstName",
id: "exampleId",
lastName: "exampleLastName",
- mobile: "exampleMobile",
password: "examplePassword",
roles: ["exampleRoles"],
updatedAt: new Date(),
@@ -50,11 +44,9 @@ const FIND_MANY_RESULT = [
];
const FIND_ONE_RESULT = {
createdAt: new Date(),
- email: "exampleEmail",
firstName: "exampleFirstName",
id: "exampleId",
lastName: "exampleLastName",
- mobile: "exampleMobile",
password: "examplePassword",
roles: ["exampleRoles"],
updatedAt: new Date(),
diff --git a/server/src/user/base/user.controller.base.ts b/server/src/user/base/user.controller.base.ts
index 89e8726..9cc97ff 100644
--- a/server/src/user/base/user.controller.base.ts
+++ b/server/src/user/base/user.controller.base.ts
@@ -58,11 +58,9 @@ export class UserControllerBase {
data: data,
select: {
createdAt: true,
- email: true,
firstName: true,
id: true,
lastName: true,
- mobile: true,
roles: true,
updatedAt: true,
username: true,
@@ -101,11 +99,9 @@ export class UserControllerBase {
...args,
select: {
createdAt: true,
- email: true,
firstName: true,
id: true,
lastName: true,
- mobile: true,
roles: true,
updatedAt: true,
username: true,
@@ -139,11 +135,9 @@ export class UserControllerBase {
where: params,
select: {
createdAt: true,
- email: true,
firstName: true,
id: true,
lastName: true,
- mobile: true,
roles: true,
updatedAt: true,
username: true,
@@ -198,11 +192,9 @@ export class UserControllerBase {
data: data,
select: {
createdAt: true,
- email: true,
firstName: true,
id: true,
lastName: true,
- mobile: true,
roles: true,
updatedAt: true,
username: true,
@@ -237,11 +229,9 @@ export class UserControllerBase {
where: params,
select: {
createdAt: true,
- email: true,
firstName: true,
id: true,
lastName: true,
- mobile: true,
roles: true,
updatedAt: true,
username: true,