Skip to content

Commit 8b515eb

Browse files
committed
update: user query, posts resolvefield 추가
1 parent 133a7c9 commit 8b515eb

9 files changed

+77
-19
lines changed

prisma/schema.prisma

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ model User {
2222
password String
2323
avatar String?
2424
createdDate DateTime @default(now())
25-
updatedDate DateTime?
25+
updatedDate DateTime? @updatedAt
2626
posts Post[]
2727
}
2828

@@ -31,7 +31,7 @@ model Post {
3131
title String
3232
description String?
3333
createdDate DateTime @default(now())
34-
updatedDate DateTime?
35-
user User? @relation(fields: [userId], references: [id])
36-
userId Int?
34+
updatedDate DateTime? @updatedAt
35+
user User @relation(fields: [userId], references: [id])
36+
userId Int
3737
}

src/post/models/post.model.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ export class Post extends PostResolveFields {
1414
@Field()
1515
title: string
1616
@Field()
17-
description: string
17+
description?: string
1818
@Field()
1919
createdDate: Date
2020
@Field()
21-
updatedDate: Date
21+
updatedDate?: Date
2222
}

src/post/post.service.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Injectable } from '@nestjs/common'
2+
import { PrismaService } from 'src/prisma/prisma.service'
23

34
@Injectable()
45
export class PostService {}

src/schema.gql

+12-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# ------------------------------------------------------
44

55
type User {
6+
posts: [Post!]
67
id: Int!
78
username: String
89
name: String!
@@ -11,7 +12,7 @@ type User {
1112
email: String!
1213
avatar: String
1314
createdDate: DateTime!
14-
updatedDate: DateTime!
15+
updatedDate: DateTime
1516
}
1617

1718
enum UserGender {
@@ -24,7 +25,15 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date
2425
"""
2526
scalar DateTime
2627

28+
type Post {
29+
user: User!
30+
id: Int!
31+
title: String!
32+
description: String
33+
createdDate: DateTime!
34+
updatedDate: DateTime
35+
}
36+
2737
type Query {
28-
"""Get a user by id"""
29-
me: User!
38+
user(id: Int!): User!
3039
}

src/user/dto/user.args.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { ArgsType, Field, Int } from '@nestjs/graphql'
2+
3+
@ArgsType()
4+
export class UserArgs {
5+
@Field(() => Int)
6+
id: number
7+
}

src/user/models/user.model.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ export class User extends UserResolveFields {
4343
@Field()
4444
createdDate: Date
4545
@Field()
46-
updatedDate: Date
46+
updatedDate?: Date
4747
}

src/user/user.module.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { UserService } from './user.service'
33
import { UserResolver } from './user.resolver'
44

55
@Module({
6-
providers: [UserService, UserResolver],
7-
exports: [UserService]
6+
providers: [UserService, UserResolver]
87
})
98
export class UserModule {}

src/user/user.resolver.ts

+40-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,47 @@
1-
import { Query, Resolver } from '@nestjs/graphql'
1+
import { BadRequestException } from '@nestjs/common'
2+
import { Args, Parent, Query, ResolveField, Resolver } from '@nestjs/graphql'
3+
import { Post } from 'src/post/models/post.model'
4+
import { PrismaService } from 'src/prisma/prisma.service'
5+
import { UserArgs } from './dto/user.args'
26
import { User } from './models/user.model'
7+
import { UserService } from './user.service'
38

49
@Resolver(() => User)
510
export class UserResolver {
6-
@Query(() => User, {
7-
description: 'Get a user by id'
11+
constructor(
12+
private userService: UserService,
13+
private prisma: PrismaService
14+
) {}
15+
16+
// ==================== Query ====================
17+
@Query(() => User)
18+
async user(@Args() { id }: UserArgs) {
19+
try {
20+
const user = this.userService.user(id)
21+
22+
return user
23+
} catch (err) {
24+
console.log(err)
25+
throw new BadRequestException(err.message)
26+
}
27+
}
28+
29+
// ==================== ResolveFiled ====================
30+
@ResolveField(() => [Post], {
31+
nullable: true
832
})
9-
async me() {
10-
return {}
33+
async posts(@Parent() user: User) {
34+
try {
35+
const posts = this.prisma.user
36+
.findUnique({ where: { id: user.id } })
37+
.posts()
38+
39+
return posts
40+
} catch (err) {
41+
console.log(err)
42+
throw new BadRequestException(err.message)
43+
}
1144
}
45+
46+
// ==================== Mutation ====================
1247
}

src/user/user.service.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { Injectable } from '@nestjs/common'
2+
import { PrismaService } from 'src/prisma/prisma.service'
23

34
@Injectable()
4-
export class UserService {}
5+
export class UserService {
6+
constructor(private prisma: PrismaService) {}
7+
8+
async user(id: number) {
9+
return await this.prisma.user.findUnique({ where: { id } })
10+
}
11+
}

0 commit comments

Comments
 (0)