Member 会员管理开发指南
FreeKit.Member 是 Identity 之上的会员(C 端用户)运营子模块:在 IdentityUser 之外,叠加会员等级、分组、标签、积分与收货地址等能力。注册/登录仍走完整 Identity 的 /api/identity/account,Member 只负责"成为会员之后"的运营数据。
配套概览页见 Member 会员管理。
1. 数据模型(简述)
Member 不重复定义账号,而是通过 UserId 关联到 Identity 的用户:
MemberUser(FullAuditEntity+ITenant)— 会员主记录,含UserId、MemberLevelId、状态等;每个用户至多一条。MemberLevel/MemberGroup/MemberTag— 等级 / 分组 / 标签定义。MemberGroupUser(UserId+GroupId)、MemberTagUser(UserId+TagId)— 多对多关联,带唯一索引。UserIntegral/UserIntegralLog— 用户积分余额与变动日志(按CreateUserId归属)。UserAddress— 收货地址。
这些实体不罗列表字段,需要细节请直接看
FreeKit.Member/Application/Members/Models与FreeKit.Member/Application/UserIntergrals/Models。
2. 关键服务
IMemberService(FreeKit.Member.Application.Members.Contracts)— 会员列表/详情/更新、锁定、指派等级、覆盖式设置标签与分组。IMemberLevelService/IMemberGroupService/IMemberTagService— 各自 CRUD(实现ICrudAppService)。IUserAddressService— 地址 CRUD。IUserIntegralService(FreeKit.Member.Application.UserIntergrals.Contracts)— 积分查询、签到/增减、积分日志。- 内部使用
IdentityUserManager(来自FreeKit.Identity.Domain.Identity)处理底层用户。
权限常量见 MemberPermissions:Members.Default / Members.Lockout / Members.AssignLevel / Members.AssignTags / Members.AssignGroups。
3. HTTP API
Member — /api/identity/members
| 方法 | 路由 | 权限 | 说明 |
|---|---|---|---|
| GET | / | Members.Default | 会员分页列表(MemberQuery,可按等级/标签/分组过滤) |
| GET | /{id:guid} | Members.Default | 会员详情 |
| PUT | /{id:guid} | Members.Default | 更新会员资料 |
| PUT | /{id:guid}/lockout | Members.Lockout | 锁定/解锁会员 |
| DELETE | /{id:guid} | Members.Default | 删除会员 |
| PUT | /{id:guid}/level | Members.AssignLevel | 指派会员等级(传 null 清除) |
| PUT | /{id:guid}/tags | Members.AssignTags | 覆盖式设置标签 |
| PUT | /{id:guid}/groups | Members.AssignGroups | 覆盖式设置分组 |
等级 / 分组 / 标签(标准 CRUD)
| 控制器 | 前缀 | 方法 + 路由 |
|---|---|---|
MemberLevelController | /api/identity/member-levels | GET /、GET /{id:guid}、POST /、PUT /{id:guid}、DELETE /{id:guid} |
MemberGroupController | /api/identity/member-groups | 同上 |
MemberTagController | /api/identity/member-tags | 同上 |
积分 — /api/plat/user-integral
| 方法 | 路由 | 说明 |
|---|---|---|
| GET | / | 积分记录分页列表 |
| POST | / | 积分增减(写 UserIntegralLog) |
| GET | /current | 当前用户积分汇总 |
地址 — /api/plat/user-address
| 方法 | 路由 | 说明 |
|---|---|---|
| GET | /all | 当前用户全部地址 |
| GET | / | 地址分页列表 |
| GET | /{id} | 地址详情 |
| POST | / | 新增地址 |
| PUT | /{id} | 更新地址 |
| DELETE | /{id} | 删除地址 |
4. 配置与接入
// 框架自动发现并启动 MemberModuleStartup(IModuleStartup)
// 依赖完整 Identity 的用户体系,需先接入 Identity
# 给某会员指派等级
curl -X PUT https://localhost:7002/kit_api/api/identity/members/{memberId}/level \
-H "Content-Type: application/json" \
-d '{"levelId":"level-guid"}'
# 覆盖式打标签
curl -X PUT https://localhost:7002/kit_api/api/identity/members/{memberId}/tags \
-H "Content-Type: application/json" \
-d '{"tagIds":["tag-guid-1","tag-guid-2"]}'
# 查当前积分
curl https://localhost:7002/kit_api/api/plat/user-integral/current \
-H "Authorization: Bearer <accessToken>"
5. 典型用法
public class PromotionService(IMemberService memberService, IUserIntegralService integralService)
{
public async Task PromoteAsync(Guid userId, Guid levelId)
{
var member = await memberService.GetAsync(userId); // 按会员(用户)Id
await memberService.AssignLevelAsync(userId, new MemberAssignLevelReq { LevelId = levelId });
}
}