Add logging to admin actions and dashboard service
The new logging will enhance the visibility of important actions by the admin, including banning and unbanning users, deleting users and accounts. The features/admin logging dependency has been added. In the admin dashboard service, specific logging has been implemented to track errors in fetching data.
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
"@kit/eslint-config": "workspace:*",
|
||||
"@kit/next": "workspace:^",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/shared": "workspace:^",
|
||||
"@kit/supabase": "workspace:^",
|
||||
"@kit/tailwind-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
|
||||
@@ -4,6 +4,7 @@ import { revalidatePath } from 'next/cache';
|
||||
import { redirect } from 'next/navigation';
|
||||
|
||||
import { enhanceAction } from '@kit/next/actions';
|
||||
import { getLogger } from '@kit/shared/logger';
|
||||
import { getSupabaseServerActionClient } from '@kit/supabase/server-actions-client';
|
||||
|
||||
import {
|
||||
@@ -25,9 +26,14 @@ export const banUserAction = adminAction(
|
||||
enhanceAction(
|
||||
async ({ userId }) => {
|
||||
const service = getAdminAuthService();
|
||||
const logger = await getLogger();
|
||||
|
||||
logger.info({ userId }, `Super Admin is banning user...`);
|
||||
|
||||
await service.banUser(userId);
|
||||
|
||||
logger.info({ userId }, `Super Admin has successfully banned user`);
|
||||
|
||||
revalidateAdmin();
|
||||
|
||||
return {
|
||||
@@ -48,9 +54,14 @@ export const reactivateUserAction = adminAction(
|
||||
enhanceAction(
|
||||
async ({ userId }) => {
|
||||
const service = getAdminAuthService();
|
||||
const logger = await getLogger();
|
||||
|
||||
logger.info({ userId }, `Super Admin is reactivating user...`);
|
||||
|
||||
await service.reactivateUser(userId);
|
||||
|
||||
logger.info({ userId }, `Super Admin has successfully reactivated user`);
|
||||
|
||||
revalidateAdmin();
|
||||
|
||||
return {
|
||||
@@ -71,6 +82,9 @@ export const impersonateUserAction = adminAction(
|
||||
enhanceAction(
|
||||
async ({ userId }) => {
|
||||
const service = getAdminAuthService();
|
||||
const logger = await getLogger();
|
||||
|
||||
logger.info({ userId }, `Super Admin is impersonating user...`);
|
||||
|
||||
return await service.impersonateUser(userId);
|
||||
},
|
||||
@@ -88,9 +102,14 @@ export const deleteUserAction = adminAction(
|
||||
enhanceAction(
|
||||
async ({ userId }) => {
|
||||
const service = getAdminAuthService();
|
||||
const logger = await getLogger();
|
||||
|
||||
logger.info({ userId }, `Super Admin is deleting user...`);
|
||||
|
||||
await service.deleteUser(userId);
|
||||
|
||||
logger.info({ userId }, `Super Admin has successfully deleted user`);
|
||||
|
||||
revalidateAdmin();
|
||||
|
||||
return redirect('/admin/accounts');
|
||||
@@ -109,9 +128,17 @@ export const deleteAccountAction = adminAction(
|
||||
enhanceAction(
|
||||
async ({ accountId }) => {
|
||||
const service = getAdminAccountsService();
|
||||
const logger = await getLogger();
|
||||
|
||||
logger.info({ accountId }, `Super Admin is deleting account...`);
|
||||
|
||||
await service.deleteAccount(accountId);
|
||||
|
||||
logger.info(
|
||||
{ accountId },
|
||||
`Super Admin has successfully deleted account`,
|
||||
);
|
||||
|
||||
revalidateAdmin();
|
||||
|
||||
return redirect('/admin/accounts');
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { SupabaseClient } from '@supabase/supabase-js';
|
||||
|
||||
import { getLogger } from '@kit/shared/logger';
|
||||
import { Database } from '@kit/supabase/database';
|
||||
|
||||
export function createAdminDashboardService(client: SupabaseClient<Database>) {
|
||||
@@ -18,6 +19,11 @@ export class AdminDashboardService {
|
||||
count: 'estimated',
|
||||
},
|
||||
) {
|
||||
const logger = await getLogger();
|
||||
const ctx = {
|
||||
name: `admin.dashboard`,
|
||||
};
|
||||
|
||||
const selectParams = {
|
||||
count,
|
||||
head: true,
|
||||
@@ -29,7 +35,12 @@ export class AdminDashboardService {
|
||||
.eq('status', 'active')
|
||||
.then((response) => {
|
||||
if (response.error) {
|
||||
throw new Error(response.error.message);
|
||||
logger.error(
|
||||
{ ...ctx, error: response.error.message },
|
||||
`Error fetching active subscriptions`,
|
||||
);
|
||||
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
return response.count;
|
||||
@@ -41,7 +52,12 @@ export class AdminDashboardService {
|
||||
.eq('status', 'trialing')
|
||||
.then((response) => {
|
||||
if (response.error) {
|
||||
throw new Error(response.error.message);
|
||||
logger.error(
|
||||
{ ...ctx, error: response.error.message },
|
||||
`Error fetching trialing subscriptions`,
|
||||
);
|
||||
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
return response.count;
|
||||
@@ -53,7 +69,12 @@ export class AdminDashboardService {
|
||||
.eq('is_personal_account', true)
|
||||
.then((response) => {
|
||||
if (response.error) {
|
||||
throw new Error(response.error.message);
|
||||
logger.error(
|
||||
{ ...ctx, error: response.error.message },
|
||||
`Error fetching personal accounts`,
|
||||
);
|
||||
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
return response.count;
|
||||
@@ -65,7 +86,12 @@ export class AdminDashboardService {
|
||||
.eq('is_personal_account', false)
|
||||
.then((response) => {
|
||||
if (response.error) {
|
||||
throw new Error(response.error.message);
|
||||
logger.error(
|
||||
{ ...ctx, error: response.error.message },
|
||||
`Error fetching team accounts`,
|
||||
);
|
||||
|
||||
throw new Error();
|
||||
}
|
||||
|
||||
return response.count;
|
||||
|
||||
7
pnpm-lock.yaml
generated
7
pnpm-lock.yaml
generated
@@ -642,6 +642,9 @@ importers:
|
||||
'@kit/prettier-config':
|
||||
specifier: workspace:*
|
||||
version: link:../../../tooling/prettier
|
||||
'@kit/shared':
|
||||
specifier: workspace:^
|
||||
version: link:../../shared
|
||||
'@kit/supabase':
|
||||
specifier: workspace:^
|
||||
version: link:../../supabase
|
||||
@@ -1038,7 +1041,7 @@ importers:
|
||||
dependencies:
|
||||
'@sentry/nextjs':
|
||||
specifier: ^8.14.0
|
||||
version: 8.14.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)
|
||||
version: 8.14.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)
|
||||
devDependencies:
|
||||
'@kit/eslint-config':
|
||||
specifier: workspace:*
|
||||
@@ -10856,7 +10859,7 @@ snapshots:
|
||||
'@sentry/types': 8.14.0
|
||||
'@sentry/utils': 8.14.0
|
||||
|
||||
'@sentry/nextjs@8.14.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.4(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)':
|
||||
'@sentry/nextjs@8.14.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.25.1)(next@14.2.4(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)':
|
||||
dependencies:
|
||||
'@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0)
|
||||
'@rollup/plugin-commonjs': 26.0.1(rollup@3.29.4)
|
||||
|
||||
Reference in New Issue
Block a user