返回 AiToEarn
assets.module.ts
根目录 / project / aitoearn-backend / libs / assets / src / assets.module.ts
1 import type { DynamicModule, Provider } from '@nestjs/common'
2 import type { AssetsConfig } from './assets.config'
3 import { Global, Module } from '@nestjs/common'
4 import { AliOssModule, AliOssService } from '@yikart/ali-oss'
5 import { S3Module, S3Service } from '@yikart/aws-s3'
6 import { FileUtil } from '@yikart/common'
7 import { AliOssAdapter } from './adapters/ali-oss.adapter'
8 import { S3Adapter } from './adapters/s3.adapter'
9 import { ASSETS_CONFIG } from './assets.config'
10 import { AssetsService } from './assets.service'
11 import { R2EventsService } from './r2-events.service'
12 import { StorageProvider } from './storage-provider'
13 import { VideoMetadataService } from './video-metadata.service'
14
15 @Global()
16 @Module({})
17 export class AssetsModule {
18 static forRoot(config: AssetsConfig): DynamicModule {
19 const endpoint = config.endpoint
20 || (config.provider === 'ali-oss' ? `https://${config.bucket}.${config.region}.aliyuncs.com` : '')
21 const cdnEndpoint = config.cdnEndpoint
22
23 FileUtil.init({ endpoint, cdnEndpoint })
24
25 const imports = config.provider === 'ali-oss'
26 ? [AliOssModule.forRoot(config)]
27 : [S3Module.forRoot(config)]
28
29 const storageProviderFactory: Provider = config.provider === 'ali-oss'
30 ? {
31 provide: StorageProvider,
32 useFactory: (aliOssService: AliOssService) =>
33 new AliOssAdapter(aliOssService, endpoint, cdnEndpoint, config.callbackUrl),
34 inject: [AliOssService],
35 }
36 : {
37 provide: StorageProvider,
38 useFactory: (s3Service: S3Service) =>
39 new S3Adapter(s3Service, endpoint, cdnEndpoint),
40 inject: [S3Service],
41 }
42
43 const providers: Provider[] = [
44 {
45 provide: ASSETS_CONFIG,
46 useValue: config,
47 },
48 storageProviderFactory,
49 AssetsService,
50 R2EventsService,
51 VideoMetadataService,
52 ]
53
54 return {
55 global: true,
56 module: AssetsModule,
57 imports,
58 providers,
59 exports: [AssetsService, R2EventsService, VideoMetadataService, StorageProvider],
60 }
61 }
62 }
63
63 lines TYPESCRIPT