From de690dd0406368cc933019e1586d0fba37d1d1e4 Mon Sep 17 00:00:00 2001
From: vanessrw <vanessarebecca29@gmail.com>
Date: Tue, 19 Mar 2024 21:14:14 +0700
Subject: [PATCH] feat: dashboard statistics

---
 src/dashboard/dashboard.controller.ts |  6 +++++-
 src/dashboard/dashboard.service.ts    | 19 ++++++++++++++++---
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/dashboard/dashboard.controller.ts b/src/dashboard/dashboard.controller.ts
index c4fbd91..e8ba12c 100644
--- a/src/dashboard/dashboard.controller.ts
+++ b/src/dashboard/dashboard.controller.ts
@@ -7,13 +7,17 @@ import { Roles } from "src/middlewares/roles.decorator";
 
 
 @Controller('dashboard')
-@UseGuards(CustomAuthGuard, RolesGuard)
 export class DashboardController {
   constructor(private readonly dashboardService: DashboardService) {}
 
+  @UseGuards(CustomAuthGuard, RolesGuard)
   @Roles(RoleEnum.S2_PEMBIMBING, RoleEnum.ADMIN, RoleEnum.S2_TIM_TESIS)
   @Get(':dosenId')
   async findByPenerimaId(@Param('dosenId') penerimaId: string) {
     return this.dashboardService.findByPenerimaId(penerimaId);
   }
+  @Get(':dosenId/statistics')
+  async getStatisticsByJalurPilihan(@Param('dosenId') penerimaId: string) {
+    return this.dashboardService.getStatisticsByJalurPilihan(penerimaId);
+  }
 }
\ No newline at end of file
diff --git a/src/dashboard/dashboard.service.ts b/src/dashboard/dashboard.service.ts
index c8275f6..7ef693a 100644
--- a/src/dashboard/dashboard.service.ts
+++ b/src/dashboard/dashboard.service.ts
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
 import { InjectRepository } from '@nestjs/typeorm';
 import { Repository } from 'typeorm';
 import { PendaftaranTesis } from '../entities/pendaftaranTesis.entity';
+import { JalurEnum } from '../entities/pendaftaranTesis.entity';
 import { Pengguna } from '../entities/pengguna.entity';
 import { Topik } from '../entities/topik.entity';
 
@@ -21,14 +22,26 @@ export class DashboardService {
   }
 
   async findByPenerimaId(penerimaId: string): Promise<PendaftaranTesis[]> {
-    console.log('penerimaId:', penerimaId);
     const penerima = await this.penggunaRepository.findOne({ where: { id: penerimaId } });
-    console.log('penerima:', penerima);
     if (!penerima) {
       return [];
     }
     const pendaftaranTesis = await this.pendaftaranTesisRepository.find({ where: { penerima }, relations: ["mahasiswa", "topik"] });
-    console.log('pendaftaranTesis:', pendaftaranTesis);
     return pendaftaranTesis;
   }
+
+  async getStatisticsByJalurPilihan(penerimaId: string): Promise<{ jalurPilihan: JalurEnum; count: number }[]> {
+    const penerima = await this.penggunaRepository.findOne({ where: { id: penerimaId } });
+    if (!penerima) {
+      return [];
+    }
+    const statistics = await this.pendaftaranTesisRepository
+      .createQueryBuilder('pendaftaranTesis')
+      .select('pendaftaranTesis.jalurPilihan', 'jalurPilihan')
+      .addSelect('COUNT(*)', 'count')
+      .where('pendaftaranTesis.penerima = :penerima', { penerima: penerima.id })
+      .groupBy('pendaftaranTesis.jalurPilihan')
+      .getRawMany();
+    return statistics;
+  }
 }
\ No newline at end of file
-- 
GitLab