返回 AiToEarn
douyin.module.ts
1 import type { DynamicModule } from '@nestjs/common'
2 import type { PlatformConfigWithStatus } from '../platforms.config'
3 import { Module } from '@nestjs/common'
4 import { ShortLinkModule } from '../../../short-link/short-link.module'
5 import { isAvailablePlatformConfig, isVisiblePlatformConfig } from '../platforms.config'
6 import { PlatformIntegrationRegistry } from '../platforms.registry'
7 import { PlatformRegistryModule } from '../platforms.registry.module'
8 import { DouyinAuthProvider } from './douyin-auth.provider'
9 import { DouyinMiniAppService } from './douyin-miniapp.service'
10 import { DouyinPublishProvider } from './douyin-publish.provider'
11 import { DouyinWebhookProvider } from './douyin-webhook.provider'
12 import { DouyinWorkProvider } from './douyin-work.provider'
13 import { DouyinConfig } from './douyin.config'
14 import { DOUYIN_METADATA } from './douyin.constants'
15 import { DouyinService } from './douyin.service'
16 import { DouyinOfflineQrController } from './offline-qr/douyin-offline-qr.controller'
17 import { DouyinOfflineQrService } from './offline-qr/douyin-offline-qr.service'
18
19 @Module({})
20 export class DouyinModule {
21 static forRoot(config: PlatformConfigWithStatus | undefined): DynamicModule {
22 if (!isVisiblePlatformConfig(config)) {
23 return { module: DouyinModule }
24 }
25
26 const metadata = { ...DOUYIN_METADATA, logoUrl: config.logoUrl }
27
28 if (!isAvailablePlatformConfig(config)) {
29 return {
30 module: DouyinModule,
31 imports: [PlatformRegistryModule],
32 providers: [
33 {
34 provide: 'DOUYIN_INTEGRATION',
35 inject: [PlatformIntegrationRegistry],
36 useFactory: (registry: PlatformIntegrationRegistry) => {
37 registry.register({
38 platform: DOUYIN_METADATA.platform,
39 status: config.status,
40 metadata,
41 runtime: {},
42 })
43 },
44 },
45 ],
46 }
47 }
48
49 const availableConfig = config as DouyinConfig
50 const availableMetadata = { ...metadata, authType: availableConfig.authType }
51
52 return {
53 module: DouyinModule,
54 imports: [PlatformRegistryModule, ShortLinkModule],
55 controllers: [DouyinOfflineQrController],
56 providers: [
57 { provide: DouyinConfig, useValue: availableConfig },
58 DouyinOfflineQrService,
59 DouyinService,
60 DouyinMiniAppService,
61 DouyinAuthProvider,
62 DouyinPublishProvider,
63 DouyinWebhookProvider,
64 DouyinWorkProvider,
65 {
66 provide: 'DOUYIN_INTEGRATION',
67 inject: [PlatformIntegrationRegistry, DouyinAuthProvider, DouyinPublishProvider, DouyinWebhookProvider, DouyinWorkProvider],
68 useFactory: (
69 registry: PlatformIntegrationRegistry,
70 auth: DouyinAuthProvider,
71 publish: DouyinPublishProvider,
72 webhook: DouyinWebhookProvider,
73 work: DouyinWorkProvider,
74 ) => {
75 registry.register({
76 platform: DOUYIN_METADATA.platform,
77 status: availableConfig.status,
78 metadata: availableMetadata,
79 runtime: {},
80 auth,
81 publish,
82 webhook,
83 work,
84 })
85 },
86 },
87 ],
88 exports: [
89 DouyinService,
90 DouyinMiniAppService,
91 DouyinOfflineQrService,
92 DouyinAuthProvider,
93 DouyinPublishProvider,
94 DouyinWebhookProvider,
95 DouyinWorkProvider,
96 ],
97 }
98 }
99 }
100
100 lines TYPESCRIPT