2022-12-01 20:08:27 +00:00
|
|
|
import { writable } from 'svelte/store'
|
2022-12-03 09:30:26 +00:00
|
|
|
import { databases } from './stores/appwrite'
|
|
|
|
import type { Models } from 'appwrite'
|
2022-12-02 15:35:24 +00:00
|
|
|
import { ID } from 'appwrite'
|
2022-12-03 09:30:26 +00:00
|
|
|
import subscribeInsert from './database/subscribeInsert'
|
|
|
|
import subscribeUpdate from './database/subscribeUpdate'
|
2022-12-02 15:35:24 +00:00
|
|
|
|
2022-12-03 09:30:26 +00:00
|
|
|
class Collection {
|
|
|
|
constructor(protected databaseId: string, protected collectionId: string) { }
|
2022-12-02 15:35:24 +00:00
|
|
|
|
2022-12-03 09:30:26 +00:00
|
|
|
subscribeInsert() {
|
|
|
|
const dataStore = writable<Models.Document[]>([])
|
|
|
|
subscribeInsert(this.databaseId, this.collectionId, dataStore)
|
|
|
|
return { subscribe: dataStore.subscribe }
|
|
|
|
}
|
|
|
|
|
|
|
|
subscribe(queries: string[] = []) {
|
|
|
|
const loadingStore = writable(true)
|
|
|
|
const dataStore = writable<Models.Document[]>([])
|
|
|
|
|
|
|
|
databases.listDocuments(this.databaseId, this.collectionId, queries).then(data => {
|
|
|
|
data.documents.forEach((document) => subscribeUpdate(this.databaseId, this.collectionId, dataStore, document))
|
|
|
|
|
|
|
|
dataStore.set(data.documents)
|
|
|
|
loadingStore.set(false)
|
2022-12-02 15:35:24 +00:00
|
|
|
})
|
2022-12-03 09:30:26 +00:00
|
|
|
|
|
|
|
return [{ subscribe: dataStore.subscribe }, { subscribe: loadingStore.subscribe }, this.subscribeInsert()] as const
|
2022-12-02 15:35:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
add(data: { [key: string]: any } = {}, permissions: string[] = null) {
|
|
|
|
return databases.createDocument(this.databaseId, this.collectionId, ID.unique(), data, permissions)
|
|
|
|
}
|
|
|
|
|
|
|
|
set(documentId: string, data: { [key: string]: any } = {}, permissions: string[] = null) {
|
|
|
|
return databases.updateDocument(this.databaseId, this.collectionId, documentId, data, permissions)
|
|
|
|
}
|
|
|
|
|
|
|
|
delete(documentId: string) {
|
|
|
|
return databases.deleteDocument(this.databaseId, this.collectionId, documentId)
|
|
|
|
}
|
2022-12-01 20:08:27 +00:00
|
|
|
}
|
|
|
|
|
2022-12-03 09:30:26 +00:00
|
|
|
export default Collection
|