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

57 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-08-22 17:02:49 +09:00
import {
Controller,
Get,
Patch,
Body,
Req,
UseInterceptors,
ClassSerializerInterceptor,
UsePipes,
2025-08-22 17:02:49 +09:00
} from "@nestjs/common";
2025-08-21 15:24:40 +09:00
import { UsersService } from "./users.service";
import { ZodValidationPipe } from "@bff/core/validation";
import {
updateProfileRequestSchema,
updateAddressRequestSchema,
type UpdateProfileRequest,
type UpdateAddressRequest,
} from "@customer-portal/domain/auth";
import type { RequestWithUser } from "@bff/modules/auth/auth.types";
2025-08-21 15:24:40 +09:00
@Controller("me")
2025-08-22 17:02:49 +09:00
@UseInterceptors(ClassSerializerInterceptor)
export class UsersController {
constructor(private usersService: UsersService) {}
@Get()
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")
async getSummary(@Req() req: RequestWithUser) {
2025-08-27 10:54:05 +09:00
return this.usersService.getUserSummary(req.user.id);
}
@Patch()
@UsePipes(new ZodValidationPipe(updateProfileRequestSchema))
async updateProfile(@Req() req: RequestWithUser, @Body() updateData: UpdateProfileRequest) {
return this.usersService.updateProfile(req.user.id, updateData);
}
@Get("address")
async getAddress(@Req() req: RequestWithUser) {
return this.usersService.getAddress(req.user.id);
2025-08-28 16:57:57 +09:00
}
// Removed PATCH /me/billing in favor of PATCH /me/address to keep address updates explicit.
@Patch("address")
@UsePipes(new ZodValidationPipe(updateAddressRequestSchema))
async updateAddress(@Req() req: RequestWithUser, @Body() address: UpdateAddressRequest) {
await this.usersService.updateAddress(req.user.id, address);
// Return fresh address snapshot
return this.usersService.getAddress(req.user.id);
}
}