fix(usuarios): un usuario con tipo inesperado desaparecía de todas las listas
El administrador no aparecía en /app/users. La lista de usuarios del sistema filtraba con una lista blanca (tipo_usuario 'sistema', '' o NULL) y la pantalla de usuarios 'gas' es la complementaria. Un usuario con cualquier otro valor —o con uno viejo de antes de que existiera el campo— no salía en NINGUNA de las dos: quedaba invisible en todo el panel aunque pudiera entrar y fuera administrador. Ahora se excluye 'gas' en vez de exigir 'sistema', así todo usuario cae en exactamente una de las dos listas. Además la búsqueda usaba LIKE, que en Postgres distingue mayúsculas: buscar "lizandro" no encontraba a "Lizandro", así que el atajo obvio para comprobarlo tampoco funcionaba. Pasa a ILIKE y también busca por email, que es lo que la mayoría escribe. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
105ab44759
commit
6942c04d27
+20
-6
@@ -45,9 +45,12 @@ func AllUsersGas(limit, offset int, search string) ([]Users, int64, error) {
|
||||
var total int64
|
||||
db := app.Http.Database.DB.Model(&Users{})
|
||||
|
||||
// Filtrar por término de búsqueda si se proporciona
|
||||
// ILIKE y no LIKE: en Postgres LIKE distingue mayúsculas, así que buscar
|
||||
// "lizandro" no encontraba a "Lizandro". Se agrega el email porque es lo
|
||||
// que la mayoría escribe cuando busca a una persona.
|
||||
if search != "" {
|
||||
db = db.Where("name LIKE ? OR nombre_usuario LIKE ?", "%"+search+"%", "%"+search+"%")
|
||||
patron := "%" + search + "%"
|
||||
db = db.Where("name ILIKE ? OR nombre_usuario ILIKE ? OR email ILIKE ?", patron, patron, patron)
|
||||
}
|
||||
// Filtrar por tipo_usuario = 'gas'
|
||||
db = db.Where("tipo_usuario = ?", "gas")
|
||||
@@ -72,13 +75,24 @@ func AllUsersSistema(limit, offset int, search string) ([]Users, int64, error) {
|
||||
var total int64
|
||||
db := app.Http.Database.DB.Model(&Users{})
|
||||
|
||||
// Filtrar por término de búsqueda si se proporciona
|
||||
// ILIKE y no LIKE: en Postgres LIKE distingue mayúsculas, así que buscar
|
||||
// "lizandro" no encontraba a "Lizandro". Se agrega el email porque es lo
|
||||
// que la mayoría escribe cuando busca a una persona.
|
||||
if search != "" {
|
||||
db = db.Where("name LIKE ? OR nombre_usuario LIKE ?", "%"+search+"%", "%"+search+"%")
|
||||
patron := "%" + search + "%"
|
||||
db = db.Where("name ILIKE ? OR nombre_usuario ILIKE ? OR email ILIKE ?", patron, patron, patron)
|
||||
}
|
||||
|
||||
// Filtrar por tipo_usuario = 'sistema' o vacío (excluye usuarios 'gas' y otros tipos)
|
||||
db = db.Where("tipo_usuario = ? OR tipo_usuario = '' OR tipo_usuario IS NULL", "sistema")
|
||||
// Se excluye 'gas' en vez de exigir 'sistema'.
|
||||
//
|
||||
// Antes era una lista blanca ('sistema', '' o NULL) y la pantalla de 'gas'
|
||||
// es la complementaria, así que un usuario con cualquier otro valor —o con
|
||||
// uno viejo de antes de que existiera el campo— no aparecía en NINGUNA de
|
||||
// las dos listas: quedaba invisible en todo el panel aunque pudiera entrar
|
||||
// y fuera administrador.
|
||||
//
|
||||
// Invertirlo garantiza que todo usuario esté en exactamente una de las dos.
|
||||
db = db.Where("COALESCE(tipo_usuario, '') <> ?", "gas")
|
||||
|
||||
// Obtener el total de usuarios
|
||||
if err := db.Count(&total).Error; err != nil {
|
||||
|
||||
Reference in New Issue
Block a user