diff --git a/pom.xml b/pom.xml
index 1d47a67..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
@@ -67,6 +72,12 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+ org.testng
+ testng
+ 7.7.0
+ compile
+
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/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/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
new file mode 100644
index 0000000..6bd61da
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentController.java
@@ -0,0 +1,30 @@
+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/posts/{postId}/comments")
+public class CommentController {
+
+ @Autowired
+ private CommentService commentService;
+
+ @GetMapping
+ public List getAllCommentsByPostId(@PathVariable Long postId) {
+ return commentService.getAllCommentsByPostId(postId);
+ }
+
+ @PostMapping
+ 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
new file mode 100644
index 0000000..ed6bdbc
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentRepository.java
@@ -0,0 +1,11 @@
+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..7ab3ad3
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/comment/CommentService.java
@@ -0,0 +1,39 @@
+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 org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class CommentService {
+
+ @Autowired
+ private CommentRepository commentRepository;
+
+ @Autowired
+ private PostRepository postRepository;
+
+ @Transactional(readOnly = true)
+ public List getAllCommentsByPostId(Long postId) {
+ return commentRepository.findByPostId(postId);
+ }
+
+ @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);
+ }
+}
+
+
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/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("*");
+ }
+}
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/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
new file mode 100644
index 0000000..5581857
--- /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/ForumRepository.java b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumRepository.java
new file mode 100644
index 0000000..3947ff4
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumRepository.java
@@ -0,0 +1,8 @@
+package org.autol.knowledgecentrebackend.forum;
+
+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..03f4fe4
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/forum/ForumService.java
@@ -0,0 +1,32 @@
+package org.autol.knowledgecentrebackend.forum;
+
+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/page/Page.java b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java
index d0072cb..6dd0339 100644
--- a/src/main/java/org/autol/knowledgecentrebackend/page/Page.java
+++ b/src/main/java/org/autol/knowledgecentrebackend/page/Page.java
@@ -8,45 +8,13 @@
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 = "descritpion")
- private String description;
-
- @Column(name = "title")
- private String title;
-
- @Column(name = "predevessors")
- 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 ? (List) null : Arrays.stream(predecessors.split(","))
- .map(Long::valueOf)
- .toList();
- }
-
- public List getSuccessors() {
- return successors == null ? (List) 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 0502830..0000000
--- a/src/main/java/org/autol/knowledgecentrebackend/page/PageController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.autol.knowledgecentrebackend.page;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-@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);
- }
-}
diff --git a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java
index ac5bcdb..38b1021 100644
--- a/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java
+++ b/src/main/java/org/autol/knowledgecentrebackend/page/PageRepository.java
@@ -1,7 +1,7 @@
package org.autol.knowledgecentrebackend.page;
-import org.autol.knowledgecentrebackend.ReadOnlyRepository;
+import org.springframework.data.jpa.repository.JpaRepository;
-public interface PageRepository extends ReadOnlyRepository {
+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 5a15d97..0000000
--- a/src/main/java/org/autol/knowledgecentrebackend/page/PageService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.autol.knowledgecentrebackend.page;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@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();
- }
-}
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
new file mode 100644
index 0000000..f169385
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostController.java
@@ -0,0 +1,39 @@
+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 java.util.List;
+
+@RestController
+@RequestMapping("/api/forums/{forumId}/posts")
+public class PostController {
+
+ @Autowired
+ private PostService postService;
+
+ @GetMapping
+ 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(@PathVariable Long forumId, @RequestBody Post post) {
+ Forum forum = postService.getOrCreateForum(forumId);
+ post.setForum(forum);
+ return postService.savePost(post);
+ }
+
+ @DeleteMapping("/{postId}")
+ public void deletePost(@PathVariable Long postId) {
+ postService.deletePost(postId);
+ }
+}
+
+
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..57e81bf
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostRepository.java
@@ -0,0 +1,10 @@
+package org.autol.knowledgecentrebackend.post;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface PostRepository extends JpaRepository {
+ List findByForumId(Long forumId);
+}
+
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..f5b5b35
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/post/PostService.java
@@ -0,0 +1,55 @@
+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 org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+public class PostService {
+
+ @Autowired
+ private PostRepository postRepository;
+
+ @Autowired
+ private ForumRepository forumRepository;
+
+ @Transactional(readOnly = true)
+ public List getAllPostsByForumId(Long forumId) {
+ return postRepository.findByForumId(forumId);
+ }
+
+ @Transactional(readOnly = true)
+ public Post getPostById(Long id) {
+ return postRepository.findById(id).orElse(null);
+ }
+
+ @Transactional
+ public Post savePost(Post post) {
+ return postRepository.save(post);
+ }
+
+ @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);
+ }
+}
+
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
new file mode 100644
index 0000000..4c2cc86
--- /dev/null
+++ b/src/main/java/org/autol/knowledgecentrebackend/user/UserRepository.java
@@ -0,0 +1,7 @@
+package org.autol.knowledgecentrebackend.user;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface UserRepository extends JpaRepository {
+}
+
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 6d9df0a..834b09a 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=root
spring.datasource.password=verysecret
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_tables.sql b/src/main/resources/db/migration/V1__init_tables.sql
index bce702f..63b698d 100644
--- a/src/main/resources/db/migration/V1__init_tables.sql
+++ b/src/main/resources/db/migration/V1__init_tables.sql
@@ -1,203 +1,233 @@
-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 type_post
(
- title_id_course int auto_increment
+ type_post_id int auto_increment
primary key,
- title_course varchar(255) not null
+ label_type_post varchar(255) not null
);
-create table Title_Page
+create table title_course
(
- title_id_page int auto_increment
+ title_id_course bigint auto_increment
+ primary key,
+ label_type_post varchar(255) not null
+);
+
+create table title_page
+(
+ 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,
+ id_type_post bigint 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),
+ constraint Initial_Post_Tag_Post_tag_post_id_fk
+ foreign key (id_type_post) references type_post (type_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`
+ 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`
+ 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`,
@@ -211,6 +241,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,43 +265,60 @@ 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`,
- `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`)));
-
--- comment on column every_descriptions_with_page_id_view.id_page not supported: id de la page
+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`,
+ `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_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`)));
-
--- comment on column every_titles_with_page_id_view.id_page not supported: id de la page
+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_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`,
+ `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`,
@@ -273,7 +332,31 @@ 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`);
--- comment on column last_description_for_page_view.id_page not supported: id de la 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 `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`,
+ `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_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`,
@@ -287,41 +370,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 `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`
-from ((((`mydatabase`.`Page` join `mydatabase`.`last_title_for_page_view` on ((`mydatabase`.`Page`.`page_id` =
+ `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` =
+ 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`)));
--- comment on column page_view.id_page not supported: id de la page
+create view course_view as
+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` =
+ `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`.`last_pages_for_course`
+ 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`)));
+
+-- 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 2feac1a..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,53 +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.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.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.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');
-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_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.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.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.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.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.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_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.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.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);
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