Files
hideyoshi-blog/src/lib/storage/storage.external.ts

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);
};