Ein leichtgewichtiger E‑Commerce Backend Dienst auf Basis von Spring Boot. Das Projekt zeigt eine saubere Schichtenarchitektur mit Fokus auf klaren Domänenmodellen, stabilen API‑Verträgen und praxistauglicher Sicherheit.
- 🧭 Einfache und nachvollziehbare Referenz für ein E‑Commerce Backend schaffen
- 🧩 Saubere Trennung von Web, Geschäftslogik und Persistenz
- 🔐 Sichere Authentifizierung und Autorisierung mit Rollen
- Erweiterbare Architektur für Katalog, Warenkorb und Bestellung
- User authentication and authorization
- Product management
- Cart management
- Order management
- JWT-based authentication
- H2 in-memory database for development and testing
OneShop stellt REST Endpunkte für Authentifizierung, Produktkatalog, Warenkorb und Bestellungen bereit. Die Anwendung verwendet Spring Boot, Spring Security mit JWT, Spring Data JPA für den Datenzugriff und H2 für lokale Entwicklung. Das Ziel ist ein klarer Codepfad vom HTTP Request über Controller und Services bis zur Datenbank.
- Spring Boot mit klarer Layering Struktur: Controller, Service, Repository, Model
- Spring Security mit JWT für stateless Authentifizierung und Rollenprüfung
- Spring Data JPA mit abgeleiteten Methoden wie
findByEmailundexistsByEmail - Domänenmodell mit JPA Beziehungen: One‑to‑One, One‑to‑Many, Many‑to‑Many
- EntityGraph und Lazy Loading zur Reduktion von N+1 Abfragen
- DTOs und Validierung für stabile API‑Verträge
- Transaktionsmanagement mit
@Transactional - H2 Datenbank für lokale Entwicklung und schnelle Tests
Kern Domäne
- 🛍️ Katalog mit Product und Category
- 🛒 Warenkorb mit Cart und CartItem je User
- 📦 Bestellung mit Order und OrderItem
- 👤 Identität mit User und Role
Beispiele für typische Endpunkte. Exakte Pfade können je nach Code leicht variieren.
- Auth:
POST /auth/register,POST /auth/login - Produkte:
GET /products,GET /products/{id} - Warenkorb:
GET /cart,POST /cart/items,DELETE /cart/items/{productId} - Bestellungen:
POST /orders,GET /orders,GET /orders/{id}
- JWT Bearer Token in
AuthorizationHeader - Rollenbasiert:
ROLE_USER,ROLE_ADMIN - Passwort Hashing mit BCrypt oder Argon2
- Method Security optional auf Service Ebene aktivierbar
Wesentliche JPA Entities
Usermitemailals fachliche Kennung und Beziehungen zuCart,Order,RoleProductundCategoryCartundCartItemOrderundOrderItem
Beispiel Repositories mit Spring Data JPA
-
UserRepository extends JpaRepository<User, Long>Optional<User> findByEmailIgnoreCase(String email)boolean existsByEmail(String email)
-
ProductRepositorymit Paging und Sortierung
- Eindeutige und indizierte E‑Mail in der Datenbank
Optional<T>stattnullin Repository Signaturen- Pagination mit
Pageablefür Listenendpunkte - EntityGraph oder Join Fetch für gezieltes Mitladen
- DTOs statt Entities in API Responses
- Transaktionen auf Service Ebene
- Konsistenzhelfer in Entities für bidirektionale Beziehungen
Voraussetzungen
- JDK 17 oder höher
- Maven oder Gradle
Schritte
-
Repository klonen
-
Konfiguration in
application.propertiesprüfen -
Starten
- Maven:
./mvnw spring-boot:run - Gradle:
./gradlew bootRun
- Maven:
-
API testen mit HTTP Client deiner Wahl
Standard Konfiguration
- H2 In Memory Datenbank für lokale Entwicklung
- H2 Console optional aktivierbar in
application.properties
Wichtige Einstellungen in application.properties
- Datenquelle für
H2oder produktive Datenbank wie Postgres - JWT Eigenschaften wie Secret und Gültigkeitsdauer
- CORS Ursprünge für das Frontend