File tree Expand file tree Collapse file tree 3 files changed +41
-0
lines changed
BusinessLogic/UserTokenClearUp Expand file tree Collapse file tree 3 files changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -84,6 +84,11 @@ func routes(_ app: Application) async throws {
8484 . daily ( )
8585 . at ( 3 , 0 )
8686 app. queues. add ( LoggingJobEventDelegate ( logger: app. logger) )
87+
88+ let userTokenCleanerJob = UserTokenClearUpJob ( userTokenClearing: UserTokenClearer ( database: app. db) )
89+ app. queues. schedule ( userTokenCleanerJob)
90+ . hourly ( )
91+
8792 try app. queues. startScheduledJobs ( )
8893 try app. queues. startInProcessJobs ( )
8994 }
Original file line number Diff line number Diff line change 1+ import Vapor
2+ import Queues
3+
4+ struct UserTokenClearUpJob : AsyncScheduledJob , @unchecked Sendable {
5+ private let userTokenClearer : UserTokenClearing
6+
7+ init ( userTokenClearing: UserTokenClearing ) {
8+ self . userTokenClearer = userTokenClearing
9+ }
10+
11+ func run( context: Queues . QueueContext ) async throws {
12+ try await userTokenClearer. clearExpiredTokens ( )
13+ }
14+ }
Original file line number Diff line number Diff line change 1+ import Fluent
2+ import Foundation
3+
4+ protocol UserTokenClearing {
5+ func clearExpiredTokens( ) async throws
6+ }
7+
8+ class UserTokenClearer : UserTokenClearing {
9+ private let database : Database
10+
11+ init ( database: Database ) {
12+ self . database = database
13+ }
14+
15+ func clearExpiredTokens( ) async throws {
16+ let allTokens = try await UserToken . query ( on: database) . all ( )
17+ let expiredTokens = allTokens. filter { !$0. isValid }
18+ for token in expiredTokens {
19+ try await token. delete ( on: database)
20+ }
21+ }
22+ }
You can’t perform that action at this time.
0 commit comments