- AdminPlansController & Service (CRUD, reorder) - AdminPaymentMethodsController & Service (CRUD, reorder) - AdminPaymentsController & Service (verify, reject, pending count) - AdminUsersController & Service (search, suspend, grant pro access, stats) - AdminConfigController & Service (dynamic config management) - Wire all controllers into AdminModule - Import AdminModule in AppModule Admin API Routes: - GET/POST/PUT/DELETE /admin/plans - GET/POST/PUT/DELETE /admin/payment-methods - GET /admin/payments (with status filter) - POST /admin/payments/:id/verify - POST /admin/payments/:id/reject - GET /admin/users (with search) - POST /admin/users/:id/grant-pro - GET/POST/DELETE /admin/config All routes protected by AuthGuard + AdminGuard
181 lines
5.3 KiB
TypeScript
181 lines
5.3 KiB
TypeScript
import { AdminUsersService } from './admin-users.service';
|
|
export declare class AdminUsersController {
|
|
private readonly service;
|
|
constructor(service: AdminUsersService);
|
|
findAll(search?: string): Promise<{
|
|
id: string;
|
|
createdAt: Date;
|
|
email: string;
|
|
emailVerified: boolean;
|
|
name: string | null;
|
|
role: string;
|
|
suspendedAt: Date | null;
|
|
lastLoginAt: Date | null;
|
|
_count: {
|
|
transactions: number;
|
|
wallets: number;
|
|
};
|
|
}[]>;
|
|
getStats(): Promise<{
|
|
totalUsers: number;
|
|
activeSubscriptions: number;
|
|
suspendedUsers: number;
|
|
}>;
|
|
findOne(id: string): Promise<({
|
|
subscriptions: ({
|
|
plan: {
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
name: string;
|
|
slug: string;
|
|
description: string | null;
|
|
price: import("@prisma/client/runtime/library").Decimal;
|
|
currency: string;
|
|
durationType: string;
|
|
durationDays: number | null;
|
|
trialDays: number;
|
|
features: import("@prisma/client/runtime/library").JsonValue;
|
|
badge: string | null;
|
|
badgeColor: string | null;
|
|
highlightColor: string | null;
|
|
sortOrder: number;
|
|
isActive: boolean;
|
|
isVisible: boolean;
|
|
isFeatured: boolean;
|
|
maxWallets: number | null;
|
|
maxGoals: number | null;
|
|
maxTeamMembers: number | null;
|
|
apiEnabled: boolean;
|
|
apiRateLimit: number | null;
|
|
};
|
|
} & {
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
userId: string;
|
|
planId: string;
|
|
startDate: Date;
|
|
endDate: Date;
|
|
isTrialUsed: boolean;
|
|
trialEndDate: Date | null;
|
|
cancelledAt: Date | null;
|
|
cancellationReason: string | null;
|
|
})[];
|
|
_count: {
|
|
transactions: number;
|
|
wallets: number;
|
|
payments: number;
|
|
};
|
|
} & {
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
email: string;
|
|
emailVerified: boolean;
|
|
passwordHash: string | null;
|
|
name: string | null;
|
|
avatarUrl: string | null;
|
|
phone: string | null;
|
|
defaultCurrency: string | null;
|
|
timeZone: string | null;
|
|
otpEmailEnabled: boolean;
|
|
otpWhatsappEnabled: boolean;
|
|
otpTotpEnabled: boolean;
|
|
otpTotpSecret: string | null;
|
|
role: string;
|
|
suspendedAt: Date | null;
|
|
suspendedReason: string | null;
|
|
lastLoginAt: Date | null;
|
|
}) | null>;
|
|
updateRole(id: string, body: {
|
|
role: string;
|
|
}): Promise<{
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
email: string;
|
|
emailVerified: boolean;
|
|
passwordHash: string | null;
|
|
name: string | null;
|
|
avatarUrl: string | null;
|
|
phone: string | null;
|
|
defaultCurrency: string | null;
|
|
timeZone: string | null;
|
|
otpEmailEnabled: boolean;
|
|
otpWhatsappEnabled: boolean;
|
|
otpTotpEnabled: boolean;
|
|
otpTotpSecret: string | null;
|
|
role: string;
|
|
suspendedAt: Date | null;
|
|
suspendedReason: string | null;
|
|
lastLoginAt: Date | null;
|
|
}>;
|
|
suspend(id: string, body: {
|
|
reason: string;
|
|
}): Promise<{
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
email: string;
|
|
emailVerified: boolean;
|
|
passwordHash: string | null;
|
|
name: string | null;
|
|
avatarUrl: string | null;
|
|
phone: string | null;
|
|
defaultCurrency: string | null;
|
|
timeZone: string | null;
|
|
otpEmailEnabled: boolean;
|
|
otpWhatsappEnabled: boolean;
|
|
otpTotpEnabled: boolean;
|
|
otpTotpSecret: string | null;
|
|
role: string;
|
|
suspendedAt: Date | null;
|
|
suspendedReason: string | null;
|
|
lastLoginAt: Date | null;
|
|
}>;
|
|
unsuspend(id: string): Promise<{
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
email: string;
|
|
emailVerified: boolean;
|
|
passwordHash: string | null;
|
|
name: string | null;
|
|
avatarUrl: string | null;
|
|
phone: string | null;
|
|
defaultCurrency: string | null;
|
|
timeZone: string | null;
|
|
otpEmailEnabled: boolean;
|
|
otpWhatsappEnabled: boolean;
|
|
otpTotpEnabled: boolean;
|
|
otpTotpSecret: string | null;
|
|
role: string;
|
|
suspendedAt: Date | null;
|
|
suspendedReason: string | null;
|
|
lastLoginAt: Date | null;
|
|
}>;
|
|
grantProAccess(id: string, body: {
|
|
planSlug: string;
|
|
durationDays: number;
|
|
}): Promise<{
|
|
id: string;
|
|
createdAt: Date;
|
|
updatedAt: Date;
|
|
status: string;
|
|
userId: string;
|
|
planId: string;
|
|
startDate: Date;
|
|
endDate: Date;
|
|
isTrialUsed: boolean;
|
|
trialEndDate: Date | null;
|
|
cancelledAt: Date | null;
|
|
cancellationReason: string | null;
|
|
}>;
|
|
}
|