package authidentity import ( "database/sql/driver" "encoding/json" "errors" "time" ) // SignLogs holds login history (log entries and sign-in count). type SignLogs struct { Log string `sql:"-"` SignInCount uint Logs []SignLog } // Scan implements sql.Scanner for deserializing SignLogs from JSON. func (signLogs *SignLogs) Scan(data interface{}) (err error) { switch values := data.(type) { case []byte: if len(values) != 0 { return json.Unmarshal(values, signLogs) } case string: return signLogs.Scan([]byte(values)) case []string: for _, str := range values { if err := signLogs.Scan(str); err != nil { return err } } default: err = errors.New("unsupported driver -> Scan pair for SignLogs") } return } // Value implements driver.Valuer for serializing SignLogs to JSON. func (signLogs SignLogs) Value() (driver.Value, error) { results, err := json.Marshal(signLogs) return string(results), err } // SignLog represents a single login event entry. type SignLog struct { UserAgent string At *time.Time IP string }