Files
afrobiz/stores/app.store.ts
2023-02-21 20:37:32 +11:00

79 lines
2.9 KiB
TypeScript

import { ACCOUNT_ACCESS, Note } from ".prisma/client"
import { defineStore } from "pinia"
import { FullDBUser, MembershipWithAccount } from "~~/lib/services/user.account.service"
interface State {
dbUser?: FullDBUser
activeMembership: MembershipWithAccount | null
notes: Note[]
}
export const useAppStore = defineStore('app', {
state: (): State => {
return {
notes: [],
activeMembership: null
}
},
actions: {
async initUser() {
const { $client } = useNuxtApp();
const { data: dbUser } = await $client.userAccount.getDBUser.useQuery();
if(dbUser.value?.dbUser){
this.dbUser = dbUser.value.dbUser;
if(dbUser.value.dbUser.memberships.length > 0){
this.activeMembership = dbUser.value.dbUser.memberships[0];
await this.fetchNotesForCurrentUser();
}
}
},
async fetchNotesForCurrentUser() {
if(!this.activeMembership) { return; }
const { $client } = useNuxtApp();
const { data: foundNotes } = await $client.notes.getForCurrentUser.useQuery({account_id: this.activeMembership.account_id});
if(foundNotes.value?.notes){
this.notes = foundNotes.value.notes;
}
},
async changeActiveMembership(membership: MembershipWithAccount) {
if(membership !== this.activeMembership){
this.activeMembership = membership;
await this.fetchNotesForCurrentUser();
}
},
async changeAccountPlan(plan_id: number){
if(!this.activeMembership) { return; }
const { $client } = useNuxtApp();
const { data: account } = await $client.userAccount.changeAccountPlan.useQuery({account_id: this.activeMembership.account_id, plan_id});
if(account.value?.account){
this.activeMembership.account = account.value.account;
}
},
async joinUserToAccount(account_id: number){
if(!this.activeMembership) { return; }
const { $client } = useNuxtApp();
const { data: membership } = await $client.userAccount.joinUserToAccount.useQuery({account_id});
if(membership.value?.membership){
this.activeMembership = membership.value.membership;
}
},
async changeUserAccessWithinAccount(user_id: number,account_id: number, access: ACCOUNT_ACCESS){
if(!this.activeMembership) { return; }
const { $client } = useNuxtApp();
const { data: membership } = await $client.userAccount.changeUserAccessWithinAccount.useQuery({user_id, account_id, access});
if(membership.value?.membership){
this.activeMembership = membership.value.membership;
}
},
async claimOwnershipOfAccount(account_id: number){
if(!this.activeMembership) { return; }
const { $client } = useNuxtApp();
const { data: membership } = await $client.userAccount.claimOwnershipOfAccount.useQuery({account_id});
if(membership.value?.membership){
this.activeMembership = membership.value.membership;
}
}
}
});