135 lines
2.0 KiB
GraphQL
135 lines
2.0 KiB
GraphQL
|
|
# GraphQL Schema
|
||
|
|
|
||
|
|
```graphql
|
||
|
|
scalar DateTime
|
||
|
|
scalar JSON
|
||
|
|
|
||
|
|
type Query {
|
||
|
|
health: HealthStatus
|
||
|
|
resources(filter: ResourceFilter): [Resource!]!
|
||
|
|
resource(id: ID!): Resource
|
||
|
|
sites: [Site!]!
|
||
|
|
site(id: ID!): Site
|
||
|
|
me: User
|
||
|
|
users: [User!]!
|
||
|
|
user(id: ID!): User
|
||
|
|
}
|
||
|
|
|
||
|
|
type Mutation {
|
||
|
|
login(email: String!, password: String!): AuthPayload!
|
||
|
|
logout: Boolean!
|
||
|
|
createResource(input: CreateResourceInput!): Resource!
|
||
|
|
updateResource(id: ID!, input: UpdateResourceInput!): Resource!
|
||
|
|
deleteResource(id: ID!): Boolean!
|
||
|
|
createUser(input: CreateUserInput!): User!
|
||
|
|
updateUser(id: ID!, input: UpdateUserInput!): User!
|
||
|
|
deleteUser(id: ID!): Boolean!
|
||
|
|
}
|
||
|
|
|
||
|
|
type Subscription {
|
||
|
|
resourceUpdated(id: ID!): Resource!
|
||
|
|
resourceCreated: Resource!
|
||
|
|
resourceDeleted(id: ID!): ID!
|
||
|
|
}
|
||
|
|
|
||
|
|
type HealthStatus {
|
||
|
|
status: String!
|
||
|
|
timestamp: DateTime!
|
||
|
|
version: String!
|
||
|
|
}
|
||
|
|
|
||
|
|
type Resource {
|
||
|
|
id: ID!
|
||
|
|
name: String!
|
||
|
|
type: ResourceType!
|
||
|
|
status: ResourceStatus!
|
||
|
|
site: Site!
|
||
|
|
metadata: JSON
|
||
|
|
createdAt: DateTime!
|
||
|
|
updatedAt: DateTime!
|
||
|
|
}
|
||
|
|
|
||
|
|
type Site {
|
||
|
|
id: ID!
|
||
|
|
name: String!
|
||
|
|
region: String!
|
||
|
|
status: SiteStatus!
|
||
|
|
resources: [Resource!]!
|
||
|
|
createdAt: DateTime!
|
||
|
|
updatedAt: DateTime!
|
||
|
|
}
|
||
|
|
|
||
|
|
type User {
|
||
|
|
id: ID!
|
||
|
|
email: String!
|
||
|
|
name: String!
|
||
|
|
role: UserRole!
|
||
|
|
createdAt: DateTime!
|
||
|
|
updatedAt: DateTime!
|
||
|
|
}
|
||
|
|
|
||
|
|
type AuthPayload {
|
||
|
|
token: String!
|
||
|
|
user: User!
|
||
|
|
}
|
||
|
|
|
||
|
|
enum ResourceType {
|
||
|
|
VM
|
||
|
|
CONTAINER
|
||
|
|
STORAGE
|
||
|
|
NETWORK
|
||
|
|
}
|
||
|
|
|
||
|
|
enum ResourceStatus {
|
||
|
|
PENDING
|
||
|
|
PROVISIONING
|
||
|
|
RUNNING
|
||
|
|
STOPPED
|
||
|
|
ERROR
|
||
|
|
DELETING
|
||
|
|
}
|
||
|
|
|
||
|
|
enum SiteStatus {
|
||
|
|
ACTIVE
|
||
|
|
INACTIVE
|
||
|
|
MAINTENANCE
|
||
|
|
}
|
||
|
|
|
||
|
|
enum UserRole {
|
||
|
|
ADMIN
|
||
|
|
USER
|
||
|
|
VIEWER
|
||
|
|
}
|
||
|
|
|
||
|
|
input ResourceFilter {
|
||
|
|
type: ResourceType
|
||
|
|
status: ResourceStatus
|
||
|
|
siteId: ID
|
||
|
|
}
|
||
|
|
|
||
|
|
input CreateResourceInput {
|
||
|
|
name: String!
|
||
|
|
type: ResourceType!
|
||
|
|
siteId: ID!
|
||
|
|
metadata: JSON
|
||
|
|
}
|
||
|
|
|
||
|
|
input UpdateResourceInput {
|
||
|
|
name: String
|
||
|
|
metadata: JSON
|
||
|
|
}
|
||
|
|
|
||
|
|
input CreateUserInput {
|
||
|
|
email: String!
|
||
|
|
name: String!
|
||
|
|
password: String!
|
||
|
|
role: UserRole
|
||
|
|
}
|
||
|
|
|
||
|
|
input UpdateUserInput {
|
||
|
|
name: String
|
||
|
|
role: UserRole
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|