enum Role { Owner Maintainer Reader } enum Permission { View Edit } enum Environment { Production Preview Development } enum DeploymentStatus { Building Ready Error } enum DomainStatus { Live Pending } type User { id: String! name: String! email: String! organizations: [Organization!] projects: [Project!] createdAt: String! updatedAt: String! } type Organization { id: String! name: String! projects: [Project!] createdAt: String! updatedAt: String! members: [OrganizationMember!] } type OrganizationMember { id: String! member: User! role: Role! createdAt: String! updatedAt: String! } type Project { id: String! owner: User! deployments: [Deployment!] name: String! repository: String! prodBranch: String! description: String template: String framework: String! webhooks: [String!] members: [ProjectMember!] environmentVariables: [EnvironmentVariable!] createdAt: String! updatedAt: String! organization: Organization! icon: String } type ProjectMember { id: String! member: User! permissions: [Permission!]! createdAt: String! updatedAt: String! } type Deployment { id: String! domain: Domain branch: String! commitHash: String! title: String! environment: Environment! isCurrent: Boolean! status: DeploymentStatus! createdAt: String! updatedAt: String! createdBy: User! } type Domain { id: String! branch: String! name: String! isRedirected: Boolean! status: DomainStatus! createdAt: String! updatedAt: String! } type EnvironmentVariable { id: String! environments: [Environment!]! key: String! value: String! createdAt: String! updatedAt: String! } type Query { user: User! organizations: [Organization!] projects: [Project!] projectsInOrganization(organizationId: String!): [Project!] project(projectId: String!): Project deployments(projectId: String!): [Deployment!] environmentVariables(projectId: String!): [EnvironmentVariable!] projectMembers(projectId: String!): [ProjectMember!] searchProjects(searchText: String!): [Project!] domains(projectId: String!): [Domain!] } type Mutation { removeMember(memberId: String!): Boolean! addEnvironmentVariables(projectId: String!, environmentVariables: [AddEnvironmentVariableInput!]): Boolean! updateDeploymentToProd(deploymentId: String!): Boolean! updateProject(projectId: String!, projectDetails: UpdateProjectInput): Boolean! redeployToProd(deploymentId: String!): Boolean! deleteProject(projectId: String!): Boolean! rollbackDeployment(projectId: String!, deploymentId: String!): Boolean! addDomain(projectId: String!, domainDetails: AddDomainInput!): Boolean! updateDomain(domainId: String!, domainDetails: UpdateDomainInput!): Boolean! } input AddEnvironmentVariableInput { environments: [Environment!]! key: String! value: String! } input UpdateProjectInput { name: String description: String } input AddDomainInput { name: String! } input UpdateDomainInput { name: String isRedirected: Boolean branch: String }