Assist_Design/apps/bff/src/users/users.controller.ts

61 lines
2.2 KiB
TypeScript
Raw Normal View History

2025-08-22 17:02:49 +09:00
import {
Controller,
Get,
Patch,
Body,
UseGuards,
Req,
UseInterceptors,
ClassSerializerInterceptor,
} from "@nestjs/common";
2025-08-21 15:24:40 +09:00
import { UsersService } from "./users.service";
import { JwtAuthGuard } from "../auth/guards/jwt-auth.guard";
2025-08-22 17:02:49 +09:00
import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth } from "@nestjs/swagger";
import { UpdateUserDto } from "./dto/update-user.dto";
import { UpdateBillingDto } from "./dto/update-billing.dto";
import { RequestWithUser } from "../auth/auth.types";
2025-08-21 15:24:40 +09:00
@ApiTags("users")
@Controller("me")
@UseGuards(JwtAuthGuard)
2025-08-22 17:02:49 +09:00
@ApiBearerAuth()
@UseInterceptors(ClassSerializerInterceptor)
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
2025-08-21 15:24:40 +09:00
@ApiOperation({ summary: "Get current user profile" })
2025-08-22 17:02:49 +09:00
@ApiResponse({ status: 200, description: "User profile retrieved successfully" })
@ApiResponse({ status: 401, description: "Unauthorized" })
async getProfile(@Req() req: RequestWithUser) {
2025-08-27 10:54:05 +09:00
return this.usersService.findById(req.user.id);
}
2025-08-21 15:24:40 +09:00
@Get("summary")
@ApiOperation({ summary: "Get user dashboard summary" })
2025-08-22 17:02:49 +09:00
@ApiResponse({ status: 200, description: "User summary retrieved successfully" })
@ApiResponse({ status: 401, description: "Unauthorized" })
async getSummary(@Req() req: RequestWithUser) {
2025-08-27 10:54:05 +09:00
return this.usersService.getUserSummary(req.user.id);
}
@Patch()
2025-08-21 15:24:40 +09:00
@ApiOperation({ summary: "Update user profile" })
2025-08-22 17:02:49 +09:00
@ApiResponse({ status: 200, description: "Profile updated successfully" })
@ApiResponse({ status: 400, description: "Invalid input data" })
@ApiResponse({ status: 401, description: "Unauthorized" })
async updateProfile(@Req() req: RequestWithUser, @Body() updateData: UpdateUserDto) {
2025-08-27 10:54:05 +09:00
return this.usersService.update(req.user.id, updateData);
}
2025-08-21 15:24:40 +09:00
@Patch("billing")
@ApiOperation({ summary: "Update billing information" })
2025-08-22 17:02:49 +09:00
@ApiResponse({ status: 200, description: "Billing information updated successfully" })
@ApiResponse({ status: 400, description: "Invalid input data" })
@ApiResponse({ status: 401, description: "Unauthorized" })
2025-08-23 18:02:05 +09:00
updateBilling(@Req() _req: RequestWithUser, @Body() _billingData: UpdateBillingDto) {
// TODO: Sync to WHMCS custom fields
2025-08-21 15:24:40 +09:00
throw new Error("Not implemented");
}
}