Cómo contribuir
Guía breve para trabajar sobre el código de Crono de forma coherente con el resto del equipo.
Preparar el entorno
- Clona el repositorio y abre la solución principal
Crono.sln(existen soluciones auxiliares por módulo, con sufijo-sym, para trabajar sobre un módulo aislado). - Restaura y compila. Para una compilación de tipo release de la aplicación y sus módulos, usa los scripts de la raíz:
# Windows
build.cmd
# Linux / macOS
./build.sh
La salida queda en artifacts/ (ver Implementación y construcción).
Antes de escribir código
- Ubica tu cambio en la capa correcta según la responsabilidad de cada proyecto (
Crono,Crono.Datos,Crono.Nucleo,Crono.Web.Comun,Crono.Modulos,Crono.Web); ver Organización del código fuente. - Si la funcionalidad es opcional o específica de un cliente, hazla en un módulo en lugar del núcleo (ver Primeros pasos con módulos).
- Sigue las convenciones del proyecto: nomenclatura en español, métodos
AsyncconCancellationToken, servicios para la lógica y buscadores para las consultas (ver Estándares de código).
Al hacer el cambio
- Datos: todo cambio de esquema va en una migración FluentMigrator con
[MigracionVersion(...)], protegida con guardas de existencia (ver Migraciones de base de datos). - Seguridad: cada operación protegida declara su
[Permiso(...)](ver Seguridad). - Textos: nada de cadenas incrustadas de cara al usuario; usa recursos de idioma.
- UI: usa los componentes y tag helpers propios de Crono; el SCSS de módulo va en
wwwroot/admin.scss/publico.scssy no tiene recarga en caliente. - API: los endpoints nuevos heredan de
CronoApiController, se agrupan con[WebApiGrupo(...)]y se versionan (ver La Web API en detalle).
Antes de subir
- Compila en release y verifica que la aplicación arranca y aplica migraciones sin errores.
- Revisa que no queden
TODOsin resolver ni cadenas sin localizar en lo que tocaste. - Resume el cambio de cara al usuario para el registro de cambios cuando tenga impacto visible.
tip
Ante la duda sobre "dónde va esto" o "cómo se hace aquí", busca un caso equivalente ya resuelto en un módulo existente (por ejemplo, Crono.Facturacion para el patrón completo de módulo con datos, permisos, menú, localización y API) y sigue ese mismo patrón.