This commit is contained in:
2026-05-29 12:37:37 +08:00
parent f8bf88f635
commit 0d3a116820
5 changed files with 46 additions and 14 deletions

View File

@@ -16,10 +16,11 @@ const (
InvitationStatusRevoked InvitationStatus = "revoked"
)
// SubordinateInvitation 主账号邀请记录(存 token 哈希
// SubordinateInvitation 主账号邀请记录(主账号固定邀请码,可重复使用
type SubordinateInvitation struct {
ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"唯一标识"`
ParentUserID string `gorm:"type:varchar(36);not null;index" json:"parent_user_id" comment:"主账号用户ID"`
Token string `gorm:"type:char(6)" json:"-" comment:"邀请码明文(6位)"`
TokenHash string `gorm:"type:varchar(64);not null;uniqueIndex" json:"-" comment:"邀请码的SHA256(十六进制)"`
ExpiresAt time.Time `gorm:"not null;index" json:"expires_at" comment:"过期时间"`
Status InvitationStatus `gorm:"type:varchar(20);not null;default:pending" json:"status" comment:"状态"`

View File

@@ -12,6 +12,7 @@ type SubordinateRepository interface {
CreateInvitation(ctx context.Context, inv *entities.SubordinateInvitation) error
FindInvitationByTokenHash(ctx context.Context, tokenHash string) (*entities.SubordinateInvitation, error)
FindInvitationByID(ctx context.Context, id string) (*entities.SubordinateInvitation, error)
FindActiveInvitationByParent(ctx context.Context, parentUserID string) (*entities.SubordinateInvitation, error)
UpdateInvitation(ctx context.Context, inv *entities.SubordinateInvitation) error
ConsumeInvitation(ctx context.Context, invitationID, childUserID string, consumedAt time.Time) (bool, error)
ListInvitationsByParent(ctx context.Context, parentUserID string, limit, offset int) ([]*entities.SubordinateInvitation, int64, error)