62 lines
1.9 KiB
TypeScript
62 lines
1.9 KiB
TypeScript
'use server';
|
|
|
|
import { getSessionData } from '@/lib/session/session-storage';
|
|
import { createStorageProvider } from '@/lib/storage/storage.factory';
|
|
import { StorageProvider } from '@/lib/storage/storage.interface';
|
|
import { TypedResult } from '@/utils/types/results';
|
|
|
|
const storage: StorageProvider = createStorageProvider();
|
|
|
|
export const getPublicUrl = async (
|
|
key: string,
|
|
storageProvider?: StorageProvider
|
|
): Promise<TypedResult<string>> => {
|
|
if (!storageProvider) {
|
|
storageProvider = storage;
|
|
}
|
|
return await storageProvider.get(key);
|
|
};
|
|
|
|
export const checkExists = async (
|
|
key: string,
|
|
storageProvider?: StorageProvider
|
|
): Promise<boolean> => {
|
|
if (!storageProvider) {
|
|
storageProvider = storage;
|
|
}
|
|
const session = await getSessionData();
|
|
if (!session || !session?.user || session?.user.role !== 'admin') {
|
|
throw new Error('Unauthorized: Only admin users can delete articles.');
|
|
}
|
|
return await storageProvider.exists(key);
|
|
};
|
|
|
|
export const getPutUrl = async (
|
|
key: string,
|
|
contentType: string,
|
|
storageProvider?: StorageProvider
|
|
): Promise<TypedResult<string>> => {
|
|
if (!storageProvider) {
|
|
storageProvider = storage;
|
|
}
|
|
const session = await getSessionData();
|
|
if (!session || !session?.user || session?.user.role !== 'admin') {
|
|
throw new Error('Unauthorized: Only admin users can delete articles.');
|
|
}
|
|
return await storageProvider.put(key, contentType);
|
|
};
|
|
|
|
export const deleteByKey = async (
|
|
key: string,
|
|
storageProvider?: StorageProvider
|
|
): Promise<TypedResult<void>> => {
|
|
if (!storageProvider) {
|
|
storageProvider = storage;
|
|
}
|
|
const session = await getSessionData();
|
|
if (!session || !session?.user || session?.user.role !== 'admin') {
|
|
throw new Error('Unauthorized: Only admin users can delete articles.');
|
|
}
|
|
return await storageProvider.delete(key);
|
|
};
|