tr]:last:border-b-0", className)}
+ {...props}
+ />
+ );
+}
+
+function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
+ return (
+
+ );
+}
+
+function TableHead({ className, ...props }: React.ComponentProps<"th">) {
+ return (
+ [role=checkbox]]:translate-y-[2px]",
+ className
+ )}
+ {...props}
+ />
+ );
+}
+
+function TableCell({ className, ...props }: React.ComponentProps<"td">) {
+ return (
+ | [role=checkbox]]:translate-y-[2px]",
+ className
+ )}
+ {...props}
+ />
+ );
+}
+
+function TableCaption({ className, ...props }: React.ComponentProps<"caption">) {
+ return (
+
+ );
+}
+
+export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };
diff --git a/apps/web/src/config/axios.ts b/apps/web/src/config/api.ts
similarity index 51%
rename from apps/web/src/config/axios.ts
rename to apps/web/src/config/api.ts
index 67486db..bbe5f41 100644
--- a/apps/web/src/config/axios.ts
+++ b/apps/web/src/config/api.ts
@@ -1,11 +1,10 @@
import axios from "axios";
-const axiosInstance = axios.create({
- baseURL: import.meta.env.VITE_API_URL,
+const apiInstance = axios.create({
headers: {
"Content-Type": "application/json",
},
withCredentials: true,
});
-export default axiosInstance;
+export default apiInstance;
diff --git a/apps/web/src/config/i18n.ts b/apps/web/src/config/i18n.ts
deleted file mode 100644
index 3bdae97..0000000
--- a/apps/web/src/config/i18n.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import arTranslations from "../locales/ar-SA.json";
-import deTranslations from "../locales/de-DE.json";
-import enTranslations from "../locales/en-US.json";
-import esTranslations from "../locales/es-ES.json";
-import frTranslations from "../locales/fr-FR.json";
-import hiTranslations from "../locales/hi-IN.json";
-import jaTranslations from "../locales/ja-JP.json";
-import koTranslations from "../locales/ko-KR.json";
-import ptTranslations from "../locales/pt-BR.json";
-import ruTranslations from "../locales/ru-RU.json";
-import trTranslations from "../locales/tr-TR.json";
-import zhTranslations from "../locales/zh-CN.json";
-import i18n from "i18next";
-import LanguageDetector from "i18next-browser-languagedetector";
-import { initReactI18next } from "react-i18next";
-
-i18n
- .use(LanguageDetector)
- .use(initReactI18next)
- .init({
- resources: {
- "en-US": {
- translation: enTranslations,
- },
- "pt-BR": {
- translation: ptTranslations,
- },
- "fr-FR": {
- translation: frTranslations,
- },
- "es-ES": {
- translation: esTranslations,
- },
- "de-DE": {
- translation: deTranslations,
- },
- "ru-RU": {
- translation: ruTranslations,
- },
- "hi-IN": {
- translation: hiTranslations,
- },
- "ar-SA": {
- translation: arTranslations,
- },
- "ja-JP": {
- translation: jaTranslations,
- },
- "ko-KR": {
- translation: koTranslations,
- },
- "tr-TR": {
- translation: trTranslations,
- },
- "zh-CN": {
- translation: zhTranslations,
- },
- },
- fallbackLng: "en-US",
- supportedLngs: [
- "en-US",
- "pt-BR",
- "fr-FR",
- "es-ES",
- "de-DE",
- "ru-RU",
- "hi-IN",
- "ar-SA",
- "ja-JP",
- "ko-KR",
- "tr-TR",
- "zh-CN",
- ],
- interpolation: {
- escapeValue: false,
- },
- });
-
-export default i18n;
diff --git a/apps/web/src/config/site.ts b/apps/web/src/config/site.ts
index 60f3e22..000e9d1 100644
--- a/apps/web/src/config/site.ts
+++ b/apps/web/src/config/site.ts
@@ -8,7 +8,7 @@ export const siteConfig = {
},
{
label: "Docs",
- href: "https://palmr-docs.kyantech.com.br",
+ href: "https://palmr.kyantech.com.br",
},
],
navMenuItems: [
@@ -18,12 +18,12 @@ export const siteConfig = {
},
{
label: "Docs",
- href: "https://palmr-docs.kyantech.com.br",
+ href: "https://palmr.kyantech.com.br",
},
],
links: {
github: "https://github.com/kyantech/Palmr",
- docs: "https://palmr-docs.kyantech.com.br",
+ docs: "https://palmr.kyantech.com.br",
sponsor: "https://github.com/sponsors/kyantech",
},
};
diff --git a/apps/web/src/contexts/app-info-context.tsx b/apps/web/src/contexts/app-info-context.tsx
index f983b6f..b22ec5a 100644
--- a/apps/web/src/contexts/app-info-context.tsx
+++ b/apps/web/src/contexts/app-info-context.tsx
@@ -1,7 +1,8 @@
-import { getAppInfo } from "@/http/endpoints";
-import { createContext, useContext, useEffect, useState } from "react";
+import { create } from "zustand";
-interface AppInfoContextType {
+import { getAppInfo } from "@/http/endpoints";
+
+interface AppInfoStore {
appName: string;
appLogo: string;
setAppName: (name: string) => void;
@@ -9,62 +10,46 @@ interface AppInfoContextType {
refreshAppInfo: () => Promise;
}
-const AppInfoContext = createContext({
- appName: "",
- appLogo: "",
- setAppName: () => {},
- setAppLogo: () => {},
- refreshAppInfo: async () => {},
+const updateTitle = (name: string) => {
+ document.title = name;
+};
+
+export const useAppInfo = create((set) => {
+ if (typeof window !== "undefined") {
+ getAppInfo()
+ .then((response) => {
+ set({
+ appName: response.data.appName,
+ appLogo: response.data.appLogo,
+ });
+ updateTitle(response.data.appName);
+ })
+ .catch((error) => {
+ console.error("Failed to fetch app info:", error);
+ });
+ }
+
+ return {
+ appName: "",
+ appLogo: "",
+ setAppName: (name: string) => {
+ set({ appName: name });
+ updateTitle(name);
+ },
+ setAppLogo: (logo: string) => {
+ set({ appLogo: logo });
+ },
+ refreshAppInfo: async () => {
+ try {
+ const response = await getAppInfo();
+ set({
+ appName: response.data.appName,
+ appLogo: response.data.appLogo,
+ });
+ updateTitle(response.data.appName);
+ } catch (error) {
+ console.error("Failed to fetch app info:", error);
+ }
+ },
+ };
});
-
-export function AppInfoProvider({ children }: { children: React.ReactNode }) {
- const [appName, setAppName] = useState("");
- const [appLogo, setAppLogo] = useState("");
-
- const updateFavicon = (logo: string) => {
- const link = document.querySelector("link[rel*='icon']") || document.createElement("link");
-
- link.type = "image/x-icon";
- link.rel = "shortcut icon";
- link.href = logo || "/favicon.ico";
- document.head.appendChild(link);
- };
-
- const updateTitle = (name: string) => {
- document.title = name;
- };
-
- const refreshAppInfo = async () => {
- try {
- const response = await getAppInfo();
-
- setAppName(response.data.appName);
- setAppLogo(response.data.appLogo);
-
- updateTitle(response.data.appName);
- updateFavicon(response.data.appLogo);
- } catch (error) {
- console.error("Failed to fetch app info:", error);
- }
- };
-
- useEffect(() => {
- updateTitle(appName);
- }, [appName]);
-
- useEffect(() => {
- updateFavicon(appLogo);
- }, [appLogo]);
-
- useEffect(() => {
- refreshAppInfo();
- }, []);
-
- return (
-
- {children}
-
- );
-}
-
-export const useAppInfo = () => useContext(AppInfoContext);
diff --git a/apps/web/src/contexts/auth-context.tsx b/apps/web/src/contexts/auth-context.tsx
index e3b0733..73f8388 100644
--- a/apps/web/src/contexts/auth-context.tsx
+++ b/apps/web/src/contexts/auth-context.tsx
@@ -1,6 +1,9 @@
+"use client";
+
+import { createContext, useContext, useEffect, useState } from "react";
+
import { getCurrentUser } from "@/http/endpoints";
import type { GetCurrentUser200User } from "@/http/models";
-import { createContext, useContext, useEffect, useState } from "react";
type AuthUser = Omit;
@@ -39,6 +42,10 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
const checkAuth = async () => {
try {
const response = await getCurrentUser();
+ if (!response?.data?.user) {
+ throw new Error("No user data");
+ }
+
const { isAdmin, ...userData } = response.data.user;
setUser(userData);
@@ -46,7 +53,9 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
setIsAuthenticated(true);
} catch (err) {
console.error(err);
- logout();
+ setUser(null);
+ setIsAdmin(false);
+ setIsAuthenticated(false);
}
};
diff --git a/apps/web/src/contexts/ShareContext.tsx b/apps/web/src/contexts/share-context.tsx
similarity index 92%
rename from apps/web/src/contexts/ShareContext.tsx
rename to apps/web/src/contexts/share-context.tsx
index 73578f5..f7ef6f8 100644
--- a/apps/web/src/contexts/ShareContext.tsx
+++ b/apps/web/src/contexts/share-context.tsx
@@ -1,5 +1,8 @@
+"use client";
+
+import { createContext, useContext, useEffect, useState } from "react";
+
import { getAllConfigs } from "@/http/endpoints";
-import { createContext, useContext, useState, useEffect } from "react";
interface ShareContextType {
smtpEnabled: string;
diff --git a/apps/web/src/hooks/use-disclosure.ts b/apps/web/src/hooks/use-disclosure.ts
new file mode 100644
index 0000000..7b2db0b
--- /dev/null
+++ b/apps/web/src/hooks/use-disclosure.ts
@@ -0,0 +1,18 @@
+"use client";
+
+import { useState } from "react";
+
+export function useDisclosure(initial = false) {
+ const [isOpen, setIsOpen] = useState(initial);
+
+ const onOpen = () => setIsOpen(true);
+ const onClose = () => setIsOpen(false);
+ const onToggle = () => setIsOpen(!isOpen);
+
+ return {
+ isOpen,
+ onOpen,
+ onClose,
+ onToggle,
+ };
+}
diff --git a/apps/web/src/hooks/use-file-manager.ts b/apps/web/src/hooks/use-file-manager.ts
index a716808..bb9882f 100644
--- a/apps/web/src/hooks/use-file-manager.ts
+++ b/apps/web/src/hooks/use-file-manager.ts
@@ -1,7 +1,8 @@
-import { getDownloadUrl, updateFile, deleteFile } from "@/http/endpoints";
import { useState } from "react";
import { toast } from "sonner";
+import { deleteFile, getDownloadUrl, updateFile } from "@/http/endpoints";
+
interface FileToRename {
id: string;
name: string;
diff --git a/apps/web/src/hooks/use-page-title.ts b/apps/web/src/hooks/use-page-title.ts
deleted file mode 100644
index 348d8e1..0000000
--- a/apps/web/src/hooks/use-page-title.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { useAppInfo } from "@/contexts/app-info-context";
-import { useEffect } from "react";
-
-export function usePageTitle(pageTitle?: string) {
- const { appName } = useAppInfo();
-
- useEffect(() => {
- document.title = pageTitle ? `${appName} | ${pageTitle}` : appName;
- }, [appName, pageTitle]);
-}
diff --git a/apps/web/src/hooks/use-share-manager.ts b/apps/web/src/hooks/use-share-manager.ts
index aad5f72..3b303dd 100644
--- a/apps/web/src/hooks/use-share-manager.ts
+++ b/apps/web/src/hooks/use-share-manager.ts
@@ -1,11 +1,19 @@
-import { deleteShare, notifyRecipients, updateShare } from "@/http/endpoints";
-import { addFiles, addRecipients } from "@/http/endpoints";
-import { createShareAlias } from "@/http/endpoints";
-import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem";
+"use client";
+
import { useState } from "react";
-import { useTranslation } from "react-i18next";
+import { useTranslations } from "next-intl";
import { toast } from "sonner";
+import {
+ addFiles,
+ addRecipients,
+ createShareAlias,
+ deleteShare,
+ notifyRecipients,
+ updateShare,
+} from "@/http/endpoints";
+import { ListUserShares200SharesItem } from "@/http/models/listUserShares200SharesItem";
+
export interface ShareManagerHook {
shareToDelete: ListUserShares200SharesItem | null;
shareToEdit: ListUserShares200SharesItem | null;
@@ -28,7 +36,7 @@ export interface ShareManagerHook {
}
export function useShareManager(onSuccess: () => void) {
- const { t } = useTranslation();
+ const t = useTranslations();
const [shareToDelete, setShareToDelete] = useState(null);
const [shareToEdit, setShareToEdit] = useState(null);
const [shareToManageFiles, setShareToManageFiles] = useState(null);
diff --git a/apps/web/src/hooks/use-theme.ts b/apps/web/src/hooks/use-theme.ts
deleted file mode 100644
index 996e0bb..0000000
--- a/apps/web/src/hooks/use-theme.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { useEffect, useMemo, useState } from "react";
-
-const ThemeProps = {
- key: "theme",
- light: "light",
- dark: "dark",
-} as const;
-
-type Theme = typeof ThemeProps.light | typeof ThemeProps.dark;
-
-export const useTheme = (defaultTheme?: Theme) => {
- const [theme, setTheme] = useState(() => {
- const storedTheme = localStorage.getItem(ThemeProps.key) as Theme | null;
-
- return storedTheme || (defaultTheme ?? ThemeProps.light);
- });
-
- const isDark = useMemo(() => {
- return theme === ThemeProps.dark;
- }, [theme]);
-
- const isLight = useMemo(() => {
- return theme === ThemeProps.light;
- }, [theme]);
-
- const _setTheme = (theme: Theme) => {
- localStorage.setItem(ThemeProps.key, theme);
- document.documentElement.classList.remove(ThemeProps.light, ThemeProps.dark);
- document.documentElement.classList.add(theme);
- setTheme(theme);
- };
-
- const setLightTheme = () => _setTheme(ThemeProps.light);
-
- const setDarkTheme = () => _setTheme(ThemeProps.dark);
-
- const toggleTheme = () => (theme === ThemeProps.dark ? setLightTheme() : setDarkTheme());
-
- useEffect(() => {
- _setTheme(theme);
- });
-
- return { theme, isDark, isLight, setLightTheme, setDarkTheme, toggleTheme };
-};
diff --git a/apps/web/src/http/endpoints/app/index.ts b/apps/web/src/http/endpoints/app/index.ts
index fb0832f..eb29d09 100644
--- a/apps/web/src/http/endpoints/app/index.ts
+++ b/apps/web/src/http/endpoints/app/index.ts
@@ -1,22 +1,23 @@
-import type {
- GetAppInfoResult,
- UploadLogoResult,
- RemoveLogoResult,
- CheckHealthResult,
- GetDiskSpaceResult,
- CheckUploadAllowedResult,
- UploadLogoBody,
- CheckUploadAllowedParams,
-} from "./types";
-import axiosInstance from "@/config/axios";
import type { AxiosRequestConfig } from "axios";
+import apiInstance from "@/config/api";
+import type {
+ CheckHealthResult,
+ CheckUploadAllowedParams,
+ CheckUploadAllowedResult,
+ GetAppInfoResult,
+ GetDiskSpaceResult,
+ RemoveLogoResult,
+ UploadLogoBody,
+ UploadLogoResult,
+} from "./types";
+
/**
* Get application base information
* @summary Get application base information
*/
export const getAppInfo = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/app/info`, options);
+ return apiInstance.get(`/api/app/info`, options);
};
/**
@@ -33,7 +34,7 @@ export const uploadLogo = (
formData.append("file", uploadLogoBody.file as Blob);
}
- return axiosInstance.post(`/app/logo`, formData, {
+ return apiInstance.post(`/api/app/upload-logo`, formData, {
...options,
headers: {
...options?.headers,
@@ -47,7 +48,7 @@ export const uploadLogo = (
* @summary Remove app logo
*/
export const removeLogo = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.delete(`/app/logo`, options);
+ return apiInstance.delete(`/api/app/remove-logo`, options);
};
/**
@@ -55,7 +56,7 @@ export const removeLogo = (options?: AxiosRequestConfi
* @summary Check API Health
*/
export const checkHealth = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/health`, options);
+ return apiInstance.get(`/api/app/health`, options);
};
/**
@@ -63,7 +64,7 @@ export const checkHealth = (options?: AxiosRequestCon
* @summary Get server disk space information
*/
export const getDiskSpace = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/storage/disk-space`, options);
+ return apiInstance.get(`/api/app/disk-space`, options);
};
/**
@@ -74,7 +75,7 @@ export const checkUploadAllowed = (
params: CheckUploadAllowedParams,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.get(`/storage/check-upload`, {
+ return apiInstance.get(`/api/app/check-upload`, {
...options,
params: { ...params, ...options?.params },
});
diff --git a/apps/web/src/http/endpoints/app/types.ts b/apps/web/src/http/endpoints/app/types.ts
index ded0087..0f11907 100644
--- a/apps/web/src/http/endpoints/app/types.ts
+++ b/apps/web/src/http/endpoints/app/types.ts
@@ -1,14 +1,15 @@
+import type { AxiosResponse } from "axios";
+
import type {
- GetAppInfo200,
- UploadLogo200,
- UploadLogoBody,
- RemoveLogo200,
CheckHealth200,
- GetDiskSpace200,
CheckUploadAllowed200,
CheckUploadAllowedParams,
+ GetAppInfo200,
+ GetDiskSpace200,
+ RemoveLogo200,
+ UploadLogo200,
+ UploadLogoBody,
} from "../../models";
-import type { AxiosResponse } from "axios";
export type GetAppInfoResult = AxiosResponse;
export type UploadLogoResult = AxiosResponse;
diff --git a/apps/web/src/http/endpoints/auth/index.ts b/apps/web/src/http/endpoints/auth/index.ts
index ac8332e..d327d9d 100644
--- a/apps/web/src/http/endpoints/auth/index.ts
+++ b/apps/web/src/http/endpoints/auth/index.ts
@@ -1,38 +1,39 @@
-import type {
- LoginResult,
- LogoutResult,
- RequestPasswordResetResult,
- ResetPasswordResult,
- GetCurrentUserResult,
- LoginBody,
- RequestPasswordResetBody,
- ResetPasswordBody,
-} from "./types";
-import axiosInstance from "@/config/axios";
import type { AxiosRequestConfig } from "axios";
+import apiInstance from "@/config/api";
+import type {
+ GetCurrentUserResult,
+ LoginBody,
+ LoginResult,
+ LogoutResult,
+ RequestPasswordResetBody,
+ RequestPasswordResetResult,
+ ResetPasswordBody,
+ ResetPasswordResult,
+} from "./types";
+
export const login = (loginBody: LoginBody, options?: AxiosRequestConfig): Promise => {
- return axiosInstance.post(`/auth/login`, loginBody, options);
+ return apiInstance.post(`/api/auth/login`, loginBody, options);
};
export const logout = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.post(`/auth/logout`, undefined, options);
+ return apiInstance.post(`/api/auth/logout`, undefined, options);
};
export const requestPasswordReset = (
requestPasswordResetBody: RequestPasswordResetBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.post(`/auth/forgot-password`, requestPasswordResetBody, options);
+ return apiInstance.post(`/api/auth/forgot-password`, requestPasswordResetBody, options);
};
export const resetPassword = (
resetPasswordBody: ResetPasswordBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.post(`/auth/reset-password`, resetPasswordBody, options);
+ return apiInstance.post(`/api/auth/reset-password`, resetPasswordBody, options);
};
export const getCurrentUser = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/auth/me`, options);
+ return apiInstance.get(`/api/auth/me`, options);
};
diff --git a/apps/web/src/http/endpoints/auth/types.ts b/apps/web/src/http/endpoints/auth/types.ts
index 1075a18..9f60c6b 100644
--- a/apps/web/src/http/endpoints/auth/types.ts
+++ b/apps/web/src/http/endpoints/auth/types.ts
@@ -1,4 +1,7 @@
+import type { AxiosResponse } from "axios";
+
import type {
+ GetCurrentUser200,
Login200,
LoginBody,
Logout200,
@@ -6,9 +9,7 @@ import type {
RequestPasswordResetBody,
ResetPassword200,
ResetPasswordBody,
- GetCurrentUser200,
} from "../../models";
-import type { AxiosResponse } from "axios";
export type LoginResult = AxiosResponse;
export type LogoutResult = AxiosResponse;
diff --git a/apps/web/src/http/endpoints/config/index.ts b/apps/web/src/http/endpoints/config/index.ts
index 28eccec..963d4ec 100644
--- a/apps/web/src/http/endpoints/config/index.ts
+++ b/apps/web/src/http/endpoints/config/index.ts
@@ -1,13 +1,14 @@
-import type {
- UpdateConfigResult,
- GetAllConfigsResult,
- BulkUpdateConfigsResult,
- UpdateConfigBody,
- BulkUpdateConfigsBodyItem,
-} from "./types";
-import axiosInstance from "@/config/axios";
import type { AxiosRequestConfig } from "axios";
+import apiInstance from "@/config/api";
+import type {
+ BulkUpdateConfigsBodyItem,
+ BulkUpdateConfigsResult,
+ GetAllConfigsResult,
+ UpdateConfigBody,
+ UpdateConfigResult,
+} from "./types";
+
/**
* Update a configuration value (admin only)
* @summary Update a configuration value
@@ -17,7 +18,7 @@ export const updateConfig = (
updateConfigBody: UpdateConfigBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.patch(`/app/configs/${key}`, updateConfigBody, options);
+ return apiInstance.patch(`/api/config/update/${key}`, updateConfigBody, options);
};
/**
@@ -25,7 +26,7 @@ export const updateConfig = (
* @summary List all configurations
*/
export const getAllConfigs = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/app/configs`, options);
+ return apiInstance.get(`/api/config/list`, options);
};
/**
@@ -36,5 +37,5 @@ export const bulkUpdateConfigs = (
bulkUpdateConfigsBodyItem: BulkUpdateConfigsBodyItem[],
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.patch(`/app/configs`, bulkUpdateConfigsBodyItem, options);
+ return apiInstance.patch(`api/config/update/bulk`, bulkUpdateConfigsBodyItem, options);
};
diff --git a/apps/web/src/http/endpoints/config/types.ts b/apps/web/src/http/endpoints/config/types.ts
index 28721be..fed51b0 100644
--- a/apps/web/src/http/endpoints/config/types.ts
+++ b/apps/web/src/http/endpoints/config/types.ts
@@ -1,11 +1,12 @@
+import type { AxiosResponse } from "axios";
+
import type {
- UpdateConfig200,
- UpdateConfigBody,
- GetAllConfigs200,
BulkUpdateConfigs200,
BulkUpdateConfigsBodyItem,
+ GetAllConfigs200,
+ UpdateConfig200,
+ UpdateConfigBody,
} from "../../models";
-import type { AxiosResponse } from "axios";
export type UpdateConfigResult = AxiosResponse;
export type GetAllConfigsResult = AxiosResponse;
diff --git a/apps/web/src/http/endpoints/files/index.ts b/apps/web/src/http/endpoints/files/index.ts
index f40edf2..04a9159 100644
--- a/apps/web/src/http/endpoints/files/index.ts
+++ b/apps/web/src/http/endpoints/files/index.ts
@@ -1,17 +1,18 @@
-import type {
- GetPresignedUrlResult,
- RegisterFileResult,
- ListFilesResult,
- GetDownloadUrlResult,
- DeleteFileResult,
- UpdateFileResult,
- GetPresignedUrlParams,
- RegisterFileBody,
- UpdateFileBody,
-} from "./types";
-import axiosInstance from "@/config/axios";
import type { AxiosRequestConfig } from "axios";
+import apiInstance from "@/config/api";
+import type {
+ DeleteFileResult,
+ GetDownloadUrlResult,
+ GetPresignedUrlParams,
+ GetPresignedUrlResult,
+ ListFilesResult,
+ RegisterFileBody,
+ RegisterFileResult,
+ UpdateFileBody,
+ UpdateFileResult,
+} from "./types";
+
/**
* Generates a pre-signed URL for direct upload to MinIO
* @summary Get Presigned URL
@@ -20,7 +21,7 @@ export const getPresignedUrl = (
params: GetPresignedUrlParams,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.get(`/files/presigned-url`, {
+ return apiInstance.get(`/api/files/generate-presigned-url`, {
...options,
params: { ...params, ...options?.params },
});
@@ -34,7 +35,7 @@ export const registerFile = (
registerFileBody: RegisterFileBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.post(`/files`, registerFileBody, options);
+ return apiInstance.post(`/api/files/register`, registerFileBody, options);
};
/**
@@ -42,7 +43,7 @@ export const registerFile = (
* @summary List Files
*/
export const listFiles = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/files`, options);
+ return apiInstance.get(`/api/files/list`, options);
};
/**
@@ -53,7 +54,7 @@ export const getDownloadUrl = (
objectName: string,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.get(`/files/${objectName}/download`, options);
+ return apiInstance.get(`/api/files/${objectName}/download`, options);
};
/**
@@ -61,7 +62,7 @@ export const getDownloadUrl = (
* @summary Delete File
*/
export const deleteFile = (id: string, options?: AxiosRequestConfig): Promise => {
- return axiosInstance.delete(`/files/${id}`, options);
+ return apiInstance.delete(`/api/files/delete/${id}`, options);
};
/**
@@ -73,5 +74,5 @@ export const updateFile = (
updateFileBody: UpdateFileBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.patch(`/files/${id}`, updateFileBody, options);
+ return apiInstance.patch(`/api/files/update/${id}`, updateFileBody, options);
};
diff --git a/apps/web/src/http/endpoints/files/types.ts b/apps/web/src/http/endpoints/files/types.ts
index 82d9eb1..485ee33 100644
--- a/apps/web/src/http/endpoints/files/types.ts
+++ b/apps/web/src/http/endpoints/files/types.ts
@@ -1,15 +1,16 @@
+import type { AxiosResponse } from "axios";
+
import type {
+ DeleteFile200,
+ GetDownloadUrl200,
GetPresignedUrl200,
GetPresignedUrlParams,
+ ListFiles200,
RegisterFile201,
RegisterFileBody,
- ListFiles200,
- GetDownloadUrl200,
- DeleteFile200,
UpdateFile200,
UpdateFileBody,
} from "../../models";
-import type { AxiosResponse } from "axios";
export type GetPresignedUrlResult = AxiosResponse;
export type RegisterFileResult = AxiosResponse;
diff --git a/apps/web/src/http/endpoints/shares/index.ts b/apps/web/src/http/endpoints/shares/index.ts
index 9b30e29..7d63bba 100644
--- a/apps/web/src/http/endpoints/shares/index.ts
+++ b/apps/web/src/http/endpoints/shares/index.ts
@@ -1,32 +1,33 @@
-import type {
- CreateShareResult,
- UpdateShareResult,
- ListUserSharesResult,
- GetShareResult,
- DeleteShareResult,
- UpdateSharePasswordResult,
- AddFilesResult,
- RemoveFilesResult,
- AddRecipientsResult,
- RemoveRecipientsResult,
- CreateShareAliasResult,
- GetShareByAliasResult,
- NotifyRecipientsResult,
- CreateShareBody,
- UpdateShareBody,
- GetShareParams,
- UpdateSharePasswordBody,
- AddFilesBody,
- RemoveFilesBody,
- AddRecipientsBody,
- RemoveRecipientsBody,
- CreateShareAliasBody,
- GetShareByAliasParams,
- NotifyRecipientsBody,
-} from "./types";
-import axiosInstance from "@/config/axios";
import type { AxiosRequestConfig } from "axios";
+import apiInstance from "@/config/api";
+import type {
+ AddFilesBody,
+ AddFilesResult,
+ AddRecipientsBody,
+ AddRecipientsResult,
+ CreateShareAliasBody,
+ CreateShareAliasResult,
+ CreateShareBody,
+ CreateShareResult,
+ DeleteShareResult,
+ GetShareByAliasParams,
+ GetShareByAliasResult,
+ GetShareParams,
+ GetShareResult,
+ ListUserSharesResult,
+ NotifyRecipientsBody,
+ NotifyRecipientsResult,
+ RemoveFilesBody,
+ RemoveFilesResult,
+ RemoveRecipientsBody,
+ RemoveRecipientsResult,
+ UpdateShareBody,
+ UpdateSharePasswordBody,
+ UpdateSharePasswordResult,
+ UpdateShareResult,
+} from "./types";
+
/**
* Create a new share
* @summary Create a new share
@@ -35,7 +36,7 @@ export const createShare = (
createShareBody: CreateShareBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.post(`/shares`, createShareBody, options);
+ return apiInstance.post(`/api/shares/create`, createShareBody, options);
};
/**
@@ -46,7 +47,7 @@ export const updateShare = (
updateShareBody: UpdateShareBody,
options?: AxiosRequestConfig
): Promise => {
- return axiosInstance.put(`/shares`, updateShareBody, options);
+ return apiInstance.put(`/api/shares/update`, updateShareBody, options);
};
/**
@@ -54,7 +55,7 @@ export const updateShare = (
* @summary List all shares created by the authenticated user
*/
export const listUserShares = (options?: AxiosRequestConfig): Promise => {
- return axiosInstance.get(`/shares/me`, options);
+ return apiInstance.get(`/api/shares/list`, options);
};
/**
@@ -66,7 +67,7 @@ export const getShare = |