1
1
import 'reflect-metadata'
2
2
3
- import { SettingName } from '@standardnotes/domain-core'
4
-
5
- import { Stream } from 'stream'
6
-
7
3
import { Logger } from 'winston'
8
4
import * as dayjs from 'dayjs'
9
5
import * as utc from 'dayjs/plugin/utc'
10
6
11
7
import { ContainerConfigLoader } from '../src/Bootstrap/Container'
12
8
import TYPES from '../src/Bootstrap/Types'
13
9
import { Env } from '../src/Bootstrap/Env'
14
- import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
15
- import { DomainEventFactoryInterface } from '../src/Domain/Event/DomainEventFactoryInterface'
16
- import { SettingRepositoryInterface } from '../src/Domain/Setting/SettingRepositoryInterface'
17
- import { MuteFailedBackupsEmailsOption } from '@standardnotes/settings'
18
- import { RoleServiceInterface } from '../src/Domain/Role/RoleServiceInterface'
19
- import { PermissionName } from '@standardnotes/features'
20
- import { GetUserKeyParams } from '../src/Domain/UseCase/GetUserKeyParams/GetUserKeyParams'
10
+ import { TriggerEmailBackupForAllUsers } from '../src/Domain/UseCase/TriggerEmailBackupForAllUsers/TriggerEmailBackupForAllUsers'
21
11
22
12
const inputArgs = process . argv . slice ( 2 )
23
- const backupProvider = inputArgs [ 0 ]
24
- const backupFrequency = inputArgs [ 1 ]
25
-
26
- const requestBackups = async (
27
- settingRepository : SettingRepositoryInterface ,
28
- roleService : RoleServiceInterface ,
29
- domainEventFactory : DomainEventFactoryInterface ,
30
- domainEventPublisher : DomainEventPublisherInterface ,
31
- getUserKeyParamsUseCase : GetUserKeyParams ,
32
- ) : Promise < void > => {
33
- const settingName = SettingName . create ( SettingName . NAMES . EmailBackupFrequency ) . getValue ( )
34
- const permissionName = PermissionName . DailyEmailBackup
35
- const muteEmailsSettingName = SettingName . NAMES . MuteFailedBackupsEmails
36
- const muteEmailsSettingValue = MuteFailedBackupsEmailsOption . Muted
37
-
38
- const stream = await settingRepository . streamAllByNameAndValue ( settingName , backupFrequency )
39
-
40
- return new Promise ( ( resolve , reject ) => {
41
- stream
42
- . pipe (
43
- new Stream . Transform ( {
44
- objectMode : true ,
45
- transform : async ( setting , _encoding , callback ) => {
46
- const userIsPermittedForEmailBackups = await roleService . userHasPermission (
47
- setting . setting_user_uuid ,
48
- permissionName ,
49
- )
50
- if ( ! userIsPermittedForEmailBackups ) {
51
- callback ( )
52
-
53
- return
54
- }
13
+ const backupFrequency = inputArgs [ 0 ]
55
14
56
- let userHasEmailsMuted = false
57
- const emailsMutedSetting = await settingRepository . findOneByNameAndUserUuid (
58
- muteEmailsSettingName ,
59
- setting . setting_user_uuid ,
60
- )
61
- if ( emailsMutedSetting !== null && emailsMutedSetting . props . value !== null ) {
62
- userHasEmailsMuted = emailsMutedSetting . props . value === muteEmailsSettingValue
63
- }
64
-
65
- const keyParamsResponse = await getUserKeyParamsUseCase . execute ( {
66
- userUuid : setting . setting_user_uuid ,
67
- authenticated : false ,
68
- } )
69
-
70
- await domainEventPublisher . publish (
71
- domainEventFactory . createEmailBackupRequestedEvent (
72
- setting . setting_user_uuid ,
73
- emailsMutedSetting ?. id . toString ( ) as string ,
74
- userHasEmailsMuted ,
75
- keyParamsResponse . keyParams ,
76
- ) ,
77
- )
78
-
79
- callback ( )
80
- } ,
81
- } ) ,
82
- )
83
- . on ( 'finish' , resolve )
84
- . on ( 'error' , reject )
85
- } )
15
+ const requestBackups = async ( triggerEmailBackupForAllUsers : TriggerEmailBackupForAllUsers ) : Promise < void > => {
16
+ await triggerEmailBackupForAllUsers . execute ( { backupFrequency } )
86
17
}
87
18
88
19
const container = new ContainerConfigLoader ( 'worker' )
@@ -94,24 +25,20 @@ void container.load().then((container) => {
94
25
95
26
const logger : Logger = container . get ( TYPES . Auth_Logger )
96
27
97
- logger . info ( `Starting ${ backupFrequency } ${ backupProvider } backup requesting...` )
28
+ logger . info ( `Starting ${ backupFrequency } email backup requesting...` )
98
29
99
- const settingRepository : SettingRepositoryInterface = container . get ( TYPES . Auth_SettingRepository )
100
- const roleService : RoleServiceInterface = container . get ( TYPES . Auth_RoleService )
101
- const domainEventFactory : DomainEventFactoryInterface = container . get ( TYPES . Auth_DomainEventFactory )
102
- const domainEventPublisher : DomainEventPublisherInterface = container . get ( TYPES . Auth_DomainEventPublisher )
103
- const getUserKeyParamsUseCase : GetUserKeyParams = container . get ( TYPES . Auth_GetUserKeyParams )
104
-
105
- Promise . resolve (
106
- requestBackups ( settingRepository , roleService , domainEventFactory , domainEventPublisher , getUserKeyParamsUseCase ) ,
30
+ const triggerEmailBackupForAllUsers : TriggerEmailBackupForAllUsers = container . get (
31
+ TYPES . Auth_TriggerEmailBackupForAllUsers ,
107
32
)
33
+
34
+ Promise . resolve ( requestBackups ( triggerEmailBackupForAllUsers ) )
108
35
. then ( ( ) => {
109
- logger . info ( `${ backupFrequency } ${ backupProvider } backup requesting complete` )
36
+ logger . info ( `${ backupFrequency } email backup requesting complete` )
110
37
111
38
process . exit ( 0 )
112
39
} )
113
40
. catch ( ( error ) => {
114
- logger . error ( `Could not finish ${ backupFrequency } ${ backupProvider } backup requesting: ${ error . message } ` )
41
+ logger . error ( `Could not finish ${ backupFrequency } email backup requesting: ${ error . message } ` )
115
42
116
43
process . exit ( 1 )
117
44
} )
0 commit comments