feat(challenges): 优化进度报告,添加睡眠挑战勋章授予逻辑 fix(push-notifications): 修复推送测试服务初始化返回值问题
105 lines
2.1 KiB
TypeScript
105 lines
2.1 KiB
TypeScript
import { Column, Model, Table, DataType, ForeignKey, BelongsTo } from 'sequelize-typescript';
|
||
import { User } from './user.model';
|
||
import { BadgeConfig } from './badge-config.model';
|
||
|
||
export enum BadgeSource {
|
||
CHALLENGE = 'challenge',
|
||
MANUAL = 'manual',
|
||
SYSTEM = 'system',
|
||
}
|
||
|
||
@Table({
|
||
tableName: 't_user_badges',
|
||
underscored: true,
|
||
timestamps: true,
|
||
indexes: [
|
||
{
|
||
unique: true,
|
||
fields: ['user_id', 'badge_code'],
|
||
name: 'unique_user_badge',
|
||
},
|
||
{
|
||
fields: ['user_id'],
|
||
},
|
||
{
|
||
fields: ['badge_code'],
|
||
},
|
||
{
|
||
fields: ['awarded_at'],
|
||
},
|
||
],
|
||
})
|
||
export class UserBadge extends Model {
|
||
@Column({
|
||
type: DataType.CHAR(36),
|
||
defaultValue: DataType.UUIDV4,
|
||
primaryKey: true,
|
||
})
|
||
declare id: string;
|
||
|
||
@ForeignKey(() => User)
|
||
@Column({
|
||
type: DataType.STRING,
|
||
allowNull: false,
|
||
comment: '用户ID',
|
||
})
|
||
declare userId: string;
|
||
|
||
@ForeignKey(() => BadgeConfig)
|
||
@Column({
|
||
type: DataType.STRING(64),
|
||
allowNull: false,
|
||
comment: '勋章代码',
|
||
})
|
||
declare badgeCode: string;
|
||
|
||
@Column({
|
||
type: DataType.DATE,
|
||
allowNull: false,
|
||
defaultValue: DataType.NOW,
|
||
comment: '获得时间',
|
||
})
|
||
declare awardedAt: Date;
|
||
|
||
@Column({
|
||
type: DataType.ENUM(...Object.values(BadgeSource)),
|
||
allowNull: false,
|
||
defaultValue: BadgeSource.SYSTEM,
|
||
comment: '授予来源',
|
||
})
|
||
declare source: BadgeSource;
|
||
|
||
@Column({
|
||
type: DataType.STRING(128),
|
||
allowNull: true,
|
||
comment: '来源ID(如挑战ID)',
|
||
})
|
||
declare sourceId: string;
|
||
|
||
@Column({
|
||
type: DataType.JSON,
|
||
allowNull: true,
|
||
comment: '额外元数据',
|
||
})
|
||
declare metadata: Record<string, any>;
|
||
|
||
@Column({
|
||
type: DataType.BOOLEAN,
|
||
allowNull: false,
|
||
defaultValue: false,
|
||
comment: '是否已展示过(客户端展示勋章获得动画后设置为true)',
|
||
})
|
||
declare isShow: boolean;
|
||
|
||
@Column({
|
||
type: DataType.DATE,
|
||
defaultValue: DataType.NOW,
|
||
})
|
||
declare createdAt: Date;
|
||
|
||
@BelongsTo(() => User)
|
||
declare user: User;
|
||
|
||
@BelongsTo(() => BadgeConfig, 'badgeCode')
|
||
declare badge: BadgeConfig;
|
||
} |