forked from github/plane
f27efb80e1
* dev: create email notification preference model * dev: intiate models * dev: user notification preferences * dev: create notification logs for the user. * dev: email notification stacking and sending logic * feat: email notification preference settings page. * dev: delete subscribers * dev: issue update ui implementation in email notification * chore: integrate email notification endpoint. * chore: remove toggle switch. * chore: added labels part * fix: refactored base design with tables * dev: email notification templates * dev: template updates * dev: update models * dev: update template for labels and new migrations * fix: profile settings preference sidebar. * dev: update preference endpoints * dev: update the schedule to 5 minutes * dev: update template with priority data * dev: update templates * chore: enable `issue subscribe` button for all users. * chore: notification handling for external api * dev: update origin request --------- Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com> Co-authored-by: LAKHAN BAHETI <lakhanbaheti9@gmail.com> Co-authored-by: Ramesh Kumar Chandra <rameshkumar2299@gmail.com> Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
213 lines
5.9 KiB
TypeScript
213 lines
5.9 KiB
TypeScript
// services
|
|
import { APIService } from "services/api.service";
|
|
// types
|
|
import type {
|
|
TIssue,
|
|
IUser,
|
|
IUserActivityResponse,
|
|
IInstanceAdminStatus,
|
|
IUserProfileData,
|
|
IUserProfileProjectSegregation,
|
|
IUserSettings,
|
|
IUserWorkspaceDashboard,
|
|
IUserEmailNotificationSettings,
|
|
} from "@plane/types";
|
|
// helpers
|
|
import { API_BASE_URL } from "helpers/common.helper";
|
|
|
|
export class UserService extends APIService {
|
|
constructor() {
|
|
super(API_BASE_URL);
|
|
}
|
|
|
|
currentUserConfig() {
|
|
return {
|
|
url: `${this.baseURL}/api/users/me/`,
|
|
headers: this.getHeaders(),
|
|
};
|
|
}
|
|
|
|
async userIssues(
|
|
workspaceSlug: string,
|
|
params: any
|
|
): Promise<
|
|
| {
|
|
[key: string]: TIssue[];
|
|
}
|
|
| TIssue[]
|
|
> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/my-issues/`, {
|
|
params,
|
|
})
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async currentUser(): Promise<IUser> {
|
|
return this.get("/api/users/me/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response;
|
|
});
|
|
}
|
|
|
|
async currentUserInstanceAdminStatus(): Promise<IInstanceAdminStatus> {
|
|
return this.get("/api/users/me/instance-admin/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response;
|
|
});
|
|
}
|
|
|
|
async currentUserSettings(): Promise<IUserSettings> {
|
|
return this.get("/api/users/me/settings/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response;
|
|
});
|
|
}
|
|
|
|
async currentUserEmailNotificationSettings(): Promise<IUserEmailNotificationSettings> {
|
|
return this.get("/api/users/me/notification-preferences/")
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response;
|
|
});
|
|
}
|
|
|
|
async updateUser(data: Partial<IUser>): Promise<any> {
|
|
return this.patch("/api/users/me/", data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async updateUserOnBoard(): Promise<any> {
|
|
return this.patch("/api/users/me/onboard/", {
|
|
is_onboarded: true,
|
|
})
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async updateUserTourCompleted(): Promise<any> {
|
|
return this.patch("/api/users/me/tour-completed/", {
|
|
is_tour_completed: true,
|
|
})
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async updateCurrentUserEmailNotificationSettings(data: Partial<IUserEmailNotificationSettings>): Promise<any> {
|
|
return this.patch("/api/users/me/notification-preferences/", data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getUserActivity(): Promise<IUserActivityResponse> {
|
|
return this.get(`/api/users/me/activities/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async userWorkspaceDashboard(workspaceSlug: string, month: number): Promise<IUserWorkspaceDashboard> {
|
|
return this.get(`/api/users/me/workspaces/${workspaceSlug}/dashboard/`, {
|
|
params: {
|
|
month: month,
|
|
},
|
|
})
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async changePassword(data: { old_password: string; new_password: string; confirm_password: string }): Promise<any> {
|
|
return this.post(`/api/users/me/change-password/`, data)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getUserProfileData(workspaceSlug: string, userId: string): Promise<IUserProfileData> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/user-stats/${userId}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getUserProfileProjectsSegregation(
|
|
workspaceSlug: string,
|
|
userId: string
|
|
): Promise<IUserProfileProjectSegregation> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/user-profile/${userId}/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getUserProfileActivity(workspaceSlug: string, userId: string): Promise<IUserActivityResponse> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/user-activity/${userId}/?per_page=15`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async getUserProfileIssues(workspaceSlug: string, userId: string, params: any): Promise<TIssue[]> {
|
|
return this.get(`/api/workspaces/${workspaceSlug}/user-issues/${userId}/`, {
|
|
params,
|
|
})
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async deactivateAccount() {
|
|
return this.delete(`/api/users/me/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async leaveWorkspace(workspaceSlug: string) {
|
|
return this.post(`/api/workspaces/${workspaceSlug}/members/leave/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async joinProject(workspaceSlug: string, project_ids: string[]): Promise<any> {
|
|
return this.post(`/api/users/me/workspaces/${workspaceSlug}/projects/invitations/`, { project_ids })
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
|
|
async leaveProject(workspaceSlug: string, projectId: string) {
|
|
return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/members/leave/`)
|
|
.then((response) => response?.data)
|
|
.catch((error) => {
|
|
throw error?.response?.data;
|
|
});
|
|
}
|
|
}
|