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