From 3ad264f278bb1e83cd85d306724591464a13234d Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Wed, 29 May 2024 17:00:38 +0200 Subject: [PATCH 01/21] initial commit forum --- .../knowledgecentrebackend/Post/Post.java | 47 +++++++++++++++++++ .../Post/PostController.java | 26 ++++++++++ .../Post/PostRepository.java | 5 ++ .../Post/PostService.java | 21 +++++++++ .../knowledgecentrebackend/User/User.java | 39 +++++++++++++++ .../User/UserRepository.java | 6 +++ .../config/WebConfig.java | 18 +++++++ src/main/resources/application.properties | 1 + .../V1__init_page_and_modifications.sql | 7 +++ 9 files changed, 170 insertions(+) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/Post.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/User/User.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java new file mode 100644 index 0000000..80e7dd8 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java @@ -0,0 +1,47 @@ +package org.autol.knowledgecentrebackend.Post; + +import jakarta.persistence.*; +import org.autol.knowledgecentrebackend.User.User; + +@Entity +public class Post { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String title; + private String content; + @ManyToOne + private User author; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public User getAuthor() { + return author; + } + + public void setAuthor(User author) { + this.author = author; + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java new file mode 100644 index 0000000..16c93ef --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java @@ -0,0 +1,26 @@ +package org.autol.knowledgecentrebackend.Post; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/posts") +public class PostController { + @Autowired + private PostService postService; + + @GetMapping + public List getAllPosts() { + return postService.getAllPosts(); + } + + @PostMapping + public Post createPost(@RequestBody Post post) { + System.out.println("Post received: " + post); + return postService.createPost(post); + } +} + + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java new file mode 100644 index 0000000..f54a19f --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java @@ -0,0 +1,5 @@ +package org.autol.knowledgecentrebackend.Post; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PostRepository extends JpaRepository {} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java new file mode 100644 index 0000000..8d543b2 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java @@ -0,0 +1,21 @@ +package org.autol.knowledgecentrebackend.Post; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PostService { + @Autowired + private PostRepository postRepository; + + public List getAllPosts() { + return postRepository.findAll(); + } + + public Post createPost(Post post) { + return postRepository.save(post); + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/User/User.java b/src/main/java/org/autol/knowledgecentrebackend/User/User.java new file mode 100644 index 0000000..0da9464 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/User/User.java @@ -0,0 +1,39 @@ +package org.autol.knowledgecentrebackend.User; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String username; + private String password; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java b/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java new file mode 100644 index 0000000..b1ad90c --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java @@ -0,0 +1,6 @@ +package org.autol.knowledgecentrebackend.User; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository {} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java new file mode 100644 index 0000000..c7131e4 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java @@ -0,0 +1,18 @@ +package org.autol.knowledgecentrebackend.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("http://localhost:3000") // L'adresse de votre frontend + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); + } +} + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 45462cb..14e3a28 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -4,6 +4,7 @@ spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=myuser spring.datasource.password=secret spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.jpa.hibernate.ddl-auto=update spring.flyway.enabled=true spring.flyway.locations=classpath:db/migration diff --git a/src/main/resources/db/migration/V1__init_page_and_modifications.sql b/src/main/resources/db/migration/V1__init_page_and_modifications.sql index 5f96822..7f94264 100644 --- a/src/main/resources/db/migration/V1__init_page_and_modifications.sql +++ b/src/main/resources/db/migration/V1__init_page_and_modifications.sql @@ -1,3 +1,10 @@ +CREATE TABLE post ( + id BIGINT AUTO_INCREMENT PRIMARY KEY, + title VARCHAR(255) NOT NULL, + content TEXT NOT NULL +); + + create table Course ( course_id int auto_increment From dbb23fe6c20b3fbd4d74ec1eddebf1253e619337 Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Wed, 29 May 2024 17:58:20 +0200 Subject: [PATCH 02/21] ajout des commentaires --- .../Comment/Comment.java | 42 +++++++++++++++++++ .../Comment/CommentController.java | 24 +++++++++++ .../Comment/CommentRepository.java | 10 +++++ .../Comment/CommentService.java | 21 ++++++++++ 4 files changed, 97 insertions(+) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java new file mode 100644 index 0000000..00ac0dd --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java @@ -0,0 +1,42 @@ +package org.autol.knowledgecentrebackend.Comment; + +import jakarta.persistence.*; +import org.autol.knowledgecentrebackend.Post.Post; + + +@Entity +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String content; + + @ManyToOne + @JoinColumn(name = "post_id") + private Post post; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Post getPost() { + return post; + } + + public void setPost(Post post) { + this.post = post; + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java new file mode 100644 index 0000000..48a39c9 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java @@ -0,0 +1,24 @@ +package org.autol.knowledgecentrebackend.Comment; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/comments") +public class CommentController { + @Autowired + private CommentService commentService; + + @GetMapping("/{postId}") + public List getCommentsByPostId(@PathVariable Long postId) { + return commentService.getCommentsByPostId(postId); + } + + @PostMapping + public Comment createComment(@RequestBody Comment comment) { + return commentService.saveComment(comment); + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java new file mode 100644 index 0000000..a14b753 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java @@ -0,0 +1,10 @@ +package org.autol.knowledgecentrebackend.Comment; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + List findByPostId(Long postId); +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java new file mode 100644 index 0000000..fdc8b1d --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java @@ -0,0 +1,21 @@ +package org.autol.knowledgecentrebackend.Comment; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CommentService { + @Autowired + private CommentRepository commentRepository; + + public List getCommentsByPostId(Long postId) { + return commentRepository.findByPostId(postId); + } + + public Comment saveComment(Comment comment) { + return commentRepository.save(comment); + } +} + From 15e3c46540b59dbacb6fb273412a13fa982618a6 Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Wed, 29 May 2024 18:03:12 +0200 Subject: [PATCH 03/21] added post category --- .../resources/db/migration/V1__init_tables.sql | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index bce702f..8dccb9a 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -24,6 +24,13 @@ create table Page primary key ); +create table Type_Post +( + type_post_id int auto_increment + primary key, + label_type_post varchar(255) not null +); + create table Title_Course ( title_id_course int auto_increment @@ -59,13 +66,16 @@ create table Post create table Initial_Post ( - id_post int not null + id_post int not null primary key, - id_page int not null, + id_page int not null, + id_type_post int null, constraint Initial_Post_Page_page_id_fk foreign key (id_page) references Page (page_id), constraint Initial_Post_Post_post_id_fk - foreign key (id_post) references Post (post_id) + foreign key (id_post) references Post (post_id), + constraint Initial_Post_Tag_Post_tag_post_id_fk + foreign key (id_type_post) references Type_Post (type_post_id) ); create table Response_Post From 9614db2320f4d45856d199674d12a82be616b8ec Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Thu, 30 May 2024 08:28:58 +0200 Subject: [PATCH 04/21] le forum minimal --- .../knowledgecentrebackend/Post/PostController.java | 13 +++++++++++++ .../knowledgecentrebackend/Post/PostService.java | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java index 16c93ef..6313017 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java @@ -1,9 +1,12 @@ package org.autol.knowledgecentrebackend.Post; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("/api/posts") @@ -21,6 +24,16 @@ public Post createPost(@RequestBody Post post) { System.out.println("Post received: " + post); return postService.createPost(post); } + + @GetMapping("/{id}") + public ResponseEntity getPostById(@PathVariable Long id) { + Optional post = postService.findPostById(id); + if (post.isPresent()) { + return ResponseEntity.ok(post.get()); + } else { + return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + } + } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java index 8d543b2..a5d0305 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class PostService { @@ -17,5 +18,9 @@ public List getAllPosts() { public Post createPost(Post post) { return postRepository.save(post); } + + public Optional findPostById(Long id) { + return postRepository.findById(id); + } } From 4326f8355e47f06d20964f5b9332103493986ad1 Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Thu, 30 May 2024 10:40:18 +0200 Subject: [PATCH 05/21] LONGTEXT --- src/main/java/org/autol/knowledgecentrebackend/Post/Post.java | 1 + .../resources/db/migration/V1__init_page_and_modifications.sql | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java index 80e7dd8..4bc276d 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java @@ -9,6 +9,7 @@ public class Post { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; + @Column(columnDefinition = "LONGTEXT") private String content; @ManyToOne private User author; diff --git a/src/main/resources/db/migration/V1__init_page_and_modifications.sql b/src/main/resources/db/migration/V1__init_page_and_modifications.sql index 7f94264..863f0c3 100644 --- a/src/main/resources/db/migration/V1__init_page_and_modifications.sql +++ b/src/main/resources/db/migration/V1__init_page_and_modifications.sql @@ -1,7 +1,7 @@ CREATE TABLE post ( id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, - content TEXT NOT NULL + content LONGTEXT NOT NULL ); From 1ef13df4f551c2ffefe2b60965ec3e9635894048 Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Thu, 30 May 2024 11:20:41 +0200 Subject: [PATCH 06/21] fix view courses --- .../db/migration/V1__init_tables.sql | 115 +++++++++++++++--- .../migration/V2__sample_data_generation.sql | 24 ++++ 2 files changed, 125 insertions(+), 14 deletions(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index bce702f..4b014b3 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -189,6 +189,16 @@ from ((`mydatabase`.`Successors` join `mydatabase`.`Revision_Page` on ((`mydatab on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))) group by `mydatabase`.`Successors`.`id_revision`, `R`.`date_validation`; +create definer = root@`%` view all_pages_by_course_view as +select `RC`.`id_course` AS `id_course`, + `CP`.`id_revision` AS `id_revision`, + group_concat(`CP`.`id_page` separator ',') AS `list_id_pages`, + `R`.`date_validation` AS `date_validation` +from ((`mydatabase`.`Course_Page` `CP` join `mydatabase`.`Revision_Course` `RC` + on ((`CP`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`Revision` `R` + on ((`RC`.`id_revision` = `R`.`revision_id`))) +group by `CP`.`id_revision`, `R`.`date_validation`; + create view all_predecessors_by_revision_view as select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, `mydatabase`.`Predecessors`.`id_revision` AS `id_revision`, @@ -199,6 +209,16 @@ from ((`mydatabase`.`Predecessors` join `mydatabase`.`Revision_Page` on ((`mydat on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))) group by `mydatabase`.`Predecessors`.`id_revision`, `R`.`date_validation`; +create view all_courses_by_course_view as +select `RC`.`id_course` AS `id_course`, + `CC`.`id_revision` AS `id_revision`, + group_concat(`CC`.`id_course` separator ',') AS `list_id_courses`, + `R`.`date_validation` AS `date_validation` +from ((`mydatabase`.`Course_Course` `CC` join `mydatabase`.`Revision_Course` `RC` + on ((`CC`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`Revision` `R` + on ((`RC`.`id_revision` = `R`.`revision_id`))) +group by `CC`.`id_revision`, `R`.`date_validation`; + create view last_successor_for_page_view as select `mydatabase`.`all_successors_by_revision_view`.`id_page` AS `id_page`, `mydatabase`.`all_successors_by_revision_view`.`list_id_successors` AS `successors`, @@ -211,6 +231,18 @@ where (`mydatabase`.`all_successors_by_revision_view`.`id_page`, from `mydatabase`.`all_successors_by_revision_view` group by `mydatabase`.`all_successors_by_revision_view`.`id_page`); +create view last_pages_for_course as +select `mydatabase`.`all_pages_by_course_view`.`id_course` AS `id_course`, + `mydatabase`.`all_pages_by_course_view`.`list_id_pages` AS `list_id_pages`, + `mydatabase`.`all_pages_by_course_view`.`date_validation` AS `date_validation` +from `mydatabase`.`all_pages_by_course_view` +where + (`mydatabase`.`all_pages_by_course_view`.`id_course`, `mydatabase`.`all_pages_by_course_view`.`date_validation`) in + (select `mydatabase`.`all_pages_by_course_view`.`id_course`, + max(`mydatabase`.`all_pages_by_course_view`.`date_validation`) + from `mydatabase`.`all_pages_by_course_view` + group by `mydatabase`.`all_pages_by_course_view`.`id_course`); + create view last_predecessors_for_page_view as select `mydatabase`.`all_predecessors_by_revision_view`.`id_page` AS `id_page`, `mydatabase`.`all_predecessors_by_revision_view`.`list_id_predecessors` AS `predecessors`, @@ -223,20 +255,17 @@ where (`mydatabase`.`all_predecessors_by_revision_view`.`id_page`, from `mydatabase`.`all_predecessors_by_revision_view` group by `mydatabase`.`all_predecessors_by_revision_view`.`id_page`); -create view course_view as -select `mydatabase`.`Revision_Course`.`id_course` AS `id_course`, - `TC`.`title_course` AS `title_course`, - `DC`.`description_course` AS `description_course`, - group_concat(`CC`.`id_course` separator ',') AS `courses`, - group_concat(`CP`.`id_page` separator ',') AS `pages` -from ((((`mydatabase`.`Revision_Course` join `mydatabase`.`Description_Course` `DC` - on ((`mydatabase`.`Revision_Course`.`id_description_course` = - `DC`.`description_id_course`))) join `mydatabase`.`Title_Course` `TC` - on ((`mydatabase`.`Revision_Course`.`id_title_course` = - `TC`.`title_id_course`))) join `mydatabase`.`Course_Course` `CC` - on ((`mydatabase`.`Revision_Course`.`id_revision` = `CC`.`id_revision`))) join `mydatabase`.`Course_Page` `CP` - on ((`mydatabase`.`Revision_Course`.`id_revision` = `CP`.`id_revision`))) -group by `mydatabase`.`Revision_Course`.`id_revision`; +create view last_courses_for_course_view as +select `mydatabase`.`all_courses_by_course_view`.`id_course` AS `id_course`, + `mydatabase`.`all_courses_by_course_view`.`list_id_courses` AS `list_id_courses`, + `mydatabase`.`all_courses_by_course_view`.`date_validation` AS `date_validation` +from `mydatabase`.`all_courses_by_course_view` +where (`mydatabase`.`all_courses_by_course_view`.`id_course`, + `mydatabase`.`all_courses_by_course_view`.`date_validation`) in + (select `mydatabase`.`all_courses_by_course_view`.`id_course`, + max(`mydatabase`.`all_courses_by_course_view`.`date_validation`) + from `mydatabase`.`all_courses_by_course_view` + group by `mydatabase`.`all_courses_by_course_view`.`id_course`); create view every_descriptions_with_page_id_view as select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, @@ -248,6 +277,16 @@ from ((`mydatabase`.`Revision_Page` join `mydatabase`.`Description_Page` `DP` `DP`.`description_id_page`))) join `mydatabase`.`Revision` `R` on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))); +create view every_description_with_id_course_view as +select `mydatabase`.`Revision_Course`.`id_course` AS `id_course`, + `mydatabase`.`Revision_Course`.`id_description_course` AS `id_description_course`, + `DC`.`description_course` AS `description_course`, + `R`.`date_validation` AS `date_validation` +from ((`mydatabase`.`Revision_Course` join `mydatabase`.`Description_Course` `DC` + on ((`mydatabase`.`Revision_Course`.`id_description_course` = + `DC`.`description_id_course`))) join `mydatabase`.`Revision` `R` + on ((`mydatabase`.`Revision_Course`.`id_revision` = `R`.`revision_id`))); + -- comment on column every_descriptions_with_page_id_view.id_page not supported: id de la page create view every_titles_with_page_id_view as @@ -261,6 +300,16 @@ from ((`mydatabase`.`Revision_Page` join `mydatabase`.`Title_Page` `TP` -- comment on column every_titles_with_page_id_view.id_page not supported: id de la page +create view every_titles_with_id_courses_view as +select `mydatabase`.`Revision_Course`.`id_course` AS `id_course`, + `mydatabase`.`Revision_Course`.`id_title_course` AS `id_title_course`, + `TC`.`title_course` AS `title_course`, + `R`.`date_validation` AS `date_validation` +from ((`mydatabase`.`Revision_Course` join `mydatabase`.`Title_Course` `TC` + on ((`mydatabase`.`Revision_Course`.`id_title_course` = + `TC`.`title_id_course`))) join `mydatabase`.`Revision` `R` + on ((`mydatabase`.`Revision_Course`.`id_revision` = `R`.`revision_id`))); + create view last_description_for_page_view as select `mydatabase`.`every_descriptions_with_page_id_view`.`id_page` AS `id_page`, `mydatabase`.`every_descriptions_with_page_id_view`.`description_page` AS `description_page`, @@ -273,6 +322,30 @@ where (`mydatabase`.`every_descriptions_with_page_id_view`.`id_page`, from `mydatabase`.`every_descriptions_with_page_id_view` group by `mydatabase`.`every_descriptions_with_page_id_view`.`id_page`); +create view last_description_for_course_view as +select `mydatabase`.`every_description_with_id_course_view`.`id_course` AS `id_course`, + `mydatabase`.`every_description_with_id_course_view`.`description_course` AS `description_course`, + `mydatabase`.`every_description_with_id_course_view`.`date_validation` AS `date_validation` +from `mydatabase`.`every_description_with_id_course_view` +where (`mydatabase`.`every_description_with_id_course_view`.`id_course`, + `mydatabase`.`every_description_with_id_course_view`.`date_validation`) in + (select `mydatabase`.`every_description_with_id_course_view`.`id_course`, + max(`mydatabase`.`every_description_with_id_course_view`.`date_validation`) + from `mydatabase`.`every_description_with_id_course_view` + group by `mydatabase`.`every_description_with_id_course_view`.`id_course`); + +create view last_title_for_course_view as +select `mydatabase`.`every_titles_with_id_courses_view`.`id_course` AS `id_course`, + `mydatabase`.`every_titles_with_id_courses_view`.`title_course` AS `tile_course`, + `mydatabase`.`every_titles_with_id_courses_view`.`date_validation` AS `date_validation` +from `mydatabase`.`every_titles_with_id_courses_view` +where (`mydatabase`.`every_titles_with_id_courses_view`.`id_course`, + `mydatabase`.`every_titles_with_id_courses_view`.`date_validation`) in + (select `mydatabase`.`every_titles_with_id_courses_view`.`id_course`, + max(`mydatabase`.`every_titles_with_id_courses_view`.`date_validation`) + from `mydatabase`.`every_titles_with_id_courses_view` + group by `mydatabase`.`every_titles_with_id_courses_view`.`id_course`); + -- comment on column last_description_for_page_view.id_page not supported: id de la page create view last_title_for_page_view as select `mydatabase`.`every_titles_with_page_id_view`.`id_page` AS `id_page`, @@ -314,6 +387,20 @@ from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((` `mydatabase`.`last_successor_for_page_view`.`id_page`))) left join `mydatabase`.`last_predecessors_for_page_view` on ((`mydatabase`.`Page`.`page_id` = `mydatabase`.`last_predecessors_for_page_view`.`id_page`))); +create view course_view as +select `mydatabase`.`Course`.`course_id` AS `id`, + `mydatabase`.`last_title_for_course_view`.`tile_course` AS `tile`, + `mydatabase`.`last_description_for_course_view`.`description_course` AS `description`, + `mydatabase`.`all_pages_by_course_view`.`list_id_pages` AS `pages`, + `mydatabase`.`all_courses_by_course_view`.`list_id_courses` AS `courses` +from ((((`mydatabase`.`Course` join `mydatabase`.`last_title_for_course_view` on ((`mydatabase`.`Course`.`course_id` = + `mydatabase`.`last_title_for_course_view`.`id_course`))) join `mydatabase`.`last_description_for_course_view` + on ((`mydatabase`.`Course`.`course_id` = + `mydatabase`.`last_description_for_course_view`.`id_course`))) left join `mydatabase`.`all_pages_by_course_view` + on ((`mydatabase`.`Course`.`course_id` = + `mydatabase`.`all_pages_by_course_view`.`id_course`))) left join `mydatabase`.`all_courses_by_course_view` + on ((`mydatabase`.`Course`.`course_id` = `mydatabase`.`all_courses_by_course_view`.`id_course`))); + -- comment on column page_view.id_page not supported: id de la page create view user_view as diff --git a/src/main/resources/db/migration/V2__sample_data_generation.sql b/src/main/resources/db/migration/V2__sample_data_generation.sql index 2feac1a..eaec637 100644 --- a/src/main/resources/db/migration/V2__sample_data_generation.sql +++ b/src/main/resources/db/migration/V2__sample_data_generation.sql @@ -5,6 +5,9 @@ INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Fonctionnement de Knowle INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Apprentissage de connaissance'); INSERT INTO mydatabase.Title_Page (title_page) VALUES ('L\'avenir de Knowledge Centre'); +insert into mydatabase.Title_Course (title_course) values ('introduction à konwledge center'); +insert into mydatabase.Title_Course (title_course) values ('introduction aux achitectures distribués'); + INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); @@ -12,6 +15,9 @@ INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +insert into mydatabase.Description_Course (description_course) values ('comment knowledge center fonctionne'); +insert into mydatabase.Description_Course (description_course) values ('comment les architectures distribués fonctionnes'); + INSERT INTO mydatabase.Page VALUES (); INSERT INTO mydatabase.Page VALUES (); INSERT INTO mydatabase.Page VALUES (); @@ -19,6 +25,10 @@ INSERT INTO mydatabase.Page VALUES (); INSERT INTO mydatabase.Page VALUES (); INSERT INTO mydatabase.Page VALUES (); +insert into mydatabase.Course () values (); +insert into mydatabase.Course () values (); + + INSERT INTO mydatabase.User (username, email, mdp) VALUES ('admin', 'admin@knowledgec.com', 'mymdp'); insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:49', 1, '2024-05-28 14:06:49'); @@ -30,6 +40,8 @@ insert into mydatabase.Revision (date_validation, creation_user_id, creation_dat insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:02:10', 1, '2024-05-29 15:02:30'); insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:04:19', 1, '2024-05-29 15:04:25'); insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); +insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); +insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-30 09:59:49', 1, '2024-05-30 09:59:53'); insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (1, 1, 1, 1); insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (2, 2, 2, 2); @@ -40,6 +52,9 @@ insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (7, 2, null, null); insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (8, 3, null, null); +insert into mydatabase.Revision_Course (id_revision, id_course, id_description_course, id_title_course) values (10, 1, 1, 1); +insert into mydatabase.Revision_Course (id_revision, id_course, id_description_course, id_title_course) values (11, 2, 2, 2); + insert into mydatabase.Predecessors (id_revision, id_page) values (1, 3); insert into mydatabase.Predecessors (id_revision, id_page) values (2, 3); insert into mydatabase.Predecessors (id_revision, id_page) values (3, 4); @@ -51,3 +66,12 @@ insert into mydatabase.Successors (id_revision, id_page) values (3, 2); insert into mydatabase.Successors (id_revision, id_page) values (4, 3); insert into mydatabase.Successors (id_revision, id_page) values (5, 3); insert into mydatabase.Successors (id_revision, id_page) values (6, 3); + +insert into mydatabase.Course_Course (id_revision, id_course) values (10, 2); + +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 1); +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 2); +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 3); +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 4); +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 5); +insert into mydatabase.Course_Page (id_revision, id_page) values (10, 6); From f2130e824d6fcd879997559fd5433f5624d33dfb Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Thu, 30 May 2024 11:41:17 +0200 Subject: [PATCH 07/21] remove definer --- src/main/resources/db/migration/V1__init_tables.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 4b014b3..cb36e33 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -189,7 +189,7 @@ from ((`mydatabase`.`Successors` join `mydatabase`.`Revision_Page` on ((`mydatab on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))) group by `mydatabase`.`Successors`.`id_revision`, `R`.`date_validation`; -create definer = root@`%` view all_pages_by_course_view as +create view all_pages_by_course_view as select `RC`.`id_course` AS `id_course`, `CP`.`id_revision` AS `id_revision`, group_concat(`CP`.`id_page` separator ',') AS `list_id_pages`, From d8bf0ab1f2024d02c51da96b0ed0b58ec66f10be Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Thu, 30 May 2024 11:45:42 +0200 Subject: [PATCH 08/21] fix view courses --- src/main/resources/db/migration/V1__init_tables.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index cb36e33..6d79aa6 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -391,15 +391,15 @@ create view course_view as select `mydatabase`.`Course`.`course_id` AS `id`, `mydatabase`.`last_title_for_course_view`.`tile_course` AS `tile`, `mydatabase`.`last_description_for_course_view`.`description_course` AS `description`, - `mydatabase`.`all_pages_by_course_view`.`list_id_pages` AS `pages`, - `mydatabase`.`all_courses_by_course_view`.`list_id_courses` AS `courses` + `mydatabase`.`last_pages_for_course`.`list_id_pages` AS `pages`, + `mydatabase`.`last_courses_for_course_view`.`list_id_courses` AS `courses` from ((((`mydatabase`.`Course` join `mydatabase`.`last_title_for_course_view` on ((`mydatabase`.`Course`.`course_id` = `mydatabase`.`last_title_for_course_view`.`id_course`))) join `mydatabase`.`last_description_for_course_view` on ((`mydatabase`.`Course`.`course_id` = - `mydatabase`.`last_description_for_course_view`.`id_course`))) left join `mydatabase`.`all_pages_by_course_view` + `mydatabase`.`last_description_for_course_view`.`id_course`))) left join `mydatabase`.`last_pages_for_course` on ((`mydatabase`.`Course`.`course_id` = - `mydatabase`.`all_pages_by_course_view`.`id_course`))) left join `mydatabase`.`all_courses_by_course_view` - on ((`mydatabase`.`Course`.`course_id` = `mydatabase`.`all_courses_by_course_view`.`id_course`))); + `mydatabase`.`last_pages_for_course`.`id_course`))) left join `mydatabase`.`last_courses_for_course_view` + on ((`mydatabase`.`Course`.`course_id` = `mydatabase`.`last_courses_for_course_view`.`id_course`))); -- comment on column page_view.id_page not supported: id de la page From ec69d4e3bd29c5a868f9b4fa43728520a02848a8 Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Mon, 24 Jun 2024 08:57:44 +0200 Subject: [PATCH 09/21] search knowledge --- .../autol/knowledgecentrebackend/page/PageController.java | 7 +++++++ .../autol/knowledgecentrebackend/page/PageRepository.java | 5 +++++ .../org/autol/knowledgecentrebackend/page/PageService.java | 7 +++++++ .../resources/db/migration/V2__sample_data_generation.sql | 4 ++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java index 0502830..cfd2ef3 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java @@ -3,6 +3,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequestMapping(value="/page") public class PageController { @@ -18,4 +20,9 @@ public PageController(PageService pageService) { public Page getDetails(@PathVariable(value="pageId") Long pageId) { return pageService.getPageDetails(pageId); } + + @GetMapping("/search") + public List getRelated(@BindParam(value="name") String name) { + return pageService.searchPageByTitle(name); + } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java index ac5bcdb..38646df 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java @@ -1,7 +1,12 @@ package org.autol.knowledgecentrebackend.page; import org.autol.knowledgecentrebackend.ReadOnlyRepository; +import org.springframework.data.domain.Limit; + +import java.util.List; public interface PageRepository extends ReadOnlyRepository { + + List findByTitleContaining(String title, Limit pageable); } diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java index 5a15d97..d9ea694 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java @@ -1,8 +1,11 @@ package org.autol.knowledgecentrebackend.page; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Limit; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class PageService { @@ -16,4 +19,8 @@ public PageService(PageRepository pageRepository) { public Page getPageDetails(Long pageId) { return pageRepository.findById(pageId).orElseThrow(); } + + public List searchPageByTitle(String title) { + return pageRepository.findByTitleContaining(title, Limit.of(2)); + } } diff --git a/src/main/resources/db/migration/V2__sample_data_generation.sql b/src/main/resources/db/migration/V2__sample_data_generation.sql index eaec637..ea0cb53 100644 --- a/src/main/resources/db/migration/V2__sample_data_generation.sql +++ b/src/main/resources/db/migration/V2__sample_data_generation.sql @@ -6,7 +6,7 @@ INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Apprentissage de connais INSERT INTO mydatabase.Title_Page (title_page) VALUES ('L\'avenir de Knowledge Centre'); insert into mydatabase.Title_Course (title_course) values ('introduction à konwledge center'); -insert into mydatabase.Title_Course (title_course) values ('introduction aux achitectures distribués'); +insert into mydatabase.Title_Course (title_course) values ('introduction aux achitectures distribuées'); INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); @@ -16,7 +16,7 @@ INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); insert into mydatabase.Description_Course (description_course) values ('comment knowledge center fonctionne'); -insert into mydatabase.Description_Course (description_course) values ('comment les architectures distribués fonctionnes'); +insert into mydatabase.Description_Course (description_course) values ('comment les architectures distribuées fonctionnes'); INSERT INTO mydatabase.Page VALUES (); INSERT INTO mydatabase.Page VALUES (); From d978dcc48a7df52272c935166d200c84c8566686 Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Mon, 24 Jun 2024 11:40:27 +0200 Subject: [PATCH 10/21] Plusieurs forums possibles --- .../knowledgecentrebackend/Forum/Forum.java | 48 +++++++++++++++ .../Forum/ForumController.java | 31 ++++++++++ .../Forum/ForumDTO.java | 25 ++++++++ .../Forum/ForumRepository.java | 10 ++++ .../Forum/ForumService.java | 37 ++++++++++++ .../knowledgecentrebackend/Post/Post.java | 34 ++++++++--- .../Post/PostController.java | 48 +++++++++------ .../knowledgecentrebackend/Post/PostDTO.java | 43 ++++++++++++++ .../Post/PostRepository.java | 9 ++- .../Post/PostService.java | 58 +++++++++++++++++-- 10 files changed, 312 insertions(+), 31 deletions(-) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java new file mode 100644 index 0000000..2f2552c --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java @@ -0,0 +1,48 @@ +package org.autol.knowledgecentrebackend.Forum; + + +import jakarta.persistence.*; +import org.autol.knowledgecentrebackend.Post.Post; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +@Entity +public class Forum { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + + @OneToMany(mappedBy = "forum", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore + private List posts; + + // Getters and Setters + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getPosts() { + return posts; + } + + public void setPosts(List posts) { + this.posts = posts; + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java new file mode 100644 index 0000000..19e2461 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java @@ -0,0 +1,31 @@ +package org.autol.knowledgecentrebackend.Forum; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/forums") +public class ForumController { + + @Autowired + private ForumService forumService; + + @GetMapping + public List getAllForums() { + return forumService.getAllForums(); + } + + @GetMapping("/{id}") + public Forum getOrCreateForum(@PathVariable Long id) { + return forumService.getOrCreateForum(id); + } + + @DeleteMapping("/{id}") + public void deleteForum(@PathVariable Long id) { + forumService.deleteForum(id); + } +} + + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java new file mode 100644 index 0000000..3e2d6e9 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.Forum; + +public class ForumDTO { + private Long id; + private String name; + + // Getters and Setters + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java new file mode 100644 index 0000000..04bf051 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java @@ -0,0 +1,10 @@ +package org.autol.knowledgecentrebackend.Forum; + +import org.springframework.data.jpa.repository.JpaRepository; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface ForumRepository extends JpaRepository { +} + + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java new file mode 100644 index 0000000..9f7d3db --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java @@ -0,0 +1,37 @@ +package org.autol.knowledgecentrebackend.Forum; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ForumService { + + @Autowired + private ForumRepository forumRepository; + + public List getAllForums() { + return forumRepository.findAll(); + } + + public Forum getOrCreateForum(Long id) { + return forumRepository.findById(id).orElseGet(() -> { + Forum forum = new Forum(); + forum.setId(id); + forum.setName("Forum " + id); // You can set a default name or use any logic here + return forumRepository.save(forum); + }); + } + + public void deleteForum(Long id) { + forumRepository.deleteById(id); + } +} + + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java index 4bc276d..ee8b572 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java @@ -1,7 +1,12 @@ package org.autol.knowledgecentrebackend.Post; + +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; -import org.autol.knowledgecentrebackend.User.User; +import org.autol.knowledgecentrebackend.Comment.Comment; +import org.autol.knowledgecentrebackend.Forum.Forum; + +import java.util.List; @Entity public class Post { @@ -9,10 +14,17 @@ public class Post { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; - @Column(columnDefinition = "LONGTEXT") private String content; + @ManyToOne - private User author; + @JoinColumn(name = "forum_id", nullable = false) + private Forum forum; + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore + private List comments; + + // Getters and Setters public Long getId() { return id; @@ -38,11 +50,19 @@ public void setContent(String content) { this.content = content; } - public User getAuthor() { - return author; + public Forum getForum() { + return forum; + } + + public void setForum(Forum forum) { + this.forum = forum; + } + + public List getComments() { + return comments; } - public void setAuthor(User author) { - this.author = author; + public void setComments(List comments) { + this.comments = comments; } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java index 6313017..90d273a 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java @@ -1,38 +1,52 @@ package org.autol.knowledgecentrebackend.Post; +import org.autol.knowledgecentrebackend.Forum.Forum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Optional; @RestController -@RequestMapping("/api/posts") +@RequestMapping("/api/forums/{forumId}/posts") public class PostController { + @Autowired private PostService postService; @GetMapping - public List getAllPosts() { - return postService.getAllPosts(); + public List getAllPostsByForumId(@PathVariable Long forumId) { + return postService.getAllPostsByForumId(forumId); + } + + @GetMapping("/{postId}") + public Post getPostById(@PathVariable Long postId) { + return postService.getPostById(postId); } @PostMapping - public Post createPost(@RequestBody Post post) { - System.out.println("Post received: " + post); - return postService.createPost(post); + public Post createPost(@PathVariable Long forumId, @RequestBody Post post) { + Forum forum = postService.getOrCreateForum(forumId); + post.setForum(forum); + return postService.savePost(post); } - @GetMapping("/{id}") - public ResponseEntity getPostById(@PathVariable Long id) { - Optional post = postService.findPostById(id); - if (post.isPresent()) { - return ResponseEntity.ok(post.get()); - } else { - return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); - } + @DeleteMapping("/{postId}") + public void deletePost(@PathVariable Long postId) { + postService.deletePost(postId); } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java new file mode 100644 index 0000000..b72c10d --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java @@ -0,0 +1,43 @@ +package org.autol.knowledgecentrebackend.Post; + +public class PostDTO { + private Long id; + private String title; + private String content; + private Long forumId; + + // Getters and Setters + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Long getForumId() { + return forumId; + } + + public void setForumId(Long forumId) { + this.forumId = forumId; + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java index f54a19f..1e140bb 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java @@ -1,5 +1,12 @@ package org.autol.knowledgecentrebackend.Post; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +public interface PostRepository extends JpaRepository { + List findByForumId(Long forumId); +} -public interface PostRepository extends JpaRepository {} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java index a5d0305..11d7130 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java @@ -1,26 +1,72 @@ package org.autol.knowledgecentrebackend.Post; +import org.autol.knowledgecentrebackend.Forum.Forum; +import org.autol.knowledgecentrebackend.Forum.ForumRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; @Service public class PostService { + @Autowired private PostRepository postRepository; - public List getAllPosts() { - return postRepository.findAll(); + @Autowired + private ForumRepository forumRepository; + + @Transactional(readOnly = true) + public List getAllPostsByForumId(Long forumId) { + return postRepository.findByForumId(forumId); } - public Post createPost(Post post) { + @Transactional(readOnly = true) + public Post getPostById(Long id) { + return postRepository.findById(id).orElse(null); + } + + @Transactional + public Post savePost(Post post) { return postRepository.save(post); } - public Optional findPostById(Long id) { - return postRepository.findById(id); + @Transactional(readOnly = true) + public Forum getForumById(Long id) { + return forumRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Forum not found")); + } + + @Transactional + public Forum getOrCreateForum(Long forumId) { + return forumRepository.findById(forumId).orElseGet(() -> { + Forum forum = new Forum(); + forum.setId(forumId); + forum.setName("Forum " + forumId); // Set a default name or use any logic here + return forumRepository.save(forum); + }); + } + + @Transactional + public void deletePost(Long id) { + postRepository.deleteById(id); } } From ef2d3aa6cbe0443258321879737eab2ca7a018fd Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Mon, 24 Jun 2024 14:15:48 +0200 Subject: [PATCH 11/21] Plusieurs forums possibles --- .../Comment/CommentController.java | 18 ++++++++----- .../Comment/CommentRepository.java | 5 ++++ .../Comment/CommentService.java | 27 +++++++++++++++++-- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java index 48a39c9..25da95a 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java @@ -6,19 +6,25 @@ import java.util.List; @RestController -@RequestMapping("/api/comments") +@RequestMapping("/api/posts/{postId}/comments") public class CommentController { + @Autowired private CommentService commentService; - @GetMapping("/{postId}") - public List getCommentsByPostId(@PathVariable Long postId) { - return commentService.getCommentsByPostId(postId); + @GetMapping + public List getAllCommentsByPostId(@PathVariable Long postId) { + return commentService.getAllCommentsByPostId(postId); } @PostMapping - public Comment createComment(@RequestBody Comment comment) { - return commentService.saveComment(comment); + public Comment createComment(@PathVariable Long postId, @RequestBody Comment comment) { + return commentService.saveComment(postId, comment); + } + + @DeleteMapping("/{commentId}") + public void deleteComment(@PathVariable Long commentId) { + commentService.deleteComment(commentId); } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java index a14b753..4bfc8b6 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java @@ -4,7 +4,12 @@ import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + public interface CommentRepository extends JpaRepository { List findByPostId(Long postId); } + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java index fdc8b1d..eac5306 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java @@ -1,21 +1,44 @@ package org.autol.knowledgecentrebackend.Comment; +import org.autol.knowledgecentrebackend.Post.Post; +import org.autol.knowledgecentrebackend.Post.PostRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + @Service public class CommentService { + @Autowired private CommentRepository commentRepository; - public List getCommentsByPostId(Long postId) { + @Autowired + private PostRepository postRepository; + + @Transactional(readOnly = true) + public List getAllCommentsByPostId(Long postId) { return commentRepository.findByPostId(postId); } - public Comment saveComment(Comment comment) { + @Transactional + public Comment saveComment(Long postId, Comment comment) { + Post post = postRepository.findById(postId) + .orElseThrow(() -> new IllegalArgumentException("Post not found")); + comment.setPost(post); return commentRepository.save(comment); } + + @Transactional + public void deleteComment(Long commentId) { + commentRepository.deleteById(commentId); + } } + From a6755af85e5620518688f362d41ae89dc5b5856b Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:02:55 +0200 Subject: [PATCH 12/21] cors --- pom.xml | 6 ++++++ .../config/WebConfig.java | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java diff --git a/pom.xml b/pom.xml index 1d47a67..0d47a8d 100644 --- a/pom.xml +++ b/pom.xml @@ -67,6 +67,12 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.testng + testng + 7.1.0 + compile + diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java new file mode 100644 index 0000000..f5c94b3 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java @@ -0,0 +1,19 @@ +package org.autol.knowledgecentrebackend.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*"); + } +} From d4e037084756d51f16d8f93638705096dea15f18 Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:49:08 +0200 Subject: [PATCH 13/21] Optimise import --- .../Comment/CommentRepository.java | 4 ---- .../Comment/CommentService.java | 5 ----- .../knowledgecentrebackend/Forum/Forum.java | 3 +-- .../Forum/ForumRepository.java | 2 -- .../Forum/ForumService.java | 5 ----- .../KnowledgeCentreBackendApplication.java | 6 +++--- .../Post/PostController.java | 14 -------------- .../Post/PostRepository.java | 2 -- .../Post/PostService.java | 17 ----------------- .../ReadOnlyRepository.java | 2 +- .../User/UserRepository.java | 3 ++- .../config/WebConfig.java | 1 - .../autol/knowledgecentrebackend/page/Page.java | 9 ++++++--- .../page/PageController.java | 6 +++--- 14 files changed, 16 insertions(+), 63 deletions(-) diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java index 4bfc8b6..2bce953 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java @@ -4,10 +4,6 @@ import java.util.List; -import org.springframework.data.jpa.repository.JpaRepository; - -import java.util.List; - public interface CommentRepository extends JpaRepository { List findByPostId(Long postId); } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java index eac5306..a4ae976 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java @@ -2,11 +2,6 @@ import org.autol.knowledgecentrebackend.Post.Post; import org.autol.knowledgecentrebackend.Post.PostRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java index 2f2552c..0a839d6 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java @@ -1,13 +1,12 @@ package org.autol.knowledgecentrebackend.Forum; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import org.autol.knowledgecentrebackend.Post.Post; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnore; - @Entity public class Forum { @Id diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java index 04bf051..58501a9 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java @@ -2,8 +2,6 @@ import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaRepository; - public interface ForumRepository extends JpaRepository { } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java index 9f7d3db..20bbe00 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java @@ -5,11 +5,6 @@ import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - @Service public class ForumService { diff --git a/src/main/java/org/autol/knowledgecentrebackend/KnowledgeCentreBackendApplication.java b/src/main/java/org/autol/knowledgecentrebackend/KnowledgeCentreBackendApplication.java index d057ca2..88a1872 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/KnowledgeCentreBackendApplication.java +++ b/src/main/java/org/autol/knowledgecentrebackend/KnowledgeCentreBackendApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class KnowledgeCentreBackendApplication { - public static void main(String[] args) { - SpringApplication.run(KnowledgeCentreBackendApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(KnowledgeCentreBackendApplication.class, args); + } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java index 90d273a..a8f81fc 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java @@ -4,20 +4,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - import java.util.List; @RestController diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java index 1e140bb..f858ea3 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java @@ -1,9 +1,7 @@ package org.autol.knowledgecentrebackend.Post; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; -import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface PostRepository extends JpaRepository { diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java index 11d7130..ade37b8 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java @@ -2,23 +2,6 @@ import org.autol.knowledgecentrebackend.Forum.Forum; import org.autol.knowledgecentrebackend.Forum.ForumRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/org/autol/knowledgecentrebackend/ReadOnlyRepository.java b/src/main/java/org/autol/knowledgecentrebackend/ReadOnlyRepository.java index 0c9af43..0e96c8e 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/ReadOnlyRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/ReadOnlyRepository.java @@ -11,7 +11,7 @@ import java.util.Optional; @NoRepositoryBean -public interface ReadOnlyRepository extends Repository { +public interface ReadOnlyRepository extends Repository { List findAll(); diff --git a/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java b/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java index b1ad90c..ab6d138 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java @@ -2,5 +2,6 @@ import org.springframework.data.jpa.repository.JpaRepository; -public interface UserRepository extends JpaRepository {} +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java index c7131e4..d438a04 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java +++ b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java @@ -1,6 +1,5 @@ package org.autol.knowledgecentrebackend.config; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java index d0072cb..1809cde 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java @@ -1,6 +1,9 @@ package org.autol.knowledgecentrebackend.page; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; @@ -38,13 +41,13 @@ public Page(String titre, String description) { public List getPredecessors() { - return predecessors == null ? (List) null : Arrays.stream(predecessors.split(",")) + return predecessors == null ? null : Arrays.stream(predecessors.split(",")) .map(Long::valueOf) .toList(); } public List getSuccessors() { - return successors == null ? (List) null : Arrays.stream(successors.split(",")) + return successors == null ? null : Arrays.stream(successors.split(",")) .map(Long::valueOf) .toList(); } diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java index cfd2ef3..2888cb8 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java @@ -6,7 +6,7 @@ import java.util.List; @RestController -@RequestMapping(value="/page") +@RequestMapping(value = "/page") public class PageController { private final PageService pageService; @@ -17,12 +17,12 @@ public PageController(PageService pageService) { } @GetMapping("/details/{pageId}") - public Page getDetails(@PathVariable(value="pageId") Long pageId) { + public Page getDetails(@PathVariable(value = "pageId") Long pageId) { return pageService.getPageDetails(pageId); } @GetMapping("/search") - public List getRelated(@BindParam(value="name") String name) { + public List getRelated(@BindParam(value = "name") String name) { return pageService.searchPageByTitle(name); } } From a0976a177e80283f38b01087f0cba6729907a04f Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:02:37 +0200 Subject: [PATCH 14/21] resolve conflicts --- .../Forum/ForumDTO.java | 25 ----------- .../knowledgecentrebackend/Post/PostDTO.java | 43 ------------------- .../config/WebConfig.java | 1 + 3 files changed, 1 insertion(+), 68 deletions(-) delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java deleted file mode 100644 index 3e2d6e9..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.autol.knowledgecentrebackend.Forum; - -public class ForumDTO { - private Long id; - private String name; - - // Getters and Setters - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} - diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java b/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java deleted file mode 100644 index b72c10d..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostDTO.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.autol.knowledgecentrebackend.Post; - -public class PostDTO { - private Long id; - private String title; - private String content; - private Long forumId; - - // Getters and Setters - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public Long getForumId() { - return forumId; - } - - public void setForumId(Long forumId) { - this.forumId = forumId; - } -} - diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java index d438a04..c7131e4 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java +++ b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java @@ -1,5 +1,6 @@ package org.autol.knowledgecentrebackend.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; From 5aed39d65965bb58322bc3e05099cbe1d6b0a7bf Mon Sep 17 00:00:00 2001 From: Vitalys ROUGETET--DE TROYANE <36591060+VitalysRDT@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:05:14 +0200 Subject: [PATCH 15/21] resolve conflicts --- .../knowledgecentrebackend/config/WebConfig.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java index c7131e4..96e0954 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java +++ b/src/main/java/org/autol/knowledgecentrebackend/config/WebConfig.java @@ -1,18 +1,19 @@ package org.autol.knowledgecentrebackend.config; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration +@EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/api/**") - .allowedOrigins("http://localhost:3000") // L'adresse de votre frontend - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); + registry.addMapping("/**") + .allowedOrigins("*") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*"); } -} - +} \ No newline at end of file From f08f144310c7b79d92aece89b7ac53d7aa021285 Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:32:11 +0200 Subject: [PATCH 16/21] get course + fix db naming --- pom.xml | 2 +- .../knowledgecentrebackend/cours/Course.java | 37 +++++++++++++++++++ .../cours/CourseController.java | 25 +++++++++++++ .../cours/CourseRepository.java | 7 ++++ .../cours/CourseService.java | 19 ++++++++++ .../knowledgecentrebackend/page/Page.java | 4 +- .../db/migration/V1__init_tables.sql | 8 ++-- 7 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/Course.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java diff --git a/pom.xml b/pom.xml index 0d47a8d..a287dc3 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ org.testng testng - 7.1.0 + 7.7.0 compile diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java b/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java new file mode 100644 index 0000000..a2c6c67 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java @@ -0,0 +1,37 @@ +package org.autol.knowledgecentrebackend.cours; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "course_view") +@Data +@NoArgsConstructor +public class Course { + + @Id + @Column(name = "id") + private Long id; + + @Column(name = "description") + private String description; + + @Column(name = "title") + private String title; + + @Column(name = "courses") + private String courses; + + @Column(name = "pages") + private String pages; + + public Course(String titre, String description) { + this.description = description; + this.title = titre; + } + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java new file mode 100644 index 0000000..7bc525f --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value="/course") +public class CourseController { + + private final CourseService courseService; + + @Autowired + public CourseController(CourseService courseService) { + this.courseService = courseService; + } + + @GetMapping("/details/{pageId}") + public Course getDetails(@PathVariable(value="pageId") Long pageId) { + return courseService.getPageDetails(pageId); + } + +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java new file mode 100644 index 0000000..a52ddb5 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.autol.knowledgecentrebackend.ReadOnlyRepository; + + +public interface CourseRepository extends ReadOnlyRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java new file mode 100644 index 0000000..6d5a1ad --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java @@ -0,0 +1,19 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CourseService { + + private final CourseRepository courseRepository; + + @Autowired + public CourseService(CourseRepository courseRepository) { + this.courseRepository = courseRepository; + } + + public Course getPageDetails(Long pageId) { + return courseRepository.findById(pageId).orElseThrow(); + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java index d0072cb..423c51f 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java @@ -17,13 +17,13 @@ public class Page { @Column(name = "ID") private Long id; - @Column(name = "descritpion") + @Column(name = "description") private String description; @Column(name = "title") private String title; - @Column(name = "predevessors") + @Column(name = "predecessors") private String successors; @Column(name = "successors") diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 6d79aa6..1b67deb 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -336,7 +336,7 @@ where (`mydatabase`.`every_description_with_id_course_view`.`id_course`, create view last_title_for_course_view as select `mydatabase`.`every_titles_with_id_courses_view`.`id_course` AS `id_course`, - `mydatabase`.`every_titles_with_id_courses_view`.`title_course` AS `tile_course`, + `mydatabase`.`every_titles_with_id_courses_view`.`title_course` AS `title_course`, `mydatabase`.`every_titles_with_id_courses_view`.`date_validation` AS `date_validation` from `mydatabase`.`every_titles_with_id_courses_view` where (`mydatabase`.`every_titles_with_id_courses_view`.`id_course`, @@ -376,9 +376,9 @@ where (`mydatabase`.`Revision`.`date_validation` is not null); create view page_view as select `mydatabase`.`Page`.`page_id` AS `id`, `mydatabase`.`last_title_for_page_view`.`title_page` AS `title`, - `mydatabase`.`last_description_for_page_view`.`description_page` AS `descritpion`, + `mydatabase`.`last_description_for_page_view`.`description_page` AS `description`, `mydatabase`.`last_successor_for_page_view`.`successors` AS `successors`, - `mydatabase`.`last_predecessors_for_page_view`.`predecessors` AS `predevessors` + `mydatabase`.`last_predecessors_for_page_view`.`predecessors` AS `predecessors` from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((`mydatabase`.`Page`.`page_id` = `mydatabase`.`last_title_for_page_view`.`id_page`))) join `mydatabase`.`last_description_for_page_view` on ((`mydatabase`.`Page`.`page_id` = @@ -389,7 +389,7 @@ from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((` create view course_view as select `mydatabase`.`Course`.`course_id` AS `id`, - `mydatabase`.`last_title_for_course_view`.`tile_course` AS `tile`, + `mydatabase`.`last_title_for_course_view`.`title_course` AS `title`, `mydatabase`.`last_description_for_course_view`.`description_course` AS `description`, `mydatabase`.`last_pages_for_course`.`list_id_pages` AS `pages`, `mydatabase`.`last_courses_for_course_view`.`list_id_courses` AS `courses` From 8f0586e2d6d3ee7561e13266adc85a8b4e587bb6 Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:32:11 +0200 Subject: [PATCH 17/21] get course + fix db naming --- pom.xml | 2 +- .../knowledgecentrebackend/cours/Course.java | 37 +++++++++++++++++++ .../cours/CourseController.java | 25 +++++++++++++ .../cours/CourseRepository.java | 7 ++++ .../cours/CourseService.java | 19 ++++++++++ .../knowledgecentrebackend/page/Page.java | 4 +- .../db/migration/V1__init_tables.sql | 8 ++-- 7 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/Course.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java diff --git a/pom.xml b/pom.xml index 0d47a8d..a287dc3 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ org.testng testng - 7.1.0 + 7.7.0 compile diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java b/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java new file mode 100644 index 0000000..a2c6c67 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/Course.java @@ -0,0 +1,37 @@ +package org.autol.knowledgecentrebackend.cours; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "course_view") +@Data +@NoArgsConstructor +public class Course { + + @Id + @Column(name = "id") + private Long id; + + @Column(name = "description") + private String description; + + @Column(name = "title") + private String title; + + @Column(name = "courses") + private String courses; + + @Column(name = "pages") + private String pages; + + public Course(String titre, String description) { + this.description = description; + this.title = titre; + } + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java new file mode 100644 index 0000000..7bc525f --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseController.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value="/course") +public class CourseController { + + private final CourseService courseService; + + @Autowired + public CourseController(CourseService courseService) { + this.courseService = courseService; + } + + @GetMapping("/details/{pageId}") + public Course getDetails(@PathVariable(value="pageId") Long pageId) { + return courseService.getPageDetails(pageId); + } + +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java new file mode 100644 index 0000000..a52ddb5 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.autol.knowledgecentrebackend.ReadOnlyRepository; + + +public interface CourseRepository extends ReadOnlyRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java new file mode 100644 index 0000000..6d5a1ad --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/cours/CourseService.java @@ -0,0 +1,19 @@ +package org.autol.knowledgecentrebackend.cours; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CourseService { + + private final CourseRepository courseRepository; + + @Autowired + public CourseService(CourseRepository courseRepository) { + this.courseRepository = courseRepository; + } + + public Course getPageDetails(Long pageId) { + return courseRepository.findById(pageId).orElseThrow(); + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java index 1809cde..293e7df 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java @@ -20,13 +20,13 @@ public class Page { @Column(name = "ID") private Long id; - @Column(name = "descritpion") + @Column(name = "description") private String description; @Column(name = "title") private String title; - @Column(name = "predevessors") + @Column(name = "predecessors") private String successors; @Column(name = "successors") diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 6d79aa6..1b67deb 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -336,7 +336,7 @@ where (`mydatabase`.`every_description_with_id_course_view`.`id_course`, create view last_title_for_course_view as select `mydatabase`.`every_titles_with_id_courses_view`.`id_course` AS `id_course`, - `mydatabase`.`every_titles_with_id_courses_view`.`title_course` AS `tile_course`, + `mydatabase`.`every_titles_with_id_courses_view`.`title_course` AS `title_course`, `mydatabase`.`every_titles_with_id_courses_view`.`date_validation` AS `date_validation` from `mydatabase`.`every_titles_with_id_courses_view` where (`mydatabase`.`every_titles_with_id_courses_view`.`id_course`, @@ -376,9 +376,9 @@ where (`mydatabase`.`Revision`.`date_validation` is not null); create view page_view as select `mydatabase`.`Page`.`page_id` AS `id`, `mydatabase`.`last_title_for_page_view`.`title_page` AS `title`, - `mydatabase`.`last_description_for_page_view`.`description_page` AS `descritpion`, + `mydatabase`.`last_description_for_page_view`.`description_page` AS `description`, `mydatabase`.`last_successor_for_page_view`.`successors` AS `successors`, - `mydatabase`.`last_predecessors_for_page_view`.`predecessors` AS `predevessors` + `mydatabase`.`last_predecessors_for_page_view`.`predecessors` AS `predecessors` from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((`mydatabase`.`Page`.`page_id` = `mydatabase`.`last_title_for_page_view`.`id_page`))) join `mydatabase`.`last_description_for_page_view` on ((`mydatabase`.`Page`.`page_id` = @@ -389,7 +389,7 @@ from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((` create view course_view as select `mydatabase`.`Course`.`course_id` AS `id`, - `mydatabase`.`last_title_for_course_view`.`tile_course` AS `tile`, + `mydatabase`.`last_title_for_course_view`.`title_course` AS `title`, `mydatabase`.`last_description_for_course_view`.`description_course` AS `description`, `mydatabase`.`last_pages_for_course`.`list_id_pages` AS `pages`, `mydatabase`.`last_courses_for_course_view`.`list_id_courses` AS `courses` From b6da1225403e9efa2867e7b702e293af48fe0f88 Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Thu, 27 Jun 2024 00:18:49 +0200 Subject: [PATCH 18/21] =?UTF-8?q?petit=20commit=20(r=C3=A9visions)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../Comment/Comment.java | 42 --- .../knowledgecentrebackend/Forum/Forum.java | 47 --- .../knowledgecentrebackend/Post/Post.java | 68 ----- .../knowledgecentrebackend/User/User.java | 39 --- .../comment/Comment.java | 21 ++ .../CommentController.java | 2 +- .../CommentRepository.java | 2 +- .../{Comment => comment}/CommentService.java | 6 +- .../config/ApplicationConfig.java | 6 + .../knowledgecentrebackend/forum/Forum.java | 25 ++ .../{Forum => forum}/ForumController.java | 2 +- .../{Forum => forum}/ForumRepository.java | 2 +- .../{Forum => forum}/ForumService.java | 2 +- .../knowledgecentrebackend/page/Page.java | 39 +-- .../page/PageController.java | 28 -- .../page/PageRepository.java | 9 +- .../page/PageService.java | 26 -- .../page/page_view/PageView.java | 52 ++++ .../page/page_view/PageViewController.java | 28 ++ .../page/page_view/PageViewRepository.java | 12 + .../page/page_view/PageViewService.java | 26 ++ .../knowledgecentrebackend/post/Post.java | 31 ++ .../{Post => post}/PostController.java | 4 +- .../{Post => post}/PostRepository.java | 2 +- .../{Post => post}/PostService.java | 6 +- .../revision/RevisionController.java | 26 ++ .../revision/RevisionDTO.java | 12 + .../revision/RevisionEntity.java | 37 +++ .../revision/RevisionRepository.java | 7 + .../revision/RevisionService.java | 47 +++ .../revisionPage/RevisionPageDTO.java | 17 ++ .../revisionPage/RevisionPageEntity.java | 33 ++ .../revisionPage/RevisionPageMapper.java | 14 + .../revisionPage/RevisionPageRepository.java | 7 + .../revisionPage/RevisionPageService.java | 34 +++ .../PageDescriptionEntity.java | 25 ++ .../PageDescriptionRepository.java | 7 + .../pagetitle/PageTitleEntity.java | 25 ++ .../pagetitle/PageTitleRepository.java | 7 + .../knowledgecentrebackend/user/User.java | 19 ++ .../{User => user}/UserRepository.java | 2 +- .../db/migration/V1__init_tables.sql | 282 +++++++++--------- .../migration/V2__sample_data_generation.sql | 126 ++++---- 44 files changed, 746 insertions(+), 513 deletions(-) delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/Post/Post.java delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/User/User.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/comment/Comment.java rename src/main/java/org/autol/knowledgecentrebackend/{Comment => comment}/CommentController.java (94%) rename src/main/java/org/autol/knowledgecentrebackend/{Comment => comment}/CommentRepository.java (80%) rename src/main/java/org/autol/knowledgecentrebackend/{Comment => comment}/CommentService.java (85%) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/forum/Forum.java rename src/main/java/org/autol/knowledgecentrebackend/{Forum => forum}/ForumController.java (93%) rename src/main/java/org/autol/knowledgecentrebackend/{Forum => forum}/ForumRepository.java (74%) rename src/main/java/org/autol/knowledgecentrebackend/{Forum => forum}/ForumService.java (93%) delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/PageController.java delete mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/PageService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageView.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/post/Post.java rename src/main/java/org/autol/knowledgecentrebackend/{Post => post}/PostController.java (90%) rename src/main/java/org/autol/knowledgecentrebackend/{Post => post}/PostRepository.java (81%) rename src/main/java/org/autol/knowledgecentrebackend/{Post => post}/PostService.java (89%) create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revision/RevisionController.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revision/RevisionDTO.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revision/RevisionEntity.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revision/RevisionRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revision/RevisionService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageDTO.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageEntity.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageMapper.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageService.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionEntity.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleEntity.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleRepository.java create mode 100644 src/main/java/org/autol/knowledgecentrebackend/user/User.java rename src/main/java/org/autol/knowledgecentrebackend/{User => user}/UserRepository.java (74%) diff --git a/pom.xml b/pom.xml index a287dc3..02ee760 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,11 @@ secret + + org.modelmapper + modelmapper + 3.2.0 + org.springframework.boot spring-boot-starter-actuator diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java b/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java deleted file mode 100644 index 00ac0dd..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/Comment.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.autol.knowledgecentrebackend.Comment; - -import jakarta.persistence.*; -import org.autol.knowledgecentrebackend.Post.Post; - - -@Entity -public class Comment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String content; - - @ManyToOne - @JoinColumn(name = "post_id") - private Post post; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public Post getPost() { - return post; - } - - public void setPost(Post post) { - this.post = post; - } -} - diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java b/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java deleted file mode 100644 index 0a839d6..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/Forum.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.autol.knowledgecentrebackend.Forum; - - -import com.fasterxml.jackson.annotation.JsonIgnore; -import jakarta.persistence.*; -import org.autol.knowledgecentrebackend.Post.Post; - -import java.util.List; - -@Entity -public class Forum { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String name; - - @OneToMany(mappedBy = "forum", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonIgnore - private List posts; - - // Getters and Setters - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getPosts() { - return posts; - } - - public void setPosts(List posts) { - this.posts = posts; - } -} - diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java b/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java deleted file mode 100644 index ee8b572..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/Post.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.autol.knowledgecentrebackend.Post; - - -import com.fasterxml.jackson.annotation.JsonIgnore; -import jakarta.persistence.*; -import org.autol.knowledgecentrebackend.Comment.Comment; -import org.autol.knowledgecentrebackend.Forum.Forum; - -import java.util.List; - -@Entity -public class Post { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String title; - private String content; - - @ManyToOne - @JoinColumn(name = "forum_id", nullable = false) - private Forum forum; - - @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) - @JsonIgnore - private List comments; - - // Getters and Setters - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public Forum getForum() { - return forum; - } - - public void setForum(Forum forum) { - this.forum = forum; - } - - public List getComments() { - return comments; - } - - public void setComments(List comments) { - this.comments = comments; - } -} diff --git a/src/main/java/org/autol/knowledgecentrebackend/User/User.java b/src/main/java/org/autol/knowledgecentrebackend/User/User.java deleted file mode 100644 index 0da9464..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/User/User.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.autol.knowledgecentrebackend.User; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; - -@Entity -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String username; - private String password; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/src/main/java/org/autol/knowledgecentrebackend/comment/Comment.java b/src/main/java/org/autol/knowledgecentrebackend/comment/Comment.java new file mode 100644 index 0000000..ac11ad0 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/comment/Comment.java @@ -0,0 +1,21 @@ +package org.autol.knowledgecentrebackend.comment; + +import jakarta.persistence.*; +import lombok.Data; +import org.autol.knowledgecentrebackend.post.Post; + + +@Data +@Entity +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String content; + + @ManyToOne + @JoinColumn(name = "post_id") + private Post post; + +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentController.java similarity index 94% rename from src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java rename to src/main/java/org/autol/knowledgecentrebackend/comment/CommentController.java index 25da95a..6bd61da 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentController.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Comment; +package org.autol.knowledgecentrebackend.comment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentRepository.java similarity index 80% rename from src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java rename to src/main/java/org/autol/knowledgecentrebackend/comment/CommentRepository.java index 2bce953..ed6bdbc 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentRepository.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Comment; +package org.autol.knowledgecentrebackend.comment; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentService.java similarity index 85% rename from src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java rename to src/main/java/org/autol/knowledgecentrebackend/comment/CommentService.java index a4ae976..7ab3ad3 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Comment/CommentService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentService.java @@ -1,7 +1,7 @@ -package org.autol.knowledgecentrebackend.Comment; +package org.autol.knowledgecentrebackend.comment; -import org.autol.knowledgecentrebackend.Post.Post; -import org.autol.knowledgecentrebackend.Post.PostRepository; +import org.autol.knowledgecentrebackend.post.Post; +import org.autol.knowledgecentrebackend.post.PostRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/org/autol/knowledgecentrebackend/config/ApplicationConfig.java b/src/main/java/org/autol/knowledgecentrebackend/config/ApplicationConfig.java index 65894e7..e923c9f 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/config/ApplicationConfig.java +++ b/src/main/java/org/autol/knowledgecentrebackend/config/ApplicationConfig.java @@ -1,9 +1,15 @@ package org.autol.knowledgecentrebackend.config; +import org.modelmapper.ModelMapper; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("org.autol.knowledgecentrebackend") public class ApplicationConfig { + @Bean + public ModelMapper modelMapper() { + return new ModelMapper(); + } } diff --git a/src/main/java/org/autol/knowledgecentrebackend/forum/Forum.java b/src/main/java/org/autol/knowledgecentrebackend/forum/Forum.java new file mode 100644 index 0000000..a8347fb --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/forum/Forum.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.forum; + + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.Data; +import org.autol.knowledgecentrebackend.post.Post; + +import java.util.List; + +@Entity +@Data +public class Forum { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + + @OneToMany(mappedBy = "forum", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore + private List posts; + + +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumController.java similarity index 93% rename from src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java rename to src/main/java/org/autol/knowledgecentrebackend/forum/ForumController.java index 19e2461..5581857 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumController.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Forum; +package org.autol.knowledgecentrebackend.forum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumRepository.java similarity index 74% rename from src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java rename to src/main/java/org/autol/knowledgecentrebackend/forum/ForumRepository.java index 58501a9..3947ff4 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumRepository.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Forum; +package org.autol.knowledgecentrebackend.forum; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumService.java similarity index 93% rename from src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java rename to src/main/java/org/autol/knowledgecentrebackend/forum/ForumService.java index 20bbe00..03f4fe4 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Forum/ForumService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumService.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Forum; +package org.autol.knowledgecentrebackend.forum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java index 293e7df..23d7488 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java @@ -7,49 +7,14 @@ import lombok.Data; import lombok.NoArgsConstructor; -import java.util.Arrays; -import java.util.List; - @Entity -@Table(name = "page_view") +@Table(name = "page") @Data @NoArgsConstructor public class Page { @Id - @Column(name = "ID") + @Column(name = "page_id") private Long id; - @Column(name = "description") - private String description; - - @Column(name = "title") - private String title; - - @Column(name = "predecessors") - private String successors; - - @Column(name = "successors") - private String predecessors; - - public Page(String titre, String description) { - this.description = description; - this.title = titre; - this.successors = "1"; - this.predecessors = "1"; - } - - public List getPredecessors() { - - return predecessors == null ? null : Arrays.stream(predecessors.split(",")) - .map(Long::valueOf) - .toList(); - } - - public List getSuccessors() { - return successors == null ? null : Arrays.stream(successors.split(",")) - .map(Long::valueOf) - .toList(); - } - } \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java deleted file mode 100644 index 2888cb8..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.autol.knowledgecentrebackend.page; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping(value = "/page") -public class PageController { - - private final PageService pageService; - - @Autowired - public PageController(PageService pageService) { - this.pageService = pageService; - } - - @GetMapping("/details/{pageId}") - public Page getDetails(@PathVariable(value = "pageId") Long pageId) { - return pageService.getPageDetails(pageId); - } - - @GetMapping("/search") - public List getRelated(@BindParam(value = "name") String name) { - return pageService.searchPageByTitle(name); - } -} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java index 38646df..38b1021 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java @@ -1,12 +1,7 @@ package org.autol.knowledgecentrebackend.page; -import org.autol.knowledgecentrebackend.ReadOnlyRepository; -import org.springframework.data.domain.Limit; +import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; - -public interface PageRepository extends ReadOnlyRepository { - - List findByTitleContaining(String title, Limit pageable); +public interface PageRepository extends JpaRepository { } diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java deleted file mode 100644 index d9ea694..0000000 --- a/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.autol.knowledgecentrebackend.page; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.domain.Limit; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class PageService { - - private final PageRepository pageRepository; - - @Autowired - public PageService(PageRepository pageRepository) { - this.pageRepository = pageRepository; - } - - public Page getPageDetails(Long pageId) { - return pageRepository.findById(pageId).orElseThrow(); - } - - public List searchPageByTitle(String title) { - return pageRepository.findByTitleContaining(title, Limit.of(2)); - } -} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageView.java b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageView.java new file mode 100644 index 0000000..6ea110f --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageView.java @@ -0,0 +1,52 @@ +package org.autol.knowledgecentrebackend.page.page_view; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.List; + +@Entity +@Table(name = "page_view") +@Data +@NoArgsConstructor +@RequiredArgsConstructor +public class PageView { + + @Id + @Column(name = "ID") + private Long id; + + @Column(name = "description") + @NonNull + private String description; + + @Column(name = "title") + @NonNull + private String title; + + @Column(name = "predecessors") + private String successors; + + @Column(name = "successors") + private String predecessors; + + public List getPredecessors() { + return predecessors == null ? null : Arrays.stream(predecessors.split(",")) + .map(Long::valueOf) + .toList(); + } + + public List getSuccessors() { + return successors == null ? null : Arrays.stream(successors.split(",")) + .map(Long::valueOf) + .toList(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewController.java b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewController.java new file mode 100644 index 0000000..796322b --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewController.java @@ -0,0 +1,28 @@ +package org.autol.knowledgecentrebackend.page.page_view; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping(value = "/page") +public class PageViewController { + + private final PageViewService pageViewService; + + @Autowired + public PageViewController(PageViewService pageViewService) { + this.pageViewService = pageViewService; + } + + @GetMapping("/details/{pageId}") + public PageView getDetails(@PathVariable(value = "pageId") Long pageId) { + return pageViewService.getPageDetails(pageId); + } + + @GetMapping("/search") + public List getRelated(@BindParam(value = "name") String name) { + return pageViewService.searchPageByTitle(name); + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewRepository.java b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewRepository.java new file mode 100644 index 0000000..a780d49 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewRepository.java @@ -0,0 +1,12 @@ +package org.autol.knowledgecentrebackend.page.page_view; + +import org.autol.knowledgecentrebackend.ReadOnlyRepository; +import org.springframework.data.domain.Limit; + +import java.util.List; + + +public interface PageViewRepository extends ReadOnlyRepository { + + List findByTitleContaining(String title, Limit pageable); +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewService.java b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewService.java new file mode 100644 index 0000000..d4b6df3 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/page/page_view/PageViewService.java @@ -0,0 +1,26 @@ +package org.autol.knowledgecentrebackend.page.page_view; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Limit; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PageViewService { + + private final PageViewRepository pageViewRepository; + + @Autowired + public PageViewService(PageViewRepository pageViewRepository) { + this.pageViewRepository = pageViewRepository; + } + + public PageView getPageDetails(Long pageId) { + return pageViewRepository.findById(pageId).orElseThrow(); + } + + public List searchPageByTitle(String title) { + return pageViewRepository.findByTitleContaining(title, Limit.of(2)); + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/post/Post.java b/src/main/java/org/autol/knowledgecentrebackend/post/Post.java new file mode 100644 index 0000000..6b1ffe0 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/post/Post.java @@ -0,0 +1,31 @@ +package org.autol.knowledgecentrebackend.post; + + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; +import lombok.Data; +import org.autol.knowledgecentrebackend.comment.Comment; +import org.autol.knowledgecentrebackend.forum.Forum; + +import java.util.List; + +@Data +@Entity +public class Post { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "post_id") + private Long id; + + private String title; + private String content; + + @ManyToOne + @JoinColumn(name = "forum_id", nullable = false) + private Forum forum; + + @OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true) + @JsonIgnore + private List comments; + +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java b/src/main/java/org/autol/knowledgecentrebackend/post/PostController.java similarity index 90% rename from src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java rename to src/main/java/org/autol/knowledgecentrebackend/post/PostController.java index a8f81fc..f169385 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostController.java +++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostController.java @@ -1,6 +1,6 @@ -package org.autol.knowledgecentrebackend.Post; +package org.autol.knowledgecentrebackend.post; -import org.autol.knowledgecentrebackend.Forum.Forum; +import org.autol.knowledgecentrebackend.forum.Forum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java b/src/main/java/org/autol/knowledgecentrebackend/post/PostRepository.java similarity index 81% rename from src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java rename to src/main/java/org/autol/knowledgecentrebackend/post/PostRepository.java index f858ea3..57e81bf 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostRepository.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.Post; +package org.autol.knowledgecentrebackend.post; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java b/src/main/java/org/autol/knowledgecentrebackend/post/PostService.java similarity index 89% rename from src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java rename to src/main/java/org/autol/knowledgecentrebackend/post/PostService.java index ade37b8..f5b5b35 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/Post/PostService.java +++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostService.java @@ -1,7 +1,7 @@ -package org.autol.knowledgecentrebackend.Post; +package org.autol.knowledgecentrebackend.post; -import org.autol.knowledgecentrebackend.Forum.Forum; -import org.autol.knowledgecentrebackend.Forum.ForumRepository; +import org.autol.knowledgecentrebackend.forum.Forum; +import org.autol.knowledgecentrebackend.forum.ForumRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionController.java b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionController.java new file mode 100644 index 0000000..9782f03 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionController.java @@ -0,0 +1,26 @@ +package org.autol.knowledgecentrebackend.revision; + +import org.autol.knowledgecentrebackend.revisionPage.RevisionPageDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value="/revision") +public class RevisionController { + private final RevisionService revisionService; + + @Autowired + public RevisionController(RevisionService revisionService) { + this.revisionService = revisionService; + } + + @PostMapping + public ResponseEntity addRevisionPage(@RequestBody RevisionPageDTO revision) { + return ResponseEntity.ok(revisionService.saveRevisionPage(revision)); + } + +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionDTO.java b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionDTO.java new file mode 100644 index 0000000..06f4506 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionDTO.java @@ -0,0 +1,12 @@ +package org.autol.knowledgecentrebackend.revision; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +public class RevisionDTO { + Long authorId = 1L; +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionEntity.java b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionEntity.java new file mode 100644 index 0000000..1d80d6b --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionEntity.java @@ -0,0 +1,37 @@ +package org.autol.knowledgecentrebackend.revision; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import org.autol.knowledgecentrebackend.user.User; + +import java.time.LocalDateTime; + +@Entity +@Table(name = "revision") +@Data +@Inheritance(strategy = InheritanceType.JOINED) +@NoArgsConstructor +@RequiredArgsConstructor +public class RevisionEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "revision_id") + private Long id; + + @Column(name = "date_validation") + private LocalDateTime validation_date; + + @NonNull + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "creation_user_id") + private User user; + + + @Column(name = "creation_date") + private LocalDateTime creation_date = LocalDateTime.now(); + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionRepository.java b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionRepository.java new file mode 100644 index 0000000..dae6573 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.revision; + + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RevisionRepository extends JpaRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionService.java b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionService.java new file mode 100644 index 0000000..62035bd --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revision/RevisionService.java @@ -0,0 +1,47 @@ +package org.autol.knowledgecentrebackend.revision; + +import org.autol.knowledgecentrebackend.page.PageRepository; +import org.autol.knowledgecentrebackend.revisionPage.*; +import org.autol.knowledgecentrebackend.revisionPage.pageDescription.PageDescriptionEntity; +import org.autol.knowledgecentrebackend.revisionPage.pagetitle.PageTitleEntity; +import org.autol.knowledgecentrebackend.user.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +@Service +public class RevisionService { + + private final RevisionPageService revisionPageService; + private final UserRepository userRepository; + private final PageRepository pageRepository; + + + @Autowired + public RevisionService(RevisionPageService revisionPageService, UserRepository userRepository, PageRepository pageRepository) { + this.revisionPageService = revisionPageService; + this.userRepository = userRepository; + this.pageRepository = pageRepository; + } + + + @Transactional + public RevisionPageDTO saveRevisionPage(RevisionPageDTO revisionPageDTO) { + RevisionPageEntity revisionPageEntity = mapRevisionPageEntity(revisionPageDTO); + return RevisionPageMapper.toDTO(revisionPageService.savePageRevision(revisionPageEntity)); + } + + private RevisionPageEntity mapRevisionPageEntity(RevisionPageDTO revisionPageDTO) { + RevisionPageEntity revisionPageEntity = new RevisionPageEntity(); + + revisionPageEntity.setValidation_date(LocalDateTime.now()); + revisionPageEntity.setUser(userRepository.findById(revisionPageDTO.getAuthorId()).orElseThrow()); + revisionPageEntity.setIdPage(pageRepository.findById(revisionPageDTO.getPageId()).orElseThrow()); + revisionPageEntity.setTitle(new PageTitleEntity(revisionPageDTO.getTitle())); + revisionPageEntity.setDescription(new PageDescriptionEntity(revisionPageDTO.getDescription())); + + return revisionPageEntity; + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageDTO.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageDTO.java new file mode 100644 index 0000000..2080ae8 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageDTO.java @@ -0,0 +1,17 @@ +package org.autol.knowledgecentrebackend.revisionPage; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.autol.knowledgecentrebackend.revision.RevisionDTO; + +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@NoArgsConstructor +@Data +public class RevisionPageDTO extends RevisionDTO { + private Long pageId; + private String description; + private String title; +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageEntity.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageEntity.java new file mode 100644 index 0000000..193aec8 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageEntity.java @@ -0,0 +1,33 @@ +package org.autol.knowledgecentrebackend.revisionPage; + +import jakarta.persistence.*; +import lombok.*; +import org.autol.knowledgecentrebackend.page.Page; +import org.autol.knowledgecentrebackend.revision.RevisionEntity; +import org.autol.knowledgecentrebackend.revisionPage.pagetitle.PageTitleEntity; +import org.autol.knowledgecentrebackend.revisionPage.pageDescription.PageDescriptionEntity; + +@EqualsAndHashCode(callSuper = true) +@Entity +@Table(name = "revision_page") +@Data +@NoArgsConstructor +@RequiredArgsConstructor +@PrimaryKeyJoinColumn(name = "id_revision") +public class RevisionPageEntity extends RevisionEntity { + + @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "id_page", nullable = false) + @NonNull + private Page idPage; + + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "id_title_page", referencedColumnName = "title_id_page") + private PageTitleEntity title; + + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "id_description_page", referencedColumnName = "description_id_page") + private PageDescriptionEntity description; + + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageMapper.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageMapper.java new file mode 100644 index 0000000..0473e3d --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageMapper.java @@ -0,0 +1,14 @@ +package org.autol.knowledgecentrebackend.revisionPage; + +public class RevisionPageMapper { + + public static RevisionPageDTO toDTO(RevisionPageEntity entity) { + RevisionPageDTO dto = new RevisionPageDTO(); + dto.setAuthorId(entity.getUser().getId()); + dto.setPageId(entity.getIdPage().getId()); + dto.setTitle(entity.getTitle().getTitle()); + dto.setDescription(entity.getDescription().getDescription()); + return dto; + } +} + diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageRepository.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageRepository.java new file mode 100644 index 0000000..a6fde89 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.revisionPage; + +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface RevisionPageRepository extends JpaRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageService.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageService.java new file mode 100644 index 0000000..be31db8 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/RevisionPageService.java @@ -0,0 +1,34 @@ +package org.autol.knowledgecentrebackend.revisionPage; + +import org.autol.knowledgecentrebackend.revisionPage.pageDescription.PageDescriptionRepository; +import org.autol.knowledgecentrebackend.revisionPage.pagetitle.PageTitleEntity; +import org.autol.knowledgecentrebackend.revisionPage.pagetitle.PageTitleRepository; +import org.autol.knowledgecentrebackend.revisionPage.pageDescription.PageDescriptionEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class RevisionPageService { + + private final RevisionPageRepository revisionPageRepository; + private final PageTitleRepository pageTitleRepository; + private final PageDescriptionRepository pageDescriptionRepository; + @Autowired + public RevisionPageService(RevisionPageRepository revisionPageRepository, PageTitleRepository pageTitleRepository, PageDescriptionRepository pageDescriptionRepository) { + this.revisionPageRepository = revisionPageRepository; + this.pageTitleRepository = pageTitleRepository; + this.pageDescriptionRepository = pageDescriptionRepository; + } + + @Transactional + public RevisionPageEntity savePageRevision(RevisionPageEntity revisionPageEntity) { + PageTitleEntity savedTitle = pageTitleRepository.save(revisionPageEntity.getTitle()); + revisionPageEntity.setTitle(savedTitle); + + PageDescriptionEntity savedDescription = pageDescriptionRepository.save(revisionPageEntity.getDescription()); + revisionPageEntity.setDescription(savedDescription); + + return revisionPageRepository.save(revisionPageEntity); + } +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionEntity.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionEntity.java new file mode 100644 index 0000000..237bed5 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionEntity.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.revisionPage.pageDescription; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +@Entity +@Table(name = "description_page") +@Data +@RequiredArgsConstructor +@NoArgsConstructor +public class PageDescriptionEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "description_id_page") + private Long id; + + @Column(name = "description_page", length=600) + @NonNull + private String description; + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionRepository.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionRepository.java new file mode 100644 index 0000000..d6074d0 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pageDescription/PageDescriptionRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.revisionPage.pageDescription; + +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface PageDescriptionRepository extends JpaRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleEntity.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleEntity.java new file mode 100644 index 0000000..757e0a2 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleEntity.java @@ -0,0 +1,25 @@ +package org.autol.knowledgecentrebackend.revisionPage.pagetitle; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +@Entity +@Table(name = "title_page") +@Data +@NoArgsConstructor +@RequiredArgsConstructor +public class PageTitleEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "title_id_page") + private Long id; + + @Column(name = "title_page") + @NonNull + private String title; + +} \ No newline at end of file diff --git a/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleRepository.java b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleRepository.java new file mode 100644 index 0000000..623e304 --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/revisionPage/pagetitle/PageTitleRepository.java @@ -0,0 +1,7 @@ +package org.autol.knowledgecentrebackend.revisionPage.pagetitle; + +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface PageTitleRepository extends JpaRepository { +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/user/User.java b/src/main/java/org/autol/knowledgecentrebackend/user/User.java new file mode 100644 index 0000000..ecfacca --- /dev/null +++ b/src/main/java/org/autol/knowledgecentrebackend/user/User.java @@ -0,0 +1,19 @@ +package org.autol.knowledgecentrebackend.user; + +import jakarta.persistence.*; +import lombok.Data; + +@Data +@Entity +@Table(name = "user") +public class User { + + @Id + @Column(name = "user_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String username; + private String email; + private String password; + +} diff --git a/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java b/src/main/java/org/autol/knowledgecentrebackend/user/UserRepository.java similarity index 74% rename from src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java rename to src/main/java/org/autol/knowledgecentrebackend/user/UserRepository.java index ab6d138..4c2cc86 100644 --- a/src/main/java/org/autol/knowledgecentrebackend/User/UserRepository.java +++ b/src/main/java/org/autol/knowledgecentrebackend/user/UserRepository.java @@ -1,4 +1,4 @@ -package org.autol.knowledgecentrebackend.User; +package org.autol.knowledgecentrebackend.user; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 1b67deb..3ab4180 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -1,221 +1,221 @@ -create table Course +create table course ( - course_id int auto_increment + course_id bigint auto_increment primary key ); -create table Description_Course +create table description_course ( - description_id_course int auto_increment + description_id_course bigint auto_increment primary key, description_course varchar(600) null ); -create table Description_Page +create table description_page ( - description_id_page int auto_increment + description_id_page bigint auto_increment primary key, description_page varchar(600) not null ); -create table Page +create table page ( - page_id int auto_increment comment 'id de la page' + page_id bigint auto_increment comment 'id de la page_view' primary key ); -create table Title_Course +create table title_course ( - title_id_course int auto_increment + title_id_course bigint auto_increment primary key, title_course varchar(255) not null ); -create table Title_Page +create table title_page ( - title_id_page int auto_increment + title_id_page bigint auto_increment primary key, title_page varchar(255) not null ); -create table User +create table user ( - user_id int auto_increment + user_id bigint auto_increment primary key, username varchar(255) not null, email varchar(255) null, - mdp varchar(255) not null + password varchar(255) not null ); -create table Post +create table post ( - post_id int auto_increment + post_id bigint auto_increment primary key, content varchar(1200) not null, - id_user int not null, + id_user bigint not null, constraint Post_User_user_id_fk - foreign key (id_user) references User (user_id) + foreign key (id_user) references user (user_id) ); -create table Initial_Post +create table initial_post ( - id_post int not null + id_post bigint not null primary key, - id_page int not null, + id_page bigint not null, constraint Initial_Post_Page_page_id_fk - foreign key (id_page) references Page (page_id), + foreign key (id_page) references page (page_id), constraint Initial_Post_Post_post_id_fk - foreign key (id_post) references Post (post_id) + foreign key (id_post) references post (post_id) ); -create table Response_Post +create table response_post ( - id_post int not null + id_post bigint not null primary key, - post_to_reponse int not null, + post_to_reponse bigint not null, constraint Response_Post_Initial_Post_id_post_fk - foreign key (post_to_reponse) references Initial_Post (id_post), + foreign key (post_to_reponse) references initial_post (id_post), constraint Response_Post_Post_post_id_fk - foreign key (id_post) references Post (post_id) + foreign key (id_post) references post (post_id) ); -create table Revision +create table revision ( - revision_id int auto_increment + revision_id bigint auto_increment primary key, date_validation datetime null, - creation_user_id int not null, - creation_date datetime not null, + creation_user_id bigint not null, + creation_date datetime not null DEFAULT CURRENT_TIMESTAMP, constraint Revision_User_compte_id_fk - foreign key (creation_user_id) references User (user_id) + foreign key (creation_user_id) references user (user_id) ); -create table Revision_Course +create table revision_course ( - id_revision int not null + id_revision bigint not null primary key, - id_course int not null, - id_description_course int null, - id_title_course int not null, + id_course bigint not null, + id_description_course bigint null, + id_title_course bigint not null, constraint Revision_Course_Course_course_id_fk - foreign key (id_course) references Course (course_id), + foreign key (id_course) references course (course_id), constraint Revision_Course_Drescription_Course_description_id_course_fk - foreign key (id_description_course) references Description_Course (description_id_course), + foreign key (id_description_course) references description_course (description_id_course), constraint Revision_Course_Revision_revision_id_fk - foreign key (id_revision) references Revision (revision_id), + foreign key (id_revision) references revision (revision_id), constraint Revision_Course_Title_Course_title_id_course_fk - foreign key (id_title_course) references Title_Course (title_id_course) + foreign key (id_title_course) references title_course (title_id_course) ); -create table Course_Course +create table course_course ( - id_revision int not null, - id_course int not null, + id_revision bigint not null, + id_course bigint not null, primary key (id_revision, id_course), constraint Course_Course_Course_course_id_fk - foreign key (id_course) references Course (course_id), + foreign key (id_course) references course (course_id), constraint Course_Course_Revision_Course_id_revision_fk - foreign key (id_revision) references Revision_Course (id_revision) + foreign key (id_revision) references revision_course (id_revision) ); -create table Course_Page +create table course_page ( - id_revision int not null, - id_page int not null, + id_revision bigint not null, + id_page bigint not null, primary key (id_page, id_revision), constraint Course_Page_Page_page_id_fk - foreign key (id_page) references Page (page_id), + foreign key (id_page) references page (page_id), constraint Course_Page_Revision_Course_id_revision_fk - foreign key (id_revision) references Revision_Course (id_revision) + foreign key (id_revision) references revision_course (id_revision) ); -create table Revision_Page +create table revision_page ( - id_revision int not null + id_revision bigint not null primary key, - id_page int not null comment 'id de la page', - id_description_page int null, - id_title_page int null, + id_page bigint not null comment 'id de la page_view', + id_description_page bigint null, + id_title_page bigint null, constraint Revision_Page_Description_Page_id_description_fk - foreign key (id_description_page) references Description_Page (description_id_page), + foreign key (id_description_page) references description_page (description_id_page), constraint Revision_Page_Page_page_id_fk - foreign key (id_page) references Page (page_id), + foreign key (id_page) references page (page_id), constraint Revision_Page_Title_Page_id_title_fk - foreign key (id_title_page) references Title_Page (title_id_page), + foreign key (id_title_page) references title_page (title_id_page), constraint Revision_Page_ibfk_1 - foreign key (id_revision) references Revision (revision_id) + foreign key (id_revision) references revision (revision_id) ); -create table Predecessors +create table predecessors ( - id_page int not null, - id_revision int not null, + id_page bigint not null, + id_revision bigint not null, primary key (id_page, id_revision), constraint Predecessors_Page_page_id_fk - foreign key (id_page) references Page (page_id), + foreign key (id_page) references page (page_id), constraint Predecessors_Revision_Page_id_revision_fk - foreign key (id_revision) references Revision_Page (id_revision) + foreign key (id_revision) references revision_page (id_revision) ); -create table Successors +create table successors ( - id_revision int not null, - id_page int not null, + id_revision bigint not null, + id_page bigint not null, primary key (id_page, id_revision), constraint Successors_Page_page_id_fk - foreign key (id_page) references Page (page_id), + foreign key (id_page) references page (page_id), constraint Successors_Revision_Page_id_revision_fk - foreign key (id_revision) references Revision_Page (id_revision) + foreign key (id_revision) references revision_page (id_revision) ); -create table User_Vote_Revision +create table user_vote_revision ( - id_user int not null, - id_revision int not null, + id_user bigint not null, + id_revision bigint not null, primary key (id_revision, id_user), constraint User_Vote_Revision_Revision_revision_id_fk - foreign key (id_revision) references Revision (revision_id), + foreign key (id_revision) references revision (revision_id), constraint User_Vote_Revision_User_compte_id_fk - foreign key (id_user) references User (user_id) + foreign key (id_user) references user (user_id) ); create view all_successors_by_revision_view as -select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, - `mydatabase`.`Successors`.`id_revision` AS `id_revision`, - group_concat(`mydatabase`.`Successors`.`id_page` separator ',') AS `list_id_successors`, +select `mydatabase`.`revision_page`.`id_page` AS `id_page`, + `mydatabase`.`successors`.`id_revision` AS `id_revision`, + group_concat(`mydatabase`.`successors`.`id_page` separator ',') AS `list_id_successors`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Successors` join `mydatabase`.`Revision_Page` on ((`mydatabase`.`Successors`.`id_revision` = - `mydatabase`.`Revision_Page`.`id_revision`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))) -group by `mydatabase`.`Successors`.`id_revision`, `R`.`date_validation`; +from ((`mydatabase`.`successors` join `mydatabase`.`revision_page` on ((`mydatabase`.`successors`.`id_revision` = + `mydatabase`.`revision_page`.`id_revision`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_page`.`id_revision` = `R`.`revision_id`))) +group by `mydatabase`.`successors`.`id_revision`, `R`.`date_validation`; create view all_pages_by_course_view as select `RC`.`id_course` AS `id_course`, `CP`.`id_revision` AS `id_revision`, group_concat(`CP`.`id_page` separator ',') AS `list_id_pages`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Course_Page` `CP` join `mydatabase`.`Revision_Course` `RC` - on ((`CP`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`Revision` `R` +from ((`mydatabase`.`course_page` `CP` join `mydatabase`.`revision_course` `RC` + on ((`CP`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`revision` `R` on ((`RC`.`id_revision` = `R`.`revision_id`))) group by `CP`.`id_revision`, `R`.`date_validation`; create view all_predecessors_by_revision_view as -select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, - `mydatabase`.`Predecessors`.`id_revision` AS `id_revision`, - group_concat(`mydatabase`.`Predecessors`.`id_page` separator ',') AS `list_id_predecessors`, +select `mydatabase`.`revision_page`.`id_page` AS `id_page`, + `mydatabase`.`predecessors`.`id_revision` AS `id_revision`, + group_concat(`mydatabase`.`predecessors`.`id_page` separator ',') AS `list_id_predecessors`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Predecessors` join `mydatabase`.`Revision_Page` on ((`mydatabase`.`Predecessors`.`id_revision` = - `mydatabase`.`Revision_Page`.`id_revision`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))) -group by `mydatabase`.`Predecessors`.`id_revision`, `R`.`date_validation`; +from ((`mydatabase`.`predecessors` join `mydatabase`.`revision_page` on ((`mydatabase`.`predecessors`.`id_revision` = + `mydatabase`.`revision_page`.`id_revision`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_page`.`id_revision` = `R`.`revision_id`))) +group by `mydatabase`.`predecessors`.`id_revision`, `R`.`date_validation`; create view all_courses_by_course_view as select `RC`.`id_course` AS `id_course`, `CC`.`id_revision` AS `id_revision`, group_concat(`CC`.`id_course` separator ',') AS `list_id_courses`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Course_Course` `CC` join `mydatabase`.`Revision_Course` `RC` - on ((`CC`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`Revision` `R` +from ((`mydatabase`.`course_course` `CC` join `mydatabase`.`revision_course` `RC` + on ((`CC`.`id_revision` = `RC`.`id_revision`))) join `mydatabase`.`revision` `R` on ((`RC`.`id_revision` = `R`.`revision_id`))) group by `CC`.`id_revision`, `R`.`date_validation`; @@ -268,47 +268,47 @@ where (`mydatabase`.`all_courses_by_course_view`.`id_course`, group by `mydatabase`.`all_courses_by_course_view`.`id_course`); create view every_descriptions_with_page_id_view as -select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, - `mydatabase`.`Revision_Page`.`id_description_page` AS `id_description_page`, +select `mydatabase`.`revision_page`.`id_page` AS `id_page`, + `mydatabase`.`revision_page`.`id_description_page` AS `id_description_page`, `DP`.`description_page` AS `description_page`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Revision_Page` join `mydatabase`.`Description_Page` `DP` - on ((`mydatabase`.`Revision_Page`.`id_description_page` = - `DP`.`description_id_page`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))); +from ((`mydatabase`.`revision_page` join `mydatabase`.`description_page` `DP` + on ((`mydatabase`.`revision_page`.`id_description_page` = + `DP`.`description_id_page`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_page`.`id_revision` = `R`.`revision_id`))); create view every_description_with_id_course_view as -select `mydatabase`.`Revision_Course`.`id_course` AS `id_course`, - `mydatabase`.`Revision_Course`.`id_description_course` AS `id_description_course`, +select `mydatabase`.`revision_course`.`id_course` AS `id_course`, + `mydatabase`.`revision_course`.`id_description_course` AS `id_description_course`, `DC`.`description_course` AS `description_course`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Revision_Course` join `mydatabase`.`Description_Course` `DC` - on ((`mydatabase`.`Revision_Course`.`id_description_course` = - `DC`.`description_id_course`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Course`.`id_revision` = `R`.`revision_id`))); +from ((`mydatabase`.`revision_course` join `mydatabase`.`description_course` `DC` + on ((`mydatabase`.`revision_course`.`id_description_course` = + `DC`.`description_id_course`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_course`.`id_revision` = `R`.`revision_id`))); --- comment on column every_descriptions_with_page_id_view.id_page not supported: id de la page +-- comment on column every_descriptions_with_page_id_view.id_page not supported: id de la page_view create view every_titles_with_page_id_view as -select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, - `mydatabase`.`Revision_Page`.`id_title_page` AS `id_title_page`, +select `mydatabase`.`revision_page`.`id_page` AS `id_page`, + `mydatabase`.`revision_page`.`id_title_page` AS `id_title_page`, `TP`.`title_page` AS `title_page`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Revision_Page` join `mydatabase`.`Title_Page` `TP` - on ((`mydatabase`.`Revision_Page`.`id_title_page` = `TP`.`title_id_page`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Page`.`id_revision` = `R`.`revision_id`))); +from ((`mydatabase`.`revision_page` join `mydatabase`.`title_page` `TP` + on ((`mydatabase`.`revision_page`.`id_title_page` = `TP`.`title_id_page`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_page`.`id_revision` = `R`.`revision_id`))); --- comment on column every_titles_with_page_id_view.id_page not supported: id de la page +-- comment on column every_titles_with_page_id_view.id_page not supported: id de la page_view create view every_titles_with_id_courses_view as -select `mydatabase`.`Revision_Course`.`id_course` AS `id_course`, - `mydatabase`.`Revision_Course`.`id_title_course` AS `id_title_course`, +select `mydatabase`.`revision_course`.`id_course` AS `id_course`, + `mydatabase`.`revision_course`.`id_title_course` AS `id_title_course`, `TC`.`title_course` AS `title_course`, `R`.`date_validation` AS `date_validation` -from ((`mydatabase`.`Revision_Course` join `mydatabase`.`Title_Course` `TC` - on ((`mydatabase`.`Revision_Course`.`id_title_course` = - `TC`.`title_id_course`))) join `mydatabase`.`Revision` `R` - on ((`mydatabase`.`Revision_Course`.`id_revision` = `R`.`revision_id`))); +from ((`mydatabase`.`revision_course` join `mydatabase`.`title_course` `TC` + on ((`mydatabase`.`revision_course`.`id_title_course` = + `TC`.`title_id_course`))) join `mydatabase`.`revision` `R` + on ((`mydatabase`.`revision_course`.`id_revision` = `R`.`revision_id`))); create view last_description_for_page_view as select `mydatabase`.`every_descriptions_with_page_id_view`.`id_page` AS `id_page`, @@ -346,7 +346,7 @@ where (`mydatabase`.`every_titles_with_id_courses_view`.`id_course`, from `mydatabase`.`every_titles_with_id_courses_view` group by `mydatabase`.`every_titles_with_id_courses_view`.`id_course`); --- comment on column last_description_for_page_view.id_page not supported: id de la page +-- comment on column last_description_for_page_view.id_page not supported: id de la page_view create view last_title_for_page_view as select `mydatabase`.`every_titles_with_page_id_view`.`id_page` AS `id_page`, `mydatabase`.`every_titles_with_page_id_view`.`title_page` AS `title_page`, @@ -360,55 +360,55 @@ where (`mydatabase`.`every_titles_with_page_id_view`.`id_page`, group by `mydatabase`.`every_titles_with_page_id_view`.`id_page`); create view last_revision_by_page as -select `mydatabase`.`Revision_Page`.`id_page` AS `id_page`, - substring_index(group_concat(`mydatabase`.`Revision_Page`.`id_revision` separator ','), ',', +select `mydatabase`.`revision_page`.`id_page` AS `id_page`, + substring_index(group_concat(`mydatabase`.`revision_page`.`id_revision` separator ','), ',', 1) AS `substring_index(group_concat(id_revision SEPARATOR ','), ',', 1)` -from `mydatabase`.`Revision_Page` -group by `mydatabase`.`Revision_Page`.`id_page`; +from `mydatabase`.`revision_page` +group by `mydatabase`.`revision_page`.`id_page`; --- comment on column last_revision_by_page.id_page not supported: id de la page +-- comment on column last_revision_by_page.id_page not supported: id de la page_view create view ongoing_revision_view as -select `mydatabase`.`Revision`.`revision_id` AS `revision_id`, `mydatabase`.`Revision`.`creation_user_id` AS `id_user` -from `mydatabase`.`Revision` -where (`mydatabase`.`Revision`.`date_validation` is not null); +select `mydatabase`.`revision`.`revision_id` AS `revision_id`, `mydatabase`.`revision`.`creation_user_id` AS `id_user` +from `mydatabase`.`revision` +where (`mydatabase`.`revision`.`date_validation` is not null); create view page_view as -select `mydatabase`.`Page`.`page_id` AS `id`, +select `mydatabase`.`page`.`page_id` AS `id`, `mydatabase`.`last_title_for_page_view`.`title_page` AS `title`, `mydatabase`.`last_description_for_page_view`.`description_page` AS `description`, `mydatabase`.`last_successor_for_page_view`.`successors` AS `successors`, `mydatabase`.`last_predecessors_for_page_view`.`predecessors` AS `predecessors` -from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((`mydatabase`.`Page`.`page_id` = +from ((((`mydatabase`.`page` join `mydatabase`.`last_title_for_page_view` on ((`mydatabase`.`page`.`page_id` = `mydatabase`.`last_title_for_page_view`.`id_page`))) join `mydatabase`.`last_description_for_page_view` - on ((`mydatabase`.`Page`.`page_id` = + on ((`mydatabase`.`page`.`page_id` = `mydatabase`.`last_description_for_page_view`.`id_page`))) left join `mydatabase`.`last_successor_for_page_view` - on ((`mydatabase`.`Page`.`page_id` = + on ((`mydatabase`.`page`.`page_id` = `mydatabase`.`last_successor_for_page_view`.`id_page`))) left join `mydatabase`.`last_predecessors_for_page_view` - on ((`mydatabase`.`Page`.`page_id` = `mydatabase`.`last_predecessors_for_page_view`.`id_page`))); + on ((`mydatabase`.`page`.`page_id` = `mydatabase`.`last_predecessors_for_page_view`.`id_page`))); create view course_view as -select `mydatabase`.`Course`.`course_id` AS `id`, +select `mydatabase`.`course`.`course_id` AS `id`, `mydatabase`.`last_title_for_course_view`.`title_course` AS `title`, `mydatabase`.`last_description_for_course_view`.`description_course` AS `description`, `mydatabase`.`last_pages_for_course`.`list_id_pages` AS `pages`, `mydatabase`.`last_courses_for_course_view`.`list_id_courses` AS `courses` -from ((((`mydatabase`.`Course` join `mydatabase`.`last_title_for_course_view` on ((`mydatabase`.`Course`.`course_id` = +from ((((`mydatabase`.`course` join `mydatabase`.`last_title_for_course_view` on ((`mydatabase`.`course`.`course_id` = `mydatabase`.`last_title_for_course_view`.`id_course`))) join `mydatabase`.`last_description_for_course_view` - on ((`mydatabase`.`Course`.`course_id` = + on ((`mydatabase`.`course`.`course_id` = `mydatabase`.`last_description_for_course_view`.`id_course`))) left join `mydatabase`.`last_pages_for_course` - on ((`mydatabase`.`Course`.`course_id` = + on ((`mydatabase`.`course`.`course_id` = `mydatabase`.`last_pages_for_course`.`id_course`))) left join `mydatabase`.`last_courses_for_course_view` - on ((`mydatabase`.`Course`.`course_id` = `mydatabase`.`last_courses_for_course_view`.`id_course`))); + on ((`mydatabase`.`course`.`course_id` = `mydatabase`.`last_courses_for_course_view`.`id_course`))); --- comment on column page_view.id_page not supported: id de la page +-- comment on column page_view.id_page not supported: id de la page_view create view user_view as select `U`.`user_id` AS `user_id`, `U`.`username` AS `username`, `U`.`email` AS `email`, count(`mydatabase`.`ORV`.`revision_id`) AS `count(revision_id)` -from (`mydatabase`.`User` `U` join `mydatabase`.`ongoing_revision_view` `ORV` +from (`mydatabase`.`user` `U` join `mydatabase`.`ongoing_revision_view` `ORV` on ((`U`.`user_id` = `mydatabase`.`ORV`.`id_user`))) group by `U`.`user_id`; diff --git a/src/main/resources/db/migration/V2__sample_data_generation.sql b/src/main/resources/db/migration/V2__sample_data_generation.sql index ea0cb53..a22411b 100644 --- a/src/main/resources/db/migration/V2__sample_data_generation.sql +++ b/src/main/resources/db/migration/V2__sample_data_generation.sql @@ -1,77 +1,77 @@ -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Le problème de la recherche d\'information par internet'); -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Les bons mechanismes d\'apprentissage'); -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Knowledge center, la solution'); -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Fonctionnement de Knowledge Centre'); -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('Apprentissage de connaissance'); -INSERT INTO mydatabase.Title_Page (title_page) VALUES ('L\'avenir de Knowledge Centre'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('Le problème de la recherche d\'information par internet'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('Les bons mechanismes d\'apprentissage'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('Knowledge center, la solution'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('Fonctionnement de Knowledge Centre'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('Apprentissage de connaissance'); +INSERT INTO mydatabase.title_page (title_page) VALUES ('L\'avenir de Knowledge Centre'); -insert into mydatabase.Title_Course (title_course) values ('introduction à konwledge center'); -insert into mydatabase.Title_Course (title_course) values ('introduction aux achitectures distribuées'); +insert into mydatabase.title_course (title_course) values ('introduction à konwledge center'); +insert into mydatabase.title_course (title_course) values ('introduction aux achitectures distribuées'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -INSERT INTO mydatabase.Description_Page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); +INSERT INTO mydatabase.description_page (description_page) VALUES ('Lorem ipsum dolor sit amet'); -insert into mydatabase.Description_Course (description_course) values ('comment knowledge center fonctionne'); -insert into mydatabase.Description_Course (description_course) values ('comment les architectures distribuées fonctionnes'); +insert into mydatabase.description_course (description_course) values ('comment knowledge center fonctionne'); +insert into mydatabase.description_course (description_course) values ('comment les architectures distribuées fonctionnes'); -INSERT INTO mydatabase.Page VALUES (); -INSERT INTO mydatabase.Page VALUES (); -INSERT INTO mydatabase.Page VALUES (); -INSERT INTO mydatabase.Page VALUES (); -INSERT INTO mydatabase.Page VALUES (); -INSERT INTO mydatabase.Page VALUES (); +INSERT INTO mydatabase.page VALUES (); +INSERT INTO mydatabase.page VALUES (); +INSERT INTO mydatabase.page VALUES (); +INSERT INTO mydatabase.page VALUES (); +INSERT INTO mydatabase.page VALUES (); +INSERT INTO mydatabase.page VALUES (); -insert into mydatabase.Course () values (); -insert into mydatabase.Course () values (); +insert into mydatabase.course () values (); +insert into mydatabase.course () values (); -INSERT INTO mydatabase.User (username, email, mdp) VALUES ('admin', 'admin@knowledgec.com', 'mymdp'); +INSERT INTO mydatabase.user (username, email, password) VALUES ('admin', 'admin@knowledgec.com', 'mymdp'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:49', 1, '2024-05-28 14:06:49'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:54', 1, '2024-05-28 14:06:54'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:55', 1, '2024-05-28 14:06:55'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:56', 1, '2024-05-28 14:06:56'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:57', 1, '2024-05-28 14:06:57'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:58', 1, '2024-05-28 14:06:58'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:02:10', 1, '2024-05-29 15:02:30'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:04:19', 1, '2024-05-29 15:04:25'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); -insert into mydatabase.Revision (date_validation, creation_user_id, creation_date) values ('2024-05-30 09:59:49', 1, '2024-05-30 09:59:53'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:49', 1, '2024-05-28 14:06:49'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:54', 1, '2024-05-28 14:06:54'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:55', 1, '2024-05-28 14:06:55'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:56', 1, '2024-05-28 14:06:56'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:57', 1, '2024-05-28 14:06:57'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-28 14:06:58', 1, '2024-05-28 14:06:58'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:02:10', 1, '2024-05-29 15:02:30'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:04:19', 1, '2024-05-29 15:04:25'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-29 15:11:39', 1, '2024-05-29 15:11:52'); +insert into mydatabase.revision (date_validation, creation_user_id, creation_date) values ('2024-05-30 09:59:49', 1, '2024-05-30 09:59:53'); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (1, 1, 1, 1); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (2, 2, 2, 2); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (3, 3, 3, 3); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (4, 4, 4, 4); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (5, 5, 5, 5); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (6, 6, 6, 6); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (7, 2, null, null); -insert into mydatabase.Revision_Page (id_revision, id_page, id_description_page, id_title_page) values (8, 3, null, null); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (1, 1, 1, 1); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (2, 2, 2, 2); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (3, 3, 3, 3); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (4, 4, 4, 4); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (5, 5, 5, 5); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (6, 6, 6, 6); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (7, 2, null, null); +insert into mydatabase.revision_page (id_revision, id_page, id_description_page, id_title_page) values (8, 3, null, null); -insert into mydatabase.Revision_Course (id_revision, id_course, id_description_course, id_title_course) values (10, 1, 1, 1); -insert into mydatabase.Revision_Course (id_revision, id_course, id_description_course, id_title_course) values (11, 2, 2, 2); +insert into mydatabase.revision_course (id_revision, id_course, id_description_course, id_title_course) values (10, 1, 1, 1); +insert into mydatabase.revision_course (id_revision, id_course, id_description_course, id_title_course) values (11, 2, 2, 2); -insert into mydatabase.Predecessors (id_revision, id_page) values (1, 3); -insert into mydatabase.Predecessors (id_revision, id_page) values (2, 3); -insert into mydatabase.Predecessors (id_revision, id_page) values (3, 4); -insert into mydatabase.Predecessors (id_revision, id_page) values (3, 5); -insert into mydatabase.Predecessors (id_revision, id_page) values (3, 6); +insert into mydatabase.predecessors (id_revision, id_page) values (1, 3); +insert into mydatabase.predecessors (id_revision, id_page) values (2, 3); +insert into mydatabase.predecessors (id_revision, id_page) values (3, 4); +insert into mydatabase.predecessors (id_revision, id_page) values (3, 5); +insert into mydatabase.predecessors (id_revision, id_page) values (3, 6); -insert into mydatabase.Successors (id_revision, id_page) values (3, 1); -insert into mydatabase.Successors (id_revision, id_page) values (3, 2); -insert into mydatabase.Successors (id_revision, id_page) values (4, 3); -insert into mydatabase.Successors (id_revision, id_page) values (5, 3); -insert into mydatabase.Successors (id_revision, id_page) values (6, 3); +insert into mydatabase.successors (id_revision, id_page) values (3, 1); +insert into mydatabase.successors (id_revision, id_page) values (3, 2); +insert into mydatabase.successors (id_revision, id_page) values (4, 3); +insert into mydatabase.successors (id_revision, id_page) values (5, 3); +insert into mydatabase.successors (id_revision, id_page) values (6, 3); -insert into mydatabase.Course_Course (id_revision, id_course) values (10, 2); +insert into mydatabase.course_course (id_revision, id_course) values (10, 2); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 1); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 2); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 3); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 4); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 5); -insert into mydatabase.Course_Page (id_revision, id_page) values (10, 6); +insert into mydatabase.course_page (id_revision, id_page) values (10, 1); +insert into mydatabase.course_page (id_revision, id_page) values (10, 2); +insert into mydatabase.course_page (id_revision, id_page) values (10, 3); +insert into mydatabase.course_page (id_revision, id_page) values (10, 4); +insert into mydatabase.course_page (id_revision, id_page) values (10, 5); +insert into mydatabase.course_page (id_revision, id_page) values (10, 6); From b40c654c68d20557d7e6da509f8c2fb1c620a130 Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Wed, 29 May 2024 18:03:12 +0200 Subject: [PATCH 19/21] added post category --- src/main/resources/db/migration/V1__init_tables.sql | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 3ab4180..5fd8187 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -24,6 +24,13 @@ create table page primary key ); +create table type_post +( + type_post_id int auto_increment + primary key, + label_type_post varchar(255) not null +); + create table title_course ( title_id_course bigint auto_increment @@ -62,10 +69,13 @@ create table initial_post id_post bigint not null primary key, id_page bigint not null, + id_type_post bigint null, constraint Initial_Post_Page_page_id_fk foreign key (id_page) references page (page_id), constraint Initial_Post_Post_post_id_fk - foreign key (id_post) references post (post_id) + foreign key (id_post) references post (post_id), + constraint Initial_Post_Tag_Post_tag_post_id_fk + foreign key (id_type_post) references type_post (type_post_id) ); create table response_post From ffa778108a5cf1d79e25ce8b4d989fba3a7d8fc2 Mon Sep 17 00:00:00 2001 From: gregoireLeBras Date: Wed, 29 May 2024 18:03:12 +0200 Subject: [PATCH 20/21] added post category --- src/main/resources/db/migration/V1__init_tables.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V1__init_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql index 5fd8187..63b698d 100644 --- a/src/main/resources/db/migration/V1__init_tables.sql +++ b/src/main/resources/db/migration/V1__init_tables.sql @@ -35,7 +35,7 @@ create table title_course ( title_id_course bigint auto_increment primary key, - title_course varchar(255) not null + label_type_post varchar(255) not null ); create table title_page From e3a0d2135cb67d74736bfb39f92c80599e8d63fb Mon Sep 17 00:00:00 2001 From: AlphaOrOmega <103359692+AlphaOrOmega@users.noreply.github.com> Date: Thu, 27 Jun 2024 10:01:50 +0200 Subject: [PATCH 21/21] partial triggers --- src/main/resources/db/migration/V3__plsql.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/resources/db/migration/V3__plsql.sql diff --git a/src/main/resources/db/migration/V3__plsql.sql b/src/main/resources/db/migration/V3__plsql.sql new file mode 100644 index 0000000..41898dc --- /dev/null +++ b/src/main/resources/db/migration/V3__plsql.sql @@ -0,0 +1,16 @@ +create trigger user_max_5_ongoing_revisions + before insert on revision for each row +begin + if (select count(Ongoing_Revision_View.revision_id) as number_revisions from Ongoing_Revision_View where id_user = new.creation_user_id group by creation_user_id) >= 5 then + signal sqlstate '45000'; + end if; +end; + + +create trigger revision_creation_date_prior_to_validation_date + before insert on revision for each row +begin + if new.creation_date >= new.date_validation then + signal sqlstate '45000'; + end if; +end; \ No newline at end of file