Skip to content

Commit

Permalink
chore: add user queries & mutations
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucas Santos authored and Lucas Santos committed Mar 17, 2021
1 parent ac5dd33 commit 37b4d76
Show file tree
Hide file tree
Showing 26 changed files with 192 additions and 15,327 deletions.
3 changes: 1 addition & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
"typescript.preferences.quoteStyle": "single",
"prettier.singleQuote": true,
"editor.formatOnSave": true,

"editor.codeActionsOnSave": {
"source.organizeImports": true,
}
}
}
1 change: 1 addition & 0 deletions packages/api/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DATABASE_URL=mysql://root:root@localhost:3306/serverless-db?schema=public
2,101 changes: 0 additions & 2,101 deletions packages/api/package-lock.json

This file was deleted.

3 changes: 1 addition & 2 deletions packages/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
"prisma": "2.18.0"
},
"dependencies": {
"@app/lib": "1.0.0",
"@prisma/client": "2.18.0",
"apollo-server-lambda": "^2.19.0",
"aws-sdk": "^2.861.0",
Expand All @@ -40,4 +39,4 @@
"reflect-metadata": "^0.1.13",
"uuid": "^8.3.1"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-- CreateTable
CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(100) NOT NULL,
`last_name` VARCHAR(100) NOT NULL,
`email` VARCHAR(500) NOT NULL,

PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
7 changes: 7 additions & 0 deletions packages/api/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,10 @@ model Order {
id Int @id @default(autoincrement())
name String?
}

model User {
id Int @id @default(autoincrement())
first_name String @db.VarChar(100)
last_name String @db.VarChar(100)
email String @db.VarChar(500)
}
7 changes: 7 additions & 0 deletions packages/api/src/action.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { GraphqlContext } from './graphql/context';





export type Action<T, S> = (req: T, ctx: GraphqlContext) => S | Promise<S>
23 changes: 23 additions & 0 deletions packages/api/src/features/user/actions/addUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { User } from '@prisma/client';
import { Action } from '../../../action';
import { AddUserRequest } from '../requests';




const addUserAction: Action<AddUserRequest, User> = async (req, ctx) => {

const user = await ctx.prisma.user.create({
data: {
email: req.email,
first_name: req.name,
last_name: req.name
}
})
return user;

}


export default addUserAction

11 changes: 11 additions & 0 deletions packages/api/src/features/user/actions/getAllUsers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

import { User } from '@prisma/client';
import { Action } from '../../../action';
import { GetAllUsersRequest } from '../requests';

export const getAllUsersAction: Action<GetAllUsersRequest, User[]> = async (req, ctx) => {
const users = await ctx.prisma.user.findMany();
return users;
}


26 changes: 26 additions & 0 deletions packages/api/src/features/user/actions/getUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

import { User } from '@prisma/client';
import { Action } from '../../../action';
import { GetUserRequest } from '../requests';





export const getUserAction: Action<GetUserRequest, User | null> = async (req, ctx) => {
//todo: infer nullable type - prismic issue
const user = await ctx.prisma.user.findUnique({
rejectOnNotFound: false,
where: {
id: req.id
}
});

if (!user) {
return null;
}

return user;
}


47 changes: 0 additions & 47 deletions packages/api/src/features/user/mutation/addUser.ts

This file was deleted.

3 changes: 0 additions & 3 deletions packages/api/src/features/user/mutation/index.ts

This file was deleted.

42 changes: 0 additions & 42 deletions packages/api/src/features/user/query/getAllUsers.ts

This file was deleted.

1 change: 0 additions & 1 deletion packages/api/src/features/user/query/index.ts

This file was deleted.

14 changes: 8 additions & 6 deletions packages/api/src/features/user/requests/addUserRequest.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import ApiRequest from '../../../request';




export default class AddUserRequest extends ApiRequest {


}
/**
*
*/
export class AddUserRequest extends ApiRequest {

name: string;
email: string;
}
9 changes: 0 additions & 9 deletions packages/api/src/features/user/requests/getAllUserRequest.ts

This file was deleted.

8 changes: 8 additions & 0 deletions packages/api/src/features/user/requests/getAllUsersRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import ApiRequest from '../../../request';



export class GetAllUsersRequest extends ApiRequest {


}
8 changes: 8 additions & 0 deletions packages/api/src/features/user/requests/getUserRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import ApiRequest from '../../../request';



export class GetUserRequest extends ApiRequest {
id: number;

}
7 changes: 7 additions & 0 deletions packages/api/src/features/user/requests/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@


export * from "./addUserRequest";
export * from "./getAllUsersRequest";
export * from "./getUserRequest";


26 changes: 26 additions & 0 deletions packages/api/src/features/user/user.mutations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { User } from '@prisma/client';
import { stringArg } from 'nexus';
import { ObjectDefinitionBlock } from 'nexus/dist/blocks';
import { GraphQResolver } from '../../types';
import addUserAction from './actions/addUser';
import { AddUserRequest } from './requests';



const addUser: GraphQResolver<AddUserRequest, User | null> = async (parent, args, ctx) => {
const user = await addUserAction(args, ctx)
return user;
}

export default (t: ObjectDefinitionBlock<"Mutation">) => {
t.field('addUser', {
args: {
name: stringArg({}),
first_name: stringArg({}),
last_name: stringArg({}),
email: stringArg({})
},
type: 'User',
resolve: addUser
})
}
36 changes: 36 additions & 0 deletions packages/api/src/features/user/user.query.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { User } from '@prisma/client';
import { intArg } from 'nexus';
import { ObjectDefinitionBlock } from 'nexus/dist/blocks';
import { GraphQResolver } from '../../types';
import { getAllUsersAction } from './actions/getAllUsers';
import { getUserAction } from './actions/getUser';
import { GetAllUsersRequest, GetUserRequest } from './requests';




const getUser: GraphQResolver<GetUserRequest, User> = async (parent, args, ctx) => {
const users = await getUserAction(args, ctx)
return users;
}

const getAllUsers: GraphQResolver<GetAllUsersRequest, User[]> = async (parent, args, ctx) => {
const users = await getAllUsersAction(args, ctx)
return users;
}


export default (t: ObjectDefinitionBlock<"Query">) => {
t.field('allUsers', {
type: 'User',
resolve: getAllUsers
});

t.field('user', {
args: {
id: intArg({}),
},
type: 'User',
resolve: getUser
})
}
13 changes: 8 additions & 5 deletions packages/api/src/features/user/user.type.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@

import { mutationType, objectType, queryType } from 'nexus';
import addUser from './mutation/addUser';
import getAllUsers from './query/getAllUsers';
import userMutations from "./user.mutations";
import userQueries from "./user.query";

export const UserType = objectType({
name: 'User',
definition(t) {
t.int("id")
t.string("name")
t.string("first_name")
t.string("last_name")
t.string("email")
}
});

export const Query = queryType({
definition: (t) => {
getAllUsers(t)
userQueries(t)

}
})

export const Mutation = mutationType({
definition: (t) => {
addUser(t)
userMutations(t)
}
})

Expand Down
Loading

0 comments on commit 37b4d76

Please sign in to comment.