parent
3100fe3ee6
commit
ca2af066df
|
|
@ -1,5 +1,6 @@
|
|||
export type CleanerType = "feed" | "entry" | "list" | "inbox"
|
||||
export type DB_Cleaner = {
|
||||
refId: string
|
||||
visitedAt: number
|
||||
type: "entry" | "feed"
|
||||
type: CleanerType
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
])
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue