From 10be7021967502fb8123a28f1a669a65be6a9ae3 Mon Sep 17 00:00:00 2001 From: Andreas Dinauer Date: Fri, 1 May 2026 15:28:18 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20New=20user=20management?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/artifact/Artifact.ts | 6 ++-- app/components/events/Event.ts | 8 +++-- app/components/events/EventComponent.vue | 3 +- app/components/users/UserStore.ts | 41 ++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 app/components/users/UserStore.ts diff --git a/app/components/artifact/Artifact.ts b/app/components/artifact/Artifact.ts index 2797381..4204971 100644 --- a/app/components/artifact/Artifact.ts +++ b/app/components/artifact/Artifact.ts @@ -1,4 +1,5 @@ import {MavenApi} from "~/utils/Api"; +import {type EnhancedResponse, useUserStore} from "~/components/users/UserStore"; export class Artifact { @@ -17,10 +18,11 @@ export class Artifact static get(onSuccess: (artifacts: Artifact[]) => void) { - MavenApi.create().get("/artifacts") + MavenApi.create().get>("/artifacts") .then((response) => { - onSuccess(response.data) + useUserStore().add(response.data.users); + onSuccess(response.data.data); }); } diff --git a/app/components/events/Event.ts b/app/components/events/Event.ts index a84c25d..8c930c5 100644 --- a/app/components/events/Event.ts +++ b/app/components/events/Event.ts @@ -1,6 +1,7 @@ import axios from "axios"; import type {Account} from "~/auth/Account"; import {Session} from "~/auth/Session"; +import {type EnhancedResponse, useUserStore} from "~/components/users/UserStore"; export class Event { @@ -8,17 +9,18 @@ export class Event public type: EventType, public timestamp: Date, public resource: Resource, - public account: Account + public userId: string ) { } static get(onSuccess: (events: Event[]) => void) { - MavenApi.create().get("/events", {withCredentials: true}) + MavenApi.create().get>("/events", {withCredentials: true}) .then((response) => { - onSuccess(response.data) + useUserStore().add(response.data.users); + onSuccess(response.data.data) }); } } diff --git a/app/components/events/EventComponent.vue b/app/components/events/EventComponent.vue index 3d3627d..9e281f3 100644 --- a/app/components/events/EventComponent.vue +++ b/app/components/events/EventComponent.vue @@ -8,7 +8,7 @@ {{ event.resource.artifactId }} {{ event.resource.version }} - +

{{useUserStore().get(event.userId)?.displayName}}

{{ Age.calc(event.timestamp) }} @@ -20,6 +20,7 @@ import ContentCell from "~/components/ui/table/ContentCell.vue"; import {Event, EventType} from "~/components/events/Event"; import {Age} from "~/utils/Age"; import DisplayNameComponent from "~/components/auth/DisplayNameComponent.vue"; +import {useUserStore} from "~/components/users/UserStore"; defineProps<{ event: Event diff --git a/app/components/users/UserStore.ts b/app/components/users/UserStore.ts new file mode 100644 index 0000000..1c28a64 --- /dev/null +++ b/app/components/users/UserStore.ts @@ -0,0 +1,41 @@ +export const useUserStore = defineStore('user', { + state: () => ({ + users: {} as Record + }), + getters: { + get: (state) => + { + return (id: string): User | undefined => + { + return state.users[id]; + } + } + }, + actions: { + add(users: Record) + { + for (const [id, user] of Object.entries(users)) + { + if (this.users[id] == null) + { + this.users[id] = user; + } + } + } + } +}) + +export class EnhancedResponse

+{ + constructor( + public data: P, + public users: Record + ) + { + } +} + +export class User +{ + displayName?: string; +} \ No newline at end of file