Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Taller Alejo

## Descripción
Taller Alejo es una aplicación Android para la gestión de un taller. El objetivo es centralizar la administración de productos, categorías y ventas, con sincronización en la nube y soporte offline-first para operar sin conexión y luego sincronizar los datos.

## Objetivos del proyecto
- **Inventario y catálogo**: administrar productos y sus categorías.
- **Ventas**: registrar ventas, consultar historial y sincronizar con la nube.
- **Offline-first**: permitir operar con base local y sincronizar cuando haya conexión.
- **Arquitectura modular**: separar claramente las capas de datos, dominio y presentación.

## Qué estamos haciendo (estado actual)
### Arquitectura
- Capas **data**, **domain** y **presentation** con inyección de dependencias usando **Koin**.
- Base de datos local con **Room**.
- Sincronización remota usando **Appwrite**.

### Módulos funcionales
- **Productos**: lectura remota de productos y mapeo DTO ↔ dominio.
- **Categorías**: infraestructura para gestionar categorías.
- **Ventas**: flujo completo con DAO, mapeadores, repositorio offline-first, casos de uso y ViewModel.

## Revisión del repositorio (mejoras realizadas)
- Se incorporó el **feature de ventas** con repositorios, mapeo de datos y persistencia local (Room).
- Se consolidó un **repositorio offline-first** para ventas con sincronización remota (pull + replace).
- Se añadieron **casos de uso** para observar ventas, obtener por ID y sincronizar, junto con el ViewModel.
- Se registró el módulo de ventas en el contenedor de dependencias de la app.

## Qué nos proponemos (roadmap)
1. **Consolidar flujo de ventas**: alta, edición, eliminación y consulta detallada.
2. **Sincronización bidireccional**: subir cambios locales pendientes y resolver conflictos.
3. **Mejorar UX**: estados de carga/errores, mensajes al usuario y pantalla de detalle.
4. **Reportes básicos**: métricas simples como ventas por fecha y por producto.
5. **Hardening**: validaciones, manejo de errores y pruebas automatizadas.

## Qué nos falta (pendientes)
- **CRUD completo de productos y categorías** (actualmente enfocado en lectura/remotos).
- **Sincronización bidireccional de ventas** (hoy es pull y reemplazo local).
- **Manejo robusto de errores** en ViewModels y UI.
- **Pruebas** unitarias/integración para casos de uso y repositorios.
- **Documentación técnica** (diagramas, convenciones y guía de contribución).

## Estructura del proyecto (alto nivel)
```
app/
src/main/java/com/elitec/alejotaller/
feature/
category/
product/
sale/
infraestructure/
```

## Cómo ejecutar
1. Configura las credenciales de Appwrite en las variables de entorno o `BuildConfig`.
2. Compila con Gradle:
```
./gradlew assembleDebug
```

## Contribución
Si deseas contribuir, crea una rama, realiza tus cambios y abre un pull request.