From 9cd14d13040d47c18fec985f4e449b8c5da156b5 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 24 Jun 2021 10:17:09 +0200 Subject: [PATCH] add User Model and Resolver --- backend/.env.dist | 2 + backend/package.json | 1 + backend/src/config/index.ts | 24 +++++++ .../src/graphql/datasources/login_server.ts | 8 +++ backend/src/graphql/models/User.ts | 62 +++++++++++++++++++ backend/src/graphql/resolvers/UserResolver.ts | 42 +++++++++++++ 6 files changed, 139 insertions(+) create mode 100644 backend/.env.dist create mode 100644 backend/src/config/index.ts create mode 100644 backend/src/graphql/datasources/login_server.ts create mode 100644 backend/src/graphql/models/User.ts create mode 100644 backend/src/graphql/resolvers/UserResolver.ts diff --git a/backend/.env.dist b/backend/.env.dist new file mode 100644 index 000000000..7815be556 --- /dev/null +++ b/backend/.env.dist @@ -0,0 +1,2 @@ +LOGIN_API_URL=http://localhost/login_api/ +COMMUNITY_API_URL=http://localhost/api/ \ No newline at end of file diff --git a/backend/package.json b/backend/package.json index c1bc5ad89..02328230f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,6 +12,7 @@ "lint": "eslint . --ext .js,.ts" }, "dependencies": { + "apollo-datasource-rest": "^0.14.0", "express": "^4.17.1", "express-graphql": "^0.12.0", "graphql": "^15.5.1", diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts new file mode 100644 index 000000000..db60d2b84 --- /dev/null +++ b/backend/src/config/index.ts @@ -0,0 +1,24 @@ +// ATTENTION: DO NOT PUT ANY SECRETS IN HERE (or the .env) + +// Load Package Details for some default values +const pkg = require('../../package') + +const environment = { + NODE_ENV: process.env.NODE_ENV, + DEBUG: process.env.NODE_ENV !== 'production' || false, + PRODUCTION: process.env.NODE_ENV === 'production' || false, + ALLOW_REGISTER: process.env.ALLOW_REGISTER !== 'false', +} + +const server = { + LOGIN_API_URL: process.env.LOGIN_API_URL || 'http://localhost/login_api/', + COMMUNITY_API_URL: process.env.COMMUNITY_API_URL || 'http://localhost/api/', +} + +const CONFIG = { + ...environment, + ...server, + APP_VERSION: pkg.version, +} + +export default CONFIG diff --git a/backend/src/graphql/datasources/login_server.ts b/backend/src/graphql/datasources/login_server.ts new file mode 100644 index 000000000..870c90382 --- /dev/null +++ b/backend/src/graphql/datasources/login_server.ts @@ -0,0 +1,8 @@ +import { RESTDataSource } from 'apollo-datasource-rest' + +export class LoginServerAPI extends RESTDataSource { + constructor() { + super() + this.baseURL = 'https://api.spacexdata.com/v2/' + } +} diff --git a/backend/src/graphql/models/User.ts b/backend/src/graphql/models/User.ts new file mode 100644 index 000000000..8f3ababf7 --- /dev/null +++ b/backend/src/graphql/models/User.ts @@ -0,0 +1,62 @@ +import { Entity, BaseEntity, PrimaryGeneratedColumn, Column } from 'typeorm' +import { ObjectType, Field, ID, GraphQLISODateTime } from 'type-graphql' + +@Entity() +@ObjectType() +export class User extends BaseEntity { + @Field(() => ID) + @PrimaryGeneratedColumn() + id: number + + @Field(() => String) + @Column({ length: 191 }) + email: string + + @Field(() => String) + @Column({ length: 150 }) + firstName: string + + @Field(() => String) + @Column() + lastName: string + + @Field(() => String) + @Column() + username: string + + @Field(() => String) + @Column('text') + description: string + + @Field(() => String) + @Column({ length: 64 }) + pubkey: string + + @Field(() => GraphQLISODateTime) + @Column({ type: 'datetime' }) + created: Date + + @Field(() => Boolean) + @Column({ default: false }) + emailChecked: boolean + + @Field(() => Boolean) + @Column({ default: false }) + passphraseShown: boolean + + @Field(() => String) + @Column({ default: 'de' }) + language: string + + @Field(() => Boolean) + @Column({ default: false }) + disabled: boolean + + @Field(() => ID) + @Column() + groupId: number + + @Field(() => ID) + @Column({ default: 0 }) + publisherId: number +} diff --git a/backend/src/graphql/resolvers/UserResolver.ts b/backend/src/graphql/resolvers/UserResolver.ts new file mode 100644 index 000000000..8e0fae982 --- /dev/null +++ b/backend/src/graphql/resolvers/UserResolver.ts @@ -0,0 +1,42 @@ +import { Resolver, Query, Mutation, Arg } from 'type-graphql' +import { User } from '../models/User' +// import { CreateBookInput } from '../inputs/CreateBookInput' +// import { UpdateBookInput } from '../inputs/UpdateBookInput' + +@Resolver() +export class UserResolver { + @Query(() => [User]) + users(): Promise { + return User.find() + } + + @Query(() => User) + user(@Arg('id') id: string): Promise { + return User.findOne({ where: { id } }) + } + + /* + @Mutation(() => User) + async createBook(@Arg('data') data: CreateBookInput) { + const book = User.create(data) + await book.save() + return book + } + + @Mutation(() => Book) + async updateBook(@Arg('id') id: string, @Arg('data') data: UpdateBookInput) { + const book = await Book.findOne({ where: { id } }) + if (!book) throw new Error('Book not found!') + Object.assign(book, data) + await book.save() + return book + } +*/ + @Mutation(() => Boolean) + async deleteUser(@Arg('id') id: string): Promise { + const user = await User.findOne({ where: { id } }) + if (!user) throw new Error('User not found!') + await user.remove() + return true + } +}