123 lines
3.1 KiB
Markdown
123 lines
3.1 KiB
Markdown
# Price Comparison PWA Implementation
|
|
|
|
This repository contains the implementation of a price comparison PWA with NestJS backend and PostgreSQL database, as outlined in the improvement plan.
|
|
|
|
## Implementation Details
|
|
|
|
The implementation follows the structure outlined in the improvement plan, with the following components:
|
|
|
|
### Backend (NestJS)
|
|
|
|
The backend is implemented using NestJS and includes the following modules:
|
|
|
|
1. **Product Module**
|
|
- API endpoints for products
|
|
- Search and filtering functionality
|
|
- CRUD operations
|
|
|
|
2. **Price Module**
|
|
- Price history tracking
|
|
- Price comparison functionality
|
|
- Discount calculations
|
|
|
|
3. **Source Module**
|
|
- Source metadata management
|
|
- Product listing by source
|
|
|
|
4. **Scraper Module**
|
|
- HTML parsing using cheerio
|
|
- Data transformation
|
|
- Scheduled scraping jobs
|
|
|
|
5. **User Module**
|
|
- Watchlist functionality
|
|
- Price drop notifications
|
|
|
|
### Database (PostgreSQL)
|
|
|
|
The database schema includes the following models:
|
|
|
|
1. **Product**
|
|
- Basic product information
|
|
- Category and description
|
|
- Availability status
|
|
|
|
2. **Price**
|
|
- Regular and discounted prices
|
|
- Promotion information
|
|
- Historical price tracking
|
|
|
|
3. **Source**
|
|
- Data source information
|
|
- Last scraped timestamp
|
|
|
|
4. **User**
|
|
- User information
|
|
- Watchlist and notifications
|
|
|
|
5. **WatchlistItem**
|
|
- User-product relationship for watchlist
|
|
|
|
6. **Notification**
|
|
- Price drop notification configuration
|
|
|
|
### API Endpoints
|
|
|
|
The API provides the following endpoints:
|
|
|
|
1. **Products**
|
|
- `GET /products` - List all products with pagination
|
|
- `GET /products/:id` - Get product details
|
|
- `GET /products/search` - Search products by name/category
|
|
|
|
2. **Prices**
|
|
- `GET /prices/product/:id` - Get all prices for a product
|
|
- `GET /prices/compare/:ids` - Compare prices for multiple products
|
|
- `GET /prices/history/:id` - Get price history for a product
|
|
|
|
3. **Sources**
|
|
- `GET /sources` - List all data sources
|
|
- `GET /sources/:id` - Get source details
|
|
- `GET /sources/:id/products` - Get products from a specific source
|
|
|
|
4. **User Features**
|
|
- `GET /users/:userId/watchlist` - Get user's watchlist
|
|
- `POST /users/:userId/watchlist` - Add product to watchlist
|
|
- `DELETE /users/:userId/watchlist/:productId` - Remove product from watchlist
|
|
- `GET /users/:userId/notifications` - Get user's notifications
|
|
- `POST /users/:userId/notifications` - Configure price drop notification
|
|
- `DELETE /users/:userId/notifications/:productId` - Remove notification
|
|
|
|
## Getting Started
|
|
|
|
1. Clone the repository
|
|
2. Install dependencies:
|
|
```
|
|
cd price-compare-api
|
|
npm install
|
|
cd ../app
|
|
npm install
|
|
```
|
|
3. Set up the database:
|
|
```
|
|
cd price-compare-api
|
|
npx prisma migrate dev
|
|
```
|
|
4. Start the backend:
|
|
```
|
|
cd price-compare-api
|
|
npm run start:dev
|
|
```
|
|
5. Start the frontend:
|
|
```
|
|
cd app
|
|
npm run dev
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. Implement authentication and authorization
|
|
2. Add more data sources
|
|
3. Enhance the frontend with more features
|
|
4. Implement push notifications for price drops
|
|
5. Add analytics and reporting |