diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Admin.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Admin.java new file mode 100644 index 0000000..630b371 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Admin.java @@ -0,0 +1,22 @@ +package cat.udl.eps.softarch.tfgfinder.domain; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import java.util.Collection; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class Admin extends User{ + + @Override + @ElementCollection + public Collection getAuthorities() { + return AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN"); + } +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Agree.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Agree.java new file mode 100644 index 0000000..39ec68d --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Agree.java @@ -0,0 +1,34 @@ +package cat.udl.eps.softarch.tfgfinder.domain; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.ZonedDateTime; +import java.util.Collection; + +@Entity +@Table(name = "agrees") +@Data +@EqualsAndHashCode(callSuper = true) +public class Agree extends UriEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @DateTimeFormat + private ZonedDateTime when; + + public enum Status { + PENDING, + ACCEPTED, + REJECTED + } + + @Enumerated(EnumType.STRING) + private Status status; + +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Chat.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Chat.java index 2ced8b0..c40d2a4 100644 --- a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Chat.java +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Chat.java @@ -4,6 +4,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Director.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Director.java new file mode 100644 index 0000000..04dc22c --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Director.java @@ -0,0 +1,28 @@ +package cat.udl.eps.softarch.tfgfinder.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import java.util.Collection; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class Director extends User { + + @NotNull(message = "Availability cannot be null") + private Boolean available = true; + + @Override + @ElementCollection + public Collection getAuthorities() { + return AuthorityUtils.createAuthorityList("ROLE_DIRECTOR"); + } +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/External.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/External.java new file mode 100644 index 0000000..fcf73da --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/External.java @@ -0,0 +1,57 @@ +package cat.udl.eps.softarch.tfgfinder.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import java.util.Collection; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class External extends Director { + + @NotEmpty + @Size(min = 2, max = 50, message = "The first name must be between 2 and 50 characters") + private String name; + + @NotEmpty + @Size(min = 2, max = 50, message = "The last name must be between 2 and 50 characters") + private String surname; + + @NotEmpty + @Size(min = 2, max = 100, message = "The position must be between 2 and 100 characters") + private String position; + + @NotEmpty + @Size(min = 2, max = 100, message = "The organization must be between 2 and 100 characters") + private String organization; + + @NotEmpty + @Size(min = 5, max = 100, message = "The address must be between 5 and 100 characters") + private String address; + + @NotEmpty + @Size(min = 2, max = 50, message = "The municipality must be between 2 and 50 characters") + private String municipality; + + @NotEmpty + @Pattern(regexp = "^[0-9]{5}$", message = "The postal code must contain exactly 5 digits") + private String postalCode; + + @NotEmpty + @Pattern(regexp = "^[0-9]{9}$", message = "The phone number must contain exactly 9 digits") + private String phoneNumber; + + @Override + @ElementCollection + public Collection getAuthorities() { + return AuthorityUtils.createAuthorityList("ROLE_EXTERNAL"); + } +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Interest.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Interest.java index 59eca95..902c4d5 100644 --- a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Interest.java +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Interest.java @@ -1,7 +1,9 @@ package cat.udl.eps.softarch.tfgfinder.domain; +import com.fasterxml.jackson.annotation.JsonIdentityReference; import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; import org.springframework.format.annotation.DateTimeFormat; @@ -28,4 +30,9 @@ public enum Status { @Enumerated (EnumType.STRING) private Status status; + + @ManyToOne + @NotNull + @JsonIdentityReference(alwaysAsId = true) + private Proposal proposal; } diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Invite.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Invite.java index 2bd71a9..36c243e 100644 --- a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Invite.java +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Invite.java @@ -1,5 +1,6 @@ package cat.udl.eps.softarch.tfgfinder.domain; +import com.fasterxml.jackson.annotation.JsonIdentityReference; import jakarta.persistence.*; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -24,4 +25,14 @@ public class Invite extends UriEntity { @NotBlank private String status; + @ManyToOne + @NotNull + @JsonIdentityReference(alwaysAsId = true) + private User who; + + @ManyToOne + @NotNull + @JsonIdentityReference(alwaysAsId = true) + private Proposal what; + } diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Message.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Message.java index 95e9bae..fc78089 100644 --- a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Message.java +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Message.java @@ -27,4 +27,7 @@ public class Message extends UriEntity { @ManyToOne private User from; + @ManyToOne + private Chat chat; + } diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Professor.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Professor.java new file mode 100644 index 0000000..b67ab5e --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Professor.java @@ -0,0 +1,41 @@ +package cat.udl.eps.softarch.tfgfinder.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import java.util.Collection; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class Professor extends Director { + + @NotEmpty + @Size(min = 2, max = 100, message = "The faculty name must be between 2 and 100 characters") + private String faculty; + + @NotEmpty + @Size(min = 2, max = 100, message = "The department name must be between 2 and 100 characters") + private String department; + + @NotEmpty + @Size(min = 2, max = 50, message = "The first name must be between 2 and 50 characters") + private String name; + + @NotEmpty + @Size(min = 2, max = 50, message = "The last name must be between 2 and 50 characters") + private String surname; + + @Override + @ElementCollection + public Collection getAuthorities() { + return AuthorityUtils.createAuthorityList("ROLE_PROFESSOR"); + } +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Student.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Student.java new file mode 100644 index 0000000..8984e57 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/Student.java @@ -0,0 +1,57 @@ +package cat.udl.eps.softarch.tfgfinder.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonValue; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.validation.constraints.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; + +import java.util.Collection; + +@Entity +@Data +@EqualsAndHashCode(callSuper = true) +public class Student extends User { + + @NotEmpty + @Size(min = 2, max = 50, message = "The name must be between 2 and 50 characters long") + private String name; + + @NotEmpty + @Size(min = 2, max = 50, message = "The surname must be between 2 and 50 characters long") + private String surname; + + @NotEmpty + @Pattern(regexp = "^[0-9]{8}[A-Za-z]$", message = "The DNI must have 8 digits followed by a letter") + private String DNI; + + @NotEmpty + @Size(min = 5, max = 100, message = "The address must be between 5 and 100 characters long") + private String address; + + @NotEmpty + @Size(min = 2, max = 50, message = "The municipality must be between 2 and 50 characters long") + private String municipality; + + @NotEmpty + @Pattern(regexp = "^[0-9]{5}$", message = "The postal code must contain exactly 5 digits") + private String postalCode; + + @NotEmpty + @Pattern(regexp = "^[0-9]{9}$", message = "The phone number must contain exactly 9 digits") + private String phoneNumber; + + @NotEmpty + @Size(min = 2, max = 100, message = "The degree name must be between 2 and 100 characters long") + private String degree; + + @Override + @ElementCollection + public Collection getAuthorities() { + return AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_STUDENT"); + } +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/User.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/User.java index bbfc97c..f702281 100644 --- a/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/User.java +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/domain/User.java @@ -1,5 +1,6 @@ package cat.udl.eps.softarch.tfgfinder.domain; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; @@ -7,6 +8,7 @@ import jakarta.validation.constraints.NotBlank; import com.fasterxml.jackson.annotation.JsonValue; +import jakarta.validation.constraints.NotEmpty; import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Length; @@ -27,7 +29,7 @@ public class User extends UriEntity implements UserDetails { public static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); @Id - private String id; + private String id; //username? @NotBlank @Email @@ -42,6 +44,8 @@ public class User extends UriEntity implements UserDetails { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private boolean passwordReset; + // Favourites for the list of favorite proposals still has to be created. + public void encodePassword() { this.password = passwordEncoder.encode(this.password); } diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/AdminRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/AdminRepository.java new file mode 100644 index 0000000..6981395 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/AdminRepository.java @@ -0,0 +1,15 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + +import cat.udl.eps.softarch.tfgfinder.domain.Admin; +import cat.udl.eps.softarch.tfgfinder.domain.User; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.List; + +@RepositoryRestResource +public interface AdminRepository extends CrudRepository, PagingAndSortingRepository { + List findByIdContaining(@Param("text") String text); +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ChatRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ChatRepository.java new file mode 100644 index 0000000..8b05d41 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ChatRepository.java @@ -0,0 +1,13 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + +import cat.udl.eps.softarch.tfgfinder.domain.Message; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +@RepositoryRestResource +public interface ChatRepository extends CrudRepository, PagingAndSortingRepository { + + + +} diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/DirectorRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/DirectorRepository.java new file mode 100644 index 0000000..be858c9 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/DirectorRepository.java @@ -0,0 +1,14 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + +import cat.udl.eps.softarch.tfgfinder.domain.Director; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.List; + +@RepositoryRestResource +public interface DirectorRepository extends CrudRepository, PagingAndSortingRepository { + List findByAvailable(@Param("available") Boolean available); +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ExternalRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ExternalRepository.java new file mode 100644 index 0000000..c751490 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ExternalRepository.java @@ -0,0 +1,15 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + + +import cat.udl.eps.softarch.tfgfinder.domain.External; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.List; + +@RepositoryRestResource +public interface ExternalRepository extends CrudRepository, PagingAndSortingRepository { + List findByOrganizationContaining(@Param("organization") String organization); +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/InterestRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/InterestRepository.java new file mode 100644 index 0000000..b368c57 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/InterestRepository.java @@ -0,0 +1,15 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + +import cat.udl.eps.softarch.tfgfinder.domain.Interest; +import cat.udl.eps.softarch.tfgfinder.domain.Proposal; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface InterestRepository extends CrudRepository, PagingAndSortingRepository { + List findByProposal(@Param("proposal") Proposal proposal); +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ProfessorRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ProfessorRepository.java new file mode 100644 index 0000000..8d8d62f --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/ProfessorRepository.java @@ -0,0 +1,15 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + + +import cat.udl.eps.softarch.tfgfinder.domain.Professor; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.List; + +@RepositoryRestResource +public interface ProfessorRepository extends CrudRepository, PagingAndSortingRepository { + List findByDepartmentContaining(@Param("department") String department); +} \ No newline at end of file diff --git a/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/StudentRepository.java b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/StudentRepository.java new file mode 100644 index 0000000..1cb1783 --- /dev/null +++ b/src/main/java/cat/udl/eps/softarch/tfgfinder/repository/StudentRepository.java @@ -0,0 +1,14 @@ +package cat.udl.eps.softarch.tfgfinder.repository; + +import cat.udl.eps.softarch.tfgfinder.domain.Student; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.List; + +@RepositoryRestResource +public interface StudentRepository extends CrudRepository, PagingAndSortingRepository { + List findByNameContaining(@Param("name") String name); +} \ No newline at end of file