-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschema.graphql
125 lines (103 loc) · 3.13 KB
/
schema.graphql
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
# ---------------------------------------------------------
# Counts --------------------------------------------------
# ---------------------------------------------------------
# thegraph doesn't support count operations, but we need them to paginate results
# This entity is a workaround to this issue, but it's still not enough, as we'd need counts for more complex queries
type Count @entity {
id: ID!
orderTotal: Int!
orderLegacyNFT: Int!
legacyNFTTotal: Int!
started: Int!
}
# ---------------------------------------------------------
# Orders --------------------------------------------------
# ---------------------------------------------------------
# thegraph doesn't support nested property searches, so we're doing promoting properties
# we need from each NFT type to the Order, in order to search for them, prefixing them with search_[nft]_[prop]
type Order @entity {
id: ID!
category: Category!
nft: NFT
nftAddress: Bytes!
txHash: Bytes!
owner: Bytes!
buyer: Bytes
price: BigInt!
status: OrderStatus!
blockNumber: BigInt!
expiresAt: BigInt!
createdAt: BigInt!
updatedAt: BigInt!
}
# ---------------------------------------------------------
# Bids ----------------------------------------------------
# ---------------------------------------------------------
type Bid @entity {
id: ID!
category: Category!
nft: NFT
nftAddress: Bytes!
bidder: Bytes
seller: Bytes
price: BigInt!
fingerprint: Bytes
status: OrderStatus!
blockchainId: String!
blockNumber: BigInt!
expiresAt: BigInt!
createdAt: BigInt!
updatedAt: BigInt!
}
# ---------------------------------------------------------
# NFTs ----------------------------------------------------
# ---------------------------------------------------------
type LegacyNFT @entity {
id: ID!
owner: Account!
description: String
generation: Int
nft: NFT @derivedFrom(field: "legacyNFT")
}
type NFT @entity {
id: ID!
tokenId: BigInt!
contractAddress: Bytes!
category: Category!
owner: Account!
tokenURI: String
orders: [Order!] @derivedFrom(field: "nft") # History of all orders. Should only ever be ONE open order. all others must be cancelled or sold
bids: [Bid!] @derivedFrom(field: "nft") # History of all bids.
activeOrder: Order
name: String
image: String
legacyNFT: LegacyNFT
createdAt: BigInt!
updatedAt: BigInt!
# search indexes
searchOrderStatus: OrderStatus
searchOrderPrice: BigInt
searchOrderExpiresAt: BigInt
searchOrderCreatedAt: BigInt
searchLegacyNFTGeneration: Int # dummy property of legacy nft
}
# ---------------------------------------------------------
# Account (user) -------------------------------------------
# ---------------------------------------------------------
type Account @entity {
id: ID! # ETH addr
address: Bytes!
nfts: [NFT!] @derivedFrom(field: "owner")
kty: BigInt # Amount of kty owned
}
# ---------------------------------------------------------
# Enums ---------------------------------------------------
# ---------------------------------------------------------
enum Category @entity {
legacyNFT
}
enum OrderStatus @entity {
open
sold
cancelled
}