Update Wahlthemen authored by Han Hien's avatar Han Hien
## Persistenz ## Persistenz
In diesem Projekt wird die Persistenzschicht durch das `repository`-Paket verwaltet. Dieses Paket enthält die Datenzugriffsschicht-Interfaces, die mit der Datenbank interagieren. Diese Interfaces erweitern die Spring Data JPA Repositories und die CRUD-Operationen.
Hier ist ein Beispiel für ein Repository-Interface:
```java
package com.example.Bark.repository;
import com.example.Bark.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.UUID;
@Repository
public interface PostRepository extends JpaRepository<Post, UUID> {
// Custom query methods can be defined here
}
```
- **`PostRepository`**: Dieses Interface erweitert `JpaRepository` und bietet CRUD-Operationen für `Post`-Entitäten.
-
Die Persistenzschicht ist somit für die Verwaltung der Datenbankoperationen verantwortlich und ermöglicht eine saubere Trennung der Geschäftslogik von den Datenzugriffsoperationen.****
## Schnittstelle ## Schnittstelle
In diesem Projekt sind die Schnittstellen wie folgt umgesetzt:
- **CRUD-Operationen über externe Schnittstelle bereitgestellt**: Die `AuthController`-Klasse bietet CRUD-Operationen über REST-APIs an. Es werden HTTP-Verben verwendet (`@PostMapping` für `login`, `register` und `logout`). Die entsprechenden HTTP-Status-Codes werden ebenfalls zurückgegeben (`200 OK`, `201 Created`, `400 Bad Request`, `401 Unauthorized`, `500 Internal Server Error`).
- **Dokumentation der Schnittstelle**: Die Schnittstellen sind mit Swagger-Dokumentation versehen. Jede Operation ist mit `@Operation` und `@ApiResponses` annotiert, um die Funktionalität und die möglichen Antworten zu beschreiben.
- **Synchronität der Schnittstellen**: Die Schnittstellen sind synchron, da die Methoden in den Controllern direkte Antworten (`ResponseEntity`) zurückgeben, nachdem sie die Anfragen verarbeitet haben.
Hier ist ein Beispiel für die Dokumentation einer Schnittstelle:
```java
@PostMapping("/login")
@Operation(summary = "Authenticate a user", description = "Authenticates the user with their username and password and returns a JWT token if successful.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "User registered successfully"),
@ApiResponse(responseCode = "400", description = "Email or username already exists", content = @Content),
@ApiResponse(responseCode = "401", description = "Invalid username or password", content = @Content),
@ApiResponse(responseCode = "500", description = "Internal server error", content = @Content)})
public ResponseEntity<TokenResponse> login(@Valid @RequestBody LoginRequestDto loginRequestDto) {
// Method implementation
}
```
\ No newline at end of file