package account import ( "SciencesServer/app/common/model" "SciencesServer/app/service" "SciencesServer/config" "SciencesServer/utils" ) type Instance struct{} type InstanceHandle func() *Instance type InstanceLoginCallback func(params *InstanceLoginParams) *InstanceLoginReturn type ( InstanceLoginParams struct { UID, TenantID, ManageUID uint64 Name, Mobile string Identity, SelectIdentity int Status model.AccountStatusKind } InstanceLoginReturn struct { Token string `json:"token"` EffectTime int `json:"effect_time"` } ) func (c *Instance) Login() InstanceLoginCallback { return func(params *InstanceLoginParams) *InstanceLoginReturn { token := utils.JWTEncrypt(config.SettingInfo.TokenEffectTime, map[string]interface{}{ config.TokenForUID: params.UID, }) session := service.NewSessionEnterprise() session.Token = token session.UID = params.UID session.TenantID = params.TenantID session.ManageUID = params.ManageUID session.Name = params.Name session.Mobile = params.Mobile session.Identity = params.Identity session.SelectIdentity = params.SelectIdentity service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccount, session.UIDToString(), session) return &InstanceLoginReturn{Token: token, EffectTime: config.SettingInfo.TokenEffectTime} } } func NewInstance() InstanceHandle { return func() *Instance { return &Instance{} } }