bb-plane-fork/packages/services/src/cycle/cycle-archive.service.ts
sriram veeraghanta 02d0ee3e0f
chore: add copyright (#8584)
* feat: adding new copyright info on all files

* chore: adding CI
2026-01-27 13:54:22 +05:30

89 lines
3.4 KiB
TypeScript

/**
* Copyright (c) 2023-present Plane Software, Inc. and contributors
* SPDX-License-Identifier: AGPL-3.0-only
* See the LICENSE file for details.
*/
import { API_BASE_URL } from "@plane/constants";
import type { ICycle } from "@plane/types";
import { APIService } from "../api.service";
/**
* Service class for managing archived cycles in a project
* Provides methods for retrieving, archiving, and restoring project cycles
* @extends {APIService}
*/
export class CycleArchiveService extends APIService {
constructor(BASE_URL?: string) {
super(BASE_URL || API_BASE_URL);
}
/**
* Retrieves all archived cycles for a specific project
* @param {string} workspaceSlug - The unique identifier for the workspace
* @param {string} projectId - The unique identifier for the project
* @returns {Promise<ICycle[]>} Array of archived cycles
* @throws {Error} Throws response data if the request fails
*/
async list(workspaceSlug: string, projectId: string): Promise<ICycle[]> {
return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/archived-cycles/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
/**
* Retrieves details of a specific archived cycle
* @param {string} workspaceSlug - The unique identifier for the workspace
* @param {string} projectId - The unique identifier for the project
* @param {string} cycleId - The unique identifier for the cycle
* @returns {Promise<ICycle>} Details of the archived cycle
* @throws {Error} Throws response data if the request fails
*/
async retrieve(workspaceSlug: string, projectId: string, cycleId: string): Promise<ICycle> {
return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/archived-cycles/${cycleId}/`)
.then((res) => res?.data)
.catch((err) => {
throw err?.response?.data;
});
}
/**
* Archives a specific cycle in a project
* @param {string} workspaceSlug - The unique identifier for the workspace
* @param {string} projectId - The unique identifier for the project
* @param {string} cycleId - The unique identifier for the cycle to archive
* @returns {Promise<{archived_at: string}>} Object containing the archive timestamp
* @throws {Error} Throws response data if the request fails
*/
async archive(
workspaceSlug: string,
projectId: string,
cycleId: string
): Promise<{
archived_at: string;
}> {
return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/cycles/${cycleId}/archive/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
/**
* Restores a previously archived cycle
* @param {string} workspaceSlug - The unique identifier for the workspace
* @param {string} projectId - The unique identifier for the project
* @param {string} cycleId - The unique identifier for the cycle to restore
* @returns {Promise<void>} Resolves when the cycle is successfully restored
* @throws {Error} Throws response data if the request fails
*/
async restore(workspaceSlug: string, projectId: string, cycleId: string): Promise<void> {
return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/cycles/${cycleId}/archive/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
}