(dc): init reports feature
Initial step in creating a data reference
This commit is contained in:
parent
53e945253c
commit
62eafe44dd
|
|
@ -10,6 +10,7 @@ import { TicketSystemModule } from './modules/feat-tickets/ticket-system.module'
|
|||
import { DatabaseModule } from './core/database/database.module';
|
||||
import { PostgresDialect } from 'kysely';
|
||||
import { Pool } from 'pg';
|
||||
import { FeatReportsModule } from './modules/feat-reports/feat-reports.module';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
|
|
@ -29,6 +30,7 @@ import { Pool } from 'pg';
|
|||
ScheduleModule.forRoot(),
|
||||
EventEmitterModule.forRoot(),
|
||||
FeatureImporterModule,
|
||||
FeatReportsModule,
|
||||
TicketSystemModule,
|
||||
],
|
||||
controllers: [AppController],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { ReportsController } from './reports.controller';
|
||||
import { ReportsService } from './reports.service';
|
||||
import { PrismaModule } from 'src/core/database/prisma.module';
|
||||
import { ReportsRepository } from './reports.repository';
|
||||
|
||||
@Module({
|
||||
imports: [PrismaModule],
|
||||
providers: [ReportsService, ReportsRepository],
|
||||
controllers: [ReportsController],
|
||||
})
|
||||
export class FeatReportsModule {}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
import { Controller, Get } from '@nestjs/common';
|
||||
import { ReportsService } from './reports.service';
|
||||
|
||||
@Controller('reports')
|
||||
export class ReportsController {
|
||||
constructor(private readonly service: ReportsService) {}
|
||||
|
||||
@Get('/tours')
|
||||
async getToursReport() {
|
||||
return this.service.report();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { Kysely, sql } from 'kysely';
|
||||
import { KYSELY_CLIENT_PROVIDER_TOKEN } from 'src/core/database/database.module';
|
||||
import { DB } from 'src/core/database/types';
|
||||
|
||||
@Injectable()
|
||||
export class ReportsRepository {
|
||||
constructor(
|
||||
@Inject(KYSELY_CLIENT_PROVIDER_TOKEN) private readonly db: Kysely<DB>,
|
||||
) {}
|
||||
|
||||
toursReport() {
|
||||
return this.db
|
||||
.selectFrom('Tour')
|
||||
.select((eb) => [
|
||||
'ordinanceType as Verordnungsart',
|
||||
sql<string>`EXTRACT(MONTH FROM "startDate")`.as('MonthNumber'),
|
||||
eb.fn.count<number>('operationId').as('TourCount'),
|
||||
])
|
||||
.groupBy('MonthNumber')
|
||||
.groupBy('ordinanceType')
|
||||
.execute();
|
||||
}
|
||||
|
||||
patientsReport() {
|
||||
return this.db
|
||||
.selectFrom('Patient')
|
||||
.select((eb) => eb.fn.countAll().as('PatientCount'))
|
||||
.execute();
|
||||
}
|
||||
|
||||
employeesReport() {
|
||||
return this.db
|
||||
.selectFrom('Employee')
|
||||
.select((eb) => eb.fn.countAll().as('EmployeeCount'))
|
||||
.execute();
|
||||
}
|
||||
|
||||
attendanceRegistrationsReport() {
|
||||
return this.db
|
||||
.selectFrom('AttendanceRegistration')
|
||||
.select((eb) => [
|
||||
eb.fn.countAll().as('AttendanceRegistrationCount'),
|
||||
sql<string>`EXTRACT(MONTH FROM "dateTime")`.as('MonthNumber'),
|
||||
])
|
||||
.groupBy('MonthNumber')
|
||||
.execute();
|
||||
}
|
||||
|
||||
workTimesReport() {
|
||||
return this.db
|
||||
.selectFrom('WorkTime')
|
||||
.select((eb) => [
|
||||
eb.fn.countAll().as('WorkTimeCount'),
|
||||
sql<string>`EXTRACT(MONTH FROM "startDate")`.as('MonthNumber'),
|
||||
])
|
||||
.groupBy('MonthNumber')
|
||||
.execute();
|
||||
}
|
||||
|
||||
plannedTimesReport() {
|
||||
return this.db
|
||||
.selectFrom('PlannedTime')
|
||||
.select((eb) => [
|
||||
eb.fn.countAll().as('PlannedTimeCount'),
|
||||
sql<string>`EXTRACT(MONTH FROM "startDate")`.as('MonthNumber'),
|
||||
])
|
||||
.groupBy('MonthNumber')
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { ReportsRepository } from './reports.repository';
|
||||
|
||||
@Injectable()
|
||||
export class ReportsService {
|
||||
constructor(private readonly repository: ReportsRepository) {}
|
||||
|
||||
async toursReport() {
|
||||
return this.repository.toursReport();
|
||||
}
|
||||
|
||||
report() {
|
||||
return Promise.all([
|
||||
this.repository.toursReport(),
|
||||
this.repository.employeesReport(),
|
||||
this.repository.patientsReport(),
|
||||
this.repository.attendanceRegistrationsReport(),
|
||||
this.repository.plannedTimesReport(),
|
||||
this.repository.workTimesReport(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue