Initial Phoenix Sankofa Cloud setup
- Complete project structure with Next.js frontend - GraphQL API backend with Apollo Server - Portal application with NextAuth - Crossplane Proxmox provider - GitOps configurations - CI/CD pipelines - Testing infrastructure (Vitest, Jest, Go tests) - Error handling and monitoring - Security hardening - UI component library - Documentation
This commit is contained in:
134
docs/api/schema.graphql
Normal file
134
docs/api/schema.graphql
Normal file
@@ -0,0 +1,134 @@
|
||||
# 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
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user