-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
132 lines (118 loc) · 2.48 KB
/
index.js
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
const { ApolloServer, gql } = require("apollo-server");
const HadithApi = require("./HadithApi");
const resolvers = require("./resolvers");
const typeDefs = gql`
enum CollectionName {
BUKHARI
MUSLIM
NASAI
ABUDAWUD
TIRMIDHI
MALIK
AHMAD
NAWAWI40
FORTY
RIYADUSSALIHIN
MISHKAT
ADAB
SHAMAIL
BULUGH
HISN
}
type CollectionDetail {
lang: String
title: String
shortIntro: String
}
type Collection {
name: String
hasBooks: Boolean
hasChapters: Boolean
collection: [CollectionDetail]
totalHadith: Int
totalAvailableHadith: Int
}
type CollectionsQuery {
collections: [Collection]
total: Int
limit: Int
previous: Int
next: Int
}
type ChapterDetail {
lang: String
chapterNumber: String
chapterTitle: String
intro: String
ending: String
}
type Chapter {
bookNumber: String
chapterId: String
chapter: [ChapterDetail]
}
type Grade {
graded_by: String
grade: String
}
type HadithInfo {
lang: String
chapterNumber: String
chapterTitle: String
urn: Int
body: String
grades: [Grade]
}
type Hadith {
collection: String
bookNumber: String
chapterId: String
hadithNumber: String
hadith: [HadithInfo]
}
type BookInfo {
lang: String
name: String
}
type Book {
bookNumber: String
book: [BookInfo]
hadithStartNumber: Int
hadithEndNumber: Int
numberOfHadith: Int
}
type Query {
# Collections: [Collection]
Collections: CollectionsQuery
Collection(name: CollectionName!): Collection
Chapters(collectionName: CollectionName!, bookNumber: Int!): [Chapter]
getHadithsByCollectionAndBookNumber(
collectionName: CollectionName!
bookNumber: Int!
): [Hadith]
Book(collectionName: CollectionName!, bookNumber: Int!): Book
Books(collectionName: CollectionName!): [Book]
getHadithByCollectionAndHadithNumber(
collectionName: CollectionName!
hadithNumber: Int!
): Hadith
getRandomHadith: Hadith
getHadiths(
collectionName: CollectionName
bookNumber: Int
chapterId: Int
hadithNumber: Int
): [Hadith]
getHadithByUrn(urn: Int!): Hadith
}
`;
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({
hadithApi: new HadithApi(),
}),
});
server.listen({ port: process.env.PORT || 4000 }).then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});