fix: cleaner

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei 2024-10-11 22:51:08 +08:00
parent 3100fe3ee6
commit ca2af066df
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
4 changed files with 23 additions and 6 deletions

View File

@ -1,5 +1,6 @@
export type CleanerType = "feed" | "entry" | "list" | "inbox"
export type DB_Cleaner = {
refId: string
visitedAt: number
type: "entry" | "feed"
type: CleanerType
}

View File

@ -1,9 +1,12 @@
import { browserDB } from "~/database"
import type { CleanerType } from "~/database/schemas/cleaner"
import { appLog } from "~/lib/log"
import { EntryService } from "./entry"
import { FeedService } from "./feed"
import { FeedUnreadService } from "./feed-unread"
import { InboxService } from "./inbox"
import { ListService } from "./list"
import { SubscriptionService } from "./subscription"
const cleanerModel = browserDB.cleaner
@ -35,7 +38,7 @@ class CleanerServiceStatic {
/**
* Mark the which data recently used
*/
reset(list: { type: "feed" | "entry"; id: string }[]) {
reset(list: { type: CleanerType; id: string }[]) {
const now = Date.now()
return cleanerModel.bulkPut(
list.map((item) => ({
@ -59,6 +62,8 @@ class CleanerServiceStatic {
}
const deleteEntries = [] as string[]
const deleteFeeds = [] as string[]
const deleteLists = [] as string[]
const deleteInboxes = [] as string[]
for (const item of data) {
switch (item.type) {
case "feed": {
@ -69,6 +74,15 @@ class CleanerServiceStatic {
deleteEntries.push(item.refId)
break
}
case "list": {
deleteLists.push(item.refId)
// TODO delete entries related to the list
break
}
case "inbox": {
deleteInboxes.push(item.refId)
break
}
}
}
@ -78,6 +92,8 @@ class CleanerServiceStatic {
EntryService.deleteEntries(deleteEntries),
EntryService.deleteEntriesByFeedIds(deleteFeeds),
cleanerModel.bulkDelete(data.map((d) => d.refId)),
ListService.bulkDelete(deleteLists),
InboxService.bulkDelete(deleteInboxes),
])
}

View File

@ -12,7 +12,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable {
}
override async upsertMany(data: InboxModel[]) {
CleanerService.reset(data.map((d) => ({ type: "feed", id: d.id! })))
CleanerService.reset(data.map((d) => ({ type: "inbox", id: d.id! })))
return this.table.bulkPut(data)
}
@ -23,7 +23,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable {
override async upsert(data: InboxModel): Promise<string | null> {
if (!data.id) return null
CleanerService.reset([{ type: "feed", id: data.id }])
CleanerService.reset([{ type: "inbox", id: data.id }])
return this.table.put(data)
}

View File

@ -14,7 +14,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable {
}
override async upsertMany(data: ListModel[]) {
CleanerService.reset(data.map((d) => ({ type: "feed", id: d.id! })))
CleanerService.reset(data.map((d) => ({ type: "list", id: d.id! })))
// FIXME The backend should not pass these computed attributes, and these need to be removed here.
// Subsequent refactoring of the backend data flow should not nest computed attributes
@ -27,7 +27,7 @@ class ServiceStatic extends BaseService<{ id: string }> implements Hydable {
override async upsert(data: ListModel): Promise<string | null> {
if (!data.id) return null
CleanerService.reset([{ type: "feed", id: data.id }])
CleanerService.reset([{ type: "list", id: data.id }])
return this.table.put(omit(data, "owner"))
}