Files
user-system/internal/models/social_account.go

71 lines
2.1 KiB
Go
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.
package models
import (
"encoding/json"
"time"
)
// SocialAccount 社交账号绑定模型
type SocialAccount struct {
ID uint64 `json:"id" db:"id"`
UserID uint64 `json:"user_id" db:"user_id"`
Provider string `json:"provider" db:"provider"` // wechat, qq, weibo, google, facebook, twitter
ProviderUserID string `json:"provider_user_id" db:"provider_user_id"`
ProviderUsername string `json:"provider_username" db:"provider_username"`
AccessToken string `json:"-" db:"access_token"` // 不返回给前端
RefreshToken string `json:"-" db:"refresh_token"`
ExpiresAt *time.Time `json:"expires_at" db:"expires_at"`
RawData JSON `json:"-" db:"raw_data"`
IsPrimary bool `json:"is_primary" db:"is_primary"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
// SocialAccountInfo 返回给前端的社交账号信息(不含敏感信息)
type SocialAccountInfo struct {
ID uint64 `json:"id"`
Provider string `json:"provider"`
ProviderUserID string `json:"provider_user_id"`
ProviderUsername string `json:"provider_username"`
IsPrimary bool `json:"is_primary"`
CreatedAt time.Time `json:"created_at"`
}
// ToInfo 转换为安全信息
func (sa *SocialAccount) ToInfo() *SocialAccountInfo {
return &SocialAccountInfo{
ID: sa.ID,
Provider: sa.Provider,
ProviderUserID: sa.ProviderUserID,
ProviderUsername: sa.ProviderUsername,
IsPrimary: sa.IsPrimary,
CreatedAt: sa.CreatedAt,
}
}
// JSON 自定义JSON类型用于存储RawData
type JSON struct {
Data interface{}
}
// Scan 实现 sql.Scanner 接口
func (j *JSON) Scan(value interface{}) error {
if value == nil {
j.Data = nil
return nil
}
bytes, ok := value.([]byte)
if !ok {
return nil
}
return json.Unmarshal(bytes, &j.Data)
}
// Value 实现 driver.Valuer 接口
func (j JSON) Value() (interface{}, error) {
if j.Data == nil {
return nil, nil
}
return json.Marshal(j.Data)
}