|
|
@@ -1,12 +1,22 @@
|
|
|
package models
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"regexp"
|
|
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
|
"gorm.io/gorm"
|
|
|
)
|
|
|
|
|
|
+// Definir las banderas usando operadores bitwise
|
|
|
+const (
|
|
|
+ NivelRico = 1 << 0 // 00001
|
|
|
+ NivelPobre = 1 << 1 // 00010
|
|
|
+ DescAfromex = 1 << 2 // 00100
|
|
|
+ DescIndigena = 1 << 3 // 01000
|
|
|
+ Neurodivergente = 1 << 4 // 10000
|
|
|
+)
|
|
|
+
|
|
|
// User struct with validation tags
|
|
|
type User struct {
|
|
|
gorm.Model
|
|
|
@@ -14,6 +24,7 @@ type User struct {
|
|
|
LastName string `json:"last_name" validate:"required,min=2,max=40,uppercase"`
|
|
|
Sex string `json:"sex" validate:"required,oneof=H M"`
|
|
|
BirthDate string `json:"birth_date" validate:"required,birthdate"` //dd-mm-yyyy
|
|
|
+ Flags int `json:"flags" validate:"required"`
|
|
|
}
|
|
|
|
|
|
// Validate validates the User struct
|
|
|
@@ -31,3 +42,38 @@ func (u *User) Validate() error {
|
|
|
})
|
|
|
return validate.Struct(u)
|
|
|
}
|
|
|
+
|
|
|
+// Función para establecer banderas
|
|
|
+func (u *User) SetFlags(flags ...int) {
|
|
|
+ for _, flag := range flags {
|
|
|
+ u.Flags |= flag // Usa OR bitwise para agregar la bandera
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Función para verificar si una bandera está activa
|
|
|
+func (u *User) HasFlag(flag int) bool {
|
|
|
+ return u.Flags&flag != 0 // Usa AND bitwise para comprobar la bandera
|
|
|
+}
|
|
|
+
|
|
|
+// Método para obtener una representación JSON amigable de las banderas
|
|
|
+func (u *User) GetFlags() map[string]bool {
|
|
|
+ return map[string]bool{
|
|
|
+ "NivelRico": u.HasFlag(NivelRico),
|
|
|
+ "NivelPobre": u.HasFlag(NivelPobre),
|
|
|
+ "DescAfromex": u.HasFlag(DescAfromex),
|
|
|
+ "DescIndigena": u.HasFlag(DescIndigena),
|
|
|
+ "Neurodivergente": u.HasFlag(Neurodivergente),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Custom MarshalJSON to include flag details
|
|
|
+func (u *User) MarshalJSON() ([]byte, error) {
|
|
|
+ type Alias User
|
|
|
+ return json.Marshal(&struct {
|
|
|
+ *Alias
|
|
|
+ FlagsDetails map[string]bool `json:"flags_details"`
|
|
|
+ }{
|
|
|
+ Alias: (*Alias)(u),
|
|
|
+ FlagsDetails: u.GetFlags(),
|
|
|
+ })
|
|
|
+}
|