Skip to content

Liseu1/Cenownik

Repository files navigation

Cenownik

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.

Technologie

  • Framework: NestJS
  • Baza danych: PostgreSQL
  • ORM: Prisma
  • Scraping: Puppeeteer extra + stealth plugin
  • Mailing: Nodemailer + EJS
  • Dokumentacja: Swagger

Funkcjonalności wg metody MoSCoW

M – Must have (Wymagane)

Zapisywanie danych do bazy danych (link do oferty, cena docelowa)

  • 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.

Scrapowanie cen z podanych linków

Implementacja: PriceScraperService.


S – Should have (Powinny być)

Wysyłanie powiadomień mailowych

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

Konfigurowalna częstotliwość scrapowania

Implementacja: Każda oferta w bazie danych posiada pole checkInterval (w sekundach) oraz nextCheckAt.

  • Serwis PriceMonitorService wykorzystuje Cron'a , który uruchamia się co minutę.
  • Algorytm pobiera z bazy tylko te oferty, których czas nextCheckAt już minął, co pozwala na indywidualne ustawienie częstotliwości odświeżania dla każdego produktu osobno (np. co 5 minut lub co godzinę).

C – Could have (Opcjonalne)

Logowanie użytkowników – aby wiedzieć, komu wysłać maila

Implementacja: brak - maile wysyłamy po userId przypisanym do oferty

Historia cen wraz z datami osiągnięcia progów

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ę.

W – Want (Na przyszłość)

Pingowanie / powiadomienia na Discordzie

Implementacja: brak


Dokumentacja

Projekt posiada automatycznie generowaną dokumentację przez Swagger'a

Po uruchomieniu aplikacji dokumentacja dostępna jest pod adresem: http://localhost:3000/api

Jak uruchomić?

  1. Zainstaluj zależności:

    npm install
    
  2. 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"
    
  3. Uruchom migracje bazy danych:

    npx prisma migrate dev
    
  4. Uruchom aplikację:

    npm run start
    

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors