Skip to content

Commit

Permalink
Merge branch 'master' into feat/check-if-coupon-is-used-by-user-endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
masterprog-cmd committed Apr 30, 2024
2 parents 0ef9dcf + 0b2c8f4 commit 04faf3a
Show file tree
Hide file tree
Showing 7 changed files with 368 additions and 34 deletions.
146 changes: 122 additions & 24 deletions src/drive/storage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,16 @@ import {
FolderAncestor,
FolderMeta,
ReplaceFile,
FetchPaginatedFilesContent,
FetchPaginatedFoldersContent,
MoveFolderUuidPayload,
MoveFileUuidPayload,
} from './types';
import { ApiSecurity, ApiUrl, AppDetails } from '../../shared';
import { headersWithToken, addResourcesTokenToHeaders } from '../../shared/headers';
import { HttpClient, RequestCanceler } from '../../shared/http/client';
import { Token } from '../../auth';
import { UUID } from '../../shared/types/userSettings';

export * as StorageTypes from './types';

Expand Down Expand Up @@ -77,6 +82,20 @@ export class Storage {
);
}

/**
* Moves a specific folder to a new location
* @param payload
*/
public async moveFolderByUuid(payload: MoveFolderUuidPayload): Promise<FolderMeta> {
return this.client.patch(
`/folders/${payload.folderUuid}`,
{
destinationFolder: payload.destinationFolderUuid,
},
this.headers(),
);
}

