package models import ( "database/sql" "time" "git.devices.local/mawas/golang-api-skeleton/lib/cache" "git.devices.local/mawas/golang-api-skeleton/lib/common" "gorm.io/gorm" ) // Token data model type Token struct { common.BasicFields Token common.GUID `gorm:"primaryKey" json:"token"` LastUsedDB sql.NullTime `gorm:"column:last_used" json:"-"` LastUsedJSON *time.Time `gorm:"-" json:"last_used,omitempty"` ExpiresAt time.Time `json:"expires_at"` UserID common.GUID `json:"-"` Username string `gorm:"-" json:"username"` Active bool `json:"active"` } func (token *Token) BeforeCreate(tx *gorm.DB) error { id, err := common.NewGUID() if err != nil { return err } token.Token = id if userID, ok := tx.Get("userID"); ok { if guidString, ok := userID.(string); ok { guid, err := common.StringToGUID(guidString) if err != nil { return err } token.CreatedByDB = guid token.UpdatedByDB = guid } } return err } func (token *Token) AfterFind(tx *gorm.DB) error { if token.LastUsedDB.Valid { token.LastUsedJSON = &token.LastUsedDB.Time } if token.DeletedAtDB.Valid { token.DeletedAtJSON = &token.DeletedAtDB.Time } if cc, ok := tx.Get("cache"); ok { if c, ok := cc.(cache.Cache); ok { if username, err := c.Get("user:" + token.CreatedByDB.String()); err != nil { return err } else if username != nil { token.CreatedByJSON = *username } if username, err := c.Get("user:" + token.UpdatedByDB.String()); err != nil { return err } else if username != nil { token.UpdatedByJSON = *username } if username, err := c.Get("user:" + token.UserID.String()); err != nil { } else if username != nil { token.Username = *username } } } return nil }