Aplikacja backendowa napisana w NestJS służąca do automatycznego monitorowania cen produktów w sklepach internetowych (obecnie RTV EURO AGD) i powiadamiania użytkownika o przecenach.
- Framework: NestJS
- Baza danych: PostgreSQL
- ORM: Prisma
- Scraping: Puppeeteer extra + stealth plugin
- Mailing: Nodemailer + EJS
- Dokumentacja: Swagger
- przechowywanie linku do oferty
- przechowywanie ustawionej ceny docelowej
Implementacja:
Model Offer, przechowujący informacje:
link– adres URL do śledzonego produktu (walidowany pod kątem domeny sklepu).priceThreshold– cena docelowa, poniżej której wysyłamy maila.
Implementacja:
PriceScraperService.
Implementacja:
MailModule wykorzystujący nodemailer.
- Używamy szablonów EJS (
price-alert.ejs), aby generować wiadomości HTML zawierające nazwę produktu, nową cenę oraz link do sklepu. - Do testowania korzystałem z
Ethereal Mail
Implementacja:
Każda oferta w bazie danych posiada pole checkInterval (w sekundach) oraz nextCheckAt.
- Serwis
PriceMonitorServicewykorzystujeCron'a , który uruchamia się co minutę. - Algorytm pobiera z bazy tylko te oferty, których czas
nextCheckAtjuż minął, co pozwala na indywidualne ustawienie częstotliwości odświeżania dla każdego produktu osobno (np. co 5 minut lub co godzinę).
Implementacja: brak - maile wysyłamy po userId przypisanym do oferty
Implementacja:
Stworzono osobną tabelę PriceHistory oraz serwis PriceHistoryService.
- Każde udane pobranie ceny przez scrapera tworzy nowy rekord w historii, zawierający: cenę, datę sprawdzenia oraz flagę
thresholdMet(czy cena była poniżej progu), co pozwala na późniejszą analizę.
Implementacja: brak
Projekt posiada automatycznie generowaną dokumentację przez Swagger'a
Po uruchomieniu aplikacji dokumentacja dostępna jest pod adresem:
http://localhost:3000/api
-
Zainstaluj zależności:
npm install -
Skonfiguruj plik
.env, np.:# Baza Danych DATABASE_URL="postgresql://user:password@localhost:5432/cenownik_db" # SMTP MAIL_HOST=smtp.ethereal.email MAIL_PORT=587 MAIL_USER="user" MAIL_PASS="password" -
Uruchom migracje bazy danych:
npx prisma migrate dev -
Uruchom aplikację:
npm run start