databases.controller.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { NextFunction, Request, Response, Router } from 'express';
  2. import { dtoValidationMiddleware } from '../middleware/validation';
  3. import { milvusService } from '../milvus';
  4. import { DatabasesService } from './databases.service';
  5. import { CreateDatabaseDto } from './dto';
  6. export class DatabasesController {
  7. private databasesService: DatabasesService;
  8. private router: Router;
  9. constructor() {
  10. this.databasesService = new DatabasesService(milvusService);
  11. this.router = Router();
  12. }
  13. get databasesServiceGetter() {
  14. return this.databasesService;
  15. }
  16. generateRoutes() {
  17. this.router.get('/', this.listDatabases.bind(this));
  18. this.router.post(
  19. '/',
  20. dtoValidationMiddleware(CreateDatabaseDto),
  21. this.createDatabase.bind(this)
  22. );
  23. this.router.delete('/:name', this.dropDatabase.bind(this));
  24. return this.router;
  25. }
  26. async createDatabase(req: Request, res: Response, next: NextFunction) {
  27. const createDatabaseData = req.body;
  28. try {
  29. const result = await this.databasesService.createDatabase(
  30. createDatabaseData
  31. );
  32. res.send(result);
  33. } catch (error) {
  34. next(error);
  35. }
  36. }
  37. async listDatabases(req: Request, res: Response, next: NextFunction) {
  38. try {
  39. const result = await this.databasesService.listDatabase();
  40. result.db_names = result.db_names.sort((a: string, b: string) => {
  41. if (a === 'default') {
  42. return -1; // 'default' comes before other strings
  43. } else if (b === 'default') {
  44. return 1; // 'default' comes after other strings
  45. } else {
  46. return a.localeCompare(b); // sort other strings alphabetically
  47. }
  48. })
  49. res.send(result);
  50. } catch (error) {
  51. next(error);
  52. }
  53. }
  54. async dropDatabase(req: Request, res: Response, next: NextFunction) {
  55. const db_name = req.params?.name;
  56. try {
  57. const result = await this.databasesService.dropDatabase({ db_name });
  58. res.send(result);
  59. } catch (error) {
  60. next(error);
  61. }
  62. }
  63. }