jocaagura_domain 1.26.0
jocaagura_domain: ^1.26.0 copied to clipboard
A package with domain models for all transversal applications
CHANGELOG Jocaagura Domain #
This document follows the guidelines of Keep a Changelog, and this project adheres to Semantic Versioning.
1.26.0 - 2025-09-07 #
Added #
- Pruebas robustas para
Utils
Cobertura extendida engetDoubleygetIntegerFromDynamic:- Manejo de nulos,
NaN, infinitos y valores no numéricos. - Parsing de números en notación científica (
3e2,-3e-2, etc.). - Soporte para formatos internacionales (coma o punto como separador decimal, moneda, separadores de miles).
- Garantía de fallback seguro (
0para enteros,NaNodefaultValuepara dobles). - Se incluyen los cambios tipo fix detallados en el changelog desde la version 1.25.0.
- Manejo de nulos,
1.25.3 - 2025-09-07 #
Added #
ModelVector.fromXY(int x, int y)factory constructor for convenient creation from integer coordinates.- Integer-oriented getters
xandy(using.round(), policy: .5 away from zero). keyproperty providing a canonical"x,y"representation for map/set usage.copyWithInts({int? x, int? y})method to create safe copies overriding integer axes.
Docs #
- Extended DartDoc with examples for new methods and clarified rounding policy.
- Documented reversibility limitations when the original
dx/dyare non-integers.
Tests #
- Added unit tests to validate:
- Rounding policy for positive/negative decimals.
- Stability of
keyand reversibility viafromXY. copyWithIntsbehavior with partial overrides.- Factory
fromXYproducing expected doubles.
1.25.2 - 2025-09-07 #
Added #
- Nueva GitHub Action ligera para validar commits antes de merge:
- Verificación de que todos los commits estén firmados y verificados.
- Ejecución de
flutter analyzepara asegurar el cumplimiento de linters. - Validación de
dart formaten modo estricto. - Bloqueo de
dependency_overridesenpubspec.yaml.
Changed #
- Ajustes en reglas de protección de ramas:
developymasterahora requieren commits firmados, revisiones por PR y checks de estado obligatorios (incluyendo CodeQL).- Publicación automática a pub.dev únicamente desde
mastertras un merge exitoso.
Security #
- Integración con CodeQL en ramas
developymasterpara análisis de calidad y seguridad. - Configuración de bot con firmas SSH para asegurar que los commits generados por automatizaciones tengan estado Verified.
1.25.1 - 2025-09-07 #
Added #
-
Documentación exhaustiva de estados de sesión
SessionState,Unauthenticated,Authenticating,Authenticated,Refreshing,SessionErrorahora tienen DartDoc claro sobre propósito, transiciones y expectativas de UI.
-
Getter
stateenBlocSession- Exposición fiel del último
SessionStatepublicado (útil para UI que necesita distinguirAuthenticating,RefreshingoSessionError).
- Exposición fiel del último
-
Páginas demo ampliadas en el example
SessionDemoPage(flujo completo de sesión conEither).WsDatabaseUserDemoPage(CRUD + watch en tiempo real con motor de cambios).ConnectivityDemoPage(flujo puro de conectividad conEither).BlocLoadingDemoPage(acción única con anti-flicker y cola FIFO).BlocResponsiveDemoPage(grid responsivo, simulación de tamaño, métricas).BlocOnboardingDemoPage(pasos cononEnterque retornaEither, auto-avance y manejo de errores).
Changed #
-
BlocSession.stateOrDefault- Mantiene retrocompatibilidad simplificando a binario “autenticado / no autenticado”.
- Si el estado es
Authenticated, devuelve la misma instancia (sin reasignar). - Para cualquier otro estado, devuelve
const Unauthenticated().
-
Getters validados
stream,sessionStream,state,stateOrDefault,currentUser,isAuthenticatedverifican ciclo de vida.- Tras
dispose(), el acceso lanzaStateErrorcon mensaje claro (contrato más seguro).
-
Alias canónico
streames el alias recomendado;sessionStreamse mantiene para compatibilidad.
Fixed #
-
refreshSession()en fallo- Si el repo retorna
Left, el BLoC pasa aSessionErrory no permanece enRefreshing.
- Si el repo retorna
-
Idempotencia de
boot()- Múltiples llamadas re-adjuntan la suscripción sin pérdidas de eventos.
-
cancelAuthSubscription()- Al cancelar manualmente, el stream deja de reflejar cambios hasta volver a llamar a
boot()(documentado y cubierto en tests).
- Al cancelar manualmente, el stream deja de reflejar cambios hasta volver a llamar a
Tests #
-
Suite de dispose y getters
- Acceso a getters tras
dispose()→StateErroresperado. stream/sessionStreamno emiten trasdispose().stateOrDefaultes un snapshot y no provoca emisiones.
- Acceso a getters tras
-
Cobertura de secuencias clave
refreshSession()conLeft→SessionError.boot()idempotente ycancelAuthSubscription()en medio de sesión.- Debouncer en
logIn()(múltiples llamadas rápidas → 1 hit a repo).
Migration notes #
-
Acceso tras
dispose()- Evita leer
bloc.state,bloc.currentUser,bloc.isAuthenticatedobloc.streamdespués de disponer. - Si existe código heredado que pudiera acceder tras
dispose(), rodéalo conmounted(en UI) o reordena el ciclo de vida. - Opción de compatibilidad temporal:
SessionState safeState(BlocSession b) { try { return b.state; } catch (_) { return const Unauthenticated(); } }
- Evita leer
-
Snapshots
- Para lógicas binarias, usa
stateOrDefault. - Para lógicas de progreso/errores, usa
state.
- Para lógicas binarias, usa
Dev notes #
-
Si necesitas soportar versiones de Flutter sin
Color.withValues, cambia a:void main(){ color.withOpacity(0.75); // en lugar de withValues(alpha: 0.75) }
— Fin de 1.25.1 —
1.25.0 - 2025-08-17 #
Fixed #
BlocLoading: evitaStateErroral invocarhide()trasdispose()y corrige emisiones duplicadas en operaciones rápidas encadenadas.BlocResponsive: corrige la clasificación inicial deScreenSizeen el primer frame y en cambios de tamaño (web/desktop), garantizando una emisión consistente.BlocOnboarding: maneja correctamente listas vacías de pasos ([]) y asegura queonCompletese dispare una sola vez. Cierre seguro de streams endispose().- Demos: rutas e imports ajustados para compilar en
stablesin advertencias; correcciones menores de tipografía y estilos.
Changed #
- Mejora no funcional del rendimiento en
BlocLoadingal consolidar colas internas para mostrar/ocultar estados de carga (sin cambios de API). - Ajustes menores a los breakpoints documentados de
BlocResponsivepara reflejar con mayor claridad los límites recomendados (sin cambios de API).
Docs #
- DartDoc en inglés para
BlocLoading,BlocResponsiveyBlocOnboarding, incluyendo ejemplos de uso en Markdown y descripción de parámetros/enums. - Comentarios explicativos añadidos en cada demo page para guiar la implementación paso a paso.
- Sección breve en el README principal enlazando a las demos y a la guía de adopción rápida de cada BLoC.
Tests #
- Grupos de pruebas con
flutter_testpor BLoC; casos agregados para:- Inicialización y
dispose(). - Cambios de tamaño en
BlocResponsive. - Flujos felices y escenarios borde en
BlocOnboarding. - Condiciones de carrera en
BlocLoading.
- Inicialización y
CI #
- Endurecimiento de validaciones de PR (análisis, formato y cobertura) y verificación de actualización del
CHANGELOG.md. - Mantención: workflows revisados para compatibilidad con
stableactual.
Notas: No hay cambios incompatibles. No se requiere migración.
1.24.2 - 2025-08-17 #
Added #
- Actualización menor en
BlocLoadingpara soportar FiFo en la cola de tareas. - Se agrega demo para
BlocLoadingenbloc_loading_demo_page.dart. - Se agrega
BlocOnboardingpara gestionar estados de onboarding en aplicaciones. - Se agrega
BlocResponsivepara manejar estados de UI responsiva en aplicaciones con diferentes resoluciones y pantallas.
1.24.1 - 2025-08-17 #
Fixed #
- Corrección de advertencias menores en la implementación de conectividad y manejo de streams.
- Ajustes en la documentación de los nuevos módulos y ejemplos agregados.
- Mejoras menores en la robustez de los tests unitarios para los servicios de conectividad y WebSocket.
- Actualización de dependencias para mantener la compatibilidad con las últimas versiones de Flutter y Dart.
1.24.0 - 2025-08-15 #
✅ Added
- Stack WS Database (end-to-end)
GatewayWsDatabaseImpl(ref-count pordocId, multiplexing conBlocGeneral,detachWatch/releaseDoc/dispose).RepositoryWsDatabaseImpl<T extends Model>(mapeofromJson/toJson, opcional serialización dewrite/deletepordocId).- Usecases CRUD & WS:
databases_crud_usecases.dartfacade_crud_database.dartfacade_ws_database_usecases.dart
- Estado y config:
ws_db_state.dart(estado inmutableWsDbState<T>)ws_db_config.dart(valores por defecto / helpers)
- BLoC:
bloc_ws_database.dart(orquestación thin; sin streams ad-hoc; mira/actualizaWsDbState)
- Infra fake para desarrollo/pruebas
fake_service_ws_database.dartcondocumentStream/collectionStream, lectura/escritura y borrado por colección+id.ws_database_user_demo_page.dart(example) con ticker opcional que incrementajwt.countRefen vivo.home_page.dart(example) como entrada de demo.
- Utilidades transversales
Unit(tipo “valor nulo” seguro paraEithery comandos sin payload).PerKeyFifoExecutor<K>(ejecutor FIFO por clave para serializar tareas pordocId).
- Tests
bloc_ws_database_test.dartgateway_ws_database_impl.test.dartrepository_ws_database_impl.test.dartfake_service_ws_database.test.dartper_key_fifo_executor_test.dartunit_test.dartfake_db_repo.dart(mocks & fakes auxiliares)
🔄 Changed
- Contratos de gateway/repositorio document-centricos y transport-agnostic:
GatewayWsDatabase: énfasis en watch por documento con canal compartido y manejo explícito de ciclo de vida (detachWatch/releaseDoc).RepositoryWsDatabase<T>: agrega helpers de ciclo de vida y opción de serializar escrituras pordocId.
- Mapeo de errores unificado mediante
DefaultErrorMapperen todas las capas.
🩹 Fixed
- Posibles leaks de suscripción cuando varios watchers observaban el mismo
docId: ahora se hace ref-count y se libera la suscripción real al llegar a cero referencias.
🧭 Migration notes
- Si usas
watch(docId), después de cancelar tuStreamSubscriptionllama siempre adetachWatch(docId)para liberar el canal subyacente. - Para comandos sin retorno, retorna
Right(unit)en lugar devoid. - Para evitar carreras al escribir/borrar la misma entidad, usa el
RepositoryWsDatabaseImplconserializeWrites: trueo el utilitarioPerKeyFifoExecutor.
📚 Docs
- README actualizado con:
- “Cómo integrar BlocWsDatabase (con FakeServiceWsDatabase)”
- Snippets dedicados de
UnityPerKeyFifoExecutor(casos de uso comunes).
1.23.1 - 2025-08-11 #
Fixed #
- Correcciones menores y ajustes en la implementación de
GatewayAuthyRepositoryAuthpara mejorar la compatibilidad y robustez. - Documentación actualizada y ampliada en los nuevos archivos y clases agregadas.
- Se resolvieron advertencias y errores menores detectados en pruebas unitarias y análisis estático.
1.23.0 - 2025-08-11 #
Actualización cambios de master
1.22.0 - 2025-08-10 #
- Agregamos la clase BlocResponsive, BlocOnboarding y BlocLoading para mejorar la gestión de estados en aplicaciones con diferentes resoluciones y pantallas.
1.21.2 - 2025-07-22 #
- Corregido error de formateo en changelog al agregar la versión
1.21.1(error de formato en el encabezado de la versión).
1.21.1 - 2025-07-22 #
- Revisados y resueltos los
TODOpendientes en el código. - Sincronizada la rama
developconmaster. - Corregido el error de análisis estático (“Angle brackets will be interpreted as HTML”) en el comentario de
fake_service_preferences.dart(ajuste de espacios enMap<String, dynamic>).
1.21.0 - 2025-07-09 #
- Se crea la clase
FakeServiceHttppara simular el comportamiento de un servicio HTTP en pruebas unitarias. - Se actualiza el readme para incluir ejemplos de uso de las clases
FakeServiceHttp,FakeServiceSesion,FakeServiceWsDatabase,FakeServiceGeolocation,FakeServiceGyroscope,FakeServiceNotifications,FakeServiceConnectivityyFakeServicePreferences.
1.20.2 - 2025-07-08 #
- Se crea la clase
FakeServiceSesionpara simular el comportamiento de un servicio de sesión en pruebas unitarias. - Se crea la clase
FakeServiceWsDatabasepara simular el comportamiento de un servicio de base de datos WebSocket en pruebas unitarias. - Se crea la clase
FakeServiceGeolocationpara simular el comportamiento de un servicio de geolocalización en pruebas unitarias. - Se crea la clase
FakeServiceGyroscopepara simular el comportamiento de un servicio de giroscopio en pruebas unitarias. - Se crea la clase
FakeServiceNotificationspara simular el comportamiento de un servicio de notificaciones en pruebas unitarias. - Se crea la clase
FakeServiceConnectivitypara simular el comportamiento de un servicio de conectividad en pruebas unitarias. - Se crea la clase
FakeServicePreferencespara simular el comportamiento de un servicio de preferencias en pruebas unitarias.
1.20.1 - 2025-07-07 #
Fixed #
- Se documenta y agrega el archivo
README_STRUCTURE.mdcon la guía recomendada de estructura de carpetas y arquitectura para proyectos basados enjocaagura_domain.
1.20.0 - 2025-07-06 #
Changed #
- Documentación ampliada y mejorada para las clases
BlocGeneralyBlocModule, incluyendo ejemplos de uso detallados en DartDoc y explicaciones sobre la gestión de listeners y el ciclo de vida de los BLoC.
1.19.0 - 2025-05-25 #
Added #
- Nueva clase
LedgerModelque representa un libro contable con ingresos y egresos separados, y permite el cálculo de saldo total y decimal. - Enum
LedgerEnumpara mantener uniformidad en las claves JSON utilizadas porLedgerModel. - Funcionalidades en
MoneyUtilspara:totalAmount,totalDecimalAmountaverage,filterByCategorytotalPerCategory,totalDecimalPerCategory
- Métodos adicionales útiles como:
getLatestMovement,containsMovementsortByDate,filterByDateRangetotalByMonth,totalDecimalByMonth
Added (Tests) #
- Pruebas unitarias para
LedgerModel: serialización, igualdad, cálculo de saldos ycopyWith. - Pruebas unitarias para
MoneyUtils: validaciones de agregación, filtros y agrupaciones por categoría y mes.
Changed #
- Documentación enriquecida con ejemplos de uso en DartDoc para
MoneyUtils.
1.18.1 - 2025-05-18 #
chore(github): reestructura develop desde master y actualiza workflows
1.18.0 - 2025-05-18 #
Added #
- Nueva estructura estándar de errores:
HttpErrorItems: Manejo de errores HTTP comunes como 404, 401, 500, con niveles de severidad (danger,severe,warning,systemInfo).WebSocketErrorItems: Representación de errores típicos de WebSocket como fallos de conexión, cierre inesperado o mensajes malformados.NetworkErrorItems: Para errores como sin conexión, timeout o servidor inaccesible.
- Inclusión de métodos estáticos
fromCode()yfromStatusCode()en las clases anteriores. - Clave estandarizada
meta['source']y validadores parameta['httpCode']y similares.
Updated #
ErrorItemahora soporta un campoerrorLevelde tipoErrorLevelEnum.- El valor por defecto es
ErrorLevelEnum.systemInfopara obligar a definirlo explícitamente. - Se agregó
toString()actualizado para incluir elerrorLevel.
- El valor por defecto es
- Documentación de cada clase de error fue ampliada con enlaces a los estándares utilizados (MDN, Flutter API).
Tests #
- Se agregaron pruebas unitarias para
HttpErrorItems,WebSocketErrorItems, yNetworkErrorItemsincluyendo validación deerrorLevel,fromCode()y fallbackunknown(). - Se probaron los casos límite y el mapeo correcto desde códigos conocidos.
Docs #
- Actualizado el
README.mdpara reflejar las nuevas capacidades de los modelos de error y sus usos sugeridos.
1.17.1 - 2025-05-18 #
1.17.0 - 2025-03-25 #
Added #
- Implemented the financial movement model to manage financial transactions.
1.16.0 - 2025-01-25 #
Added #
- Configured GitHub Actions secrets to securely store sensitive data required for workflows.
- Validated and updated the GitHub maintainers group to ensure proper repository access and management.
Updated #
- Enhanced the
READMEfile with updated repository details and instructions for contributors.
1.15.2 - 2024-12-29 #
Fixed #
- Translation of the changelog to English.
- Completion and translation of inline documentation to English.
- Extended unit tests.
- Updated linter package.
1.15.1 - 2024-08-25 #
Fixed #
- Minor changes in DartDoc formatting without affecting the code or its functionality.
1.15.0 - 2024-08-25 #
Added #
MedicalRecordModel: Added model, tests, and DartDoc documentation for the patient's state in the dentist app.
1.14.0 - 2024-08-25 #
Added #
MedicationModel: Added model, tests, and DartDoc documentation for the appointment model.
1.13.0 - 2024-08-25 #
Added #
AppointmentModel: Added model, tests, and DartDoc documentation for the appointment model.ContactModel: Added model, tests, and DartDoc documentation for the contact model.
1.9.0 - 2024-07-28 #
1.8.0 - 2024-07-24 #
Added #
DentalConditionModel: Added model and documentation for the dental condition.
1.7.1 - 2024-07-22 #
Changed #
MedicalDiagnosisModel: Added documentation for developers in the file.
1.6.0 - 2024-07-21 #
1.5.0 - 2024-07-07 #
1.4.2 - 2024-06-30 #
Added #
Colors: Added a color map to the UML diagram with an explanation in the README to improve visualization of the implementation state of models.
Fixed #
UML Diagram: Updated to reflect the implementation state of models:Either,Left,Right: Confirmed.Model,UserModel,AttributeModel<T>: Confirmed.Bloc,BlocModule,BlocGeneral<T>,BlocCore: Confirmed.UI:ModelMainMenuModelconfirmed.Connectivity:ConnectionTypeEnum,ConnectivityModelconfirmed.Citizen:PersonModelunder review,LegalIdModelconfirmed.Obituary:ObituaryModel,DeathRecordModelconfirmed.Shops:StoreModelconfirmed.Geolocation:AddressModelconfirmed.
1.2.1 #
- Added
Debouncerclass. - Added documentation in the README file.
1.0.0 #
- Added
Eitherclass. - Approved for production.
0.3.2 #
- Added
DeathRecordModelintoObituaryModel.
0.3.1 #
- Fixed
fromJsonfactory constructor inLegalIdModel.
0.3.0 #
- Added
LegalIdModel.
0.2.0 #
- Added
DeathRecordModel.
0.1.2 #
- Minor fix to
ObituaryModelto includevigilDateandburialDatein parameters. - Increased unit test coverage.
0.1.01 #
- Changed officially to beta.
- Minor fix to
ObituaryModelto includemessagein parameters.
0.0.9 #
- Added
ObituaryModel. - Minor fix to
PersonModelto cover variable names properly. - Increased
PersonModelandDateUtilstest coverage.
0.0.8 #
- Added DateTime-to-String utility.
0.0.71 #
- Changed attributes in Models to
Map<String, AttributeModel<dynamic>>.
0.0.7 #
- Completed
PersonModelwith subModelClass (AttributeModel) for information.
0.0.6 #
- Completed
StoreModelwith formatted options.
0.0.5 #
- Added
StoreModel.
0.0.4 #
- Added
AddressModel.
0.0.3 #
- Added
Utilsclass for JSON conversion management. - Improved unit test coverage.
0.0.2 #
- Added
UserModeland established some immutable conditions.
0.0.1 #
- Added initial abstract class
Model.