/
photoController.ts
92 lines (83 loc) · 2.09 KB
/
photoController.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import {
GraphqlController,
QueryResolver,
GraphQLFieldResolver,
interfaces,
MutationResolver,
Resolver
} from '@gabliam/graphql';
import { Photo } from '../entities/photo';
import { Connection, Repository } from '@gabliam/typeorm';
import * as _ from 'lodash';
@GraphqlController({
graphqlFiles: [
`${__dirname}/photo/schema.gql`,
`${__dirname}/photo/photo.gql`
]
})
export class PhotoController {
private photoRepository: Repository<Photo>;
constructor(connection: Connection) {
this.photoRepository = connection.getRepository<Photo>('Photo');
}
@Resolver({
path: 'Photo'
})
photoResolver(): interfaces.GraphQLMapFieldResolver {
return {
id(value: any, args: any, context: any) {
console.log('id here', value);
return value.id;
},
name: _.property('name'),
description: _.property('name'),
fileName: _.property('fileName'),
views: _.property('views'),
isPublished: _.property('isPublished')
};
}
@MutationResolver()
submitPhoto(): GraphQLFieldResolver<any, any> {
return async (obj, { photoInput }, context, info) => {
return await this.photoRepository.persist(photoInput);
};
}
@QueryResolver()
photos(): GraphQLFieldResolver<any, any> {
return async (obj, args, context, info) => {
const photos = await this.photoRepository.find();
if (photos.length > 0) {
return photos;
}
return [];
};
}
@QueryResolver()
getPageOfPhotos(): GraphQLFieldResolver<any, any> {
return async (
obj,
{ page = 0, perPage = 10, sortField, sortOrder, filter },
context,
info
) => {
if (page < 0) {
page = 0;
}
if (perPage < 1) {
perPage = 1;
}
const qb = this.photoRepository
.createQueryBuilder('p')
.setOffset(page * perPage)
.setLimit(perPage);
if (sortField && sortOrder) {
qb.addOrderBy(sortField, sortOrder);
}
const [items, totalCount] = await qb.getManyAndCount();
return {
items,
totalCount
};
};
}
}