Files
CRM_Montzar/apps/api/src/routines/routines.controller.ts
T

144 lines
4.1 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Query,
UseGuards,
} from '@nestjs/common';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { OrgModuleGuard } from '../billing/org-module.guard';
import { RequireOrgModule } from '../billing/org-module.decorator';
import { CurrentUser } from '../auth/current-user.decorator';
import type { Actor } from '../common/record-scope';
import { RoutinesService } from './routines.service';
import { RoutineStatsService } from './routine-stats.service';
import {
ChangeRoutineAssigneeDto,
ListRoutinesQueryDto,
RoutineRangeQueryDto,
SaveRoutineCategoryDto,
SaveRoutineDto,
ToggleRoutineDto,
} from './dto';
@Controller('routines')
@UseGuards(JwtAuthGuard, OrgModuleGuard)
@RequireOrgModule('routines')
export class RoutinesController {
constructor(
private readonly routines: RoutinesService,
private readonly stats: RoutineStatsService,
) {}
@Get('context')
context(@CurrentUser() user: Actor) {
return this.routines.context(user);
}
@Get('categories')
categories(@CurrentUser() user: Actor) {
return this.routines.categories(user.organizationId);
}
@Post('categories')
createCategory(@CurrentUser() user: Actor, @Body() dto: SaveRoutineCategoryDto) {
return this.routines.createCategory(user, dto);
}
@Patch('categories/:id')
updateCategory(
@CurrentUser() user: Actor,
@Param('id') id: string,
@Body() dto: SaveRoutineCategoryDto,
) {
return this.routines.updateCategory(user, id, dto);
}
@Delete('categories/:id')
deleteCategory(@CurrentUser() user: Actor, @Param('id') id: string) {
return this.routines.deleteCategory(user, id);
}
/* ───────── آمار و گزارش ───────── */
@Get('stats/me')
async statsMe(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.performance(await this.routines.scope(user), q);
}
@Get('stats/team')
async statsTeam(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.team(await this.routines.scope(user), q);
}
@Get('stats/weekly')
async statsWeekly(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.weekly(await this.routines.scope(user), q);
}
@Get('stats/monthly')
async statsMonthly(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.monthly(await this.routines.scope(user), q);
}
@Get('stats/routines')
async statsRoutines(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.routinesExecution(await this.routines.scope(user), q);
}
@Get('stats/history')
async statsHistory(@CurrentUser() user: Actor, @Query() q: RoutineRangeQueryDto) {
return this.stats.history(await this.routines.scope(user), q);
}
/* ───────── روتین‌ها ───────── */
@Get()
list(@CurrentUser() user: Actor, @Query() q: ListRoutinesQueryDto) {
return this.routines.list(user, q);
}
@Post()
create(@CurrentUser() user: Actor, @Body() dto: SaveRoutineDto) {
return this.routines.create(user, dto);
}
@Get(':id')
get(@CurrentUser() user: Actor, @Param('id') id: string) {
return this.routines.get(user, id);
}
@Patch(':id')
update(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: SaveRoutineDto) {
return this.routines.update(user, id, dto);
}
@Patch(':id/toggle')
toggle(@CurrentUser() user: Actor, @Param('id') id: string, @Body() dto: ToggleRoutineDto) {
return this.routines.toggle(user, id, dto.isActive);
}
@Patch(':id/assignee')
assignee(
@CurrentUser() user: Actor,
@Param('id') id: string,
@Body() dto: ChangeRoutineAssigneeDto,
) {
return this.routines.changeAssignee(user, id, dto);
}
@Post(':id/duplicate')
duplicate(@CurrentUser() user: Actor, @Param('id') id: string) {
return this.routines.duplicate(user, id);
}
@Delete(':id')
remove(@CurrentUser() user: Actor, @Param('id') id: string) {
return this.routines.remove(user, id);
}
}