2025-08-27 11:24:22 +08:00
|
|
|
import {
|
|
|
|
|
Controller,
|
|
|
|
|
Get,
|
|
|
|
|
Post,
|
|
|
|
|
Put,
|
|
|
|
|
Delete,
|
|
|
|
|
Body,
|
|
|
|
|
Param,
|
|
|
|
|
Query,
|
|
|
|
|
UseGuards,
|
|
|
|
|
Request,
|
|
|
|
|
} from '@nestjs/common';
|
|
|
|
|
import {
|
|
|
|
|
ApiTags,
|
|
|
|
|
ApiOperation,
|
|
|
|
|
ApiResponse,
|
|
|
|
|
ApiBearerAuth,
|
|
|
|
|
} from '@nestjs/swagger';
|
2025-08-24 02:31:42 +08:00
|
|
|
import { MemberService } from '../../services/api/MemberService';
|
2025-08-27 11:24:22 +08:00
|
|
|
import {
|
|
|
|
|
CreateMemberApiDto,
|
|
|
|
|
UpdateProfileDto,
|
|
|
|
|
ChangePasswordDto,
|
|
|
|
|
ResetPasswordDto,
|
|
|
|
|
SignDto,
|
|
|
|
|
} from '../../dto/api/MemberDto';
|
2025-08-24 02:31:42 +08:00
|
|
|
|
|
|
|
|
@ApiTags('前台-会员管理')
|
|
|
|
|
@ApiBearerAuth()
|
|
|
|
|
@Controller('api/member')
|
|
|
|
|
export class MemberController {
|
|
|
|
|
constructor(private readonly memberService: MemberService) {}
|
|
|
|
|
|
|
|
|
|
@Post('register')
|
|
|
|
|
@ApiOperation({ summary: '会员注册' })
|
|
|
|
|
@ApiResponse({ status: 201, description: '注册成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async register(@Body() createMemberDto: CreateMemberApiDto) {
|
2025-08-24 02:31:42 +08:00
|
|
|
return await this.memberService.register(createMemberDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('login')
|
|
|
|
|
@ApiOperation({ summary: '会员登录' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '登录成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async login(
|
|
|
|
|
@Body()
|
|
|
|
|
loginDto: {
|
|
|
|
|
username: string;
|
|
|
|
|
password: string;
|
|
|
|
|
ip?: string;
|
|
|
|
|
address?: string;
|
|
|
|
|
device?: string;
|
|
|
|
|
},
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
return await this.memberService.login(loginDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('profile')
|
|
|
|
|
@ApiOperation({ summary: '获取个人资料' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '获取成功' })
|
|
|
|
|
async getProfile(@Request() req: any) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.getProfile(memberId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Put('profile')
|
|
|
|
|
@ApiOperation({ summary: '更新个人资料' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '更新成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async updateProfile(
|
|
|
|
|
@Request() req: any,
|
|
|
|
|
@Body() updateProfileDto: UpdateProfileDto,
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.updateProfile(memberId, updateProfileDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('change-password')
|
|
|
|
|
@ApiOperation({ summary: '修改密码' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '修改成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async changePassword(
|
|
|
|
|
@Request() req: any,
|
|
|
|
|
@Body() changePasswordDto: ChangePasswordDto,
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.changePassword(memberId, changePasswordDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('reset-password')
|
|
|
|
|
@ApiOperation({ summary: '重置密码' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '重置成功' })
|
|
|
|
|
async resetPassword(@Body() resetPasswordDto: ResetPasswordDto) {
|
|
|
|
|
return await this.memberService.resetPassword(resetPasswordDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('sign')
|
|
|
|
|
@ApiOperation({ summary: '会员签到' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '签到成功' })
|
|
|
|
|
async sign(@Request() req: any, @Body() signDto: SignDto) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.sign(memberId, signDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('points/history')
|
|
|
|
|
@ApiOperation({ summary: '获取积分历史' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '获取成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async getPointsHistory(
|
|
|
|
|
@Request() req: any,
|
|
|
|
|
@Query() query: { page?: number; limit?: number },
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.getPointsHistory(memberId, query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('balance/history')
|
|
|
|
|
@ApiOperation({ summary: '获取余额历史' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '获取成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async getBalanceHistory(
|
|
|
|
|
@Request() req: any,
|
|
|
|
|
@Query() query: { page?: number; limit?: number },
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.getBalanceHistory(memberId, query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('address')
|
|
|
|
|
@ApiOperation({ summary: '获取地址列表' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '获取成功' })
|
|
|
|
|
async getAddressList(@Request() req: any) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.getAddressList(memberId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('address')
|
|
|
|
|
@ApiOperation({ summary: '添加地址' })
|
|
|
|
|
@ApiResponse({ status: 201, description: '添加成功' })
|
|
|
|
|
async addAddress(@Request() req: any, @Body() addressDto: any) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.addAddress(memberId, addressDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Put('address/:id')
|
|
|
|
|
@ApiOperation({ summary: '更新地址' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '更新成功' })
|
2025-08-27 11:24:22 +08:00
|
|
|
async updateAddress(
|
|
|
|
|
@Request() req: any,
|
|
|
|
|
@Param('id') id: number,
|
|
|
|
|
@Body() addressDto: any,
|
|
|
|
|
) {
|
2025-08-24 02:31:42 +08:00
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.updateAddress(memberId, id, addressDto);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Delete('address/:id')
|
|
|
|
|
@ApiOperation({ summary: '删除地址' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '删除成功' })
|
|
|
|
|
async deleteAddress(@Request() req: any, @Param('id') id: number) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.deleteAddress(memberId, id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Post('address/:id/default')
|
|
|
|
|
@ApiOperation({ summary: '设置默认地址' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '设置成功' })
|
|
|
|
|
async setDefaultAddress(@Request() req: any, @Param('id') id: number) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.setDefaultAddress(memberId, id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('level')
|
|
|
|
|
@ApiOperation({ summary: '获取会员等级信息' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '获取成功' })
|
|
|
|
|
async getMemberLevel(@Request() req: any) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.getMemberLevel(memberId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Get('logout')
|
|
|
|
|
@ApiOperation({ summary: '会员登出' })
|
|
|
|
|
@ApiResponse({ status: 200, description: '登出成功' })
|
|
|
|
|
async logout(@Request() req: any) {
|
|
|
|
|
const memberId = req.user.member_id;
|
|
|
|
|
return await this.memberService.logout(memberId);
|
|
|
|
|
}
|
2025-08-27 11:24:22 +08:00
|
|
|
}
|