Agrego frontend app

This commit is contained in:
Pablo
2026-08-22 19:08:19 -03:00
parent 824e092b29
commit 2d0797e627
254 changed files with 37231 additions and 0 deletions
@@ -0,0 +1,62 @@
class UserSession {
final String token;
final String role;
// UUID del usuario. Null al recién loguear (fc_ingresar no lo devuelve);
// se rellena al primer fc_obtener_usuario_por_token. Necesario para
// ownership checks (ej. "este pago lo creé yo").
final String? id;
final String nombre;
final String apellido;
final String dni;
final String? mail;
final String? telefono;
const UserSession({
required this.token,
required this.role,
this.id,
this.nombre = '',
this.apellido = '',
this.dni = '',
this.mail,
this.telefono,
});
/// Crear desde fc_ingresar (solo token + rol) + el DNI que ingresó el usuario.
factory UserSession.fromLogin({
required String token,
required String role,
required String dni,
}) {
return UserSession(token: token, role: role, dni: dni);
}
/// Crear desde fc_obtener_usuario_por_token (jsonb completo).
factory UserSession.fromUserData(Map<String, dynamic> map, String token) {
return UserSession(
token: token,
role: map['rol'] as String? ?? '',
id: map['id'] as String?,
nombre: map['nombre'] as String? ?? '',
apellido: map['apellido'] as String? ?? '',
dni: map['dni'] as String? ?? '',
mail: map['mail'] as String?,
telefono: map['telefono'] as String?,
);
}
String get displayName {
if (nombre.isNotEmpty && apellido.isNotEmpty) return '$nombre $apellido';
if (nombre.isNotEmpty) return nombre;
return dni;
}
/// Getter unificado: staff incluye superadmin, admin y profesor
bool get isStaff => role == 'superadmin' || role == 'admin' || role == 'profesor';
bool get isUsuario => role == 'usuario' || role == 'cliente';
/// True sólo para el rol 'superadmin'. Habilita en UI las acciones
/// que el backend gobierna con el permiso 'gestionar_cualquier_pago'.
bool get isSuperadmin => role == 'superadmin';
}
@@ -0,0 +1,11 @@
import 'package:gimnasio_soma/features/auth/domain/entities/user_session.dart';
abstract class AuthRepository {
Future<UserSession> login(String dni, String password);
Future<UserSession?> validateSession();
Future<void> logout();
Future<void> cambiarPropiaContrasena({
required String passwordActual,
required String passwordNueva,
});
}