mirror of
https://github.com/sergeyyarkov/educt-server.git
synced 2026-10-11 18:29:15 +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');
|
require('./categories');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stat module
|
||||||
|
*/
|
||||||
|
require('./stat');
|
||||||
}).middleware('auth');
|
}).middleware('auth');
|
||||||
})
|
})
|
||||||
.prefix('v1')
|
.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