Browse Source

feat(api): add gateway stats endpoint

pull/4/head
isra el 2 years ago
parent
commit
4565120b2a
  1. 7
      api/src/gateway/gateway.controller.ts
  2. 20
      api/src/gateway/gateway.service.ts

7
api/src/gateway/gateway.controller.ts

@ -21,6 +21,13 @@ import { CanModifyDevice } from './guards/can-modify-device.guard'
export class GatewayController { export class GatewayController {
constructor(private readonly gatewayService: GatewayService) {} constructor(private readonly gatewayService: GatewayService) {}
@UseGuards(AuthGuard)
@Get('/stats')
async getStats(@Request() req) {
const data = await this.gatewayService.getStatsForUser(req.user)
return { data }
}
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: 'Register device' }) @ApiOperation({ summary: 'Register device' })
@ApiQuery({ @ApiQuery({

20
api/src/gateway/gateway.service.ts

@ -5,10 +5,12 @@ import { Model } from 'mongoose'
import * as firebaseAdmin from 'firebase-admin' import * as firebaseAdmin from 'firebase-admin'
import { RegisterDeviceInputDTO, SendSMSInputDTO } from './gateway.dto' import { RegisterDeviceInputDTO, SendSMSInputDTO } from './gateway.dto'
import { User } from '../users/schemas/user.schema' import { User } from '../users/schemas/user.schema'
import { AuthService } from 'src/auth/auth.service'
@Injectable() @Injectable()
export class GatewayService { export class GatewayService {
constructor( constructor(
@InjectModel(Device.name) private deviceModel: Model<DeviceDocument>, @InjectModel(Device.name) private deviceModel: Model<DeviceDocument>,
private authService: AuthService,
) {} ) {}
async registerDevice( async registerDevice(
@ -111,4 +113,22 @@ export class GatewayService {
) )
} }
} }
async getStatsForUser(user: User) {
const devices = await this.deviceModel.find({ user: user._id })
const apiKeys = await this.authService.getUserApiKeys(user)
const totalSMSCount = devices.reduce((acc, device) => {
return acc + (device.sentSMSCount || 0)
}, 0)
const totalDeviceCount = devices.length
const totalApiKeyCount = apiKeys.length
return {
totalSMSCount,
totalDeviceCount,
totalApiKeyCount,
}
}
} }
Loading…
Cancel
Save