func isProductionModeAndNewScope(scope *gorm.Scope) (isProduction bool, clone *gorm.Scope) { if !IsDraftMode(scope.DB()) { if _, ok := scope.InstanceGet("publish:supported_model"); ok { table := OriginalTableName(scope.TableName()) clone := scope.New(scope.Value) clone.Search.Table(table) return true, clone } } return false, nil }
func getModeAndNewScope(scope *gorm.Scope) (isProduction bool, clone *gorm.Scope) { if draftMode, ok := scope.Get("publish:draft_mode"); !ok || !draftMode.(bool) { if _, ok := scope.InstanceGet("publish:supported_model"); ok { table := originalTableName(scope.TableName()) clone := scope.New(scope.Value) clone.Search.Table(table) return true, clone } } return false, nil }
// Callback function: invoked after the creation/update of an object. To populate its default fields func updateFields(scope *gorm.Scope) { if !scope.HasError() { newScope := scope.New(scope.Value) newScope.Search = newScope.Search.Table(scope.TableName()) if scope.PrimaryKey() != "" { gorm.Query(newScope) } else { // TODO: find a way to populate fields of scope.Value selecting * matching on every fields } scope = newScope } }
func assignCreatedBy(scope *gorm.Scope) { if isAuditable(scope) { if user, ok := scope.DB().Get("audited:current_user"); ok { var currentUser string if primaryField := scope.New(user).PrimaryField(); primaryField != nil { currentUser = fmt.Sprintf("%v", primaryField.Field.Interface()) } else { currentUser = fmt.Sprintf("%v", user) } scope.SetColumn("CreatedBy", currentUser) } } }
func assignUpdatedBy(scope *gorm.Scope) { if isAuditable(scope) { if user, ok := scope.DB().Get("audited:current_user"); ok { var currentUser string if primaryField := scope.New(user).PrimaryField(); primaryField != nil { currentUser = fmt.Sprintf("%v", primaryField.Field.Interface()) } else { currentUser = fmt.Sprintf("%v", user) } if attrs, ok := scope.InstanceGet("gorm:update_attrs"); ok { updateAttrs := attrs.(map[string]interface{}) updateAttrs["updated_by"] = currentUser scope.InstanceSet("gorm:update_attrs", updateAttrs) } else { scope.SetColumn("UpdatedBy", currentUser) } } } }
func getCurrentUser(scope *gorm.Scope) (string, bool) { var user interface{} var hasUser bool user, hasUser = scope.DB().Get("qor:current_user") if !hasUser { user, hasUser = scope.DB().Get("audited:current_user") } if hasUser { var currentUser string if primaryField := scope.New(user).PrimaryField(); primaryField != nil { currentUser = fmt.Sprintf("%v", primaryField.Field.Interface()) } else { currentUser = fmt.Sprintf("%v", user) } return currentUser, true } return "", false }