@@ -123,22 +123,31 @@ export class ApiBackupService {
123
123
async restoreBackup ( name : string ) {
124
124
const backup = await this . readBackupFile ( name )
125
125
126
- const userIds = await this . core . data . user
127
- . findMany ( { select : { id : true } } )
128
- . then ( ( users ) => users . map ( ( user ) => user . id ) )
126
+ const [ usernames , userIds ] = await Promise . all ( [
127
+ this . core . data . user . findMany ( { select : { username : true } } ) . then ( ( users ) => users . map ( ( user ) => user . username ) ) ,
128
+ this . core . data . user . findMany ( { select : { id : true } } ) . then ( ( users ) => users . map ( ( user ) => user . id ) ) ,
129
+ ] )
129
130
130
- const toCreate = backup . data . users . filter ( ( user : { id : string } ) => ! userIds . includes ( user . id ) )
131
+ const toCreate = backup . data . users . filter ( ( user : { id : string ; username : string } ) => {
132
+ return ! userIds . includes ( user . id ) && ! usernames . includes ( user . username )
133
+ } )
131
134
if ( ! toCreate . length ) {
132
135
this . logger . verbose ( `No new users to create` )
133
136
return true
134
137
}
135
138
for ( const user of toCreate ) {
136
139
const { identities, ...userData } = user
137
- const newUser = await this . core . data . user . create ( {
138
- data : { ...userData , identities : { create : identities } } ,
139
- } )
140
+ try {
141
+ const newUser = await this . core . data . user . create ( {
142
+ data : { ...userData , identities : { create : identities } } ,
143
+ } )
140
144
141
- this . logger . verbose ( `Created user ${ newUser . username } with id ${ newUser . id } and ${ identities . length } identities` )
145
+ this . logger . verbose (
146
+ `Created user ${ newUser . username } with id ${ newUser . id } and ${ identities . length } identities` ,
147
+ )
148
+ } catch ( error ) {
149
+ this . logger . error ( `Failed to create user ${ user . username } : ${ error } ` )
150
+ }
142
151
}
143
152
return true
144
153
}
0 commit comments