feat: 支持会员编号
This commit is contained in:
@@ -44,6 +44,14 @@ export class User extends Model {
|
||||
})
|
||||
declare gender: Gender;
|
||||
|
||||
// 会员编号
|
||||
@Column({
|
||||
type: DataType.INTEGER,
|
||||
allowNull: true,
|
||||
comment: '会员编号(按注册时间递增)',
|
||||
})
|
||||
declare memberNumber: number;
|
||||
|
||||
// 会员有效期
|
||||
@Column({
|
||||
type: DataType.DATE,
|
||||
|
||||
@@ -57,7 +57,7 @@ export class UsersController {
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@Get('/info')
|
||||
@HttpCode(HttpStatus.OK)
|
||||
@ApiOperation({ summary: '创建用户' })
|
||||
@ApiOperation({ summary: '获取用户信息' })
|
||||
@ApiBody({ type: CreateUserDto })
|
||||
@ApiResponse({ type: UserResponseDto })
|
||||
async getProfile(@CurrentUser() user: AccessTokenPayload): Promise<UserResponseDto> {
|
||||
|
||||
@@ -527,11 +527,14 @@ export class UsersService {
|
||||
throw new BadRequestException('无法获取用户邮箱信息');
|
||||
}
|
||||
|
||||
const memberNumber = await this.assignMemberNumber();
|
||||
|
||||
user = await this.userModel.create({
|
||||
id: userId,
|
||||
name: userName,
|
||||
mail: userEmail,
|
||||
gender: Gender.MALE,
|
||||
memberNumber,
|
||||
freeUsageCount: DEFAULT_FREE_USAGE_COUNT,
|
||||
lastLogin: new Date(),
|
||||
avatar: 'https://plates-1251306435.cos.ap-guangzhou.myqcloud.com/images/seal-avatar/1.jpeg'
|
||||
@@ -735,10 +738,13 @@ export class UsersService {
|
||||
|
||||
if (!user) {
|
||||
// 创建新的游客用户
|
||||
const memberNumber = await this.assignMemberNumber();
|
||||
|
||||
user = await this.userModel.create({
|
||||
id: guestUserId,
|
||||
name: `游客_${deviceName}`,
|
||||
gender: Gender.MALE, // 默认性别
|
||||
memberNumber,
|
||||
isGuest: true,
|
||||
deviceId,
|
||||
deviceName,
|
||||
@@ -2529,4 +2535,30 @@ export class UsersService {
|
||||
return dayjsDate.format('YYYY-MM-DD');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动分配会员编号
|
||||
* @returns Promise<number> 新的会员编号
|
||||
*/
|
||||
private async assignMemberNumber(): Promise<number> {
|
||||
try {
|
||||
// 查找当前最大的会员编号
|
||||
const result = await this.userModel.findOne({
|
||||
attributes: [[this.sequelize.fn('MAX', this.sequelize.col('member_number')), 'maxMemberNumber']],
|
||||
raw: true
|
||||
});
|
||||
|
||||
const maxMember = result as unknown as { maxMemberNumber: number | null };
|
||||
|
||||
// 返回下一个编号,如果没有现有编号则从1开始
|
||||
const nextMemberNumber = (maxMember?.maxMemberNumber || 0) + 1;
|
||||
|
||||
this.logger.log(`分配新会员编号: ${nextMemberNumber}`);
|
||||
return nextMemberNumber;
|
||||
} catch (error) {
|
||||
this.logger.error(`assignMemberNumber error: ${error instanceof Error ? error.message : String(error)}`);
|
||||
// 如果查询失败,返回基于时间戳的编号作为备选
|
||||
return Math.floor(Date.now() / 1000) % 100000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user