Update packages and refactor logging in diverse services

This commit updates diverse packages such as "@makerkit/data-loader-supabase-core" and "@makerkit/data-loader-supabase-nextjs" to the new versions in the package.json files. Also, several refactorings were done in logging within services and loaders by progressing 'server-only' imports and improving context handling. Additionally, type annotations have been added to several exported functions for better code readability and maintainability.
This commit is contained in:
giancarlo
2024-04-09 17:23:48 +08:00
parent 5adfb3edac
commit a9eaaafd3d
45 changed files with 159 additions and 128 deletions

View File

@@ -1,3 +1,5 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { getLogger } from '@kit/shared/logger';
@@ -35,11 +37,9 @@ export class DeletePersonalAccountService {
}) {
const userId = params.userId;
const logger = await getLogger();
const ctx = { userId, name: this.namespace };
logger.info(
{ name: this.namespace, userId },
'User requested deletion. Processing...',
);
logger.info(ctx, 'User requested deletion. Processing...');
// execute the deletion of the user
try {
@@ -47,8 +47,7 @@ export class DeletePersonalAccountService {
} catch (error) {
logger.error(
{
name: this.namespace,
userId,
...ctx,
error,
},
'Error deleting user',
@@ -57,6 +56,6 @@ export class DeletePersonalAccountService {
throw new Error('Error deleting user');
}
logger.info({ name: this.namespace, userId }, 'User deleted successfully');
logger.info(ctx, 'User deleted successfully');
}
}

View File

@@ -14,8 +14,8 @@
"@kit/next": "workspace:*",
"@kit/supabase": "workspace:*",
"@kit/ui": "workspace:*",
"@makerkit/data-loader-supabase-core": "0.0.5",
"@makerkit/data-loader-supabase-nextjs": "^0.0.7",
"@makerkit/data-loader-supabase-core": "^0.0.7",
"@makerkit/data-loader-supabase-nextjs": "^0.0.9",
"lucide-react": "^0.363.0",
"react-hook-form": "^7.51.2",
"zod": "^3.22.4"
@@ -29,8 +29,8 @@
"@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:^",
"@makerkit/data-loader-supabase-core": "0.0.5",
"@makerkit/data-loader-supabase-nextjs": "^0.0.7",
"@makerkit/data-loader-supabase-core": "^0.0.7",
"@makerkit/data-loader-supabase-nextjs": "^0.0.9",
"@supabase/supabase-js": "^2.42.0",
"lucide-react": "^0.363.0",
"react-hook-form": "^7.51.2",

View File

@@ -1,4 +1,4 @@
import { BadgeX, Ban, ShieldPlus, Trash, VenetianMask } from 'lucide-react';
import { BadgeX, Ban, ShieldPlus, VenetianMask } from 'lucide-react';
import { Database } from '@kit/supabase/database';
import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client';

View File

@@ -4,6 +4,11 @@ import { getSupabaseServerActionClient } from '@kit/supabase/server-actions-clie
import { isSuperAdmin } from './is-super-admin';
/**
* @name enhanceAdminAction
* @description Wrap a server action to ensure the user is a super admin.
* @param fn
*/
export function enhanceAdminAction<Args, Response>(
fn: (params: Args) => Response,
) {

View File

@@ -2,6 +2,11 @@ import { SupabaseClient } from '@supabase/supabase-js';
import { Database } from '@kit/supabase/database';
/**
* @name isSuperAdmin
* @description Check if the current user is a super admin.
* @param client
*/
export async function isSuperAdmin(client: SupabaseClient<Database>) {
const { data, error } = await client.auth.getUser();

View File

@@ -1,5 +1,12 @@
import 'server-only';
import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client';
/**
* @name loadAdminDashboard
* @description Load the admin dashboard data.
* @param params
*/
export async function loadAdminDashboard(params?: {
count: 'exact' | 'estimated' | 'planned';
}) {

View File

@@ -1,3 +1,5 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { Database } from '@kit/supabase/database';

View File

@@ -1,3 +1,5 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { Database } from '@kit/supabase/database';

View File

@@ -50,7 +50,7 @@ export function EmailPasswordSignUpContainer({
console.error(error);
}
},
[emailRedirectTo, loading, onSignUp, signUpMutation],
[captchaToken, emailRedirectTo, loading, onSignUp, signUpMutation],
);
return (

View File

@@ -1,7 +1,8 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { addDays, formatISO } from 'date-fns';
import 'server-only';
import { z } from 'zod';
import { getLogger } from '@kit/shared/logger';

View File

@@ -1,6 +1,7 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import 'server-only';
import { z } from 'zod';
import { getLogger } from '@kit/shared/logger';

View File

@@ -1,3 +1,5 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { BillingGatewayService } from '@kit/billing-gateway';
@@ -11,12 +13,10 @@ export class AccountPerSeatBillingService {
async getPerSeatSubscriptionItem(accountId: string) {
const logger = await getLogger();
const ctx = { accountId, name: this.namespace };
logger.info(
{
name: this.namespace,
accountId,
},
ctx,
`Getting per-seat subscription item for account ${accountId}...`,
);
@@ -40,8 +40,7 @@ export class AccountPerSeatBillingService {
if (error) {
logger.error(
{
name: this.namespace,
accountId,
...ctx,
error,
},
`Failed to get per-seat subscription item for account ${accountId}`,
@@ -52,7 +51,7 @@ export class AccountPerSeatBillingService {
if (!data?.subscription_items) {
logger.info(
{ name: this.namespace, accountId },
ctx,
`No per-seat subscription item found for account ${accountId}. Exiting...`,
);
@@ -60,10 +59,7 @@ export class AccountPerSeatBillingService {
}
logger.info(
{
name: this.namespace,
accountId,
},
ctx,
`Per-seat subscription item found for account ${accountId}. Will update...`,
);
@@ -88,14 +84,13 @@ export class AccountPerSeatBillingService {
const billingGateway = new BillingGatewayService(subscription.provider);
logger.info(
{
name: this.namespace,
accountId,
subscriptionItems,
},
`Increasing seats for account ${accountId}...`,
);
const ctx = {
name: this.namespace,
accountId,
subscriptionItems,
};
logger.info(ctx, `Increasing seats for account ${accountId}...`);
const promises = subscriptionItems.map(async (item) => {
try {
@@ -127,8 +122,7 @@ export class AccountPerSeatBillingService {
} catch (error) {
logger.error(
{
name: this.namespace,
accountId,
...ctx,
error,
},
`Failed to increase seats for account ${accountId}`,
@@ -155,14 +149,13 @@ export class AccountPerSeatBillingService {
return;
}
logger.info(
{
name: this.namespace,
accountId,
subscriptionItems,
},
`Decreasing seats for account ${accountId}...`,
);
const ctx = {
name: this.namespace,
accountId,
subscriptionItems,
};
logger.info(ctx, `Decreasing seats for account ${accountId}...`);
const billingGateway = new BillingGatewayService(subscription.provider);
@@ -196,8 +189,7 @@ export class AccountPerSeatBillingService {
} catch (error) {
logger.error(
{
name: this.namespace,
accountId,
...ctx,
error,
},
`Failed to decrease seats for account ${accountId}`,

View File

@@ -1,3 +1,5 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { getLogger } from '@kit/shared/logger';
@@ -10,11 +12,9 @@ export class CreateTeamAccountService {
async createNewOrganizationAccount(params: { name: string; userId: string }) {
const logger = await getLogger();
const ctx = { ...params, namespace: this.namespace };
logger.info(
{ ...params, namespace: this.namespace },
`Creating new team account...`,
);
logger.info(ctx, `Creating new team account...`);
return await this.client.rpc('create_account', {
account_name: params.name,

View File

@@ -1,7 +1,7 @@
import { SupabaseClient } from '@supabase/supabase-js';
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import { getLogger } from '@kit/shared/logger';
import { Database } from '@kit/supabase/database';
@@ -26,14 +26,13 @@ export class DeleteTeamAccountService {
) {
const logger = await getLogger();
logger.info(
{
name: this.namespace,
accountId: params.accountId,
userId: params.userId,
},
`Requested team account deletion. Processing...`,
);
const ctx = {
accountId: params.accountId,
userId: params.userId,
name: this.namespace,
};
logger.info(ctx, `Requested team account deletion. Processing...`);
// we can use the admin client to delete the account.
const { error } = await adminClient
@@ -44,9 +43,7 @@ export class DeleteTeamAccountService {
if (error) {
logger.error(
{
name: this.namespace,
accountId: params.accountId,
userId: params.userId,
...ctx,
error,
},
'Failed to delete team account',
@@ -55,13 +52,6 @@ export class DeleteTeamAccountService {
throw new Error('Failed to delete team account');
}
logger.info(
{
name: this.namespace,
accountId: params.accountId,
userId: params.userId,
},
'Successfully deleted team account',
);
logger.info(ctx, 'Successfully deleted team account');
}
}

View File

@@ -1,6 +1,7 @@
import 'server-only';
import { SupabaseClient } from '@supabase/supabase-js';
import 'server-only';
import { z } from 'zod';
import { getLogger } from '@kit/shared/logger';