user-setting.controller.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // server/src/user-setting/user-setting.controller.ts
  2. import {
  3. Body,
  4. Controller,
  5. Get,
  6. HttpCode,
  7. HttpStatus,
  8. Put,
  9. Req,
  10. UseGuards,
  11. } from '@nestjs/common';
  12. import { UserSettingService } from './user-setting.service';
  13. import { UpdateUserSettingDto } from './dto/update-user-setting.dto';
  14. import { CombinedAuthGuard } from '../auth/combined-auth.guard';
  15. import { UserSettingResponseDto } from './dto/user-setting-response.dto';
  16. import { ModelConfigService } from '../model-config/model-config.service';
  17. import { plainToClass } from 'class-transformer';
  18. import { RolesGuard } from '../auth/roles.guard';
  19. import { Roles } from '../auth/roles.decorator';
  20. import { UserRole } from '../user/user-role.enum';
  21. import { TenantService } from '../tenant/tenant.service';
  22. @UseGuards(CombinedAuthGuard, RolesGuard)
  23. @Controller('settings') // Global prefix /api/settings
  24. export class UserSettingController {
  25. constructor(
  26. private readonly userSettingService: UserSettingService,
  27. private readonly modelConfigService: ModelConfigService,
  28. private readonly tenantService: TenantService,
  29. ) { }
  30. @Get('global')
  31. async getGlobal(): Promise<UserSettingResponseDto> {
  32. const globalSetting = await this.userSettingService.getGlobalSettings();
  33. return plainToClass(UserSettingResponseDto, globalSetting);
  34. }
  35. @Get('tenant')
  36. async getTenantSettings(@Req() req) {
  37. if (!req.user.tenantId) {
  38. return this.userSettingService.getGlobalSettings();
  39. }
  40. return this.tenantService.getSettings(req.user.tenantId);
  41. }
  42. @Roles(UserRole.TENANT_ADMIN, UserRole.SUPER_ADMIN)
  43. @Put('global')
  44. @HttpCode(HttpStatus.OK)
  45. async updateGlobal(
  46. @Body() updateUserSettingDto: UpdateUserSettingDto,
  47. ): Promise<UserSettingResponseDto> {
  48. const globalSetting = await this.userSettingService.updateGlobalSettings(
  49. updateUserSettingDto,
  50. );
  51. return plainToClass(UserSettingResponseDto, globalSetting);
  52. }
  53. @Get()
  54. async findOne(@Req() req): Promise<UserSettingResponseDto> {
  55. const userSetting = await this.userSettingService.findOrCreate(req.user.id);
  56. return plainToClass(UserSettingResponseDto, userSetting);
  57. }
  58. @Put()
  59. @HttpCode(HttpStatus.OK)
  60. async update(
  61. @Req() req,
  62. @Body() updateUserSettingDto: UpdateUserSettingDto,
  63. ): Promise<UserSettingResponseDto> {
  64. const userSetting = await this.userSettingService.update(
  65. req.user.id,
  66. updateUserSettingDto,
  67. );
  68. return plainToClass(UserSettingResponseDto, userSetting);
  69. }
  70. @Get('vision-models')
  71. async getVisionModels(@Req() req: any) {
  72. const userId = req.user.id;
  73. const models = await this.modelConfigService.findByType(userId, req.user.tenantId, 'vision');
  74. return models;
  75. }
  76. @Get('vision-model')
  77. async getVisionModel(@Req() req: any) {
  78. const userId = req.user.id;
  79. const visionModelId =
  80. await this.userSettingService.getVisionModelId(userId);
  81. return { visionModelId };
  82. }
  83. @Put('vision-model')
  84. async updateVisionModel(
  85. @Req() req: any,
  86. @Body() body: { visionModelId: string },
  87. ) {
  88. const userId = req.user.id;
  89. await this.userSettingService.updateVisionModel(userId, body.visionModelId);
  90. return { success: true };
  91. }
  92. @Get('language')
  93. async getLanguage(@Req() req: any) {
  94. const userId = req.user.id;
  95. const language = await this.userSettingService.getLanguage(userId);
  96. return { language };
  97. }
  98. @Put('language')
  99. async updateLanguage(@Req() req: any, @Body() body: { language: string }) {
  100. const userId = req.user.id;
  101. await this.userSettingService.updateLanguage(userId, body.language);
  102. return { success: true };
  103. }
  104. }