☕ JavaStackCloud

1. Demo Proiect: E-Shop Cloud Native

Arhitectură modernă, complet distribuită în Cloud folosind servicii Free Tier.

shop-app.netlify.app
Admin Panel
REALTIME USERS
24
● Firebase Connected
CACHE HITS
85%
⚡ Upstash Redis
OUT OF STOCK
💬

☁️ Infrastructure Stack

  • Frontend Host Netlify
  • Backend Host Render (Docker)
  • Database Neon (Serverless Postgres)
  • Caching Upstash (Redis)
  • Realtime Chat Firebase Firestore
Notă: Toate serviciile de mai sus au planuri gratuite (Free Tier) suficiente pentru acest proiect. Nu este necesar card bancar pentru ele.

2. Cerințe & Punctaj

Structura de notare pentru proiectul final.

Nivel Basic

Nota 8

"Setup Cloud Complet & Securitate"

  • Full Deployment: Aplicația trebuie să fie publică (Frontend pe Netlify conectat la Backend pe Render).
  • Cloud Services: Backend-ul trebuie să comunice cu Neon (Postgres), Upstash (Redis) și Firebase.
  • Role Management: Implementare 2 tipuri de useri:
    • CUSTOMER: Vede produse, are acces la Chat.
    • ADMIN: Poate adăuga/șterge produse (CRUD).
RECOMMENDED

Nivel Avansat

Nota 10

"Logic & Validation & Optimization"

1. Register Flow Robust +1.0p
  • Userii noi primesc automat rolul CUSTOMER.
  • Validare Unicitate: Dacă emailul există deja, backend-ul NU crapă cu eroare 500, ci returnează 400 Bad Request sau 409 Conflict cu mesajul JSON: { "message": "Email already exists" }.
  • Frontend-ul prinde eroarea și afișează un mesaj user-friendly (Toast/Alert), nu eroarea tehnică.
2. Validare Date Detaliată +0.5p

Folosește @Valid în Controller și DTO. Trebuie să returneze 400 Bad Request cu mesaje specifice pentru fiecare încălcare:

  • "Email-ul este invalid."
  • "Parola trebuie să aibă minim 8 caractere."
  • "Parola trebuie să conțină o majusculă și un număr."
3. Postgres Partial Index +0.5p

Optimizare SQL: Produsele cu stock = 0 sunt considerate inactive. Creează un Partial Index în PostgreSQL care indexează doar produsele unde stock > 0.
CREATE INDEX ... WHERE stock > 0;

🧠

✨ Bonus Points: AI Integration +1p Extra

Integrează un LLM (HuggingFace / OpenRouter / Groq) pentru o funcționalitate utilă.

Use Case: "AI Description"

În formularul de "Add Product" (Admin), lângă câmpul Descriere, adaugă un buton "✨ Generate with AI".

  1. Adminul scrie titlul: "Laptop Gaming ASUS ROG Strix".
  2. Apasă butonul. Backend-ul trimite un request securizat către un API AI.
  3. Prompt Backend: "Write a 2-sentence catchy sales pitch for a product named {title}.".
  4. Textarea-ul din React se completează automat cu textul generat.

Detalii Tehnice

Provider

HuggingFace sau OpenRouter.ai Inference API (Ambele au Free Tier).

Security

Cheia API NU trebuie să fie expusă în Frontend. Apelul către AI se face din Spring Boot (Backend).

POST https://openrouter.ai/api/v1/chat/completions
Auth: Bearer sk-or-v1-...
Body: { "model": "mistralai/mistral-7b-instruct", ... }