Membership: card type CRUD, deduction/restore logic, valid card lookup (15 tests) TimeSlot: slot generation from week templates, availability query with booking status, admin management, cleanup tasks (26 tests) 65 total tests passing
69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
import {
|
|
Body,
|
|
Controller,
|
|
Delete,
|
|
Get,
|
|
Param,
|
|
Post,
|
|
Put,
|
|
UseGuards,
|
|
} from '@nestjs/common'
|
|
import { UserRole } from '@mp-pilates/shared'
|
|
import { JwtAuthGuard } from '../auth/jwt-auth.guard'
|
|
import { Roles } from '../auth/roles.decorator'
|
|
import { RolesGuard } from '../auth/roles.guard'
|
|
import { CurrentUser } from '../common/decorators/current-user.decorator'
|
|
import { CreateCardTypeDto } from './dto/create-card-type.dto'
|
|
import { UpdateCardTypeDto } from './dto/update-card-type.dto'
|
|
import { MembershipService } from './membership.service'
|
|
|
|
@Controller()
|
|
export class MembershipController {
|
|
constructor(private readonly membershipService: MembershipService) {}
|
|
|
|
// ─── Public ────────────────────────────────────────────────────────────────
|
|
|
|
@Get('membership/card-types')
|
|
getActiveCardTypes() {
|
|
return this.membershipService.getActiveCardTypes()
|
|
}
|
|
|
|
// ─── User ──────────────────────────────────────────────────────────────────
|
|
|
|
@Get('membership/my')
|
|
@UseGuards(JwtAuthGuard)
|
|
getUserMemberships(@CurrentUser('sub') userId: string) {
|
|
return this.membershipService.getUserMemberships(userId)
|
|
}
|
|
|
|
// ─── Admin ─────────────────────────────────────────────────────────────────
|
|
|
|
@Get('admin/card-types')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
getAllCardTypes() {
|
|
return this.membershipService.getAllCardTypes()
|
|
}
|
|
|
|
@Post('admin/card-types')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
createCardType(@Body() dto: CreateCardTypeDto) {
|
|
return this.membershipService.createCardType(dto)
|
|
}
|
|
|
|
@Put('admin/card-types/:id')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
updateCardType(@Param('id') id: string, @Body() dto: UpdateCardTypeDto) {
|
|
return this.membershipService.updateCardType(id, dto)
|
|
}
|
|
|
|
@Delete('admin/card-types/:id')
|
|
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
@Roles(UserRole.ADMIN)
|
|
deleteCardType(@Param('id') id: string) {
|
|
return this.membershipService.deleteCardType(id)
|
|
}
|
|
}
|