optimize open database calls
This commit is contained in:
@@ -1,29 +1,35 @@
|
||||
import { boot } from 'quasar/wrappers';
|
||||
import { appApi } from './axios';
|
||||
import { createPinia } from 'pinia';
|
||||
import { useUserStore } from 'src/vueLib/login/userStore';
|
||||
import { useLogin } from 'src/vueLib/login/useLogin';
|
||||
import { Me, openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
const pinia = createPinia();
|
||||
|
||||
export default boot(async ({ app }) => {
|
||||
app.use(pinia);
|
||||
const useStore = useUserStore();
|
||||
const userStore = useUserStore();
|
||||
const login = useLogin();
|
||||
|
||||
await appApi
|
||||
.get('/login/me')
|
||||
.then((resp) => {
|
||||
useStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.username,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
})
|
||||
.catch((err) => console.error(err));
|
||||
login.refresh().catch((err) => console.error(err));
|
||||
const resp = await Me().catch(() =>
|
||||
login.logout().catch((err) => {
|
||||
console.error(err);
|
||||
return;
|
||||
}),
|
||||
);
|
||||
|
||||
if (!resp) return;
|
||||
|
||||
await userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.username,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
workspaceId: resp.data.workspaceId,
|
||||
settings: resp.data.settings,
|
||||
})
|
||||
.catch(() => {
|
||||
login.logout().catch((err) => console.error(err));
|
||||
});
|
||||
.catch((err) => console.error(err));
|
||||
login.refresh().catch((err) => console.error(err));
|
||||
|
||||
await openDatabase().catch((err) => console.error(err));
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { boot } from 'quasar/wrappers';
|
||||
import { setQuasarInstance } from 'src/vueLib/utils/globalQ';
|
||||
import { setRouterInstance } from 'src/vueLib/utils/globalRouter';
|
||||
import { databaseName, logo, appName, workspace } from 'src/vueLib/models/settings';
|
||||
import { logo, appName } from 'src/vueLib/models/settings';
|
||||
import { Dark } from 'quasar';
|
||||
import { getLocalDarkMode, getLocalSettings } from 'src/localstorage/localStorage';
|
||||
|
||||
@@ -20,8 +20,6 @@ export default boot(({ app, router }) => {
|
||||
if (settings.appName) {
|
||||
appName.value = settings.appName;
|
||||
}
|
||||
databaseName.value = settings.databaseName;
|
||||
workspace.value = settings.workspace?.uuid ?? '';
|
||||
|
||||
document.documentElement.style.setProperty('--q-primary', settings.primaryColor ?? '#1976d2');
|
||||
document.documentElement.style.setProperty(
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
import { boot } from 'quasar/wrappers';
|
||||
import { useUserStore } from 'src/vueLib/login/userStore';
|
||||
import { appApi } from './axios';
|
||||
import { getLocalLastRoute, setLocalLastRoute } from 'src/localstorage/localStorage';
|
||||
import { Me } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
export default boot(async ({ router }) => {
|
||||
const userStore = useUserStore();
|
||||
// load user
|
||||
try {
|
||||
const { data } = await appApi.get('/login/me');
|
||||
const data = await Me();
|
||||
userStore.setFirstLogin(data.newDatabase);
|
||||
|
||||
data.role.role = data.role;
|
||||
await userStore.setUser(data);
|
||||
} catch {
|
||||
|
||||
@@ -111,7 +111,7 @@ async function addAttendees() {
|
||||
});
|
||||
|
||||
await updateAttendees(0);
|
||||
updateEvents();
|
||||
await updateEvents();
|
||||
}
|
||||
|
||||
let resolveNewEvent!: (value: Event) => void;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import { Dark } from 'quasar';
|
||||
import { appName, databaseName, workspace, type Settings } from 'src/vueLib/models/settings';
|
||||
import { appName, type Settings } from 'src/vueLib/models/settings';
|
||||
import { ref } from 'vue';
|
||||
|
||||
export function setLocalSettings(settings: Settings) {
|
||||
localStorage.setItem('icon', settings.icon);
|
||||
localStorage.setItem('appName', settings.appName);
|
||||
localStorage.setItem('databaseName', settings.databaseName);
|
||||
localStorage.setItem('workspace', settings.workspace?.uuid || '');
|
||||
if (settings.icon !== '') localStorage.setItem('icon', settings.icon);
|
||||
if (settings.appName !== '') localStorage.setItem('appName', settings.appName);
|
||||
localStorage.setItem('primaryColor', settings.primaryColor);
|
||||
localStorage.setItem('primaryColorText', settings.primaryColorText);
|
||||
localStorage.setItem('secondaryColor', settings.secondaryColor);
|
||||
@@ -18,27 +16,14 @@ export function getLocalSettings(): Settings {
|
||||
if (name === undefined || name === 'undefined') {
|
||||
name = appName.value;
|
||||
}
|
||||
|
||||
let db = localStorage.getItem('databaseName');
|
||||
if (db === undefined || db === 'undefined') {
|
||||
db = databaseName.value;
|
||||
}
|
||||
|
||||
let iconName = localStorage.getItem('icon');
|
||||
if (iconName === undefined || iconName === 'undefined') {
|
||||
iconName = '';
|
||||
}
|
||||
|
||||
let ws = localStorage.getItem('workspace');
|
||||
if (ws === undefined || ws === 'undefined') {
|
||||
ws = workspace.value || '';
|
||||
}
|
||||
|
||||
return <Settings>{
|
||||
icon: iconName,
|
||||
appName: name,
|
||||
workspace: { name: '', description: '', uuid: ws },
|
||||
databaseName: db,
|
||||
primaryColor: localStorage.getItem('primaryColor'),
|
||||
primaryColorText: localStorage.getItem('primaryColorText'),
|
||||
secondaryColor: localStorage.getItem('secondaryColor'),
|
||||
@@ -49,8 +34,6 @@ export function getLocalSettings(): Settings {
|
||||
export function clearLocalStorage() {
|
||||
localStorage.removeItem('icon');
|
||||
localStorage.removeItem('appName');
|
||||
localStorage.removeItem('workspace');
|
||||
localStorage.removeItem('databaseName');
|
||||
localStorage.removeItem('primaryColor');
|
||||
localStorage.removeItem('primaryColorText');
|
||||
localStorage.removeItem('secondaryColor');
|
||||
|
||||
@@ -147,7 +147,6 @@ import type { Group, Groups } from 'src/vueLib/models/group';
|
||||
import { getLocalPageDefaults, setLocalPageDefaults } from 'src/localstorage/localStorage';
|
||||
import html2pdf from 'html2pdf.js';
|
||||
import type { PageDefault } from 'src/vueLib/models/pageDefaults';
|
||||
import { openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
const filter = ref<string>('');
|
||||
const group = ref<Group[]>([]);
|
||||
@@ -180,14 +179,8 @@ const columns = computed(() => [
|
||||
},
|
||||
]);
|
||||
|
||||
onMounted(async () => {
|
||||
onMounted(() => {
|
||||
loading.value = true;
|
||||
await openDatabase()
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
appApi
|
||||
.get('/groups')
|
||||
.then((resp) => (groups.value = resp.data))
|
||||
|
||||
@@ -52,7 +52,7 @@ import { appApi } from 'src/boot/axios';
|
||||
import { i18n } from 'src/boot/lang';
|
||||
import SiteTitle from 'src/vueLib/general/SiteTitle.vue';
|
||||
import { useNotify } from 'src/vueLib/general/useNotify';
|
||||
import { databaseName, workspace } from 'src/vueLib/models/settings';
|
||||
import { useUserStore } from 'src/vueLib/login/userStore';
|
||||
import { onMounted, ref } from 'vue';
|
||||
|
||||
const stats = ref();
|
||||
@@ -71,8 +71,11 @@ const amounts = ref<{
|
||||
const { NotifyResponse } = useNotify();
|
||||
|
||||
onMounted(async () => {
|
||||
let path = databaseName.value;
|
||||
if (workspace.value !== '') path = workspace.value + '/' + path;
|
||||
const user = useUserStore().user;
|
||||
const workspaceUuid = useUserStore().getWorkspaceUuid;
|
||||
let path = user?.settings?.databaseName;
|
||||
if (workspaceUuid !== undefined) path = workspaceUuid + '/' + path;
|
||||
|
||||
stats.value = await appApi
|
||||
.post('/stats', { database: path })
|
||||
.then((resp) => {
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
import { appApi } from 'src/boot/axios';
|
||||
import { databaseName, workspace } from '../models/settings';
|
||||
import { useUserStore } from '../login/userStore';
|
||||
import type { User } from '../models/users';
|
||||
import { useNotify } from '../general/useNotify';
|
||||
|
||||
export async function openDatabase() {
|
||||
let path = databaseName.value;
|
||||
if (workspace.value !== '') {
|
||||
path = workspace.value + '/' + path;
|
||||
const user = useUserStore().user;
|
||||
|
||||
if (!user) return;
|
||||
const tempUser = (await getUser(user?.id)) as User | void;
|
||||
|
||||
if (!tempUser) return;
|
||||
let path = '';
|
||||
|
||||
path = tempUser.settings?.databaseName || '';
|
||||
|
||||
if (tempUser.workspaces) {
|
||||
path = tempUser.workspaces.find((w) => w.id === tempUser.workspaceId)?.uuid || '';
|
||||
path = path + '/' + tempUser.settings?.databaseName;
|
||||
}
|
||||
|
||||
return appApi.post('database/open', {
|
||||
@@ -12,3 +24,20 @@ export async function openDatabase() {
|
||||
create: true,
|
||||
});
|
||||
}
|
||||
|
||||
async function getUser(id: number): Promise<User | null> {
|
||||
const { NotifyResponse } = useNotify();
|
||||
return appApi
|
||||
.get(`/users?id=${id}`)
|
||||
.then((resp) => {
|
||||
return resp.data[0];
|
||||
})
|
||||
.catch((err) => {
|
||||
NotifyResponse(err, 'error');
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
export async function Me() {
|
||||
return appApi.get('/login/me');
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { Settings } from '../models/settings';
|
||||
import { appName, logo } from '../models/settings';
|
||||
import { clearLocalStorage, setLocalSettings } from 'src/localstorage/localStorage';
|
||||
import { routerInstance } from 'src/router';
|
||||
import { Me } from '../components/DatabaseCall';
|
||||
|
||||
const refreshTime = 10000;
|
||||
let intervalId: ReturnType<typeof setInterval> | null = null;
|
||||
@@ -31,12 +32,14 @@ export function useLogin() {
|
||||
setLocalSettings(sets);
|
||||
});
|
||||
|
||||
const resp = await appApi.get('/login/me');
|
||||
const resp = await Me();
|
||||
|
||||
await userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.user,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
workspaceId: resp.data.workspace,
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'));
|
||||
|
||||
@@ -60,31 +63,31 @@ export function useLogin() {
|
||||
}
|
||||
|
||||
async function refresh() {
|
||||
await appApi
|
||||
.post('login/refresh', {}, { withCredentials: true })
|
||||
.then(() => {
|
||||
appApi
|
||||
.get('/login/me')
|
||||
.then((resp) => {
|
||||
userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.user,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'));
|
||||
if (!intervalId) {
|
||||
startRefreshInterval();
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.catch(() => {});
|
||||
await appApi.post('login/refresh', {}, { withCredentials: true }).catch(() => {
|
||||
userStore.clearUser();
|
||||
return;
|
||||
});
|
||||
|
||||
const resp = await Me();
|
||||
if (!resp) {
|
||||
stopRefreshInterval();
|
||||
return false;
|
||||
}
|
||||
userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.user,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
workspaceId: resp.data.workspace,
|
||||
settings: resp.data.settings,
|
||||
})
|
||||
.catch(() => {
|
||||
userStore.clearUser();
|
||||
});
|
||||
stopRefreshInterval();
|
||||
return false;
|
||||
.catch((err) => NotifyResponse(err, 'error'));
|
||||
|
||||
if (!intervalId) {
|
||||
startRefreshInterval();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function startRefreshInterval() {
|
||||
|
||||
@@ -63,10 +63,10 @@ export function useEventTable() {
|
||||
const loading = ref(false);
|
||||
|
||||
//updates Event list from database
|
||||
function updateEvents() {
|
||||
async function updateEvents() {
|
||||
loading.value = true;
|
||||
|
||||
appApi
|
||||
await appApi
|
||||
.get('events')
|
||||
.then((resp) => {
|
||||
if (resp.data === null) {
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { appApi } from 'src/boot/axios';
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { onMounted, ref } from 'vue';
|
||||
import type { Event, Events } from 'src/vueLib/models/event';
|
||||
import EditOneDialog from 'src/components/EditOneDialog.vue';
|
||||
import EditAllDialog from 'src/components/EventEditAllDialog.vue';
|
||||
@@ -129,7 +129,6 @@ import type { Members } from 'src/vueLib/models/member';
|
||||
import { i18n } from 'src/boot/lang';
|
||||
import SearchableInput from '../components/SearchableInput.vue';
|
||||
import TopButtonGroup from '../components/TopButtonGroup.vue';
|
||||
import { openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
export interface EventDialog {
|
||||
getSelected: () => Events;
|
||||
@@ -149,19 +148,8 @@ const user = useUserStore();
|
||||
|
||||
const { Events, pagination, loading, columns, updateEvents } = useEventTable();
|
||||
|
||||
//load on mounting page
|
||||
onMounted(async () => {
|
||||
loading.value = true;
|
||||
|
||||
await openDatabase()
|
||||
.then(() => {
|
||||
updateEvents();
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
await updateEvents();
|
||||
});
|
||||
|
||||
// opens dialog for all Event values
|
||||
@@ -193,17 +181,17 @@ function openAttendees(eventArray: number, attendees: Members | null) {
|
||||
}
|
||||
|
||||
//remove Event from database
|
||||
function removeEvent(...removeEvents: Events) {
|
||||
async function removeEvent(...removeEvents: Events) {
|
||||
const EventIds: number[] = [];
|
||||
|
||||
removeEvents.forEach((Event: Event) => {
|
||||
EventIds.push(Event.id);
|
||||
});
|
||||
|
||||
appApi
|
||||
await appApi
|
||||
.post('events/delete', { ids: EventIds })
|
||||
.then(() => {
|
||||
updateEvents();
|
||||
updateEvents().catch((err) => NotifyResponse(err, 'error'));
|
||||
selected.value = [];
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
@@ -123,7 +123,6 @@ import SearchableInput from '../components/SearchableInput.vue';
|
||||
import TopButtonGroup from '../components/TopButtonGroup.vue';
|
||||
import { getAllMembers } from '../members/MembersTable';
|
||||
import type { Members } from 'src/vueLib/models/member';
|
||||
import { openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
const { NotifyResponse } = useNotify();
|
||||
const groupDialog = ref();
|
||||
@@ -146,18 +145,8 @@ onMounted(async () => {
|
||||
loading.value = true;
|
||||
|
||||
members.value = await getAllMembers();
|
||||
|
||||
await openDatabase()
|
||||
.then(() => {
|
||||
updateGroups().catch((err) => {
|
||||
NotifyResponse(err, 'error');
|
||||
});
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
await updateGroups();
|
||||
loading.value = false;
|
||||
});
|
||||
|
||||
//opens dialog for one value
|
||||
|
||||
@@ -215,7 +215,6 @@ import FilterSelect from '../components/FilterSelect.vue';
|
||||
import TopButtonGroup from '../components/TopButtonGroup.vue';
|
||||
import { getLocalPageDefaults, setLocalPageDefaults } from 'src/localstorage/localStorage';
|
||||
import type { PageDefault } from 'src/vueLib/models/pageDefaults';
|
||||
import { openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
const inProps = defineProps({
|
||||
addAttendees: { type: Boolean },
|
||||
@@ -295,15 +294,10 @@ onMounted(async () => {
|
||||
// set custom filter
|
||||
setNewFilter(selectedColumnFilter.value, ...selectedColumnOptions.value);
|
||||
|
||||
await openDatabase()
|
||||
.then(() => {
|
||||
updateTable().catch((err) => NotifyResponse(err, 'error'));
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
await updateMembers(localCompareMembers.value, inProps.addResponsible).catch((err) =>
|
||||
NotifyResponse(err, 'error'),
|
||||
);
|
||||
loading.value = false;
|
||||
});
|
||||
|
||||
async function updateTable(add?: Members) {
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { appApi } from 'src/boot/axios';
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { onMounted, ref } from 'vue';
|
||||
import DialogFrame from 'src/vueLib/dialog/DialogFrame.vue';
|
||||
import MembersTable from '../members/MembersTable.vue';
|
||||
import type { Members } from 'src/vueLib/models/member';
|
||||
@@ -113,7 +113,6 @@ import { i18n } from 'src/boot/lang';
|
||||
import type { Responsible, Responsibles } from 'src/vueLib/models/responsible';
|
||||
import SearchableInput from '../components/SearchableInput.vue';
|
||||
import TopButtonGroup from '../components/TopButtonGroup.vue';
|
||||
import { openDatabase } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
const { NotifyResponse } = useNotify();
|
||||
const responsibleDialog = ref();
|
||||
@@ -128,21 +127,8 @@ const user = useUserStore();
|
||||
const { responsibleMember, pagination, loading, columns, updateResponsibles } =
|
||||
useResponsibleTable();
|
||||
|
||||
//load on mounting page
|
||||
onMounted(async () => {
|
||||
loading.value = true;
|
||||
|
||||
await openDatabase()
|
||||
.then(() => {
|
||||
updateResponsibles().catch((err) => {
|
||||
NotifyResponse(err, 'error');
|
||||
});
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'))
|
||||
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
await updateResponsibles();
|
||||
});
|
||||
|
||||
//opens dialog for one value
|
||||
|
||||
@@ -5,6 +5,7 @@ import { i18n } from 'boot/lang';
|
||||
import type { Roles } from 'src/vueLib/models/roles';
|
||||
import { useUserStore } from 'src/vueLib/login/userStore';
|
||||
import { useLogin } from 'src/vueLib/login/useLogin';
|
||||
import { Me } from 'src/vueLib/components/DatabaseCall';
|
||||
|
||||
export const roles = ref<Roles>([]);
|
||||
|
||||
@@ -64,21 +65,27 @@ export function useRoleTable() {
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
await appApi
|
||||
.get('/login/me')
|
||||
.then((resp) => {
|
||||
userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.user,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'));
|
||||
login.refresh().catch((err) => NotifyResponse(err, 'error'));
|
||||
})
|
||||
.catch(() => {
|
||||
login.logout().catch((err) => NotifyResponse(err, 'error'));
|
||||
|
||||
const resp = await Me().catch(() => {
|
||||
login.logout().catch((err) => {
|
||||
NotifyResponse(err, 'error');
|
||||
return;
|
||||
});
|
||||
});
|
||||
|
||||
if (!resp) return;
|
||||
|
||||
await userStore
|
||||
.setUser({
|
||||
id: resp.data.id,
|
||||
user: resp.data.user,
|
||||
role: { role: resp.data.role, permissions: [] },
|
||||
workspaceId: resp.data.workspaceId,
|
||||
settings: resp.data.settings,
|
||||
})
|
||||
.catch((err) => NotifyResponse(err, 'error'));
|
||||
|
||||
login.refresh().catch((err) => NotifyResponse(err, 'error'));
|
||||
}
|
||||
return {
|
||||
roles,
|
||||
|
||||
Reference in New Issue
Block a user