package models import ( "git.devices.local/mawas/golang-api-skeleton/lib/cache" "git.devices.local/mawas/golang-api-skeleton/lib/common" "gorm.io/gorm" ) // User data model type User struct { common.ModelHiddenGUIDPK Username string `gorm:"unique_index:username" json:"username,omitempty"` Firstname string `json:"firstname,omitempty"` Lastname string `json:"lastname,omitempty"` Email string `json:"email,omitempty"` TokensRef []Token `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"` Tokens []string `gorm:"-" json:"tokens"` PasswordHash string `json:"-"` Active bool `json:"active"` } func (user *User) AfterCreate(tx *gorm.DB) error { if username, ok := tx.Get("username"); ok { if name, ok := username.(string); ok { user.CreatedByJSON = name user.UpdatedByJSON = name } } user.Tokens = []string{} return nil } func (user *User) AfterFind(tx *gorm.DB) error { if user.DeletedAtDB.Valid { user.DeletedAtJSON = &user.DeletedAtDB.Time } user.Tokens = []string{} for i := range user.TokensRef { user.Tokens = append(user.Tokens, user.TokensRef[i].Token.String()) } if cc, ok := tx.Get("cache"); ok { if c, ok := cc.(cache.Cache); ok { if username, err := c.Get("user:" + user.CreatedByDB.String()); err != nil { return err } else if username != nil { user.CreatedByJSON = *username } if username, err := c.Get("user:" + user.UpdatedByDB.String()); err != nil { return err } else if username != nil { user.UpdatedByJSON = *username } } } return nil } // func (user *User) BeforeCreate(tx *gorm.DB) error { // // ctx := tx.Statement.Context // // username := ctx.Value("username") // // switch v := username.(type) { // // case nil: // // case string: // // user.CreatedBy = v // // } // // // return nil // }