Skip to content

Commit

Permalink
feat: prepare for rxdb migration
Browse files Browse the repository at this point in the history
  • Loading branch information
mbret committed Mar 3, 2024
1 parent 965e50f commit 6b3ba4b
Show file tree
Hide file tree
Showing 16 changed files with 86 additions and 23 deletions.
4 changes: 2 additions & 2 deletions packages/web/src/books/effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ const useUpsertBookLinkActionEffect = () => {
)
if (book) {
return from(
book.atomicUpdate((oldData) => ({
book.incrementalModify((oldData) => ({
...oldData,
links: [existingLink._id]
}))
Expand Down Expand Up @@ -120,7 +120,7 @@ const useUpsertBookLinkActionEffect = () => {
filter(isDefined),
switchMap((book) =>
from(
book.atomicUpdate((data) => ({
book.incrementalModify((data) => ({
...data,
isNotInterested
}))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/books/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ export const useAtomicUpdateBook = () => {
.findOne({ selector: { _id: id } })
.exec()

return await book?.atomicUpdate(mutationFunction)
return await book?.incrementalModify(mutationFunction)
},
[database]
)
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/dataSources/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export const useAtomicUpdateDataSource = () => {
from(db.datasource.findOne({ selector: { _id: id } }).exec())
),
filter(isDefined),
switchMap((item) => from(item.atomicUpdate(mutationFunction)))
switchMap((item) => from(item.incrementalModify(mutationFunction)))
),
[database]
)
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/problems/useDuplicateBooksTitles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export const useFixDuplicatedBookTitles = () => {
const { _id, _rev, ...safeMergedDoc } = mergedDoc

// we update the first entry with the all merged data
await docsWithSameTitle[0]?.atomicUpdate((oldData) => ({
await docsWithSameTitle[0]?.incrementalModify((oldData) => ({
...oldData,
...safeMergedDoc
}))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/problems/useFixBookReferences.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const useFixBookReferences = () => {
)

if (toRemove.length > 0) {
await doc.atomicUpdate((data) => ({
await doc.incrementalModify((data) => ({
...data,
collections: data.collections.filter((id) => !toRemove.includes(id))
}))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/problems/useFixBooksDanglingLinks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export const useFixBooksDanglingLinks = () => {
)

if (toRemove.length > 0) {
await doc.atomicUpdate((data) => ({
await doc.incrementalModify((data) => ({
...data,
links: data.links.filter((id) => !toRemove.includes(id))
}))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/problems/useFixCollections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export const useFixCollections = () => {
const { _id, _rev, ...safeMergedDoc } = mergedDoc

// we update the first entry with the all merged data
await docsWithSameResourceId[0]?.atomicUpdate((oldData) => ({
await docsWithSameResourceId[0]?.incrementalModify((oldData) => ({
...oldData,
...safeMergedDoc
}))
Expand Down
4 changes: 2 additions & 2 deletions packages/web/src/problems/useFixLinks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const useFixLinks = () => {
const { _id, _rev, ...safeMergedDoc } = mergedDoc

// we update the first entry with the all merged data
await docsWithSameResourceId[0]?.atomicUpdate((oldData) => ({
await docsWithSameResourceId[0]?.incrementalModify((oldData) => ({
...oldData,
...safeMergedDoc
}))
Expand All @@ -60,7 +60,7 @@ export const useFixLinks = () => {

await Promise.all(
bookDocs.map(async (doc) => {
await doc.atomicUpdate((old) => ({
await doc.incrementalModify((old) => ({
...old,
links: [...new Set([...old.links, mergedDoc._id])]
}))
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/reader/bookHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const useUpdateBookState = (bookId: string) => {
.findOne({ selector: { _id: bookId } })
.exec()

book?.atomicUpdate((old) => {
book?.incrementalModify((old) => {
return {
...old,
// cfi will be undefined at the beginning until pagination stabilize
Expand Down
15 changes: 14 additions & 1 deletion packages/web/src/rxdb/collections/book.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,24 @@ import {
DeprecatedBookDocType,
InsertAbleBookDocType
} from "@oboku/shared"
import { RxCollection, RxDocument, RxJsonSchema, RxQuery } from "rxdb"
import {
AtomicUpdateFunction,
RxCollection,
RxDocument,
RxJsonSchema,
RxQuery
} from "rxdb"
import { MongoUpdateSyntax } from "../../types"
import { getReplicationProperties } from "../rxdb-plugins/replication"
import { SafeMangoQuery, SafeUpdateMongoUpdateSyntax } from "../types"
import { generateId } from "./utils"

type BookDocMethods = {
safeUpdate: (updateObj: MongoUpdateSyntax<BookDocType>) => Promise<any>
incrementalModify: (
mutationFunction: AtomicUpdateFunction<BookDocType>,
context?: string | undefined
) => Promise<RxDocument<BookDocType, BookDocMethods>>
}

export type BookDocument = RxDocument<BookDocType, BookDocMethods>
Expand Down Expand Up @@ -40,6 +50,9 @@ export type BookCollection = RxCollection<
export const bookDocMethods: BookDocMethods = {
safeUpdate: function (this: BookDocument, updateObj) {
return this.update(updateObj)
},
incrementalModify: function (this: BookDocument, mutationFunction) {
return this.atomicUpdate(mutationFunction)
}
}

Expand Down
23 changes: 20 additions & 3 deletions packages/web/src/rxdb/collections/collection.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
import { RxCollection, RxDocument, RxJsonSchema, RxQuery } from "rxdb"
import {
AtomicUpdateFunction,
RxCollection,
RxDocument,
RxJsonSchema,
RxQuery
} from "rxdb"
import { getReplicationProperties } from "../rxdb-plugins/replication"
import { SafeMangoQuery, SafeUpdateMongoUpdateSyntax } from "../types"
import { CollectionDocType } from "@oboku/shared"
import { generateId } from "./utils"

export type CollectionDocMethods = {}
export type CollectionDocMethods = {
incrementalModify: (
mutationFunction: AtomicUpdateFunction<CollectionDocType>,
context?: string | undefined
) => Promise<RxDocument<CollectionDocType, CollectionDocMethods>>
}

export type CollectionDocument = RxDocument<
CollectionDocType,
Expand All @@ -29,7 +40,7 @@ type CollectionCollectionMethods = {

export type CollectionCollection = RxCollection<
CollectionDocType,
{},
CollectionDocMethods,
CollectionCollectionMethods
>

Expand All @@ -55,6 +66,12 @@ export const collectionSchema: RxJsonSchema<

export const collectionMigrationStrategies = {}

export const collectionDocMethods: CollectionDocMethods = {
incrementalModify: function (this: CollectionDocument, mutationFunction) {
return this.atomicUpdate(mutationFunction)
}
}

export const collectionCollectionMethods: CollectionCollectionMethods = {
post: async function (this: CollectionCollection, json) {
return this.insert({ _id: generateId(), ...json } as CollectionDocType)
Expand Down
18 changes: 15 additions & 3 deletions packages/web/src/rxdb/collections/dataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@ import {
RxJsonSchema,
RxQuery,
RxCollection,
MigrationStrategies
MigrationStrategies,
AtomicUpdateFunction
} from "rxdb"
import { DataSourceDocType } from "@oboku/shared"
import { SafeUpdateMongoUpdateSyntax } from "../types"
import { getReplicationProperties } from "../rxdb-plugins/replication"
import { generateId } from "./utils"

export type DataSourceDocMethods = {}
export type DataSourceDocMethods = {
incrementalModify: (
mutationFunction: AtomicUpdateFunction<DataSourceDocType>,
context?: string | undefined
) => Promise<RxDocument<DataSourceDocType, DataSourceDocMethods>>
}

export type DataSourceDocument = RxDocument<
DataSourceDocType,
Expand All @@ -29,10 +35,16 @@ type DataSourceCollectionMethods = {

export type DataSourceCollection = RxCollection<
DataSourceDocType,
{},
DataSourceDocMethods,
DataSourceCollectionMethods
>

export const collectionDocMethods: DataSourceDocMethods = {
incrementalModify: function (this: DataSourceDocument, mutationFunction) {
return this.atomicUpdate(mutationFunction)
}
}

export const dataSourceSchema: RxJsonSchema<
Omit<DataSourceDocType, "rx_model" | "_rev" | `rxdbMeta`>
> = {
Expand Down
11 changes: 10 additions & 1 deletion packages/web/src/rxdb/collections/link.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { LinkDocType, SafeMangoQuery } from "@oboku/shared"
import { RxCollection, RxDocument, RxJsonSchema, RxQuery } from "rxdb"
import { AtomicUpdateFunction, RxCollection, RxDocument, RxJsonSchema, RxQuery } from "rxdb"
import { MongoUpdateSyntax } from "../../types"
import { getReplicationProperties } from "../rxdb-plugins/replication"
import { SafeUpdateMongoUpdateSyntax } from "../types"
Expand All @@ -14,8 +14,14 @@ export type LinkCollection = RxCollection<

type LinkDocMethods = {
safeUpdate: (updateObj: MongoUpdateSyntax<LinkDocType>) => Promise<any>
incrementalModify: (
mutationFunction: AtomicUpdateFunction<LinkDocType>,
context?: string | undefined
) => Promise<RxDocument<LinkDocType, LinkDocMethods>>
}

type LinkDocument = RxDocument<LinkDocType, LinkDocMethods>

type LinkCollectionMethods = {
safeInsert: (
json: Omit<LinkDocType, "_id" | "rx_model" | "_rev" | `rxdbMeta`>
Expand Down Expand Up @@ -56,6 +62,9 @@ const linkSchemaMigrationStrategies = {}
const linkDocMethods: LinkDocMethods = {
safeUpdate: async function (this: LinkDocument, updateObj) {
return this.update(updateObj)
},
incrementalModify: function (this: LinkDocument, mutationFunction) {
return this.atomicUpdate(mutationFunction)
}
}

Expand Down
8 changes: 8 additions & 0 deletions packages/web/src/rxdb/collections/tags.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { TagsDocType } from "@oboku/shared"
import {
AtomicUpdateFunction,
MigrationStrategies,
RxCollection,
RxDocument,
Expand All @@ -13,6 +14,10 @@ import { generateId } from "./utils"

type DocMethods = {
updateSafe: (updateObj: MongoUpdateSyntax<TagsDocType>) => Promise<any>
incrementalModify: (
mutationFunction: AtomicUpdateFunction<TagsDocType>,
context?: string | undefined
) => Promise<RxDocument<TagsDocType, DocMethods>>
}

type CollectionMethods = {
Expand Down Expand Up @@ -57,6 +62,9 @@ const schema: RxJsonSchema<Omit<TagsDocType, `_rev` | `rxdbMeta`>> = {
const docMethods: DocMethods = {
updateSafe: function (this: TagsDocument, updateObj) {
return this.update(updateObj)
},
incrementalModify: function (this: TagsDocument, mutationFunction) {
return this.atomicUpdate(mutationFunction)
}
}

Expand Down
10 changes: 7 additions & 3 deletions packages/web/src/rxdb/databases.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ import {
CollectionCollection,
collectionCollectionMethods,
collectionSchema,
collectionMigrationStrategies
collectionMigrationStrategies,
collectionDocMethods as collectionCollectionDocMethods
} from "./collections/collection"
import { applyHooks } from "./middleware"
import {
dataSourceSchema,
dataSourceCollectionMethods,
DataSourceCollection,
migrationStrategies as dataSourceMigrationStrategies
migrationStrategies as dataSourceMigrationStrategies,
collectionDocMethods as dataSourceCollectionDocMethods
} from "./collections/dataSource"
import { BookDocType, LinkDocType, TagsDocType } from "@oboku/shared"
import { RxDBQueryBuilderPlugin } from "rxdb/plugins/query-builder"
Expand Down Expand Up @@ -124,11 +126,13 @@ const createCollections = async (db: Database) => {
obokucollection: {
schema: collectionSchema,
statics: collectionCollectionMethods,
migrationStrategies: collectionMigrationStrategies
migrationStrategies: collectionMigrationStrategies,
methods: collectionCollectionDocMethods
},
datasource: {
schema: dataSourceSchema,
statics: dataSourceCollectionMethods,
methods: dataSourceCollectionDocMethods,
migrationStrategies: dataSourceMigrationStrategies
}
})
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/tags/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export const useUpdateTag = () => {
.findOne({ selector: { _id } })
.exec()
.then((doc) =>
doc?.atomicUpdate((doc) => ({
doc?.incrementalModify((doc) => ({
...doc,
...rest
}))
Expand Down

0 comments on commit 6b3ba4b

Please sign in to comment.