feat: add wechat mini program mall, check-in supplement and pet skin system

This commit implements a complete WeChat mini program mall and related features:
1. Add pet skin entity and backpack item type support
2. Add make-up check-in and missed date query functions
3. Implement mall product browsing, exchange and record query
4. Add backpack management and item usage (make-up card)
5. Add pet skin equipping function
6. Fix UserBag ItemId type from int to long
7. Adjust Dockerfile exposed port to 8080
8. Fix session cookie unprotect warning
This commit is contained in:
glz
2026-06-04 18:03:34 +08:00
parent 903ccd3073
commit ae2c6ddfc7
14 changed files with 1128 additions and 8 deletions

View File

@ -0,0 +1,87 @@
namespace QYZH.InteractiveMagazine.Models.Dto.Bag;
/// <summary>
/// 背包物品输出
/// </summary>
public class UserBagOutput
{
public long Id { get; set; }
public long ItemId { get; set; }
public string ItemType { get; set; } = string.Empty;
public int Quantity { get; set; }
public string Status { get; set; } = string.Empty;
/// <summary>
/// 关联商品信息(如果有)
/// </summary>
public BagProductBrief? Product { get; set; }
/// <summary>
/// 关联皮肤信息PetBg 类型时)
/// </summary>
public BagSkinBrief? Skin { get; set; }
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// 背包中的商品简要
/// </summary>
public class BagProductBrief
{
public string Name { get; set; } = string.Empty;
public string? ImageUrl { get; set; }
public string? Description { get; set; }
}
/// <summary>
/// 背包中的皮肤简要
/// </summary>
public class BagSkinBrief
{
public long SkinId { get; set; }
public string SkinName { get; set; } = string.Empty;
public string? SkinImage { get; set; }
public string Rarity { get; set; } = string.Empty;
}
/// <summary>
/// 使用物品输入(补签卡)
/// </summary>
public class UseItemInput
{
/// <summary>
/// 背包物品Id
/// </summary>
public long BagItemId { get; set; }
/// <summary>
/// 补签目标日期yyyy-MM-dd仅补签卡使用
/// </summary>
public string? TargetDate { get; set; }
}
/// <summary>
/// 换肤输入
/// </summary>
public class EquipSkinInput
{
/// <summary>
/// 皮肤Id传0则恢复默认皮肤
/// </summary>
public long SkinId { get; set; }
}
/// <summary>
/// 使用物品输出
/// </summary>
public class UseItemOutput
{
public bool IsSuccess { get; set; }
public string Message { get; set; } = string.Empty;
/// <summary>
/// 补签时返回的签到结果
/// </summary>
public object? Extra { get; set; }
}

View File

@ -0,0 +1,80 @@
namespace QYZH.InteractiveMagazine.Models.Dto.Mall;
/// <summary>
/// 小程序商品展示输出
/// </summary>
public class WxProductOutput
{
public long Id { get; set; }
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ImageUrl { get; set; }
public int Price { get; set; }
public string Type { get; set; } = string.Empty;
/// <summary>
/// 皮肤信息(仅 PetBg 类型有值)
/// </summary>
public PetSkinBrief? Skin { get; set; }
/// <summary>
/// 用户是否已拥有PetBg 类型时判断背包中是否有)
/// </summary>
public bool Owned { get; set; }
}
/// <summary>
/// 皮肤简要信息
/// </summary>
public class PetSkinBrief
{
public long SkinId { get; set; }
public string SkinName { get; set; } = string.Empty;
public string? SkinImage { get; set; }
public string? Description { get; set; }
public string Rarity { get; set; } = string.Empty;
}
/// <summary>
/// 兑换输入
/// </summary>
public class ExchangeInput
{
/// <summary>
/// 商品Id
/// </summary>
public long ProductId { get; set; }
/// <summary>
/// 兑换数量默认1
/// </summary>
public int Quantity { get; set; } = 1;
}
/// <summary>
/// 兑换输出
/// </summary>
public class ExchangeOutput
{
public long RecordId { get; set; }
public string ProductName { get; set; } = string.Empty;
public int PointsCost { get; set; }
public int PointsBalance { get; set; }
public string Message { get; set; } = string.Empty;
}
/// <summary>
/// 兑换记录输出
/// </summary>
public class ExchangeRecordOutput
{
public long Id { get; set; }
public long ProductId { get; set; }
public string ProductName { get; set; } = string.Empty;
public string ProductType { get; set; } = string.Empty;
public int PointsCost { get; set; }
public int PointsBalance { get; set; }
public int Quantity { get; set; }
public string Status { get; set; } = string.Empty;
public DateTime CreatedAt { get; set; }
}