mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
a9802f816e
* feat: initiate integrations * feat: initiate github integration create models for the same * feat: github integration views * fix: update workspace integration view to create bot users * refactor: rename repository model * refactor: update github repo sync endpoint to create repo and sync in one go * refactor: update issue activities to post the updates to segway hook * refactor: update endpoints to get project id and add actor as a member of project in repo sync * fix: make is bot as a read only field * fix: remove github repo imports * fix: url mapping * feat: repo views * refactor: update webhook request endpoint * refactor: rename repositories table to github_repositories * fix: workpace integration actor * feat: label for github integration * refactor: issue activity on create issue * refactor: repo create endpoint and add db constraints for repo sync and issues * feat: create api token on workpsace integration and avatar_url for integrations * refactor: add uuid primary key for Audit model * refactor: remove id from auditfield to maintain integrity and make avatar blank if none supplied * feat: track comments on an issue * feat: comment syncing from plane to github * fix: prevent activities created by bot to be sent to webhook * feat: github app installation id retrieve * feat: github app installation id saved into db * feat: installation_id for the github integragation and unique provider and project base integration for repo * refactor: remove actor logic from activity task * feat: saving github metadata using installation id in workspace integration table * feat: github repositories endpoint * feat: github and project repos synchronisation * feat: delete issue and delete comment activity * refactor: remove print logs * FIX: reading env names for github app while installation * refactor: update bot user firstname with title * fix: add is_bot value in field --------- Co-authored-by: venplane <venkatesh@plane.so>
189 lines
5.7 KiB
TypeScript
189 lines
5.7 KiB
TypeScript
// services
|
|
import APIService from "services/api.service";
|
|
|
|
const { NEXT_PUBLIC_API_BASE_URL } = process.env;
|
|
|
|
// types
|
|
import {
|
|
IWorkspace,
|
|
IWorkspaceMember,
|
|
IWorkspaceMemberInvitation,
|
|
ILastActiveWorkspaceDetails,
|
|
} from "types";
|
|
|
|
class WorkspaceService extends APIService {
|
|
constructor() {
|
|
super(NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000");
|
|
}
|
|
|
|
async userWorkspaces(): Promise<IWorkspace[]> {
|
|
return this.get("/api/users/me/workspaces/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getWorkspace(workspaceSlug: string): Promise<IWorkspace> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response;
|
|
});
|
|
}
|
|
|
|
async createWorkspace(data: Partial<IWorkspace>): Promise<IWorkspace> {
|
|
return this.post("/api/workspaces/", data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async updateWorkspace(workspaceSlug: string, data: Partial<IWorkspace>): Promise<IWorkspace> {
|
|
return this.patch(`/api/workspaces/${workspaceSlug}/`, data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async deleteWorkspace(workspaceSlug: string): Promise<any> {
|
|
return this.delete(`/api/workspaces/${workspaceSlug}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async inviteWorkspace(workspaceSlug: string, data: any): Promise<any> {
|
|
return this.post(`/api/workspaces/${workspaceSlug}/invite/`, data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async joinWorkspace(workspaceSlug: string, invitationId: string, data: any): Promise<any> {
|
|
return this.post(
|
|
`/api/users/me/invitations/workspaces/${workspaceSlug}/${invitationId}/join/`,
|
|
data,
|
|
{
|
|
headers: {},
|
|
}
|
|
)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async joinWorkspaces(data: any): Promise<any> {
|
|
return this.post("/api/users/me/invitations/workspaces/", data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getLastActiveWorkspaceAndProjects(): Promise<ILastActiveWorkspaceDetails> {
|
|
return this.get("/api/users/last-visited-workspace/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async userWorkspaceInvitations(): Promise<IWorkspaceMemberInvitation[]> {
|
|
return this.get("/api/users/me/invitations/workspaces/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async workspaceMembers(workspaceSlug: string): Promise<IWorkspaceMember[]> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/members/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async workspaceMemberMe(workspaceSlug: string): Promise<IWorkspaceMember> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/workspace-members/me/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async updateWorkspaceMember(
|
|
workspaceSlug: string,
|
|
memberId: string,
|
|
data: Partial<IWorkspaceMember>
|
|
): Promise<IWorkspaceMember> {
|
|
return this.put(`/api/workspaces/${workspaceSlug}/members/${memberId}/`, data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async deleteWorkspaceMember(workspaceSlug: string, memberId: string): Promise<any> {
|
|
return this.delete(`/api/workspaces/${workspaceSlug}/members/${memberId}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async workspaceInvitations(workspaceSlug: string): Promise<IWorkspaceMemberInvitation[]> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/invitations/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getWorkspaceInvitation(invitationId: string): Promise<IWorkspaceMemberInvitation> {
|
|
return this.get(`/api/users/me/invitations/${invitationId}/`, { headers: {} })
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async deleteWorkspaceInvitations(workspaceSlug: string, invitationId: string): Promise<any> {
|
|
return this.delete(`/api/workspaces/${workspaceSlug}/invitations/${invitationId}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async workspaceSlugCheck(slug: string): Promise<any> {
|
|
return this.get(`/api/workspace-slug-check/?slug=${slug}`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
async getIntegrations(): Promise<any> {
|
|
return this.get(`/api/integrations/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
async getWorkspaceIntegrations(slug: string): Promise<any> {
|
|
return this.get(`/api/workspaces/${slug}/workspace-integrations/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
}
|
|
|
|
export default new WorkspaceService();
|