mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 10:19:20 +03:00
feat: added basic stat info
This commit is contained in:
parent
e3dd4a8d6a
commit
aa74a7527f
31
app/Controllers/Http/Api/v1/StatController.ts
Normal file
31
app/Controllers/Http/Api/v1/StatController.ts
Normal 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);
|
||||
33
app/Services/StatService.ts
Normal file
33
app/Services/StatService.ts
Normal 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);
|
||||
@ -63,6 +63,11 @@ Route.group(() => {
|
||||
*
|
||||
*/
|
||||
require('./categories');
|
||||
|
||||
/**
|
||||
* Stat module
|
||||
*/
|
||||
require('./stat');
|
||||
}).middleware('auth');
|
||||
})
|
||||
.prefix('v1')
|
||||
|
||||
5
routes/apis/v1/stat.ts
Normal file
5
routes/apis/v1/stat.ts
Normal 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');
|
||||
Loading…
x
Reference in New Issue
Block a user