Adapters
chemistry
biology
finance
legal
art
climate
agent
Merge
File size: 1,541 Bytes
a295b09
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
scalar DateTime
scalar JSON

enum Namespace {
  infrastructure
  satellite
  # ... other namespaces
}

type Location {
  lat: Float
  lon: Float
}

type Provenance {
  source: String!
  license: String
  retrieved_at: DateTime!
}

type Infrastructure {
  id: ID!
  location: Location!
  roadCondition: String
  severity: Int
  lastReportedAt: DateTime
  provenance: Provenance
}

# Pothole / Fault object
type InfrastructureFault {
  id: ID!
  namespace: Namespace!
  type: String!
  timestamp: DateTime!
  location: Location!
  severity: Int!
  confirmed: Boolean!
  images: [String]
  provenance: Provenance!
}

type Payout {
  id: ID!
  faultId: ID!
  amountMinorUnits: Int!
  currency: String!
  payeeId: String!
  status: String!
  createdAt: DateTime!
  settledAt: DateTime
  txRef: String
}

type Query {
  infraFault(id: ID!): InfrastructureFault
  listInfraFaults(limit: Int, offset: Int): [InfrastructureFault!]
  payoutsForFault(faultId: ID!): [Payout!]
}

input IngestFaultInput {
  namespace: Namespace!
  type: String!
  timestamp: DateTime!
  location: JSON!
  severity: Int!
  images: [String]
  provenance: JSON
}

type Mutation {
  ingestFault(input: IngestFaultInput!): InfrastructureFault!
  confirmFault(id: ID!, confirmed: Boolean!): InfrastructureFault!
  createPayout(faultId: ID!, amountMinorUnits: Int!, currency: String!, payeeId: String!): Payout!
  settlePayout(payoutId: ID!): Payout!
}

type Subscription {
  faultCreated: InfrastructureFault!
  faultConfirmed: InfrastructureFault!
  payoutUpdated: Payout!
}