Skip to content

Commit c7c1460

Browse files
authored
Merge pull request #15
Delete user
2 parents 0066731 + f2c266f commit c7c1460

File tree

4 files changed

+60
-1
lines changed

4 files changed

+60
-1
lines changed

src/main/java/dev/mikablondo/hibernate_reactive_test/controller/UserController.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package dev.mikablondo.hibernate_reactive_test.controller;
22

3-
import dev.mikablondo.hibernate_reactive_test.services.UserService;
43
import dev.mikablondo.hibernate_reactive_test.dto.User;
4+
import dev.mikablondo.hibernate_reactive_test.services.UserService;
55
import io.smallrye.mutiny.Multi;
66
import io.smallrye.mutiny.Uni;
77
import lombok.RequiredArgsConstructor;
88
import org.springframework.http.HttpStatus;
99
import org.springframework.http.ResponseEntity;
1010
import org.springframework.web.bind.annotation.*;
1111

12+
import java.util.UUID;
13+
1214
/**
1315
* This class is a REST controller for managing User entities.
1416
* It provides an endpoint to retrieve all users from the database.
@@ -31,4 +33,17 @@ public Uni<ResponseEntity<Void>> createUser(@RequestBody User user) {
3133
return userService.createUser(user)
3234
.map(v -> ResponseEntity.status(HttpStatus.CREATED).build());
3335
}
36+
37+
@DeleteMapping("/{id}")
38+
public Uni<ResponseEntity<Void>> deleteUser(@PathVariable String id) {
39+
try {
40+
UUID uuid = UUID.fromString(id);
41+
return userService.deleteUser(uuid)
42+
.map(deleted -> deleted
43+
? ResponseEntity.status(HttpStatus.NO_CONTENT).build()
44+
: ResponseEntity.status(HttpStatus.NOT_FOUND).build());
45+
} catch (IllegalArgumentException e) {
46+
return Uni.createFrom().item(ResponseEntity.status(HttpStatus.BAD_REQUEST).build());
47+
}
48+
}
3449
}

src/main/java/dev/mikablondo/hibernate_reactive_test/dto/User.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import lombok.Builder;
55
import lombok.Data;
66

7+
import java.util.UUID;
8+
79
/**
810
* This class represents a User DTO (Data Transfer Object).
911
* It contains fields for the user's name, surname, age, and profession.
@@ -14,6 +16,7 @@
1416
@Builder
1517
@AllArgsConstructor
1618
public class User {
19+
private UUID id;
1720
private String nom;
1821
private String prenom;
1922
private int age;

src/main/java/dev/mikablondo/hibernate_reactive_test/repository/UserRepository.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.hibernate.reactive.mutiny.Mutiny;
88
import org.springframework.stereotype.Repository;
99

10+
import java.util.UUID;
11+
1012
/**
1113
* This class is a repository for managing UserEntity objects.
1214
* It uses Hibernate Reactive to perform database operations in a non-blocking way.
@@ -43,4 +45,32 @@ public Uni<Void> createUser(UserEntity entity) {
4345
.onFailure().invoke((Throwable t) -> System.err.println("Failed to create user: " + t.getMessage()))
4446
).replaceWithVoid();
4547
}
48+
49+
/**
50+
* This method retrieves a user by its UUID from the database.
51+
*
52+
* @param uuid the UUID of the user to be retrieved
53+
* @return a Uni<UserEntity> containing the user entity if found, or null if not found
54+
*/
55+
public Uni<UserEntity> findById(UUID uuid) {
56+
return sessionFactory.withTransaction((session, tx) ->
57+
session.find(UserEntity.class, uuid)
58+
.onItem().invoke(user -> System.out.println("User found: " + user))
59+
.onFailure().invoke((Throwable t) -> System.err.println("Failed to find user: " + t.getMessage()))
60+
);
61+
}
62+
63+
/**
64+
* This method deletes a user by its ID from the database.
65+
*
66+
* @param userId the ID of the user to be deleted
67+
* @return a Uni<Boolean> indicating if user is deleted successfully or not
68+
*/
69+
public Uni<Boolean> deleteUser(UUID userId) {
70+
return sessionFactory.withTransaction((session, tx) ->
71+
session.find(UserEntity.class, userId)
72+
.onItem().ifNotNull().transformToUni(user -> session.remove(user).replaceWith(true))
73+
.onItem().ifNull().continueWith(false)
74+
);
75+
}
4676
}

src/main/java/dev/mikablondo/hibernate_reactive_test/services/UserService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class UserService {
2929
public Multi<User> getAllUsers() {
3030
return userRepository.findAll()
3131
.onItem().transform(userEntity -> User.builder()
32+
.id(userEntity.getId())
3233
.nom(userEntity.getNom())
3334
.prenom(userEntity.getPrenom())
3435
.age(userEntity.getAge())
@@ -51,4 +52,14 @@ public Uni<Void> createUser(User user) {
5152
.metier(user.getMetier())
5253
.build());
5354
}
55+
56+
/**
57+
* This method deletes a user from the database.
58+
*
59+
* @param id the ID of the user to be deleted
60+
* @return a Uni<Boolean> indicating if user is deleted successfully or not
61+
*/
62+
public Uni<Boolean> deleteUser(UUID id) {
63+
return userRepository.deleteUser(id);
64+
}
5465
}

0 commit comments

Comments
 (0)