Skip to content

Commit 37dd11b

Browse files
committed
Return users in Get Languages
1 parent 969fcb6 commit 37dd11b

File tree

5 files changed

+59
-4
lines changed

5 files changed

+59
-4
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import dev.mikablondo.hibernate_reactive_test.dto.Language;
44
import dev.mikablondo.hibernate_reactive_test.services.LanguageService;
5+
import io.smallrye.mutiny.Multi;
56
import io.smallrye.mutiny.Uni;
67
import lombok.RequiredArgsConstructor;
78
import org.springframework.http.HttpStatus;
89
import org.springframework.http.ResponseEntity;
9-
import org.springframework.web.bind.annotation.PostMapping;
10-
import org.springframework.web.bind.annotation.RequestBody;
11-
import org.springframework.web.bind.annotation.RequestMapping;
12-
import org.springframework.web.bind.annotation.RestController;
10+
import org.springframework.web.bind.annotation.*;
1311

1412
/**
1513
* This class is a REST controller for managing Language entities.
@@ -23,6 +21,11 @@ public class LanguageController {
2321

2422
private final LanguageService languageService;
2523

24+
@GetMapping
25+
public Multi<Language> getAllLanguages() {
26+
return languageService.getAllLanguages();
27+
}
28+
2629
@PostMapping
2730
public Uni<ResponseEntity<Void>> createLanguage(@RequestBody Language language) {
2831
return languageService.createLanguage(language)

src/main/java/dev/mikablondo/hibernate_reactive_test/entity/LanguageEntity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package dev.mikablondo.hibernate_reactive_test.entity;
22

33
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
45
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
58

69
import java.util.HashSet;
710
import java.util.Set;
@@ -15,6 +18,9 @@
1518
*/
1619
@Entity
1720
@Builder
21+
@Getter
22+
@NoArgsConstructor
23+
@AllArgsConstructor
1824
@Table(name = "langage")
1925
public class LanguageEntity {
2026
@Id

src/main/java/dev/mikablondo/hibernate_reactive_test/entity/UserLanguageEntity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package dev.mikablondo.hibernate_reactive_test.entity;
22

33
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
47

58
/**
69
* This class represents a UserLanguage entity in the database.
@@ -9,6 +12,9 @@
912
* It is also annotated with @Table to specify the table name in the database.
1013
*/
1114
@Entity
15+
@Getter
16+
@NoArgsConstructor
17+
@AllArgsConstructor
1218
@Table(name = "utilisateur_langage")
1319
@IdClass(UserLanguageId.class)
1420
public class UserLanguageEntity {

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.mikablondo.hibernate_reactive_test.repository;
22

33
import dev.mikablondo.hibernate_reactive_test.entity.LanguageEntity;
4+
import io.smallrye.mutiny.Multi;
45
import io.smallrye.mutiny.Uni;
56
import lombok.RequiredArgsConstructor;
67
import org.hibernate.reactive.mutiny.Mutiny;
@@ -25,4 +26,19 @@ public Uni<Void> createLanguage(LanguageEntity entity) {
2526
.onFailure().invoke((Throwable t) -> System.err.println("Failed to create language: " + t.getMessage()))
2627
);
2728
}
29+
30+
/**
31+
* This method retrieves all languages from the database.
32+
*
33+
* @return a Multi stream of LanguageEntity objects
34+
*/
35+
public Multi<LanguageEntity> getAllLanguages() {
36+
return sessionFactory.withSession(session ->
37+
session.createQuery("FROM LanguageEntity", LanguageEntity.class)
38+
.getResultList()
39+
.onItem().transformToMulti(Multi.createFrom()::iterable)
40+
.onItem().call(language -> session.fetch(language.getUtilisateurs()))
41+
.collect().asList()
42+
).onItem().transformToMulti(Multi.createFrom()::iterable);
43+
}
2844
}

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package dev.mikablondo.hibernate_reactive_test.services;
22

33
import dev.mikablondo.hibernate_reactive_test.dto.Language;
4+
import dev.mikablondo.hibernate_reactive_test.dto.User;
45
import dev.mikablondo.hibernate_reactive_test.entity.LanguageEntity;
56
import dev.mikablondo.hibernate_reactive_test.repository.LanguageRepository;
7+
import io.smallrye.mutiny.Multi;
68
import io.smallrye.mutiny.Uni;
79
import lombok.RequiredArgsConstructor;
810
import org.springframework.stereotype.Service;
911

1012
import java.util.UUID;
13+
import java.util.stream.Collectors;
1114

1215
/**
1316
* This class is a service for managing Language entities.
@@ -32,4 +35,25 @@ public Uni<Void> createLanguage(Language language) {
3235
.nom(language.getNom())
3336
.build());
3437
}
38+
39+
/**
40+
* This method retrieves all languages from the database.
41+
*
42+
* @return a Multi<Language> containing all languages
43+
*/
44+
public Multi<Language> getAllLanguages() {
45+
return languageRepository.getAllLanguages()
46+
.onItem().transform(languageEntity -> Language.builder()
47+
.id(languageEntity.getId())
48+
.nom(languageEntity.getNom())
49+
.utilisateurs(languageEntity.getUtilisateurs()
50+
.stream()
51+
.map(userLanguage -> User.builder()
52+
.id(userLanguage.getUtilisateur().getId())
53+
.nom(userLanguage.getUtilisateur().getNom())
54+
.age(userLanguage.getUtilisateur().getAge())
55+
.build())
56+
.collect(Collectors.toSet()))
57+
.build());
58+
}
3559
}

0 commit comments

Comments
 (0)