Select Git revision
access-node-api.md
mainStore.ts 4.00 KiB
import {defineStore} from 'pinia'
import {DBMetaInfoResponse, keepAlive, KeepAliveResponse, TableIdentifier, useAPI} from "@/services/api";
import {computed, Ref, ref, shallowReactive} from "vue";
export type APIStatus = "connecting" | "disconnected" | KeepAliveResponse
export const useMainStore = defineStore('main', () => {
const sessionId = ref(null as string)
const dbUrl = ref(null as string)
const originalDBSchema = ref(null as DBMetaInfoResponse)
const virtualDBSchema = ref(null as DBMetaInfoResponse)
const dbSchemas = shallowReactive({"original": originalDBSchema, "virtual": virtualDBSchema} as {
[source: string]: Ref<DBMetaInfoResponse>
})
const api = useAPI()
const apiStatus = ref<APIStatus>("connecting")
testAPI() // ASYNC call!
const sessionCreated = computed(() => sessionId.value != null)
const sessionReady = computed(() => sessionCreated.value && (dbUrl.value != null))
const schemaReady = computed(() => sessionReady.value && (originalDBSchema.value != null))
async function testAPI() {
if (apiStatus.value === "disconnected")
apiStatus.value = "connecting"
const r = await keepAlive()
if (r?.data) {
if (r.data.session_status !== "session valid") reset()
apiStatus.value = r.data
} else {
reset()
apiStatus.value = "disconnected"
}
return apiStatus.value
}
function reset() {
sessionId.value = null
dbUrl.value = null
originalDBSchema.value = null
virtualDBSchema.value = null
}
async function startSession() {
const r = await api.startSession()
if (r) {
sessionId.value = r.data.session_id
return true
} else return false
}
async function stopSession() {
await api.stopSession().finally(reset);
}
async function testDBConn() {
const r = await api.testDBConn()
if (r?.data?.db_url)
dbUrl.value = r.data.db_url
else
dbUrl.value = null
}
async function retrieveAndStoreDBInfo() {
const [r1, r2] = await Promise.all([api.testDBConn(), api.getDBSchema()]) //.then(res => this.dbUrl = res.data.db_url), api.getDBSchema()
if (r1?.data)
dbUrl.value = r1.data.db_url
if (r2?.data)