feat: Add authentication, file management with Cloudinary support, and Prisma-integrated file cleanup.
This commit is contained in:
+4
-3
@@ -4,6 +4,7 @@ import { PrismaClient } from '@prisma/client';
|
||||
import { admin } from 'better-auth/plugins';
|
||||
|
||||
import { applyFileCleanup } from '../prisma/file-cleanup.helper';
|
||||
import { config } from '../shared/config/config';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
applyFileCleanup(prisma);
|
||||
@@ -27,12 +28,12 @@ export const auth = betterAuth({
|
||||
sendOnSignIn: true,
|
||||
autoSignInAfterVerification: true,
|
||||
},
|
||||
trustedOrigins: ['http://localhost:5173', 'http://localhost:5174'],
|
||||
trustedOrigins: config.trustedOrigins,
|
||||
socialProviders: {
|
||||
google: {
|
||||
prompt: 'select_account',
|
||||
clientId: process.env.GOOGLE_CLIENT_ID!,
|
||||
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
||||
clientId: config.googleClientId,
|
||||
clientSecret: config.googleClientSecret,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ import { FileController } from './file.controller';
|
||||
import { PrismaService } from 'src/prisma/prisma.service';
|
||||
import { LocalStorageProvider } from './storage-providers/local-storage.provider';
|
||||
import { CloudinaryStorageProvider } from './storage-providers/cloudinary-storage.provider';
|
||||
import { config } from '../shared/config/config';
|
||||
|
||||
@Module({
|
||||
controllers: [FileController],
|
||||
@@ -14,7 +15,7 @@ import { CloudinaryStorageProvider } from './storage-providers/cloudinary-storag
|
||||
{
|
||||
provide: 'StorageProvider',
|
||||
useFactory: () => {
|
||||
switch (process.env.FILE_DRIVER) {
|
||||
switch (config.fileDriver) {
|
||||
case 'cloudinary':
|
||||
return new CloudinaryStorageProvider();
|
||||
default:
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
// src/file/storage-providers/cloudinary-storage.provider.ts
|
||||
import { IStorageProvider } from './storage-provider.interface';
|
||||
import { v2 as cloudinary } from 'cloudinary';
|
||||
import { config } from '../../shared/config/config';
|
||||
|
||||
cloudinary.config({
|
||||
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
|
||||
api_key: process.env.CLOUDINARY_API_KEY,
|
||||
api_secret: process.env.CLOUDINARY_API_SECRET,
|
||||
cloud_name: config.cloudinary.cloudName,
|
||||
api_key: config.cloudinary.apiKey,
|
||||
api_secret: config.cloudinary.apiSecret,
|
||||
});
|
||||
|
||||
export class CloudinaryStorageProvider implements IStorageProvider {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { LocalStorageProvider } from '../file/storage-providers/local-storage.provider';
|
||||
import { CloudinaryStorageProvider } from '../file/storage-providers/cloudinary-storage.provider';
|
||||
import { config } from '../shared/config/config';
|
||||
|
||||
const getStorageProvider = () => {
|
||||
if (process.env.FILE_DRIVER === 'cloudinary') {
|
||||
if (config.fileDriver === 'cloudinary') {
|
||||
return new CloudinaryStorageProvider();
|
||||
}
|
||||
return new LocalStorageProvider();
|
||||
|
||||
@@ -25,7 +25,7 @@ for (const varName of requiredEnv) {
|
||||
export const config = {
|
||||
betterAuthSecret: process.env.BETTER_AUTH_SECRET!,
|
||||
betterAuthUrl: process.env.BETTER_AUTH_URL!,
|
||||
trustedOrigins: process.env.TRUSTED_ORIGINS!.split(','),
|
||||
trustedOrigins: process.env.TRUSTED_ORIGINS!.split(',').map(origin => origin.trim()).filter(origin => origin.length > 0),
|
||||
googleClientId: process.env.GOOGLE_CLIENT_ID!,
|
||||
googleClientSecret: process.env.GOOGLE_CLIENT_SECRET!,
|
||||
fileDriver: process.env.FILE_DRIVER,
|
||||
|
||||
Reference in New Issue
Block a user