Implement creating project by importing repository (#49)

* Implement create project with import repository

* Add button for creating project in deploy step
This commit is contained in:
2024-02-01 18:10:15 +05:30
committed by GitHub
parent 0aa35d05f4
commit ef89d69577
22 changed files with 404 additions and 222 deletions
+21
View File
@@ -326,6 +326,27 @@ export class Database {
}
}
async addProject (userId: string, projectDetails: DeepPartial<Project>): Promise<Project> {
const projectRepository = this.dataSource.getRepository(Project);
// TODO: Check if organization exists
const newProject = projectRepository.create(projectDetails);
// TODO: Set default empty array for webhooks in TypeORM
newProject.webhooks = [];
// TODO: Set icon according to framework
newProject.icon = '';
newProject.owner = Object.assign(new User(), {
id: Number(userId)
});
newProject.organization = Object.assign(new Organization(), {
id: Number(projectDetails.organizationId)
});
return projectRepository.save(newProject);
}
async updateProjectById (projectId: string, updates: DeepPartial<Project>): Promise<boolean> {
const projectRepository = this.dataSource.getRepository(Project);
const updateResult = await projectRepository.update({ id: projectId }, updates);
+8 -5
View File
@@ -28,6 +28,9 @@ export class Project {
@JoinColumn({ name: 'organizationId' })
organization!: Organization | null;
@Column('integer')
organizationId!: number;
@Column('varchar')
name!: string;
@@ -37,14 +40,14 @@ export class Project {
@Column('varchar', { length: 255, default: 'main' })
prodBranch!: string;
@Column('text')
@Column('text', { default: '' })
description!: string;
@Column('varchar')
template!: string;
@Column('varchar', { nullable: true })
template!: string | null;
@Column('varchar')
framework!: string;
@Column('varchar', { nullable: true })
framework!: string | null;
@Column({
type: 'simple-array'
+10
View File
@@ -206,6 +206,16 @@ export const createResolvers = async (db: Database, app: OAuthApp): Promise<any>
}
},
addProject: async (_: any, { projectDetails }: { projectDetails: DeepPartial<Project> }, context: any) => {
try {
await db.addProject(context.userId, projectDetails);
return true;
} catch (err) {
log(err);
return false;
}
},
updateProject: async (_: any, { projectId, projectDetails }: { projectId: string, projectDetails: DeepPartial<Project> }) => {
try {
return await db.updateProjectById(projectId, projectDetails);
+41 -33
View File
@@ -64,7 +64,7 @@ type Project {
prodBranch: String!
description: String
template: String
framework: String!
framework: String
webhooks: [String!]
members: [ProjectMember!]
environmentVariables: [EnvironmentVariable!]
@@ -116,48 +116,23 @@ type EnvironmentVariable {
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 AuthResult {
token: String!
}
type Mutation {
removeProjectMember(projectMemberId: String!): Boolean!
updateProjectMember(projectMemberId: String!, data: UpdateProjectMemberInput): Boolean!
addProjectMember(projectId: String!, data: AddProjectMemberInput): Boolean!
addEnvironmentVariables(projectId: String!, environmentVariables: [AddEnvironmentVariableInput!]): Boolean!
removeEnvironmentVariable(environmentVariableId: String!): Boolean!
updateEnvironmentVariable(environmentVariableId: String!, environmentVariable: UpdateEnvironmentVariableInput!): Boolean!
updateDeploymentToProd(deploymentId: String!): Boolean!
updateProject(projectId: String!, projectDetails: UpdateProjectInput): Boolean!
redeployToProd(deploymentId: String!): Boolean!
deleteProject(projectId: String!): Boolean!
deleteDomain(domainId: String!): Boolean!
rollbackDeployment(projectId: String!, deploymentId: String!): Boolean!
addDomain(projectId: String!, domainDetails: AddDomainInput!): Boolean!
updateDomain(domainId: String!, domainDetails: UpdateDomainInput!): Boolean!
authenticateGitHub(code: String!): AuthResult!
unauthenticateGitHub: Boolean!
}
input AddEnvironmentVariableInput {
environments: [Environment!]!
key: String!
value: String!
}
input AddProjectInput {
organizationId: String!
name: String!
repository: String!
prodBranch: String!
}
input UpdateProjectInput {
name: String
description: String
@@ -188,3 +163,36 @@ input AddProjectMemberInput {
input UpdateProjectMemberInput {
permissions: [Permission]
}
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 {
addProjectMember(projectId: String!, data: AddProjectMemberInput): Boolean!
updateProjectMember(projectMemberId: String!, data: UpdateProjectMemberInput): Boolean!
removeProjectMember(projectMemberId: String!): Boolean!
addEnvironmentVariables(projectId: String!, environmentVariables: [AddEnvironmentVariableInput!]): Boolean!
updateEnvironmentVariable(environmentVariableId: String!, environmentVariable: UpdateEnvironmentVariableInput!): Boolean!
removeEnvironmentVariable(environmentVariableId: String!): Boolean!
updateDeploymentToProd(deploymentId: String!): Boolean!
addProject(projectDetails: AddProjectInput): Boolean!
updateProject(projectId: String!, projectDetails: UpdateProjectInput): Boolean!
redeployToProd(deploymentId: String!): Boolean!
deleteProject(projectId: String!): Boolean!
deleteDomain(domainId: String!): Boolean!
rollbackDeployment(projectId: String!, deploymentId: String!): Boolean!
addDomain(projectId: String!, domainDetails: AddDomainInput!): Boolean!
updateDomain(domainId: String!, domainDetails: UpdateDomainInput!): Boolean!
authenticateGitHub(code: String!): AuthResult!
unauthenticateGitHub: Boolean!
}