Files
StoreWeb/Plugins/CloudProduct/Dtos/UserFavoritesSearchDocument.cs
T

87 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using OpenSearch.Client;
namespace Store.Modules.CloudProduct.Dtos
{
/// <summary>
/// 用户收藏商品搜索文档:OpenSearch 索引中的收藏模型。
/// 一条收藏记录 = 用户 + 商品快照(标题/价格/销量/类目)+ 收藏分组,
/// 文档 Id 固定为 "{user_name}:{goods_id}"(表 uk_user_goods 保证唯一),便于收藏/取消收藏时幂等覆盖与删除。
/// </summary>
public class UserFavoritesSearchDocument
{
/// <summary>
/// 文档主键(同时作为 OpenSearch 的 _id):{user_name}:{goods_id}
/// </summary>
[Keyword(Name = "id")]
public string Id { get; set; } = string.Empty;
/// <summary>
/// 收藏记录自增主键(user_goods_favorites.id)
/// </summary>
[Number(NumberType.Long, Name = "fav_id")]
public long FavId { get; set; }
/// <summary>用户名(收藏归属人,检索时强制过滤)</summary>
[Keyword(Name = "user_name")]
public string UserName { get; set; } = string.Empty;
/// <summary>收藏分组ID(0 表示默认分组)</summary>
[Number(NumberType.Integer, Name = "group_id")]
public int GroupId { get; set; }
/// <summary>收藏分组名(分组ID为0时为默认分组名)</summary>
[Keyword(Name = "group_name")]
public string GroupName { get; set; } = string.Empty;
/// <summary>商品编号</summary>
[Number(NumberType.Long, Name = "goods_id")]
public long GoodsId { get; set; }
/// <summary>平台类型(1 PDD、2 WX)</summary>
[Number(NumberType.Byte, Name = "platform")]
public byte Platform { get; set; }
/// <summary>商品标题,用于分词搜索</summary>
[Text(Name = "title", Analyzer = "ik_max_word", SearchAnalyzer = "ik_smart")]
public string Title { get; set; } = string.Empty;
/// <summary>缩略图</summary>
[Text(Name = "thumb_url")]
public string? ThumbUrl { get; set; }
/// <summary>一级类目ID</summary>
[Number(NumberType.Integer, Name = "cat_id_1")]
public int? CatId1 { get; set; }
/// <summary>二级类目ID</summary>
[Number(NumberType.Integer, Name = "cat_id_2")]
public int? CatId2 { get; set; }
/// <summary>三级类目ID</summary>
[Number(NumberType.Integer, Name = "cat_id_3")]
public int? CatId3 { get; set; }
/// <summary>四级类目ID</summary>
[Number(NumberType.Integer, Name = "cat_id_4")]
public int? CatId4 { get; set; }
/// <summary>最低价快照(分),用于价格区间过滤和按价格排序</summary>
[Number(NumberType.Long, Name = "min_price")]
public long? MinPrice { get; set; }
/// <summary>销量,用于按销量排序</summary>
[Number(NumberType.Integer, Name = "sold_quantity")]
public int SoldQuantity { get; set; }
/// <summary>收藏时间,默认按此字段倒序</summary>
[Date(Name = "created_at")]
public DateTime CreatedAt { get; set; }
/// <summary>
/// 生成文档主键:{user_name}:{goods_id}
/// </summary>
public static string BuildId(string userName, long goodsId) => $"{userName}:{goodsId}";
public override string ToString() => $"[Id={Id}] User={UserName} Goods={GoodsId} Group={GroupId}({GroupName}) Title={Title} Price={MinPrice} Sold={SoldQuantity}";
}
}