Skip to content
Snippets Groups Projects
Commit 1920f28c authored by Rava Maulana's avatar Rava Maulana
Browse files

Merge branch 'story/dashboard-dosbim' into 'development'

feat: endpoint dashboard dosbim

See merge request !22
parents 82303988 de690dd0
Branches
Tags v2.0
2 merge requests!58final release,!22feat: endpoint dashboard dosbim
import { Controller } from "@nestjs/common"; import { Controller, Get, Param, UseGuards } from '@nestjs/common';
import { DashboardService } from "./dashboard.service"; import { DashboardService } from './dashboard.service';
import { CustomAuthGuard } from "src/middlewares/custom-auth.guard";
import { RolesGuard } from "src/middlewares/roles.guard";
import { RoleEnum } from "src/entities/pengguna.entity";
import { Roles } from "src/middlewares/roles.decorator";
@Controller("dashboard")
@Controller('dashboard')
export class DashboardController { export class DashboardController {
constructor(private readonly dashboardService: DashboardService) {} 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
import { JalurEnum, RegStatus } from '../entities/pendaftaranTesis.entity';
export class DashboardDto {
id: string;
jalurPilihan: JalurEnum;
waktuPengiriman: Date;
jadwalInterview: Date;
waktuKeputusan: Date;
status: RegStatus;
periode: string;
topikId: string;
mahasiswaId: string;
penerimaId: string;
}
\ No newline at end of file
import { Module } from "@nestjs/common"; import { Module } from '@nestjs/common';
import { DashboardController } from "./dashboard.controller"; import { TypeOrmModule } from '@nestjs/typeorm';
import { DashboardService } from "./dashboard.service"; import { DashboardController } from './dashboard.controller';
import { DashboardService } from './dashboard.service';
import { PendaftaranTesis } from '../entities/pendaftaranTesis.entity';
import { Pengguna } from '../entities/pengguna.entity';
import { Topik } from '../entities/topik.entity';
@Module({ @Module({
imports: [TypeOrmModule.forFeature([PendaftaranTesis, Pengguna, Topik])],
controllers: [DashboardController], controllers: [DashboardController],
providers: [DashboardService], providers: [DashboardService],
}) })
export class DashboardModule {} export class DashboardModule {}
\ No newline at end of file
import { Injectable } from "@nestjs/common"; 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';
@Injectable() @Injectable()
export class DashboardService {} export class DashboardService {
constructor(
@InjectRepository(PendaftaranTesis)
private pendaftaranTesisRepository: Repository<PendaftaranTesis>,
@InjectRepository(Pengguna)
private penggunaRepository: Repository<Pengguna>,
@InjectRepository(Topik)
private topikRepository: Repository<Topik>,
) {}
async findAll(): Promise<PendaftaranTesis[]> {
return this.pendaftaranTesisRepository.find({ relations: ["mahasiswa", "topik"] });
}
async findByPenerimaId(penerimaId: string): Promise<PendaftaranTesis[]> {
const penerima = await this.penggunaRepository.findOne({ where: { id: penerimaId } });
if (!penerima) {
return [];
}
const pendaftaranTesis = await this.pendaftaranTesisRepository.find({ where: { penerima }, relations: ["mahasiswa", "topik"] });
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
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment