diff --git a/src/app/features/admin/transactions/services/admin-transactions-local.gateway.ts b/src/app/features/admin/transactions/services/admin-transactions-local.gateway.ts index ba00a3f..8d1d523 100644 --- a/src/app/features/admin/transactions/services/admin-transactions-local.gateway.ts +++ b/src/app/features/admin/transactions/services/admin-transactions-local.gateway.ts @@ -1,18 +1,24 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { Observable, of } from 'rxjs'; import { delay } from 'rxjs/operators'; import { AdminTransaction, AdminTransactionListFilters, AdminTransactionsListResult } from '../models/admin-transaction.model'; import { AdminTransactionsGateway } from './admin-transactions-gateway.interface'; import { AdminOrdersLocalGateway } from '../../orders/services/admin-orders-local.gateway'; +import { AdminAuthService } from '../../../../core/admin-auth/admin-auth.service'; const METHODS = ['card', 'qr', 'cash_on_delivery']; @Injectable({ providedIn: 'root' }) export class AdminTransactionsLocalGateway implements AdminTransactionsGateway { + private readonly adminAuth = inject(AdminAuthService); private cache: AdminTransaction[] | null = null; constructor(private readonly ordersGateway: AdminOrdersLocalGateway) {} + private get currentActor(): string { + return this.adminAuth.displayName() ?? 'admin'; + } + loadTransactions(filters: AdminTransactionListFilters): Observable { return new Observable(subscriber => { this.ensureData().then(() => { @@ -38,7 +44,7 @@ export class AdminTransactionsLocalGateway implements AdminTransactionsGateway { ...tx, status: 'retried', updatedAt: new Date().toISOString(), - audit: [...tx.audit, { action: 'Retried failed transaction', actor: 'admin', timestamp: new Date().toISOString() }], + audit: [...tx.audit, { action: 'Retried failed transaction', actor: this.currentActor, timestamp: new Date().toISOString() }], })); } @@ -47,7 +53,7 @@ export class AdminTransactionsLocalGateway implements AdminTransactionsGateway { ...tx, fraudFlag: flagged, updatedAt: new Date().toISOString(), - audit: [...tx.audit, { action: flagged ? 'Flagged as fraud' : 'Fraud flag cleared', actor: 'admin', timestamp: new Date().toISOString() }], + audit: [...tx.audit, { action: flagged ? 'Flagged as fraud' : 'Fraud flag cleared', actor: this.currentActor, timestamp: new Date().toISOString() }], })); } diff --git a/src/app/features/admin/users/services/admin-users-local.gateway.ts b/src/app/features/admin/users/services/admin-users-local.gateway.ts index 05b599f..817296b 100644 --- a/src/app/features/admin/users/services/admin-users-local.gateway.ts +++ b/src/app/features/admin/users/services/admin-users-local.gateway.ts @@ -1,8 +1,9 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { Observable, of } from 'rxjs'; import { delay } from 'rxjs/operators'; import { AdminInvitation, AdminRole, AdminSession, AdminUser, AdminUserAuditEntry, AdminUserScope, AdminUserStatus } from '../models/admin-user.model'; import { AdminUsersGateway } from './admin-users-gateway.interface'; +import { AdminAuthService } from '../../../../core/admin-auth/admin-auth.service'; const BUILT_IN_ROLES: AdminRole[] = [ { id: 'owner', name: 'Owner', permissions: ['*'], builtIn: true }, @@ -13,6 +14,7 @@ const BUILT_IN_ROLES: AdminRole[] = [ @Injectable({ providedIn: 'root' }) export class AdminUsersLocalGateway implements AdminUsersGateway { + private readonly adminAuth = inject(AdminAuthService); private users: AdminUser[] | null = null; private roles: AdminRole[] = [...BUILT_IN_ROLES]; private invitations: AdminInvitation[] = []; @@ -90,12 +92,16 @@ export class AdminUsersLocalGateway implements AdminUsersGateway { this.audit[userId] = [ ...(this.audit[userId] ?? []), roleId - ? { eventKey: 'roleChanged', roleId, actor: 'admin', timestamp: new Date().toISOString() } - : { eventKey: 'statusChanged', status, actor: 'admin', timestamp: new Date().toISOString() }, + ? { eventKey: 'roleChanged', roleId, actor: this.currentActor, timestamp: new Date().toISOString() } + : { eventKey: 'statusChanged', status, actor: this.currentActor, timestamp: new Date().toISOString() }, ]; return of(updated).pipe(delay(50)); } + private get currentActor(): string { + return this.adminAuth.displayName() ?? 'admin'; + } + private ensureUsers(): AdminUser[] { if (!this.users) { this.users = [