feat: added basic stat info

This commit is contained in:
Sergey Yarkov 2022-01-24 22:13:16 +03:00
parent e3dd4a8d6a
commit aa74a7527f
4 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,31 @@
import { Exception, inject, Ioc } from '@adonisjs/core/build/standalone';
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
import StatService from 'App/Services/StatService';
import BaseController from '../../BaseController';
@inject()
export default class StatController extends BaseController {
private statService: StatService;
constructor(statService: StatService) {
super();
this.statService = statService;
}
/**
* Return current stat about system
* GET /stat
*/
public async index(ctx: HttpContextContract) {
const result = await this.statService.fetchStatData();
if (!result.success && result.error) {
throw new Exception(result.message, result.status, result.error.code);
}
return this.sendResponse(ctx, result.data, result.message, result.status);
}
}
new Ioc().make(StatController);

View File

@ -0,0 +1,33 @@
import { inject, Ioc } from '@adonisjs/core/build/standalone';
import IResponse from 'App/Datatypes/Interfaces/IResponse';
import HttpStatusEnum from 'App/Datatypes/Enums/HttpStatusEnum';
import Database from '@ioc:Adonis/Lucid/Database';
@inject()
export default class StatService {
/**
* Get basic statistics about the system
*
* @returns Response
*/
// eslint-disable-next-line class-methods-use-this
public async fetchStatData(): Promise<IResponse> {
const count = await Database.rawQuery(
`
select (select count(*) from courses) as courses_count,
(select count(*) from lessons) as lessons_count
`
);
return {
success: true,
status: HttpStatusEnum.OK,
message: 'Fetched stat.',
data: {
...count.rows[0],
},
};
}
}
new Ioc().make(StatService);

View File

@ -63,6 +63,11 @@ Route.group(() => {
*
*/
require('./categories');
/**
* Stat module
*/
require('./stat');
}).middleware('auth');
})
.prefix('v1')

5
routes/apis/v1/stat.ts Normal file
View File

@ -0,0 +1,5 @@
import Route from '@ioc:Adonis/Core/Route';
Route.group(() => {
Route.get('/', 'Api/v1/StatController.index').middleware('role:admin,teacher,student').as('stat.index');
}).prefix('stat');