@@ -14,74 +14,89 @@ import { initKnex } from './data/knex';
1414initKnex ( ) ;
1515
1616async function cleanDeletedObjects ( ) {
17- const [
18- permanentlyDeletedPages ,
17+ try {
18+ const [
19+ permanentlyDeletedPages ,
1920
20- groupJoinInvitations ,
21- groupJoinRequests ,
22- groupMembers ,
21+ groupJoinInvitations ,
22+ groupJoinRequests ,
23+ groupMembers ,
2324
24- permanentlyDeletedGroups ,
25- ] = await Promise . all ( [
26- PageModel . query ( )
27- . join ( 'groups' , 'groups.id' , 'pages.group_id' )
28- . where ( 'pages.permanent_deletion_date' , '> ' , new Date ( ) )
29- . orWhere ( 'groups.permanent_deletion_date' , '> ' , new Date ( ) )
30- . select ( 'pages.id' ) ,
25+ permanentlyDeletedGroups ,
26+ ] = await Promise . all ( [
27+ PageModel . query ( )
28+ . join ( 'groups' , 'groups.id' , 'pages.group_id' )
29+ . where ( 'pages.permanent_deletion_date' , '< ' , new Date ( ) )
30+ . orWhere ( 'groups.permanent_deletion_date' , '< ' , new Date ( ) )
31+ . select ( 'pages.id' ) ,
3132
32- GroupJoinInvitationModel . query ( )
33- . join ( 'groups' , 'groups.id' , 'group_join_invitations.group_id' )
34- . where ( 'groups.permanent_deletion_date' , '> ' , new Date ( ) ) ,
35- GroupJoinRequestModel . query ( )
36- . join ( 'groups' , 'groups.id' , 'group_join_requests.group_id' )
37- . where ( 'groups.permanent_deletion_date' , '> ' , new Date ( ) ) ,
38- GroupMemberModel . query ( )
39- . join ( 'groups' , 'groups.id' , 'group_members.group_id' )
40- . where ( 'groups.permanent_deletion_date' , '> ' , new Date ( ) ) ,
33+ GroupJoinInvitationModel . query ( )
34+ . join ( 'groups' , 'groups.id' , 'group_join_invitations.group_id' )
35+ . where ( 'groups.permanent_deletion_date' , '< ' , new Date ( ) ) ,
36+ GroupJoinRequestModel . query ( )
37+ . join ( 'groups' , 'groups.id' , 'group_join_requests.group_id' )
38+ . where ( 'groups.permanent_deletion_date' , '< ' , new Date ( ) ) ,
39+ GroupMemberModel . query ( )
40+ . join ( 'groups' , 'groups.id' , 'group_members.group_id' )
41+ . where ( 'groups.permanent_deletion_date' , '< ' , new Date ( ) ) ,
4142
42- GroupModel . query ( )
43- . where ( 'permanent_deletion_date' , '> ' , new Date ( ) )
44- . select ( 'id' ) ,
45- ] ) ;
43+ GroupModel . query ( )
44+ . where ( 'permanent_deletion_date' , '< ' , new Date ( ) )
45+ . select ( 'id' ) ,
46+ ] ) ;
4647
47- await dataAbstraction ( ) . transaction ( async ( dtrx ) => {
48- await Promise . all ( [
49- ...permanentlyDeletedPages . map ( ( page ) =>
50- dataAbstraction ( ) . delete ( 'page-snaphots' , page . id , { dtrx } ) ,
51- ) ,
52- ...permanentlyDeletedPages . map ( ( page ) =>
53- dataAbstraction ( ) . delete ( 'page' , page . id , { dtrx } ) ,
54- ) ,
48+ await dataAbstraction ( ) . transaction ( async ( dtrx ) => {
49+ await Promise . all ( [
50+ ...permanentlyDeletedPages . flatMap ( ( page ) => [
51+ dataAbstraction ( ) . delete ( 'page-backlinks' , page . id , { dtrx } ) ,
52+ dataAbstraction ( ) . delete ( 'page-snapshots' , page . id , { dtrx } ) ,
53+ dataAbstraction ( ) . delete ( 'page' , page . id , { dtrx } ) ,
54+ ] ) ,
5555
56- ...groupJoinInvitations . map ( ( invitation ) =>
57- dataAbstraction ( ) . delete (
58- 'group-join-invitation' ,
59- `${ invitation . group_id } :${ invitation . user_id } ` ,
60- { dtrx, cacheOnly : true } ,
56+ ...groupJoinInvitations . map ( ( invitation ) =>
57+ dataAbstraction ( ) . delete (
58+ 'group-join-invitation' ,
59+ `${ invitation . group_id } :${ invitation . user_id } ` ,
60+ { dtrx, cacheOnly : true } ,
61+ ) ,
6162 ) ,
62- ) ,
63- ... groupJoinRequests . map ( ( request ) =>
64- dataAbstraction ( ) . delete (
65- 'group-join- request' ,
66- ` ${ request . group_id } : ${ request . user_id } ` ,
67- { dtrx , cacheOnly : true } ,
63+ ... groupJoinRequests . map ( ( request ) =>
64+ dataAbstraction ( ) . delete (
65+ 'group-join-request' ,
66+ ` ${ request . group_id } : ${ request . user_id } ` ,
67+ { dtrx , cacheOnly : true } ,
68+ ) ,
6869 ) ,
69- ) ,
70- ... groupMembers . map ( ( member ) =>
71- dataAbstraction ( ) . delete (
72- 'group- member' ,
73- ` ${ member . group_id } : ${ member . user_id } ` ,
74- { dtrx , cacheOnly : true } ,
70+ ... groupMembers . map ( ( member ) =>
71+ dataAbstraction ( ) . delete (
72+ 'group-member' ,
73+ ` ${ member . group_id } : ${ member . user_id } ` ,
74+ { dtrx , cacheOnly : true } ,
75+ ) ,
7576 ) ,
76- ) ,
7777
78- ...permanentlyDeletedGroups . map ( ( group ) =>
79- dataAbstraction ( ) . delete ( 'group' , group . id , { dtrx } ) ,
80- ) ,
81- ] ) ;
82- } ) ;
78+ ...permanentlyDeletedGroups . map ( ( group ) =>
79+ dataAbstraction ( ) . delete ( 'group' , group . id , { dtrx } ) ,
80+ ) ,
81+ ] ) ;
82+ } ) ;
83+
84+ if ( permanentlyDeletedPages . length > 0 ) {
85+ console . log (
86+ `Successfully cleaned ${ permanentlyDeletedPages . length } permanently deleted pages.` ,
87+ ) ;
88+ }
89+
90+ if ( permanentlyDeletedGroups . length > 0 ) {
91+ console . log (
92+ `Successfully cleaned ${ permanentlyDeletedGroups . length } permanently deleted groups.` ,
93+ ) ;
94+ }
95+ } catch ( error ) {
96+ console . error ( 'Failed to clean deleted objects:' , error ) ;
97+ }
98+
99+ setTimeout ( cleanDeletedObjects , 24 * 60 * 60 * 1000 ) ;
83100}
84101
85102void cleanDeletedObjects ( ) ;
86-
87- setInterval ( cleanDeletedObjects , 24 * 60 * 60 * 1000 ) ;
0 commit comments