/**
* Updates the metadata of a folder
* @param payload
Expand Down Expand Up @@ -118,9 +137,9 @@ export class Storage {
/**
* Gets the files in a folder.
*
* @param {number} folderId - ID of the folder.
* @param {number} folderId - The ID of the folder.
* @param {number} [offset=0] - The position of the first file to return.
* @param {number} [limit=50] - The number of files to be returned.
* @param {number} [limit=50] - The max number of files to be returned.
* @param {string} [sort=plainName] - The reference column to sort it.
* @param {string} [order=ASC] - The order to be followed.
* @returns {[Promise<FetchPaginatedFolderContentResponse>, RequestCanceler]} An array containing a promise to get the API response and a function to cancel the request.
Expand All @@ -132,20 +151,47 @@ export class Storage {
sort = '',
order = '',
): [Promise<FetchPaginatedFolderContentResponse>, RequestCanceler] {
const offsetQuery = `/?offset=${offset}`;
const offsetQuery = `?offset=${offset}`;
const limitQuery = `&limit=${limit}`;
const sortQuery = `&sort=${sort}`;
const orderQuery = `&order=${order}`;
let query;
const sortQuery = sort !== '' ? `&sort=${sort}` : '';
const orderQuery = order !== '' ? `&order=${order}` : '';

if (sort === '' && order === '') {
query = `${offsetQuery}${limitQuery}`;
} else {
query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;
}
const query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;

const { promise, requestCanceler } = this.client.getCancellable<FetchPaginatedFolderContentResponse>(
`folders/${folderId}/files${query}`,
`folders/${folderId}/files/${query}`,
this.headers(),
);

return [promise, requestCanceler];
}

/**
* Gets the files in a folder by its UUID.
*
* @param {UUID} folderUuid - The UUID of the folder.
* @param {number} [offset=0] - The position of the first file to return.
* @param {number} [limit=50] - The max number of files to be returned.
* @param {string} [sort=plainName] - The reference column to sort it.
* @param {string} [order=ASC] - The order to be followed.
* @returns {[Promise<FetchPaginatedFilesContent>, RequestCanceler]} An array containing a promise to get the API response and a function to cancel the request.
*/
public getFolderFilesByUuid(
folderUuid: UUID,
offset = 0,
limit = 50,
sort = '',
order = '',
): [Promise<FetchPaginatedFilesContent>, RequestCanceler] {
const offsetQuery = `?offset=${offset}`;
const limitQuery = `&limit=${limit}`;
const sortQuery = sort !== '' ? `&sort=${sort}` : '';
const orderQuery = order !== '' ? `&order=${order}` : '';

const query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;

const { promise, requestCanceler } = this.client.getCancellable<FetchPaginatedFilesContent>(
`folders/content/${folderUuid}/files/${query}`,
this.headers(),
);

Expand All @@ -157,7 +203,7 @@ export class Storage {
*
* @param {number} folderId - The ID of the folder.
* @param {number} [offset=0] - The position of the first subfolder to return.
* @param {number} [limit=50] - The number of subfolders to return.
* @param {number} [limit=50] - The max number of subfolders to return.
* @param {string} [sort=plainName] - The reference column to sort it.
* @param {string} [order=ASC] - The order to be followed.
* @returns {[Promise<FetchPaginatedFolderContentResponse>, RequestCanceler]} An array containing a promise to get the API response and a function to cancel the request.
Expand All @@ -169,19 +215,47 @@ export class Storage {
sort = '',
order = '',
): [Promise<FetchPaginatedFolderContentResponse>, RequestCanceler] {
const offsetQuery = `/?offset=${offset}`;
const offsetQuery = `?offset=${offset}`;
const limitQuery = `&limit=${limit}`;
const sortQuery = `&sort=${sort}`;
const orderQuery = `&order=${order}`;
let query;
if (sort === '' && order === '') {
query = `${offsetQuery}${limitQuery}`;
} else {
query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;
}
const sortQuery = sort !== '' ? `&sort=${sort}` : '';
const orderQuery = order !== '' ? `&order=${order}` : '';

const query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;

const { promise, requestCanceler } = this.client.getCancellable<FetchPaginatedFolderContentResponse>(
`folders/${folderId}/folders${query}`,
`folders/${folderId}/folders/${query}`,
this.headers(),
);

return [promise, requestCanceler];
}

/**
* Gets the subfolders of a folder by its UUID.
*
* @param {UUID} folderUuid - The UUID of the folder.
* @param {number} [offset=0] - The position of the first subfolder to return.
* @param {number} [limit=50] - The max number of subfolders to return.
* @param {string} [sort=plainName] - The reference column to sort it.
* @param {string} [order=ASC] - The order to be followed.
* @returns {[Promise<FetchPaginatedFoldersContent>, RequestCanceler]} An array containing a promise to get the API response and a function to cancel the request.
*/
public getFolderFoldersByUuid(
folderUuid: UUID,
offset = 0,
limit = 50,
sort = '',
order = '',
): [Promise<FetchPaginatedFoldersContent>, RequestCanceler] {
const offsetQuery = `?offset=${offset}`;
const limitQuery = `&limit=${limit}`;
const sortQuery = sort !== '' ? `&sort=${sort}` : '';
const orderQuery = order !== '' ? `&order=${order}` : '';

const query = `${offsetQuery}${limitQuery}${sortQuery}${orderQuery}`;

const { promise, requestCanceler } = this.client.getCancellable<FetchPaginatedFoldersContent>(
`folders/content/${folderUuid}/folders/${query}`,
this.headers(),
);

Expand Down Expand Up @@ -288,6 +362,20 @@ export class Storage {
);
}

/**
* Moves a specific file to a new location
* @param payload
*/
public async moveFileByUuid(payload: MoveFileUuidPayload): Promise<FileMeta> {
return this.client.patch(
`/files/${payload.fileUuid}`,
{
destinationFolder: payload.destinationFolderUuid,
},
this.headers(),
);
}

/**
* Returns a list of the n most recent files
* @param limit
Expand All @@ -311,7 +399,7 @@ export class Storage {
* Add Items to Trash
* @param payload
*/
public addItemsToTrash(payload: AddItemsToTrashPayload) {
public addItemsToTrash(payload: AddItemsToTrashPayload): Promise<void> {
return this.client.post(
'/storage/trash/add',
{
Expand Down Expand Up @@ -386,6 +474,16 @@ export class Storage {
return this.client.get<FolderMeta>(`folders/${uuid}/meta`, this.headers());
}

/**
* Gets the meta of a given folder Id
*
* @param {number} folderId - Id of the folder.
* @returns {Promise<FolderMeta>}
*/
public getFolderMetaById(folderId: number): Promise<FolderMeta> {
return this.client.get<FolderMeta>(`folders/${folderId}/metadata`, this.headers());
}

/**
* Replaces a file with a new one.
*
Expand Down
81 changes: 78 additions & 3 deletions src/drive/storage/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { SharingMeta } from '../share/types';

export interface DriveFolderData {
id: number;
bucket: string | null;
Expand Down Expand Up @@ -154,6 +156,69 @@ export interface FetchPaginatedFolderContentResponse {
}[];
}

export enum FileStatus {
EXISTS = 'EXISTS',
TRASHED = 'TRASHED',
DELETED = 'DELETED',
}

export interface FetchPaginatedFile {
id: number;
uuid: string;
fileId: string;
name: string;
type: string;
size: bigint;
bucket: string;
folderId: number;
folder?: any;
folderUuid: string;
encryptVersion: string;
deleted: boolean;
deletedAt: Date | null;
removed: boolean;
removedAt: Date | null;
userId: number;
user?: any;
modificationTime: Date;
plainName: string;
createdAt: Date;
updatedAt: Date;
status: FileStatus;
shares?: ShareLink[];
thumbnails?: Thumbnail[];
sharings?: SharingMeta[];
}

export interface FetchPaginatedFolder {
id: number;
parentId: number;
parentUuid: string;
parent?: any;
name: string;
bucket: string;
userId: number;
uuid: string;
user?: any;
plainName: string;
encryptVersion: string;
deleted: boolean;
removed: boolean;
deletedAt: Date | null;
createdAt: Date;
updatedAt: Date;
removedAt: Date | null;
sharings?: SharingMeta[];
}

export interface FetchPaginatedFilesContent {
files: FetchPaginatedFile[];
}

export interface FetchPaginatedFoldersContent {
folders: FetchPaginatedFolder[];
}

export interface FetchTrashContentResponse {
result: {
id: number;
Expand Down Expand Up @@ -225,6 +290,11 @@ export interface MoveFolderPayload {
destinationFolderId: number;
}

export interface MoveFolderUuidPayload {
folderUuid: string;
destinationFolderUuid: string;
}

export interface MoveFolderResponse {
item: DriveFolderData;
destination: number;
Expand Down Expand Up @@ -263,6 +333,11 @@ export interface MoveFilePayload {
bucketId: string;
}

export interface MoveFileUuidPayload {
fileUuid: string;
destinationFolderUuid: string;
}

export interface MoveFileResponse {
item: DriveFileData;
destination: number;
Expand All @@ -272,15 +347,15 @@ export interface MoveFileResponse {
export type UsageResponse = {
_id: string;
} & {
[k in 'drive' | 'backups' | 'total']: number;
};
[k in 'drive' | 'backups' | 'total']: number;
};

export interface FetchLimitResponse {
maxSpaceBytes: number;
}

export interface AddItemsToTrashPayload {
items: Array<{ id: string; type: string }>;
items: Array<{ id?: string; uuid?: string; type: string }>;
}

export interface SearchResult {
Expand Down
2 changes: 1 addition & 1 deletion src/drive/trash/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export class Trash {
* Add Items to Trash
* @param payload
*/
public addItemsToTrash(payload: AddItemsToTrashPayload) {
public addItemsToTrash(payload: AddItemsToTrashPayload): Promise<void> {
return this.client.post(
'/storage/trash/add',
{
Expand Down
2 changes: 1 addition & 1 deletion src/drive/trash/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export interface AddItemsToTrashPayload {
items: Array<{ id: string; type: string }>;
items: Array<{ id?: string; uuid?: string; type: string }>;
}

export interface DeleteFilePayload {
Expand Down
6 changes: 4 additions & 2 deletions src/shared/http/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,13 @@ export class HttpClient {
let errorMessage: string, errorStatus: number;

if (error.response) {
const response = error.response as AxiosResponse<{ error: string }>;
const response = error.response as AxiosResponse<{ error: string, message: string, statusCode: number }>;
if (response.status === 401) {
this.unauthorizedCallback();
}
if (response.data.error !== undefined) {
if (response.data.message !== undefined) {
errorMessage = response.data.message;
} else if (response.data.error !== undefined) {
errorMessage = response.data.error;
} else {
// TODO : remove when endpoints of updateMetadata(file/folder) are updated
Expand Down
Loading

0 comments on commit 04faf3a

Please sign in to comment.