- Agregada funcionalidad de edición de checklists
- Nuevo modal para editar nombre, descripción, modo IA y scoring
- Botón "✏️ Editar" en cada checklist (solo admins)
- Mejora en la gestión de checklists en el panel de administración
Backend v1.0.68:
- Actualización de versión para sincronizar con frontend
- Endpoint PUT /api/checklists/{id} ya soportaba la funcionalidad
6.2 KiB
No olvides dar lo comentarios de los cambios que se hicieron para el backend y el front en para los comentarios de git
Siempre actuliza la version del front y del back la version del front esta en el archivo package.json y la del backend en el archivo main.py en una variable llamada BACKEND_VERSION
Ayudetec - Intelligent Checklist System for Automotive Workshops
Architecture Overview
Tech Stack: FastAPI (Python 3.11) + React 18 + PostgreSQL 15 + MinIO/S3 Deployment: Docker Compose for dev, Docker Stack for production Key Feature: AI-powered inspection analysis with OpenAI/Gemini integration
Service Structure
backend/- FastAPI monolith with JWT auth, S3 file storage, PDF generationfrontend/- React SPA with Vite, TailwindCSS, client-side routingpostgres- Main data store with checklist templates, inspections, answers- MinIO/S3 - Image and PDF storage (configurable endpoint)
Core Data Model
Users (role: admin/mechanic/asesor) → Checklists (templates with questions) → Inspections (mechanic executions) → Answers (responses with photos/scores)
- Permissions:
ChecklistPermissiontable controls mechanic access (empty = global access) - Nested Questions: 5-level deep conditional subquestions via
parent_question_id+show_if_answer - Scoring: Auto-calculated from answer points, stored in
Inspection.score/percentage - Question Types: boolean, single_choice, multiple_choice, scale, text, number, date, time (config in
Question.optionsJSON)
Development Workflows
Running Locally
docker-compose up -d # Start all services
docker-compose logs backend # Debug backend issues
URLs: Frontend http://localhost:5173, Backend API http://localhost:8000/docs
Database Initialization
Use init_users.py to create default admin/mechanic users:
docker-compose exec backend python init_users.py
Default credentials: admin/admin123, mecanico/mec123
Migrations
Manual SQL scripts in migrations/ - run via:
docker-compose exec backend python -c "
from app.core.database import engine
with open('migrations/your_migration.sql') as f:
engine.execute(f.read())
"
Building for Production
.\build-and-push.ps1 # Builds images, pushes to Docker Hub (configured in script)
Then deploy with docker-compose.prod.yml or docker-stack.yml (Swarm mode)
Project-Specific Conventions
API Architecture (backend/app/main.py)
- Single 2800+ line file - all endpoints in main.py (no routers/controllers split)
- Auth via
get_current_user()dependency returningmodels.User - File uploads use boto3 S3 client configured from
app/core/config.py(MinIO compatible) - PDF generation inline with ReportLab (starts ~line 1208, function
generate_pdf)
AI Integration Modes (see AI_FUNCTIONALITY.md)
ai_modeon Checklist:"off"(manual) |"assisted"(suggestions) |"copilot"(auto-complete)- AI analysis triggered on photo upload, stored in
Answer.ai_analysisJSON - Webhook notifications to n8n on completion:
send_completed_inspection_to_n8n()
Frontend Patterns (frontend/src/App.jsx)
- 5400+ line single-file component - all views in App.jsx (Login, Dashboard, Admin panels)
- Auth state in
localStorage(token + user object) - API calls use
fetch()withimport.meta.env.VITE_API_URLbase - Signature capture via
react-signature-canvas(saved as base64)
Permission Model
When fetching checklists:
- Admins see all checklists
- Mechanics only see checklists with either:
- No
ChecklistPermissionrecords (global access), OR - A permission record linking that mechanic
- No
- Implement via JOIN in
GET /api/checklistsendpoint
Environment Variables
Critical settings in .env:
DATABASE_URL- Postgres connection stringSECRET_KEY- JWT signing (min 32 chars)OPENAI_API_KEY/GEMINI_API_KEY- Optional for AI featuresMINIO_*vars - S3-compatible storage (MinIO/AWS S3)NOTIFICACION_ENDPOINT- n8n webhook for inspection eventsALLOWED_ORIGINS- Comma-separated CORS origins
Key Integration Points
S3/MinIO Storage
- Configured globally in
main.pyviaboto3.client()+Config(signature_version='s3v4') - Two buckets:
MINIO_IMAGE_BUCKET(photos),MINIO_PDF_BUCKET(reports) - Upload pattern: generate UUID filename,
s3_client.upload_fileobj(), store URL in DB
PDF Generation
- ReportLab library generates inspection reports with photos, signatures, scoring
- Triggered on inspection completion, stored to S3, URL saved in
Inspection.pdf_url - Uses checklist logo from
Checklist.logo_urlif available
Webhook Notifications
When Question.send_notification = true, answering triggers send_answer_notification() to NOTIFICACION_ENDPOINT
On inspection completion, sends full data via send_completed_inspection_to_n8n()
Common Gotchas
- No Alembic auto-migrations - use manual SQL scripts in
migrations/ - Token expiry is 7 days - set in
config.ACCESS_TOKEN_EXPIRE_MINUTES = 10080 - Photos stored as S3 URLs - not base64 in DB (except signatures)
- Nested questions limited to 5 levels - enforced in
Question.depth_level - PowerShell scripts - Windows-first project (see
.ps1build scripts) - Frontend has no state management - uses React
useStateonly, no Redux/Context
Checklist Management
Editing Checklists
- Admins can edit checklist name, description, AI mode, and scoring settings via "✏️ Editar" button
- Edit modal (
showEditChecklistModal) uses PUT/api/checklists/{id}endpoint - Backend endpoint supports partial updates via
exclude_unset=Truein Pydantic model - Logo and permissions have separate management modals for focused UI
Example Tasks
Add new question type: Update Question.type validation, modify QuestionTypeEditor.jsx UI, handle in QuestionAnswerInput.jsx
Change scoring logic: Edit backend/app/main.py answer submission endpoint, recalculate Inspection.score
Add new user role: Update User.role enum, modify get_current_user() checks, adjust frontend role conditionals in App.jsx
Edit checklist properties: Use existing PUT endpoint, add fields to editChecklistData state, update modal form