refactor and restructure pinia store and trpc routers + add members list to account store
This commit is contained in:
73
stores/account.store.ts
Normal file
73
stores/account.store.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { ACCOUNT_ACCESS } from ".prisma/client"
|
||||
import { defineStore } from "pinia"
|
||||
import { MembershipWithUser } from "~~/lib/services/user.account.service"
|
||||
|
||||
import { useAuthStore } from './auth.store'
|
||||
|
||||
interface State {
|
||||
activeAccountMembers: MembershipWithUser[]
|
||||
}
|
||||
|
||||
export const useAccountStore = defineStore('account', {
|
||||
state: (): State => {
|
||||
return {
|
||||
activeAccountMembers: [],
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async getActiveAccountMembers(){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: members } = await $client.account.getAccountMembers.useQuery({account_id: authStore.activeMembership.account_id});
|
||||
if(members.value?.memberships){
|
||||
this.activeAccountMembers = members.value?.memberships;
|
||||
}
|
||||
},
|
||||
async changeAccountName(new_name: string){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: account } = await $client.account.changeAccountName.useQuery({account_id: authStore.activeMembership.account_id, new_name});
|
||||
if(account.value?.account){
|
||||
authStore.activeMembership.account = account.value.account;
|
||||
}
|
||||
},
|
||||
async changeAccountPlan(plan_id: number){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: account } = await $client.account.changeAccountPlan.useQuery({account_id: authStore.activeMembership.account_id, plan_id});
|
||||
if(account.value?.account){
|
||||
authStore.activeMembership.account = account.value.account;
|
||||
}
|
||||
},
|
||||
async joinUserToAccount(user_id: number){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.account.joinUserToAccount.useQuery({account_id: authStore.activeMembership.account_id, user_id});
|
||||
if(membership.value?.membership){
|
||||
authStore.activeMembership = membership.value.membership;
|
||||
}
|
||||
},
|
||||
async changeUserAccessWithinAccount(user_id: number, access: ACCOUNT_ACCESS){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.account.changeUserAccessWithinAccount.useQuery({account_id: authStore.activeMembership.account_id, user_id, access});
|
||||
if(membership.value?.membership){
|
||||
authStore.activeMembership = membership.value.membership;
|
||||
}
|
||||
},
|
||||
async claimOwnershipOfAccount(){
|
||||
const authStore = useAuthStore();
|
||||
if(!authStore.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.account.claimOwnershipOfAccount.useQuery({account_id: authStore.activeMembership.account_id});
|
||||
if(membership.value?.membership){
|
||||
authStore.activeMembership = membership.value.membership;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1,89 +0,0 @@
|
||||
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() {
|
||||
if(!this.dbUser || !this.activeMembership){
|
||||
const { $client } = useNuxtApp();
|
||||
const { dbUser } = await $client.userAccount.getDBUser.query();
|
||||
|
||||
if(dbUser){
|
||||
this.dbUser = dbUser;
|
||||
if(dbUser.memberships.length > 0){
|
||||
this.activeMembership = dbUser.memberships[0];
|
||||
await this.fetchNotesForCurrentUser();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async fetchNotesForCurrentUser() {
|
||||
if(!this.activeMembership) { return; }
|
||||
|
||||
const { $client } = useNuxtApp();
|
||||
const { notes } = await $client.notes.getForCurrentUser.query({account_id: this.activeMembership.account_id});
|
||||
if(notes){
|
||||
this.notes = notes;
|
||||
}
|
||||
},
|
||||
async changeActiveMembership(membership: MembershipWithAccount) {
|
||||
if(membership !== this.activeMembership){
|
||||
this.activeMembership = membership;
|
||||
await this.fetchNotesForCurrentUser();
|
||||
}
|
||||
},
|
||||
async changeAccountName(new_name: string){
|
||||
if(!this.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: account } = await $client.userAccount.changeAccountName.useQuery({account_id: this.activeMembership.account_id, new_name});
|
||||
if(account.value?.account){
|
||||
this.activeMembership.account = account.value.account;
|
||||
}
|
||||
},
|
||||
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(user_id: number){
|
||||
if(!this.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.userAccount.joinUserToAccount.useQuery({account_id: this.activeMembership.account_id, user_id});
|
||||
if(membership.value?.membership){
|
||||
this.activeMembership = membership.value.membership;
|
||||
}
|
||||
},
|
||||
async changeUserAccessWithinAccount(user_id: number, access: ACCOUNT_ACCESS){
|
||||
if(!this.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.userAccount.changeUserAccessWithinAccount.useQuery({account_id: this.activeMembership.account_id, user_id, access});
|
||||
if(membership.value?.membership){
|
||||
this.activeMembership = membership.value.membership;
|
||||
}
|
||||
},
|
||||
async claimOwnershipOfAccount(){
|
||||
if(!this.activeMembership) { return; }
|
||||
const { $client } = useNuxtApp();
|
||||
const { data: membership } = await $client.userAccount.claimOwnershipOfAccount.useQuery({account_id: this.activeMembership.account_id});
|
||||
if(membership.value?.membership){
|
||||
this.activeMembership = membership.value.membership;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
35
stores/auth.store.ts
Normal file
35
stores/auth.store.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { defineStore } from "pinia"
|
||||
import { FullDBUser, MembershipWithAccount } from "~~/lib/services/user.account.service"
|
||||
|
||||
interface State {
|
||||
dbUser?: FullDBUser
|
||||
activeMembership: MembershipWithAccount | null
|
||||
}
|
||||
|
||||
export const useAuthStore = defineStore('auth', {
|
||||
state: (): State => {
|
||||
return {
|
||||
activeMembership: null
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async initUser() {
|
||||
if(!this.dbUser || !this.activeMembership){
|
||||
const { $client } = useNuxtApp();
|
||||
const { dbUser } = await $client.auth.getDBUser.query();
|
||||
|
||||
if(dbUser){
|
||||
this.dbUser = dbUser;
|
||||
if(dbUser.memberships.length > 0){
|
||||
this.activeMembership = dbUser.memberships[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async changeActiveMembership(membership: MembershipWithAccount) {
|
||||
if(membership !== this.activeMembership){
|
||||
this.activeMembership = membership;
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
29
stores/notes.store.ts
Normal file
29
stores/notes.store.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { Note } from ".prisma/client"
|
||||
import { defineStore } from "pinia"
|
||||
|
||||
import { useAuthStore } from './auth.store'
|
||||
|
||||
interface State {
|
||||
notes: Note[]
|
||||
}
|
||||
|
||||
export const useNotesStore = defineStore('notes', {
|
||||
state: (): State => {
|
||||
return {
|
||||
notes: [],
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
async fetchNotesForCurrentUser() {
|
||||
const authStore = useAuthStore();
|
||||
|
||||
if(!authStore.activeMembership) { return; }
|
||||
|
||||
const { $client } = useNuxtApp();
|
||||
const { notes } = await $client.notes.getForCurrentUser.query({account_id: authStore.activeMembership.account_id});
|
||||
if(notes){
|
||||
this.notes = notes;
|
||||
}
|
||||
},
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user