Skip to content

Commit 809b23c

Browse files
committed
Init post language
1 parent 454981c commit 809b23c

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package dev.mikablondo.hibernate_reactive_test.controller;
2+
3+
import dev.mikablondo.hibernate_reactive_test.dto.Language;
4+
import dev.mikablondo.hibernate_reactive_test.services.LanguageService;
5+
import io.smallrye.mutiny.Uni;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.http.HttpStatus;
8+
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;
13+
14+
/**
15+
* This class is a REST controller for managing Language entities.
16+
* It provides an endpoint to retrieve all languages from the database.
17+
* The controller is annotated with @RestController to indicate that it is a Spring MVC controller.
18+
*/
19+
@RestController
20+
@RequestMapping("/api/v1/languages")
21+
@RequiredArgsConstructor
22+
public class LanguageController {
23+
24+
private final LanguageService languageService;
25+
26+
@PostMapping
27+
public Uni<ResponseEntity<Void>> createLanguage(@RequestBody Language language) {
28+
return languageService.createLanguage(language)
29+
.map(v -> ResponseEntity.status(HttpStatus.CREATED).build());
30+
}
31+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package dev.mikablondo.hibernate_reactive_test.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
7+
import java.util.Set;
8+
import java.util.UUID;
9+
10+
/**
11+
* This class represents a Language DTO (Data Transfer Object).
12+
* It contains fields for the language's ID, name, and a set of associated User entities.
13+
* The class is annotated with @Builder to enable the builder pattern for object creation.
14+
* It is also annotated with @Data to generate getters, setters, equals, hashCode, and toString methods.
15+
*/
16+
@Builder
17+
@Data
18+
@AllArgsConstructor
19+
public class Language {
20+
private UUID id;
21+
private String nom;
22+
private Set<User> utilisateurs;
23+
}

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

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

33
import jakarta.persistence.*;
4+
import lombok.Builder;
45

56
import java.util.HashSet;
67
import java.util.Set;
@@ -13,6 +14,7 @@
1314
* It is also annotated with @Table to specify the table name in the database.
1415
*/
1516
@Entity
17+
@Builder
1618
@Table(name = "langage")
1719
public class LanguageEntity {
1820
@Id
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.mikablondo.hibernate_reactive_test.repository;
2+
3+
import dev.mikablondo.hibernate_reactive_test.entity.LanguageEntity;
4+
import io.smallrye.mutiny.Uni;
5+
import lombok.RequiredArgsConstructor;
6+
import org.hibernate.reactive.mutiny.Mutiny;
7+
import org.springframework.stereotype.Repository;
8+
9+
@Repository
10+
@RequiredArgsConstructor
11+
public class LanguageRepository {
12+
13+
private final Mutiny.SessionFactory sessionFactory;
14+
15+
/**
16+
* This method creates a new language in the database.
17+
*
18+
* @param entity the LanguageEntity object to be created
19+
* @return a Uni<Void> indicating the completion of the operation
20+
*/
21+
public Uni<Void> createLanguage(LanguageEntity entity) {
22+
return sessionFactory.withTransaction((session, tx) ->
23+
session.persist(entity)
24+
.onItem().invoke(() -> System.out.println("Language created: " + entity))
25+
.onFailure().invoke((Throwable t) -> System.err.println("Failed to create language: " + t.getMessage()))
26+
);
27+
}
28+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package dev.mikablondo.hibernate_reactive_test.services;
2+
3+
import dev.mikablondo.hibernate_reactive_test.dto.Language;
4+
import dev.mikablondo.hibernate_reactive_test.entity.LanguageEntity;
5+
import dev.mikablondo.hibernate_reactive_test.repository.LanguageRepository;
6+
import io.smallrye.mutiny.Uni;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
10+
import java.util.UUID;
11+
12+
/**
13+
* This class is a service for managing Language entities.
14+
* It provides methods to interact with the Language repository.
15+
* The service is annotated with @Service to indicate that it is a Spring service.
16+
*/
17+
@Service
18+
@RequiredArgsConstructor
19+
public class LanguageService {
20+
21+
private final LanguageRepository languageRepository;
22+
23+
/**
24+
* This method creates a new language in the database.
25+
*
26+
* @param language the Language DTO object to be created
27+
* @return a Uni<Void> indicating the completion of the operation
28+
*/
29+
public Uni<Void> createLanguage(Language language) {
30+
return languageRepository.createLanguage(LanguageEntity.builder()
31+
.id(UUID.randomUUID())
32+
.nom(language.getNom())
33+
//.utilisateurs() TODO: Set<User> utilisateurs
34+
.build());
35+
}
36+
}

0 commit comments

Comments
 (0)