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 { import {
AdminData, AdminData,
AdminMarketData, AdminMarketData,
AdminUserResponse,
AdminUsersResponse, AdminUsersResponse,
EnhancedSymbolProfile, EnhancedSymbolProfile,
ScraperConfiguration ScraperConfiguration
@ -321,4 +322,11 @@ export class AdminController {
take: isNaN(take) ? undefined : take 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, AdminMarketData,
AdminMarketDataDetails, AdminMarketDataDetails,
AdminMarketDataItem, AdminMarketDataItem,
AdminUserResponse,
AdminUsersResponse, AdminUsersResponse,
AssetProfileIdentifier, AssetProfileIdentifier,
EnhancedSymbolProfile, EnhancedSymbolProfile,
@ -35,7 +36,8 @@ import {
BadRequestException, BadRequestException,
HttpException, HttpException,
Injectable, Injectable,
Logger Logger,
NotFoundException
} from '@nestjs/common'; } from '@nestjs/common';
import { import {
AssetClass, AssetClass,
@ -522,6 +524,73 @@ export class AdminService {
return { count, users }; 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( public async patchAssetProfileData(
{ dataSource, symbol }: AssetProfileIdentifier, { dataSource, symbol }: AssetProfileIdentifier,
{ {

Loading…
Cancel
Save