Developed by: Buffer Ring Organization
CarFix is a marketplace platform for automotive parts that connects businesses selling parts with customers who need them. The platform allows businesses to register, publish their products and manage their sales, while customers can search, compare and purchase parts for their vehicles.
- Backend: Node.js with Express.js framework
- Database: MySQL with Sequelize ORM
- Authentication: JWT (JSON Web Token)
- File Storage: Local storage (with cloud migration capability)
- API Style: RESTful API
carfix/
├── config/ # Application configuration
│ └── database.js # Database configuration
├── controllers/ # API controllers
├── middleware/ # Custom middleware
│ └── auth.js # Authentication middleware
├── models/ # Sequelize models
│ └── index.js # Model associations
├── routes/ # API routes
├── utils/ # Utilities
├── public/ # Static files
│ └── uploads/ # Uploaded files
├── .env # Environment variables
├── server.js # Application entry point
└── package.json # Dependencies and scripts
The application uses Sequelize as ORM to interact with MySQL database:
const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USER,
process.env.DB_PASSWORD,
{
host: process.env.DB_HOST,
dialect: 'mysql',
logging: process.env.NODE_ENV === 'development' ? console.log : false,
define: {
timestamps: true,
underscored: false,
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
}
);- Purpose: Platform users (customers, businesses, admins)
- Key attributes:
name,email,password,role,phone,address
- Purpose: Businesses selling parts
- Key attributes:
business_name,rif,location_lat,location_lng
- Purpose: Parts offered by businesses
- Key attributes:
name,oem_code,price,stock,description,part_condition
- Purpose: Part categories
- Key attributes:
name,description,parent_id
- Purpose: Vehicle information hierarchy
- Relationships: Brand → Model → Vehicle
- Purpose: Purchase orders and payments
- Key attributes: Order status, payment methods, amounts
JWT-based authentication with role-based access control:
- protect: Verifies valid JWT token
- authorize: Checks user role permissions
// Usage example
router.get('/protected-route', protect, authorize('admin'), controllerFunction);POST /api/auth/register # User registration
POST /api/auth/login # User login
GET /api/spare-parts # Get all spare parts
GET /api/spare-parts/:id # Get specific spare part
GET /api/businesses # Get all businesses
GET /api/categories # Get all categories
GET /api/brands # Get all brands
GET /api/auth/me # Get current user (auth required)
POST /api/spare-parts # Create spare part (business role)
PUT /api/spare-parts/:id # Update spare part (owner/admin)
DELETE /api/spare-parts/:id # Delete spare part (owner/admin)
POST /api/orders # Create order (auth required)
GET /api/orders/my-orders # Get user orders (auth required)
- Node.js 18+
- MySQL 8.0+
- npm or yarn
-
Clone the repository
git clone https://github.com/bufferring/carfix-api.git cd carfix-api -
Install dependencies
npm install
-
Environment setup
cp .env.example .env # Edit .env with your configuration -
Database setup
# Create database mysql -u root -p < carfix.sql # Run migrations (if using migrations) npm run migrate
-
Start the application
# Development npm run dev # Production npm start
curl -X POST http://localhost:5001/api/auth/register \
-H "Content-Type: application/json" \
-d '{"name":"John Doe","email":"john@example.com","password":"password123","role":"customer"}'curl -X POST http://localhost:5001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"john@example.com","password":"password123"}'curl -X POST http://localhost:5001/api/spare-parts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{"name":"Oil Filter","category_id":1,"price":25.99,"stock":10}'NODE_ENV=development
PORT=5001
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=carfix_db
JWT_SECRET=your_jwt_secret
JWT_EXPIRE=30dOption 1: Render + Railway
- Database: Railway MySQL
- Backend: Render Web Service
Option 2: Heroku + JawsDB
- Database: JawsDB MySQL Add-on
- Backend: Heroku Dyno
Recommended frontend stack:
- React.js with TypeScript
- React Router for navigation
- Axios for API calls
- Tailwind CSS for styling
- React Query for server state management
CarFix es una plataforma de marketplace para repuestos automotrices que conecta a negocios que venden repuestos con clientes que los necesitan. La plataforma permite a los negocios registrarse, publicar sus productos y gestionar sus ventas, mientras que los clientes pueden buscar, comparar y comprar repuestos para sus vehículos.
- Backend: Node.js con framework Express.js
- Base de datos: MySQL con Sequelize ORM
- Autenticación: JWT (JSON Web Token)
- Almacenamiento: Local (con capacidad de migración a la nube)
- Estilo API: API RESTful
carfix/
├── config/ # Configuración de la aplicación
│ └── database.js # Configuración de la base de datos
├── controllers/ # Controladores de la API
├── middleware/ # Middleware personalizado
│ └── auth.js # Middleware de autenticación
├── models/ # Modelos de Sequelize
│ └── index.js # Asociaciones entre modelos
├── routes/ # Rutas de la API
├── utils/ # Utilidades
├── public/ # Archivos estáticos
│ └── uploads/ # Archivos subidos
├── .env # Variables de entorno
├── server.js # Punto de entrada de la aplicación
└── package.json # Dependencias y scripts
La aplicación utiliza Sequelize como ORM para interactuar con la base de datos MySQL:
const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USER,
process.env.DB_PASSWORD,
{
host: process.env.DB_HOST,
dialect: 'mysql',
logging: process.env.NODE_ENV === 'development' ? console.log : false,
define: {
timestamps: true,
underscored: false,
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
}
);- Propósito: Usuarios de la plataforma (clientes, negocios, admins)
- Atributos clave:
name,email,password,role,phone,address
- Propósito: Negocios que venden repuestos
- Atributos clave:
business_name,rif,location_lat,location_lng
- Propósito: Repuestos ofrecidos por los negocios
- Atributos clave:
name,oem_code,price,stock,description,part_condition
- Propósito: Categorías de repuestos
- Atributos clave:
name,description,parent_id
- Propósito: Jerarquía de información de vehículos
- Relaciones: Marca → Modelo → Vehículo
- Propósito: Órdenes de compra y pagos
- Atributos clave: Estado de orden, métodos de pago, montos
Autenticación basada en JWT con control de acceso por roles:
- protect: Verifica token JWT válido
- authorize: Verifica permisos de rol de usuario
// Ejemplo de uso
router.get('/ruta-protegida', protect, authorize('admin'), controllerFunction);POST /api/auth/register # Registro de usuario
POST /api/auth/login # Inicio de sesión
GET /api/spare-parts # Obtener todos los repuestos
GET /api/spare-parts/:id # Obtener repuesto específico
GET /api/businesses # Obtener todos los negocios
GET /api/categories # Obtener todas las categorías
GET /api/brands # Obtener todas las marcas
GET /api/auth/me # Obtener usuario actual (autenticación requerida)
POST /api/spare-parts # Crear repuesto (rol negocio)
PUT /api/spare-parts/:id # Actualizar repuesto (propietario/admin)
DELETE /api/spare-parts/:id # Eliminar repuesto (propietario/admin)
POST /api/orders # Crear orden (autenticación requerida)
GET /api/orders/my-orders # Obtener órdenes del usuario (autenticación requerida)
- Node.js 18+
- MySQL 8.0+
- npm o yarn
-
Clonar el repositorio
git clone https://github.com/bufferring/carfix-api.git cd carfix-api -
Instalar dependencias
npm install
-
Configuración del entorno
cp .env.example .env # Editar .env con tu configuración -
Configuración de la base de datos
# Crear base de datos mysql -u root -p < carfix.sql # Ejecutar migraciones (si se usan migraciones) npm run migrate
-
Iniciar la aplicación
# Desarrollo npm run dev # Producción npm start
curl -X POST http://localhost:5001/api/auth/register \
-H "Content-Type: application/json" \
-d '{"name":"Juan Pérez","email":"juan@ejemplo.com","password":"contraseña123","role":"customer"}'curl -X POST http://localhost:5001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"juan@ejemplo.com","password":"contraseña123"}'curl -X POST http://localhost:5001/api/spare-parts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TU_TOKEN_JWT" \
-d '{"name":"Filtro de Aceite","category_id":1,"price":25.99,"stock":10}'NODE_ENV=development
PORT=5001
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=tu_contraseña
DB_NAME=carfix
JWT_SECRET=tu_secreto_jwt
JWT_EXPIRE=30dOpción 1: Render + Railway
- Base de datos: Railway MySQL
- Backend: Render Web Service
Opción 2: Heroku + JawsDB
- Base de datos: JawsDB MySQL Add-on
- Backend: Heroku Dyno
Stack frontend recomendado:
- React.js con TypeScript
- React Router para navegación
- Axios para llamadas a la API
- Tailwind CSS para estilos
- React Query para gestión de estado del servidor
- License: MIT License
- API Documentation: Available in this README
- Contributing: Contributing Guidelines
Buffer Ring - Building innovative software solutions
- 🌐 GitHub: @bufferring
- 💼 Projects: Specialized in marketplace platforms and automotive solutions
- 🎯 Mission: Creating robust, scalable, and user-friendly software solutions
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📧 Contact: Through Buffer Ring GitHub organization
⭐ Star this repository if you find it useful!
Made with ❤️ by Buffer Ring
CarFix is a trademark of Buffer Ring Organization. All rights reserved.