parent
fa1a716e6a
commit
236378e0cb
@ -1,13 +0,0 @@
|
|||||||
# Étape de build
|
|
||||||
FROM maven:3.8.6-openjdk-21 AS build
|
|
||||||
WORKDIR /app
|
|
||||||
COPY pom.xml .
|
|
||||||
COPY src ./src
|
|
||||||
RUN mvn clean package -DskipTests
|
|
||||||
|
|
||||||
# Étape d'exécution
|
|
||||||
FROM openjdk:21-jdk
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=build /app/target/demo-1.0.0.jar app.jar
|
|
||||||
EXPOSE 8080
|
|
||||||
ENTRYPOINT ["java", "-jar", "app.jar"]
|
|
@ -1,14 +0,0 @@
|
|||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: default
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: build
|
|
||||||
image: maven:3.8.6-openjdk-21
|
|
||||||
commands:
|
|
||||||
- mvn clean package -DskipTests
|
|
||||||
|
|
||||||
- name: test
|
|
||||||
image: maven:3.8.6-openjdk-21
|
|
||||||
commands:
|
|
||||||
- mvn test
|
|
@ -1,88 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<parent>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
|
||||||
<version>3.4.4</version>
|
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
|
||||||
</parent>
|
|
||||||
<groupId>com.example</groupId>
|
|
||||||
<artifactId>WF-WEBAPI</artifactId>
|
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
|
||||||
<name>WF-WEBAPI</name>
|
|
||||||
<description>WF-WEBAPI</description>
|
|
||||||
<url/>
|
|
||||||
<licenses>
|
|
||||||
<license/>
|
|
||||||
</licenses>
|
|
||||||
<developers>
|
|
||||||
<developer/>
|
|
||||||
</developers>
|
|
||||||
<scm>
|
|
||||||
<connection/>
|
|
||||||
<developerConnection/>
|
|
||||||
<tag/>
|
|
||||||
<url/>
|
|
||||||
</scm>
|
|
||||||
<properties>
|
|
||||||
<java.version>21</java.version>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.h2database</groupId>
|
|
||||||
<artifactId>h2</artifactId>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-hateoas</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-security</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
|
||||||
<artifactId>jjwt-api</artifactId>
|
|
||||||
<version>0.11.5</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
|
||||||
<artifactId>jjwt-impl</artifactId>
|
|
||||||
<version>0.11.5</version>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.jsonwebtoken</groupId>
|
|
||||||
<artifactId>jjwt-jackson</artifactId>
|
|
||||||
<version>0.11.5</version>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,11 +0,0 @@
|
|||||||
package com.example.wfwebapi;
|
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
public class WfWebapiApplication {
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(WfWebapiApplication.class, args);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Admin")
|
|
||||||
public class Admin {
|
|
||||||
@Id
|
|
||||||
@Column(name = "users")
|
|
||||||
private Long userId;
|
|
||||||
|
|
||||||
@OneToOne
|
|
||||||
@JoinColumn(name = "users", insertable = false, updatable = false)
|
|
||||||
private User user;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getUserId() { return userId; }
|
|
||||||
public void setUserId(Long userId) { this.userId = userId; }
|
|
||||||
public User getUser() { return user; }
|
|
||||||
public void setUser(User user) { this.user = user; }
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Caracter")
|
|
||||||
public class Caracter {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_caracter")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "caracter", nullable = false, length = 100)
|
|
||||||
private String caracter;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "id_img", nullable = false)
|
|
||||||
private Image image;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getCaracter() { return caracter; }
|
|
||||||
public void setCaracter(String caracter) { this.caracter = caracter; }
|
|
||||||
public Image getImage() { return image; }
|
|
||||||
public void setImage(Image image) { this.image = image; }
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Commentary")
|
|
||||||
public class Commentary {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_comment")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "quote", nullable = false)
|
|
||||||
private Quote quote;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "users", nullable = false)
|
|
||||||
private User user;
|
|
||||||
|
|
||||||
@Column(name = "dateC", nullable = false)
|
|
||||||
private LocalDate dateC;
|
|
||||||
|
|
||||||
@Column(name = "comment", nullable = false, columnDefinition = "text")
|
|
||||||
private String comment;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public Quote getQuote() { return quote; }
|
|
||||||
public void setQuote(Quote quote) { this.quote = quote; }
|
|
||||||
public User getUser() { return user; }
|
|
||||||
public void setUser(User user) { this.user = user; }
|
|
||||||
public LocalDate getDateC() { return dateC; }
|
|
||||||
public void setDateC(LocalDate dateC) { this.dateC = dateC; }
|
|
||||||
public String getComment() { return comment; }
|
|
||||||
public void setComment(String comment) { this.comment = comment; }
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "DailyQuote")
|
|
||||||
public class DailyQuote {
|
|
||||||
@Id
|
|
||||||
@Column(name = "citation_id")
|
|
||||||
private Long citationId;
|
|
||||||
|
|
||||||
@OneToOne
|
|
||||||
@JoinColumn(name = "citation_id", insertable = false, updatable = false)
|
|
||||||
private Quote quote;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getCitationId() { return citationId; }
|
|
||||||
public void setCitationId(Long citationId) { this.citationId = citationId; }
|
|
||||||
public Quote getQuote() { return quote; }
|
|
||||||
public void setQuote(Quote quote) { this.quote = quote; }
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Favorite")
|
|
||||||
public class Favorite {
|
|
||||||
@EmbeddedId
|
|
||||||
private FavoriteId id;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("user")
|
|
||||||
@JoinColumn(name = "users")
|
|
||||||
private User user;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("quote")
|
|
||||||
@JoinColumn(name = "quote")
|
|
||||||
private Quote quote;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public FavoriteId getId() { return id; }
|
|
||||||
public void setId(FavoriteId id) { this.id = id; }
|
|
||||||
public User getUser() { return user; }
|
|
||||||
public void setUser(User user) { this.user = user; }
|
|
||||||
public Quote getQuote() { return quote; }
|
|
||||||
public void setQuote(Quote quote) { this.quote = quote; }
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Objects;
|
|
||||||
import jakarta.persistence.Embeddable;
|
|
||||||
|
|
||||||
@Embeddable
|
|
||||||
public class FavoriteId implements Serializable {
|
|
||||||
private Long user;
|
|
||||||
private Long quote;
|
|
||||||
|
|
||||||
public FavoriteId() {}
|
|
||||||
|
|
||||||
public FavoriteId(Long user, Long quote) {
|
|
||||||
this.user = user;
|
|
||||||
this.quote = quote;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getUser() { return user; }
|
|
||||||
public void setUser(Long user) { this.user = user; }
|
|
||||||
public Long getQuote() { return quote; }
|
|
||||||
public void setQuote(Long quote) { this.quote = quote; }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (!(o instanceof FavoriteId)) return false;
|
|
||||||
FavoriteId that = (FavoriteId) o;
|
|
||||||
return Objects.equals(getUser(), that.getUser()) &&
|
|
||||||
Objects.equals(getQuote(), that.getQuote());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(getUser(), getQuote());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Image")
|
|
||||||
public class Image {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_img")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "imgPath", nullable = false, unique = true, length = 300)
|
|
||||||
private String imgPath;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getImgPath() { return imgPath; }
|
|
||||||
public void setImgPath(String imgPath) { this.imgPath = imgPath; }
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Question")
|
|
||||||
public class Question {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_question")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "texte", nullable = false, columnDefinition = "text", unique = true)
|
|
||||||
private String texte;
|
|
||||||
|
|
||||||
@Column(name = "answerA", nullable = false, length = 30)
|
|
||||||
private String answerA;
|
|
||||||
|
|
||||||
@Column(name = "answerB", nullable = false, length = 30)
|
|
||||||
private String answerB;
|
|
||||||
|
|
||||||
@Column(name = "answerC", nullable = false, length = 30)
|
|
||||||
private String answerC;
|
|
||||||
|
|
||||||
@Column(name = "answerD", nullable = false, length = 30)
|
|
||||||
private String answerD;
|
|
||||||
|
|
||||||
@Column(name = "cAnswer", nullable = false, length = 30)
|
|
||||||
private String cAnswer;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getTexte() { return texte; }
|
|
||||||
public void setTexte(String texte) { this.texte = texte; }
|
|
||||||
public String getAnswerA() { return answerA; }
|
|
||||||
public void setAnswerA(String answerA) { this.answerA = answerA; }
|
|
||||||
public String getAnswerB() { return answerB; }
|
|
||||||
public void setAnswerB(String answerB) { this.answerB = answerB; }
|
|
||||||
public String getAnswerC() { return answerC; }
|
|
||||||
public void setAnswerC(String answerC) { this.answerC = answerC; }
|
|
||||||
public String getAnswerD() { return answerD; }
|
|
||||||
public void setAnswerD(String answerD) { this.answerD = answerD; }
|
|
||||||
public String getCAnswer() { return cAnswer; }
|
|
||||||
public void setCAnswer(String cAnswer) { this.cAnswer = cAnswer; }
|
|
||||||
}
|
|
@ -1,32 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Quiz")
|
|
||||||
public class Quiz {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_quiz")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "title", nullable = false, length = 40)
|
|
||||||
private String title;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "img", nullable = false)
|
|
||||||
private Image image;
|
|
||||||
|
|
||||||
@Column(name = "nb_quest")
|
|
||||||
private Integer nbQuest;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getTitle() { return title; }
|
|
||||||
public void setTitle(String title) { this.title = title; }
|
|
||||||
public Image getImage() { return image; }
|
|
||||||
public void setImage(Image image) { this.image = image; }
|
|
||||||
public Integer getNbQuest() { return nbQuest; }
|
|
||||||
public void setNbQuest(Integer nbQuest) { this.nbQuest = nbQuest; }
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Quiz_Question")
|
|
||||||
public class QuizQuestion {
|
|
||||||
@EmbeddedId
|
|
||||||
private QuizQuestionId id;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("quiz")
|
|
||||||
@JoinColumn(name = "quiz")
|
|
||||||
private Quiz quiz;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("question")
|
|
||||||
@JoinColumn(name = "question")
|
|
||||||
private Question question;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public QuizQuestionId getId() { return id; }
|
|
||||||
public void setId(QuizQuestionId id) { this.id = id; }
|
|
||||||
public Quiz getQuiz() { return quiz; }
|
|
||||||
public void setQuiz(Quiz quiz) { this.quiz = quiz; }
|
|
||||||
public Question getQuestion() { return question; }
|
|
||||||
public void setQuestion(Question question) { this.question = question; }
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Objects;
|
|
||||||
import jakarta.persistence.Embeddable;
|
|
||||||
|
|
||||||
@Embeddable
|
|
||||||
public class QuizQuestionId implements Serializable {
|
|
||||||
private Long quiz;
|
|
||||||
private Long question;
|
|
||||||
|
|
||||||
public QuizQuestionId() {}
|
|
||||||
|
|
||||||
public QuizQuestionId(Long quiz, Long question) {
|
|
||||||
this.quiz = quiz;
|
|
||||||
this.question = question;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getQuiz() { return quiz; }
|
|
||||||
public void setQuiz(Long quiz) { this.quiz = quiz; }
|
|
||||||
public Long getQuestion() { return question; }
|
|
||||||
public void setQuestion(Long question) { this.question = question; }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (!(o instanceof QuizQuestionId)) return false;
|
|
||||||
QuizQuestionId that = (QuizQuestionId) o;
|
|
||||||
return Objects.equals(getQuiz(), that.getQuiz()) &&
|
|
||||||
Objects.equals(getQuestion(), that.getQuestion());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(getQuiz(), getQuestion());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Quote")
|
|
||||||
public class Quote {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_quote")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "content", nullable = false, columnDefinition = "text")
|
|
||||||
private String content;
|
|
||||||
|
|
||||||
@Column(name = "likes")
|
|
||||||
private Integer likes;
|
|
||||||
|
|
||||||
@Column(name = "langue", nullable = false, length = 2)
|
|
||||||
private String langue;
|
|
||||||
|
|
||||||
@Column(name = "isValide", nullable = false)
|
|
||||||
private Boolean isValide;
|
|
||||||
|
|
||||||
@Column(name = "reason", nullable = false, length = 100)
|
|
||||||
private String reason;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "id_caracter", nullable = false)
|
|
||||||
private Caracter caracter;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "id_source", nullable = false)
|
|
||||||
private Source source;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "id_user_verif", nullable = false)
|
|
||||||
private User userVerif;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getContent() { return content; }
|
|
||||||
public void setContent(String content) { this.content = content; }
|
|
||||||
public Integer getLikes() { return likes; }
|
|
||||||
public void setLikes(Integer likes) { this.likes = likes; }
|
|
||||||
public String getLangue() { return langue; }
|
|
||||||
public void setLangue(String langue) { this.langue = langue; }
|
|
||||||
public Boolean getIsValide() { return isValide; }
|
|
||||||
public void setIsValide(Boolean isValide) { this.isValide = isValide; }
|
|
||||||
public String getReason() { return reason; }
|
|
||||||
public void setReason(String reason) { this.reason = reason; }
|
|
||||||
public Caracter getCaracter() { return caracter; }
|
|
||||||
public void setCaracter(Caracter caracter) { this.caracter = caracter; }
|
|
||||||
public Source getSource() { return source; }
|
|
||||||
public void setSource(Source source) { this.source = source; }
|
|
||||||
public User getUserVerif() { return userVerif; }
|
|
||||||
public void setUserVerif(User userVerif) { this.userVerif = userVerif; }
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Record_quiz")
|
|
||||||
public class RecordQuiz {
|
|
||||||
@EmbeddedId
|
|
||||||
private RecordQuizId id;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("user")
|
|
||||||
@JoinColumn(name = "users")
|
|
||||||
private User user;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@MapsId("quiz")
|
|
||||||
@JoinColumn(name = "quiz")
|
|
||||||
private Quiz quiz;
|
|
||||||
|
|
||||||
@Column(name = "nbPoint")
|
|
||||||
private Integer nbPoint;
|
|
||||||
|
|
||||||
@Column(name = "timeQ")
|
|
||||||
private Integer timeQ;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public RecordQuizId getId() { return id; }
|
|
||||||
public void setId(RecordQuizId id) { this.id = id; }
|
|
||||||
public User getUser() { return user; }
|
|
||||||
public void setUser(User user) { this.user = user; }
|
|
||||||
public Quiz getQuiz() { return quiz; }
|
|
||||||
public void setQuiz(Quiz quiz) { this.quiz = quiz; }
|
|
||||||
public Integer getNbPoint() { return nbPoint; }
|
|
||||||
public void setNbPoint(Integer nbPoint) { this.nbPoint = nbPoint; }
|
|
||||||
public Integer getTimeQ() { return timeQ; }
|
|
||||||
public void setTimeQ(Integer timeQ) { this.timeQ = timeQ; }
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Objects;
|
|
||||||
import jakarta.persistence.Embeddable;
|
|
||||||
|
|
||||||
@Embeddable
|
|
||||||
public class RecordQuizId implements Serializable {
|
|
||||||
private Long user;
|
|
||||||
private Long quiz;
|
|
||||||
|
|
||||||
public RecordQuizId() {}
|
|
||||||
|
|
||||||
public RecordQuizId(Long user, Long quiz) {
|
|
||||||
this.user = user;
|
|
||||||
this.quiz = quiz;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getUser() { return user; }
|
|
||||||
public void setUser(Long user) { this.user = user; }
|
|
||||||
public Long getQuiz() { return quiz; }
|
|
||||||
public void setQuiz(Long quiz) { this.quiz = quiz; }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (!(o instanceof RecordQuizId)) return false;
|
|
||||||
RecordQuizId that = (RecordQuizId) o;
|
|
||||||
return Objects.equals(getUser(), that.getUser()) &&
|
|
||||||
Objects.equals(getQuiz(), that.getQuiz());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(getUser(), getQuiz());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Source")
|
|
||||||
public class Source {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_source")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "title", nullable = false, length = 100)
|
|
||||||
private String title;
|
|
||||||
|
|
||||||
@Column(name = "dateS", nullable = false)
|
|
||||||
private Integer dateS;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getTitle() { return title; }
|
|
||||||
public void setTitle(String title) { this.title = title; }
|
|
||||||
public Integer getDateS() { return dateS; }
|
|
||||||
public void setDateS(Integer dateS) { this.dateS = dateS; }
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
package com.example.wfwebapi.model;
|
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
|
|
||||||
@Entity
|
|
||||||
@Table(name = "Users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
|
|
||||||
public class User {
|
|
||||||
@Id
|
|
||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
||||||
@Column(name = "id_user")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Column(name = "username", nullable = false, length = 50)
|
|
||||||
private String username;
|
|
||||||
|
|
||||||
@Column(name = "email", nullable = false, length = 50)
|
|
||||||
private String email;
|
|
||||||
|
|
||||||
@Column(name = "password", nullable = false, length = 100)
|
|
||||||
private String password;
|
|
||||||
|
|
||||||
@ManyToOne
|
|
||||||
@JoinColumn(name = "img", nullable = false)
|
|
||||||
private Image image;
|
|
||||||
|
|
||||||
@Column(name = "creation", nullable = false)
|
|
||||||
private LocalDate creation;
|
|
||||||
|
|
||||||
// Getters et setters
|
|
||||||
public Long getId() { return id; }
|
|
||||||
public void setId(Long id) { this.id = id; }
|
|
||||||
public String getUsername() { return username; }
|
|
||||||
public void setUsername(String username) { this.username = username; }
|
|
||||||
public String getEmail() { return email; }
|
|
||||||
public void setEmail(String email) { this.email = email; }
|
|
||||||
public String getPassword() { return password; }
|
|
||||||
public void setPassword(String password) { this.password = password; }
|
|
||||||
public Image getImage() { return image; }
|
|
||||||
public void setImage(Image image) { this.image = image; }
|
|
||||||
public LocalDate getCreation() { return creation; }
|
|
||||||
public void setCreation(LocalDate creation) { this.creation = creation; }
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
spring.application.name=WF-WEBAPI
|
|
||||||
|
|
||||||
# Utilisation de H2 avec le script d'initialisation
|
|
||||||
spring.datasource.url=jdbc:h2:mem:testdb
|
|
||||||
spring.datasource.driverClassName=org.h2.Driver
|
|
||||||
spring.datasource.username=sa
|
|
||||||
spring.datasource.password=
|
|
||||||
spring.sql.init.mode=always
|
|
||||||
spring.sql.init.schema-locations=classpath:init.sql
|
|
||||||
spring.jpa.hibernate.ddl-auto=none
|
|
||||||
spring.h2.console.enabled=true
|
|
||||||
server.port=8080
|
|
@ -1,338 +0,0 @@
|
|||||||
-- Suppression des tables
|
|
||||||
DROP TABLE IF EXISTS Commentary;
|
|
||||||
DROP TABLE IF EXISTS Favorite;
|
|
||||||
DROP TABLE IF EXISTS DailyQuote;
|
|
||||||
DROP TABLE IF EXISTS Quote;
|
|
||||||
DROP TABLE IF EXISTS Caracter;
|
|
||||||
DROP TABLE IF EXISTS Source;
|
|
||||||
DROP TABLE IF EXISTS Record_quiz;
|
|
||||||
DROP TABLE IF EXISTS Quiz_Question;
|
|
||||||
DROP TABLE IF EXISTS Quiz;
|
|
||||||
DROP TABLE IF EXISTS Question;
|
|
||||||
DROP TABLE IF EXISTS Admin;
|
|
||||||
DROP TABLE IF EXISTS Users;
|
|
||||||
DROP TABLE IF EXISTS Image;
|
|
||||||
|
|
||||||
-- Création des tables
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Image(
|
|
||||||
id_img NUMERIC PRIMARY KEY,
|
|
||||||
imgPath varchar(300) NOT NULL UNIQUE
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Users(
|
|
||||||
id_user SERIAL PRIMARY KEY,
|
|
||||||
username varchar(50) NOT NULL,
|
|
||||||
email varchar(50) NOT NULL,
|
|
||||||
password varchar(100) NOT NULL,
|
|
||||||
img NUMERIC NOT NULL,
|
|
||||||
creation date NOT NULL,
|
|
||||||
CONSTRAINT unique_col UNIQUE (email),
|
|
||||||
CONSTRAINT fk_img FOREIGN KEY(img) REFERENCES Image(id_img)
|
|
||||||
);
|
|
||||||
|
|
||||||
Create OR REPLACE Function IfUserIsAdmin() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Delete From Admin
|
|
||||||
where users = OLD.id_user;
|
|
||||||
|
|
||||||
RETURN OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
|
|
||||||
Create Trigger IfUserIsAdmin BEFORE DELETE on Users
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION IfUserIsAdmin();
|
|
||||||
|
|
||||||
|
|
||||||
Create OR REPLACE Function DeleteUserFavorite() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Delete From Favorite
|
|
||||||
where users = OLD.id_user;
|
|
||||||
|
|
||||||
RETURN OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
|
|
||||||
Create Trigger DeleteUserFavorite BEFORE DELETE on Users
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION DeleteUserFavorite();
|
|
||||||
|
|
||||||
Create OR REPLACE Function DeleteUserCommentary() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Delete From Commentary
|
|
||||||
where users = OLD.id_user;
|
|
||||||
|
|
||||||
RETURN OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
|
|
||||||
Create Trigger DeleteUserCommentary BEFORE DELETE on Users
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION DeleteUserCommentary();
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Admin(
|
|
||||||
users SERIAL PRIMARY KEY,
|
|
||||||
CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user)
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Question(
|
|
||||||
id_question SERIAL PRIMARY KEY,
|
|
||||||
texte text NOT NULL UNIQUE,
|
|
||||||
answerA varchar(30) NOT NULL,
|
|
||||||
answerB varchar(30) NOT NULL,
|
|
||||||
answerC varchar(30) NOT NULL,
|
|
||||||
answerD varchar(30) NOT NULL,
|
|
||||||
cAnswer varchar(30) NOT NULL,
|
|
||||||
CONSTRAINT check_cAnswer CHECK (cAnswer = answerA OR cAnswer = answerB OR cAnswer = answerC OR cAnswer = answerD)
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Quiz(
|
|
||||||
id_quiz SERIAL PRIMARY KEY,
|
|
||||||
title varchar(40) NOT NULL,
|
|
||||||
img NUMERIC NOT NULL,
|
|
||||||
nb_quest numeric Default 0,
|
|
||||||
CONSTRAINT fk_img FOREIGN KEY(img) REFERENCES Image(id_img)
|
|
||||||
);
|
|
||||||
|
|
||||||
Create OR REPLACE Function DeleteQuiz() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Delete From Quiz_Question
|
|
||||||
where quiz=OLD.id_quiz;
|
|
||||||
|
|
||||||
Delete From Record_quiz
|
|
||||||
where quiz=OLD.id_quiz;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
Create Trigger DeleteQuiz BEFORE DELETE on Quiz
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION DeleteQuiz();
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Quiz_Question(
|
|
||||||
quiz SERIAL NOT NULL,
|
|
||||||
question SERIAL NOT NULL,
|
|
||||||
PRIMARY KEY (quiz, question),
|
|
||||||
CONSTRAINT fk_quiz FOREIGN KEY(quiz) REFERENCES Quiz(id_quiz),
|
|
||||||
CONSTRAINT fk_question FOREIGN KEY(question) REFERENCES Question(id_question)
|
|
||||||
);
|
|
||||||
|
|
||||||
Create OR REPLACE Function NombreQuestionQuiz() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
nb numeric;
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
IF TG_OP='DELETE' Then
|
|
||||||
SELECT count(quiz) INTO nb
|
|
||||||
FROM Quiz_Question
|
|
||||||
WHERE quiz = OLD.quiz;
|
|
||||||
Else
|
|
||||||
SELECT count(quiz) INTO nb
|
|
||||||
FROM Quiz_Question
|
|
||||||
WHERE quiz = NEW.quiz;
|
|
||||||
End IF;
|
|
||||||
|
|
||||||
|
|
||||||
Update Quiz
|
|
||||||
set nb_quest=nb
|
|
||||||
where id_quiz=NEW.quiz;
|
|
||||||
|
|
||||||
Return OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
Create Trigger NombreQuestionQuiz AFTER INSERT or UPDATE or DELETE on Quiz_Question
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION NombreQuestionQuiz();
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Record_quiz(
|
|
||||||
users SERIAL NOT NULL,
|
|
||||||
quiz SERIAL NOT NULL,
|
|
||||||
nbPoint numeric DEFAULT 0,
|
|
||||||
timeQ numeric DEFAULT 0,
|
|
||||||
PRIMARY KEY (users, quiz),
|
|
||||||
CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user),
|
|
||||||
CONSTRAINT fk_quiz FOREIGN KEY(quiz) REFERENCES Quiz(id_quiz),
|
|
||||||
CONSTRAINT err_nbPoint CHECK(nbPoint >= 0),
|
|
||||||
CONSTRAINT err_timeQ CHECK(timeQ >= 0)
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Source(
|
|
||||||
id_source SERIAL PRIMARY KEY,
|
|
||||||
title varchar(100) NOT NULL,
|
|
||||||
dateS numeric(4) NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Caracter(
|
|
||||||
id_caracter SERIAL PRIMARY KEY,
|
|
||||||
caracter varchar(100) NOT NULL,
|
|
||||||
id_img NUMERIC NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Quote(
|
|
||||||
id_quote SERIAL PRIMARY KEY,
|
|
||||||
content text NOT NULL,
|
|
||||||
likes numeric DEFAULT '0',
|
|
||||||
langue char(2) NOT NULL,
|
|
||||||
isValide boolean NOT NULL DEFAULT 'false',
|
|
||||||
reason varchar(100) NOT NULL,
|
|
||||||
id_caracter SERIAL NOT NULL,
|
|
||||||
id_source SERIAL NOT NULL,
|
|
||||||
id_user_verif SERIAL NOT NULL,
|
|
||||||
CONSTRAINT fk_caracter FOREIGN KEY(id_caracter) REFERENCES Caracter(id_caracter),
|
|
||||||
CONSTRAINT fk_source FOREIGN KEY(id_source) REFERENCES Source(id_source),
|
|
||||||
CONSTRAINT fk_userverif FOREIGN KEY(id_user_verif) REFERENCES Users(id_user),
|
|
||||||
CONSTRAINT err_nbLike CHECK (likes >= 0),
|
|
||||||
CONSTRAINT err_language CHECK (langue = 'fr' OR langue = 'en')
|
|
||||||
);
|
|
||||||
|
|
||||||
Create OR REPLACE Function DeleteQuoteBEFORE() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Delete From Favorite
|
|
||||||
where quote=OLD.id_quote;
|
|
||||||
|
|
||||||
|
|
||||||
Delete From Commentary
|
|
||||||
where quote=OLD.id_quote;
|
|
||||||
|
|
||||||
|
|
||||||
If OLD.id_quote in (Select citation_id From DailyQuote) Then
|
|
||||||
Update DailyQuote
|
|
||||||
set citation_id = (Select id_quote
|
|
||||||
From Quote
|
|
||||||
Where id_quote!=OLD.id_quote
|
|
||||||
ORDER BY RAND()
|
|
||||||
LIMIT 1)
|
|
||||||
Where citation_id=OLD.id_quote;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
Return OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
Create Trigger DeleteQuoteBEFORE BEFORE DELETE on Quote
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION DeleteQuoteBEFORE();
|
|
||||||
|
|
||||||
|
|
||||||
Create OR REPLACE Function DeleteQuoteAFTER() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
nb numeric;
|
|
||||||
BEGIN
|
|
||||||
Select count(id_caracter) into nb
|
|
||||||
from Quote
|
|
||||||
where id_caracter=OLD.id_caracter;
|
|
||||||
|
|
||||||
IF nb <= 1 Then
|
|
||||||
Delete from Caracter
|
|
||||||
where id_caracter=OLD.id_caracter;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
|
|
||||||
Select count(id_source) into nb
|
|
||||||
from Quote
|
|
||||||
where id_source=OLD.id_source;
|
|
||||||
|
|
||||||
IF nb <= 1 Then
|
|
||||||
Delete from Source
|
|
||||||
where id_source=OLD.id_source;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
Return OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
Create Trigger DeleteQuoteAFTER AFTER DELETE on Quote
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION DeleteQuoteAFTER();
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE DailyQuote(
|
|
||||||
citation_id INT PRIMARY KEY,
|
|
||||||
FOREIGN KEY (citation_id) REFERENCES Quote(id_quote) ON DELETE CASCADE
|
|
||||||
);
|
|
||||||
|
|
||||||
Create OR REPLACE Function UniqueDailyQuote() RETURNS trigger AS $$
|
|
||||||
DECLARE
|
|
||||||
nb numeric;
|
|
||||||
BEGIN
|
|
||||||
Select count(*) into nb
|
|
||||||
from DailyQuote;
|
|
||||||
|
|
||||||
IF nb = 0 Then
|
|
||||||
INSERT INTO DailyQuote (citation_id)
|
|
||||||
VALUES( (Select id_quote
|
|
||||||
From Quote
|
|
||||||
Where id_quote!=OLD.id_quote
|
|
||||||
ORDER BY RAND()
|
|
||||||
LIMIT 1 ) );
|
|
||||||
|
|
||||||
ELSIF nb>1 then
|
|
||||||
|
|
||||||
DELETE From DailyQuote
|
|
||||||
where citation_id!=NEW.citation_id;
|
|
||||||
END IF;
|
|
||||||
RETURN OLD;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql ;
|
|
||||||
|
|
||||||
Create Trigger UniqueDailyQuote AFTER INSERT or DELETE on DailyQuote
|
|
||||||
FOR EACH ROW
|
|
||||||
EXECUTE FUNCTION UniqueDailyQuote();
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE Favorite(
|
|
||||||
users SERIAL NOT NULL,
|
|
||||||
quote SERIAL NOT NULL,
|
|
||||||
PRIMARY KEY (users, quote),
|
|
||||||
CONSTRAINT fk_quote FOREIGN KEY(quote) REFERENCES Quote(id_quote),
|
|
||||||
CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user)
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREATE TABLE Commentary(
|
|
||||||
id_comment SERIAL PRIMARY KEY,
|
|
||||||
quote SERIAL NOT NULL,
|
|
||||||
users SERIAL NOT NULL,
|
|
||||||
dateC date NOT NULL,
|
|
||||||
comment text NOT NULL,
|
|
||||||
CONSTRAINT fk_quote FOREIGN KEY(quote) REFERENCES Quote(id_quote),
|
|
||||||
CONSTRAINT fk_user FOREIGN KEY(users) REFERENCES Users(id_user)
|
|
||||||
);
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
|||||||
|
/mvnw text eol=lf
|
||||||
|
*.cmd text eol=crlf
|
@ -0,0 +1,33 @@
|
|||||||
|
HELP.md
|
||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### STS ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.4.4</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
<groupId>com.example</groupId>
|
||||||
|
<artifactId>wtf</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
<name>wtf</name>
|
||||||
|
<description>Demo project for Spring Boot</description>
|
||||||
|
<url/>
|
||||||
|
<licenses>
|
||||||
|
<license/>
|
||||||
|
</licenses>
|
||||||
|
<developers>
|
||||||
|
<developer/>
|
||||||
|
</developers>
|
||||||
|
<scm>
|
||||||
|
<connection/>
|
||||||
|
<developerConnection/>
|
||||||
|
<tag/>
|
||||||
|
<url/>
|
||||||
|
</scm>
|
||||||
|
<properties>
|
||||||
|
<java.version>17</java.version>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-rest</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-hateoas</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.example.wtf;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class WtfApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(WtfApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
package com.example.wtf.controller;
|
||||||
|
|
||||||
|
import com.example.wtf.exception.ResourceNotFound;
|
||||||
|
import com.example.wtf.model.Question;
|
||||||
|
import com.example.wtf.repository.questionRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.hateoas.CollectionModel;
|
||||||
|
import org.springframework.hateoas.EntityModel;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
|
||||||
|
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/questions")
|
||||||
|
public class questionController {
|
||||||
|
@Autowired
|
||||||
|
private questionRepository repo;
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
public @ResponseBody CollectionModel<EntityModel<Question>> getQuestions() {
|
||||||
|
List<EntityModel<Question>> questions = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Question question : repo.findAll()) {
|
||||||
|
EntityModel<Question> questionResource = EntityModel.of(
|
||||||
|
question,
|
||||||
|
linkTo(methodOn(questionController.class).getQuestion(question.getId())).withSelfRel(),
|
||||||
|
linkTo(methodOn(questionController.class).updateQuestion(question.getId(), null)).withRel("Update question"),
|
||||||
|
linkTo(methodOn(questionController.class).deleteQuestion(question.getId())).withRel("Delete question")
|
||||||
|
);
|
||||||
|
questions.add(questionResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CollectionModel.of(
|
||||||
|
questions,
|
||||||
|
linkTo(methodOn(questionController.class).addQuestion(null)).withRel("Add Question")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
public @ResponseBody EntityModel<Question> getQuestion(@PathVariable Long id) {
|
||||||
|
Question question = repo.findQuestionById(id);
|
||||||
|
if (question == null) {
|
||||||
|
throw new ResourceNotFound(HttpStatus.NOT_FOUND, "Question not found");
|
||||||
|
}
|
||||||
|
return EntityModel.of(
|
||||||
|
question,
|
||||||
|
linkTo(methodOn(questionController.class).updateQuestion(question.getId(), null)).withRel("Update question"),
|
||||||
|
linkTo(methodOn(questionController.class).deleteQuestion(question.getId())).withRel("Delete question"),
|
||||||
|
linkTo(methodOn(questionController.class).getQuestions()).withRel("Questions")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
public @ResponseBody EntityModel<Question> addQuestion(@RequestBody Question question) {
|
||||||
|
repo.save(question);
|
||||||
|
return EntityModel.of(
|
||||||
|
question,
|
||||||
|
linkTo(methodOn(questionController.class).getQuestion(question.getId())).withSelfRel(),
|
||||||
|
linkTo(methodOn(questionController.class).updateQuestion(question.getId(), null)).withRel("Update question"),
|
||||||
|
linkTo(methodOn(questionController.class).deleteQuestion(question.getId())).withRel("Delete question"),
|
||||||
|
linkTo(methodOn(questionController.class).getQuestions()).withRel("Questions")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update/{id}")
|
||||||
|
public @ResponseBody EntityModel<Question> updateQuestion(@PathVariable Long id,
|
||||||
|
@RequestBody Question question) {
|
||||||
|
Question q = repo.findQuestionById(id);
|
||||||
|
if (q == null) throw new ResourceNotFound(HttpStatus.NOT_FOUND, "Question not found");
|
||||||
|
if (question.getContent() != null && !question.getContent().isEmpty()) {
|
||||||
|
q.setContent(question.getContent());
|
||||||
|
}
|
||||||
|
if (question.getAnswerA() != null && !question.getAnswerA().isEmpty()) {
|
||||||
|
q.setAnswerA(question.getAnswerA());
|
||||||
|
}
|
||||||
|
if (question.getAnswerB() != null && !question.getAnswerB().isEmpty()) {
|
||||||
|
q.setAnswerB(question.getAnswerB());
|
||||||
|
}
|
||||||
|
if (question.getAnswerC() != null && !question.getAnswerC().isEmpty()) {
|
||||||
|
q.setAnswerC(question.getAnswerC());
|
||||||
|
}
|
||||||
|
if (question.getAnswerD() != null && !question.getAnswerD().isEmpty()) {
|
||||||
|
q.setAnswerD(question.getAnswerD());
|
||||||
|
}
|
||||||
|
if (question.getcAnswer() != null && !question.getcAnswer().isEmpty()) {
|
||||||
|
q.setcAnswer(question.getcAnswer());
|
||||||
|
}
|
||||||
|
repo.save(q);
|
||||||
|
return EntityModel.of(
|
||||||
|
q,
|
||||||
|
linkTo(methodOn(questionController.class).getQuestion(id)).withSelfRel(),
|
||||||
|
linkTo(methodOn(questionController.class).deleteQuestion(id)).withRel("Delete question"),
|
||||||
|
linkTo(methodOn(questionController.class).getQuestions()).withRel("Questions")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("delete/{id}")
|
||||||
|
public @ResponseBody EntityModel<Question> deleteQuestion(@PathVariable Long id) {
|
||||||
|
Question q = repo.findQuestionById(id);
|
||||||
|
if (q == null) throw new ResourceNotFound(HttpStatus.NOT_FOUND, "Question not found");
|
||||||
|
|
||||||
|
repo.delete(q);
|
||||||
|
|
||||||
|
return EntityModel.of(
|
||||||
|
q,
|
||||||
|
linkTo(methodOn(questionController.class).getQuestions()).withRel("Questions")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.wtf.exception;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
|
public class ResourceNotFound extends ResponseStatusException {
|
||||||
|
public ResourceNotFound(HttpStatus error, String message) {
|
||||||
|
super(error, message);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
package com.example.wtf.model;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Question {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy= GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String content;
|
||||||
|
private String answerA;
|
||||||
|
private String answerB;
|
||||||
|
private String answerC;
|
||||||
|
private String answerD;
|
||||||
|
private String cAnswer;
|
||||||
|
|
||||||
|
public Question() {}
|
||||||
|
|
||||||
|
public Question(String content, String answerB, String answerA, String answerC, String answerD, String cAnswer) {
|
||||||
|
this.content = content;
|
||||||
|
this.answerB = answerB;
|
||||||
|
this.answerA = answerA;
|
||||||
|
this.answerC = answerC;
|
||||||
|
this.answerD = answerD;
|
||||||
|
this.cAnswer = cAnswer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnswerA() {
|
||||||
|
return answerA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnswerA(String answerA) {
|
||||||
|
this.answerA = answerA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnswerB() {
|
||||||
|
return answerB;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnswerB(String answerB) {
|
||||||
|
this.answerB = answerB;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnswerC() {
|
||||||
|
return answerC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnswerC(String answerC) {
|
||||||
|
this.answerC = answerC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnswerD() {
|
||||||
|
return answerD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnswerD(String answerD) {
|
||||||
|
this.answerD = answerD;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getcAnswer() {
|
||||||
|
return cAnswer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setcAnswer(String cAnswer) {
|
||||||
|
this.cAnswer = cAnswer;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.example.wtf.repository;
|
||||||
|
|
||||||
|
import com.example.wtf.model.Question;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface questionRepository extends CrudRepository<Question, Long> {
|
||||||
|
Question findQuestionById(Long id);
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
spring.application.name=wtf
|
@ -1,10 +1,10 @@
|
|||||||
package com.example.wfwebapi;
|
package com.example.wtf;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class WfWebapiApplicationTests {
|
class WtfApplicationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void contextLoads() {
|
void contextLoads() {
|
Loading…
Reference in new issue