123 lines
2.4 KiB
TypeScript
123 lines
2.4 KiB
TypeScript
import { Column, DataType, Index, Model, PrimaryKey, Table } from 'sequelize-typescript';
|
||
|
||
/**
|
||
* 用户每日健康记录表
|
||
* 每日每个用户只会生成一条数据,通过 userId + recordDate 唯一确定
|
||
*/
|
||
@Table({
|
||
tableName: 't_user_daily_health',
|
||
underscored: true,
|
||
indexes: [
|
||
{
|
||
unique: true,
|
||
fields: ['user_id', 'record_date'],
|
||
name: 'uk_user_record_date',
|
||
},
|
||
{
|
||
fields: ['user_id'],
|
||
name: 'idx_user_id',
|
||
},
|
||
{
|
||
fields: ['record_date'],
|
||
name: 'idx_record_date',
|
||
},
|
||
],
|
||
})
|
||
export class UserDailyHealth extends Model {
|
||
@PrimaryKey
|
||
@Column({
|
||
type: DataType.BIGINT,
|
||
autoIncrement: true,
|
||
})
|
||
declare id: number;
|
||
|
||
@Column({
|
||
type: DataType.STRING(64),
|
||
allowNull: false,
|
||
comment: '用户ID',
|
||
})
|
||
declare userId: string;
|
||
|
||
@Column({
|
||
type: DataType.DATEONLY,
|
||
allowNull: false,
|
||
comment: '记录日期 (YYYY-MM-DD)',
|
||
})
|
||
declare recordDate: string;
|
||
|
||
@Column({
|
||
type: DataType.INTEGER,
|
||
allowNull: true,
|
||
comment: '饮水量 (毫升 ml)',
|
||
})
|
||
declare waterIntake: number | null;
|
||
|
||
@Column({
|
||
type: DataType.INTEGER,
|
||
allowNull: true,
|
||
comment: '锻炼分钟数',
|
||
})
|
||
declare exerciseMinutes: number | null;
|
||
|
||
@Column({
|
||
type: DataType.FLOAT,
|
||
allowNull: true,
|
||
comment: '消耗卡路里 (千卡 kcal)',
|
||
})
|
||
declare caloriesBurned: number | null;
|
||
|
||
@Column({
|
||
type: DataType.INTEGER,
|
||
allowNull: true,
|
||
comment: '站立时间 (分钟)',
|
||
})
|
||
declare standingMinutes: number | null;
|
||
|
||
@Column({
|
||
type: DataType.FLOAT,
|
||
allowNull: true,
|
||
comment: '基础代谢 (千卡 kcal)',
|
||
})
|
||
declare basalMetabolism: number | null;
|
||
|
||
@Column({
|
||
type: DataType.INTEGER,
|
||
allowNull: true,
|
||
comment: '睡眠分钟数',
|
||
})
|
||
declare sleepMinutes: number | null;
|
||
|
||
@Column({
|
||
type: DataType.FLOAT,
|
||
allowNull: true,
|
||
comment: '血氧饱和度 (百分比 %)',
|
||
})
|
||
declare bloodOxygen: number | null;
|
||
|
||
@Column({
|
||
type: DataType.DECIMAL(5, 1),
|
||
allowNull: true,
|
||
comment: '压力 (ms,保留一位小数)',
|
||
})
|
||
declare stressLevel: number | null;
|
||
|
||
@Column({
|
||
type: DataType.INTEGER,
|
||
allowNull: true,
|
||
comment: '步数',
|
||
})
|
||
declare steps: number | null;
|
||
|
||
@Column({
|
||
type: DataType.DATE,
|
||
defaultValue: DataType.NOW,
|
||
})
|
||
declare createdAt: Date;
|
||
|
||
@Column({
|
||
type: DataType.DATE,
|
||
defaultValue: DataType.NOW,
|
||
})
|
||
declare updatedAt: Date;
|
||
}
|