[feat][apikey] add apikey store and logic

This commit is contained in:
Tim Gröger 2024-10-15 07:29:24 +02:00
parent a807d9c809
commit 096c190946
2 changed files with 62 additions and 0 deletions

61
api/src/stores/apiKeys.ts Normal file
View File

@ -0,0 +1,61 @@
import { defineStore } from 'pinia';
import { api } from '../internal';
import { isAxiosError, useMainStore } from '.';
export const useApiKeyStore = defineStore({
id: 'apiKeys',
state: () => ({
apiKeys: [] as FG.ApiKey[],
}),
getters: {},
actions: {
async getApiKeys(): Promise<FG.ApiKey[]> {
try {
const mainStore = useMainStore();
const { data } = await api.get<FG.ApiKey[]>(
`/users/${mainStore.currentUser.userid}/api_keys`
);
this.apiKeys = data;
return data;
} catch (error) {
return [] as FG.ApiKey[];
}
},
async deleteApiKey(id: number): Promise<boolean> {
const mainStore = useMainStore();
try {
await api.delete(`/users/${mainStore.currentUser.userid}/api_keys/${id}`);
this.apiKeys = this.apiKeys.filter((apiKey: FG.ApiKey) => apiKey.id !== id);
return true;
} catch (error) {
// Ignore 401, as this means we are already logged out, throw all other
if (!isAxiosError(error, 401)) throw error;
}
return false;
},
async createApiKey(apiKey: FG.ApiKey): Promise<FG.ApiKey> {
const mainStore = useMainStore();
try {
const { data } = await api.post<FG.ApiKey>(
`/users/${mainStore.currentUser.userid}/api_keys`,
apiKey
);
this.apiKeys.push(data);
return data;
} catch (error) {
throw error;
}
},
},
});

View File

@ -21,3 +21,4 @@ export function isAxiosError(error: unknown, status?: number) {
export * from './main'; export * from './main';
export * from './session'; export * from './session';
export * from './user'; export * from './user';
export * from './apiKeys';