Files
CRM_Montzar/apps/api/src/gamification/gamification.controller.ts
T
MahdiandCursor 60d797f184 feat: باشگاه امتیازات کارکنان (موتور امتیاز، جدول رتبه، فروشگاه پاداش، نشان‌ها، پنل مدیریت و گزارش ROI)
- موتور رویدادمحور با شرط، محدودیت، تأیید مدیر و idempotency
- اتصال به لید، مشتری، معامله، فعالیت، روتین، پیش‌فاکتور، فاکتور و تیکت
- صفحه /club و /club/admin، اعلان زنده امتیاز، آیتم منو
- انتقال فرم‌ساز سرنخ به ابزارها

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 21:28:49 +03:30

75 lines
2.1 KiB
TypeScript

import { Body, Controller, Get, 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 { GamificationService } from './gamification.service';
import { RedeemDto, TxQueryDto } from './dto';
@Controller('gamification')
@UseGuards(JwtAuthGuard, OrgModuleGuard)
@RequireOrgModule('gamification')
export class GamificationController {
constructor(private readonly game: GamificationService) {}
@Get('me')
me(@CurrentUser() user: Actor, @Query('period') period?: string) {
return this.game.me(user, period);
}
@Get('pulse')
pulse(@CurrentUser() user: Actor, @Query('since') since?: string) {
return this.game.pulse(user, since);
}
@Get('leaderboard')
leaderboard(
@CurrentUser() user: Actor,
@Query('period') period?: string,
@Query('limit') limit?: string,
) {
return this.game.leaderboard(user, period, limit);
}
@Get('leaderboard/teams')
teams(@CurrentUser() user: Actor, @Query('period') period?: string) {
return this.game.teams(user, period);
}
@Get('transactions')
transactions(@CurrentUser() user: Actor, @Query() q: TxQueryDto) {
return this.game.transactions(user, q);
}
@Get('rules')
rules(@CurrentUser() user: Actor) {
return this.game.publicRules(user);
}
@Get('feed')
feed(@CurrentUser() user: Actor) {
return this.game.feed(user);
}
@Get('achievements')
achievements(@CurrentUser() user: Actor, @Query('userId') userId?: string) {
return this.game.achievements(user, userId);
}
@Get('rewards')
rewards(@CurrentUser() user: Actor) {
return this.game.rewards(user);
}
@Post('rewards/redeem')
redeem(@CurrentUser() user: Actor, @Body() dto: RedeemDto) {
return this.game.redeem(user, dto.rewardId, dto.note);
}
@Get('redemptions')
redemptions(@CurrentUser() user: Actor) {
return this.game.myRedemptions(user);
}
}