Browse Source

route: get user by id

pull/5910/head
alfaarghya 2 months ago
parent
commit
560ac2e28f
  1. 8
      apps/api/src/app/admin/admin.controller.ts
  2. 71
      apps/api/src/app/admin/admin.service.ts

8
apps/api/src/app/admin/admin.controller.ts

@ -17,6 +17,7 @@ import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import {
AdminData,
AdminMarketData,
AdminUserResponse,
AdminUsersResponse,
EnhancedSymbolProfile,
ScraperConfiguration
@ -321,4 +322,11 @@ export class AdminController {
take: isNaN(take) ? undefined : take
});
}
@Get('user/:id')
@HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getUser(@Param('id') id: string): Promise<AdminUserResponse> {
return this.adminService.getUser(id);
}
}

71
apps/api/src/app/admin/admin.service.ts

@ -23,6 +23,7 @@ import {
AdminMarketData,
AdminMarketDataDetails,
AdminMarketDataItem,
AdminUserResponse,
AdminUsersResponse,
AssetProfileIdentifier,
EnhancedSymbolProfile,
@ -35,7 +36,8 @@ import {
BadRequestException,
HttpException,
Injectable,
Logger
Logger,
NotFoundException
} from '@nestjs/common';
import {
AssetClass,
@ -522,6 +524,73 @@ export class AdminService {
return { count, users };
}
public async getUser(id: string): Promise<AdminUserResponse> {
const user = await this.prismaService.user.findUnique({
where: { id },
select: {
id: true,
role: true,
provider: true,
createdAt: true,
updatedAt: true,
analytics: {
select: {
activityCount: true,
country: true,
dataProviderGhostfolioDailyRequests: true,
updatedAt: true
}
},
_count: {
select: {
accounts: true,
activities: true,
watchlist: true
}
},
subscriptions: {
orderBy: { expiresAt: 'desc' },
take: 3,
select: {
id: true,
expiresAt: true,
createdAt: true
}
},
tags: {
select: {
id: true,
name: true
}
}
}
});
if (!user) {
throw new NotFoundException(`User with ID ${id} not found`);
}
const { _count, analytics, createdAt, id: userId, role, provider } = user;
return {
id: userId,
role,
provider,
createdAt,
updatedAt: user.updatedAt,
accountCount: _count.accounts || 0,
activityCount: _count.activities || 0,
watchlistCount: _count.watchlist || 0,
analytics: {
country: analytics?.country,
dailyApiRequests: analytics?.dataProviderGhostfolioDailyRequests || 0,
lastActivity: analytics?.updatedAt
},
subscriptions: user.subscriptions,
tags: user.tags
};
}
public async patchAssetProfileData(
{ dataSource, symbol }: AssetProfileIdentifier,
{

Loading…
Cancel
Save