Update dependencies and enhance admin account page

This commit updates various dependencies in pnpm-lock file and introduces enhancements to the admin account page. This includes adding several new functionality like 'Delete User', 'Ban User', 'Impersonate User' and 'Delete Account'. Various UI components are also added for these features.
This commit is contained in:
giancarlo
2024-04-09 15:26:31 +08:00
parent e7f2660032
commit 19c16cfb44
15 changed files with 1150 additions and 244 deletions

View File

@@ -0,0 +1,127 @@
'use server';
import { revalidatePath } from 'next/cache';
import { enhanceAction } from '@kit/next/actions';
import { getSupabaseServerActionClient } from '@kit/supabase/server-actions-client';
import { enhanceAdminAction } from './enhance-admin-action';
import {
BanUserSchema,
DeleteAccountSchema,
DeleteUserSchema,
ImpersonateUserSchema,
ReactivateUserSchema,
} from './schema/admin-actions.schema';
import { AdminAccountsService } from './services/admin-accounts.service';
import { AdminAuthUserService } from './services/admin-auth-user.service';
/**
* @name banUser
* @description Ban a user from the system.
*/
export const banUser = enhanceAdminAction(
enhanceAction(
async ({ userId }) => {
const service = getAdminAuthService();
await service.banUser(userId);
revalidateAdmin();
},
{
schema: BanUserSchema,
},
),
);
/**
* @name reactivateUser
* @description Reactivate a user in the system.
*/
export const reactivateUser = enhanceAdminAction(
enhanceAction(
async ({ userId }) => {
const service = getAdminAuthService();
await service.reactivateUser(userId);
revalidateAdmin();
},
{
schema: ReactivateUserSchema,
},
),
);
/**
* @name impersonateUser
* @description Impersonate a user in the system.
*/
export const impersonateUser = enhanceAdminAction(
enhanceAction(
async ({ userId }) => {
const service = getAdminAuthService();
return await service.impersonateUser(userId);
},
{
schema: ImpersonateUserSchema,
},
),
);
/**
* @name deleteUser
* @description Delete a user from the system.
*/
export const deleteUser = enhanceAdminAction(
enhanceAction(
async ({ userId }) => {
const service = getAdminAuthService();
await service.deleteUser(userId);
revalidateAdmin();
},
{
schema: DeleteUserSchema,
},
),
);
/**
* @name deleteAccount
* @description Delete an account from the system.
*/
export const deleteAccount = enhanceAdminAction(
enhanceAction(
async ({ accountId }) => {
const service = getAdminAccountsService();
await service.deleteAccount(accountId);
revalidateAdmin();
},
{
schema: DeleteAccountSchema,
},
),
);
function getAdminAuthService() {
const client = getSupabaseServerActionClient();
const adminClient = getSupabaseServerActionClient({ admin: true });
return new AdminAuthUserService(client, adminClient);
}
function getAdminAccountsService() {
const adminClient = getSupabaseServerActionClient({ admin: true });
return new AdminAccountsService(adminClient);
}
function revalidateAdmin() {
revalidatePath('/admin', 'layout');
}