123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { NextFunction, Request, Response, Router } from 'express';
- import { dtoValidationMiddleware } from '../middleware/validation';
- import { DatabasesService } from './databases.service';
- import { DatabaseNameDto, DatabasePropertiesDto } from './dto';
- import { DatabaseObject } from '../types';
- export class DatabasesController {
- private databasesService: DatabasesService;
- private router: Router;
- constructor() {
- this.databasesService = new DatabasesService();
- this.router = Router();
- }
- get databasesServiceGetter() {
- return this.databasesService;
- }
- generateRoutes() {
- this.router.get('/', this.listDatabases.bind(this));
- this.router.post(
- '/',
- dtoValidationMiddleware(DatabaseNameDto),
- this.createDatabase.bind(this)
- );
- this.router.get('/:db_name', this.describeDatabase.bind(this));
- this.router.delete('/:db_name', this.dropDatabase.bind(this));
- this.router.put('/:db_name/properties', this.alterDatabase.bind(this));
- return this.router;
- }
- async createDatabase(
- req: Request<{}, {}, DatabaseNameDto>,
- res: Response,
- next: NextFunction
- ) {
- try {
- const result = await this.databasesService.createDatabase(
- req.clientId,
- req.body
- );
- res.send(result);
- } catch (error) {
- next(error);
- }
- }
- async listDatabases(req: Request, res: Response, next: NextFunction) {
- try {
- const result = await this.databasesService.listDatabase(req.clientId);
- const defaultDb = result.find(
- (db: DatabaseObject) => db.name === 'default'
- );
- const otherDbs = result
- .filter((db: DatabaseObject) => db.name !== 'default')
- .sort((a: DatabaseObject, b: DatabaseObject) => {
- return Number(b.created_timestamp) - Number(a.created_timestamp);
- });
- const sortedResult = defaultDb ? [defaultDb, ...otherDbs] : otherDbs;
- res.send(sortedResult);
- } catch (error) {
- next(error);
- }
- }
- async dropDatabase(
- req: Request<DatabaseNameDto>,
- res: Response,
- next: NextFunction
- ) {
- try {
- const result = await this.databasesService.dropDatabase(req.clientId, {
- db_name: req.params.db_name,
- });
- res.send(result);
- } catch (error) {
- next(error);
- }
- }
- async describeDatabase(
- req: Request<DatabaseNameDto>,
- res: Response,
- next: NextFunction
- ) {
- try {
- const result = await this.databasesService.describeDatabase(
- req.clientId,
- {
- db_name: req.params.db_name,
- }
- );
- res.send(result);
- } catch (error) {
- next(error);
- }
- }
- async alterDatabase(
- req: Request<DatabaseNameDto, {}, DatabasePropertiesDto>,
- res: Response,
- next: NextFunction
- ) {
- const { properties } = req.body;
- try {
- const result = await this.databasesService.alterDatabase(req.clientId, {
- db_name: req.params.db_name,
- properties,
- });
- res.send(result);
- } catch (error) {
- next(error);
- }
- }
- }
|