Commit 02a706d3 authored by AnasJeg's avatar AnasJeg

first change

parent 96011622
package bmci.esign.backendend;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import org.modelmapper.ModelMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
@SpringBootApplication
public class BackendEsignApplication {
@Bean
......@@ -18,7 +12,6 @@ public class BackendEsignApplication {
return new ModelMapper();
}
public static void main(String[] args) {
SpringApplication.run(BackendEsignApplication.class, args);
}
......
......@@ -2,19 +2,23 @@ package bmci.esign.backendend.controllers;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.models.enums.EStatut;
import bmci.esign.backendend.services.DemandeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/demande")
@Slf4j
public class DemandeController {
@Autowired
......@@ -22,12 +26,12 @@ public class DemandeController {
@PostMapping("/add")
public ResponseModelStandard<Long> addDemande(@RequestBody DemandeDto demandeDto){
System.out.println("ggg");
System.out.println("ggg");
log.info("NEW°DM.... {}",demandeDto.getTypeDocument());
try {
demandeService.addDemande(demandeDto);
return new ResponseModelStandard<>("000");
}catch (Exception e){
log.error("EXCEPTION_addDemande Message: {}",e.getMessage(),e);
return new ResponseModelStandard<>("099");
}
}
......@@ -97,5 +101,26 @@ public class DemandeController {
}
}
@PostMapping("/signatures")
public ResponseModelStandard<Page<DemandeDto>> getDemandesByUser(@RequestBody FilterDto filterDto){
try {
Page<DemandeDto> demandeDtoList = demandeService.findDemandesByUser(filterDto);
return new ResponseModelStandard<>("000",demandeDtoList);
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
}
@GetMapping("/chart")
public ResponseModelStandard<List<DashboardChart>> chartSignDemandes(@RequestParam(name = "email") String email){
try {
List<DashboardChart> dashboardCharts =demandeService.loadSignaturesChart(email);
if(dashboardCharts == null){
return new ResponseModelStandard<>("099","Missing data");
}
return new ResponseModelStandard<>("000", dashboardCharts);
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
}
}
package bmci.esign.backendend.controllers;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.services.DestinataireService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import java.util.List;
......@@ -12,10 +14,11 @@ import java.util.List;
@RestController
@RequestMapping("/destinataire")
public class DestinataireController {
private final DestinataireService destinataireService;
@Autowired
private DestinataireService destinataireService;
public DestinataireController(DestinataireService destinataireService) {
this.destinataireService = destinataireService;
}
@PostMapping("/addAll")
public ResponseModelStandard<Long> addAllDestinataire(@RequestBody List<DestinataireDto> destinataireDtos){
......@@ -35,11 +38,26 @@ public class DestinataireController {
return new ResponseModelStandard<>("000", destinataireDtos);
}
@PostMapping("/signer")
public ResponseModelStandard<Page<DemandeDto>> getDemandesToSign(@RequestBody FilterDto destinataireFilterDto){
try {
Page<DemandeDto> demandeDtoList = destinataireService.findAllDemandesToSigne(destinataireFilterDto);
return new ResponseModelStandard<>("000",demandeDtoList);
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
}
}
@GetMapping("/chart")
public ResponseModelStandard<List<DashboardChart>> chartDMSign(@RequestParam(name = "email") String email){
try {
List<DashboardChart> dashboardCharts =destinataireService.loadSignDmChart(email);
if(dashboardCharts == null){
return new ResponseModelStandard<>("099","Missing data");
}
return new ResponseModelStandard<>("000", dashboardCharts);
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
}
}
\ No newline at end of file
package bmci.esign.backendend.controllers;
import bmci.esign.backendend.dto.TypeDocumentDto;
import bmci.esign.backendend.dto.request.TypeDocAddDto;
import bmci.esign.backendend.models.ResponseModelStandard;
import bmci.esign.backendend.services.TypeDocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
......@@ -27,4 +26,13 @@ public class TypeDocumentController {
}
}
@PostMapping("/add")
public ResponseModelStandard<TypeDocumentDto> addTypeDocument(@RequestBody TypeDocAddDto type){
try {
TypeDocumentDto typeDocumentDtos = typeDocumentService.addTypeDocument(type);
return new ResponseModelStandard<>("000", typeDocumentDtos);
}catch (Exception e){
return new ResponseModelStandard<>("099");
}
}
}
......@@ -2,7 +2,6 @@ package bmci.esign.backendend.dto;
import bmci.esign.backendend.models.TypeDocument;
import bmci.esign.backendend.models.enums.EDemande;
import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
......
package bmci.esign.backendend.dto;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.Position;
import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -28,5 +26,5 @@ public class DestinataireDto {
private Date creationDate;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date modificationDate;
private List<PositionDto> positions;
private List<PositionDto> positions= new ArrayList<>();
}
package bmci.esign.backendend.dto.request;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class FilterDto {
private int page;
private int size;
private String email;
private Date createdDate;
private String demandeType;
private String priority;
@Override
public String toString() {
return "FilterDto{" +
"page=" + page +
", size=" + size +
", email='" + email + '\'' +
", createdDate=" + createdDate +
", demandeType='" + demandeType + '\'' +
", priority='" + priority + '\'' +
'}';
}
}
\ No newline at end of file
package bmci.esign.backendend.dto.request;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class TypeDocAddDto {
String type;
@Override
public String toString() {
return "TypeDocAddDto{" +
"type='" + type + '\'' +
'}';
}
}
package bmci.esign.backendend.dto.response;
public interface DashboardChart {
int getCount();
String getStatut();
}
package bmci.esign.backendend.dto.response;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.DocumentDto;
import bmci.esign.backendend.dto.UserDto;
import bmci.esign.backendend.models.TypeDocument;
import bmci.esign.backendend.models.enums.EDemande;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Getter
@Setter
@AllArgsConstructor
public class ResponseDto implements Serializable {
private Long id;
private String confidentiality;
private String priority;
private String objetMail;
private String message;
private String statut;
private String edemande;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private UserDto user;
private TypeDocument typeDocument;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date expirationDate;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date creationDate;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date modificationDate;
private List<DestinataireDto> destinataires;
private List<DocumentDto> documents;
public String getEDemande() {
return EDemande.valueOf(edemande).getDisplayName();
}
public String getStringDemand(){
return edemande;
}
}
......@@ -15,4 +15,7 @@ public interface IMapClassWithDto<E,D> {
List<D> convertPageToListDto(Page<E> entityList, Class<D> outCLass);
List<E> convertListToListEntity(Collection<D> dtoList, Class<E> outCLass);
Page<D> convertResponseToPageDto(Page<E> entityList, Class<D> outCLass);
}
......@@ -4,6 +4,9 @@ import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.Collection;
......@@ -59,4 +62,15 @@ public class MapClassWithDto<E, D> implements IMapClassWithDto<E, D> {
return dtoList.stream().map(dto -> convertToEntity(dto, outCLass)).collect(Collectors.toList());
}
@Override
public Page<D> convertResponseToPageDto(Page<E> entityPage, Class<D> outClass) {
List<D> dtoList = entityPage.stream()
.map(entity -> convertToDto(entity, outClass))
.collect(Collectors.toList());
Pageable pageable = PageRequest.of(entityPage.getNumber(), entityPage.getSize(), entityPage.getSort());
return new PageImpl<>(dtoList, pageable, entityPage.getTotalElements());
}
}
package bmci.esign.backendend.models;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Date;
@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditorEntity {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
@CreationTimestamp
// @Column(name = "creationDate", columnDefinition = "TIMESTAMP", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
protected Date creationDate;
@UpdateTimestamp
// @Column(name = "modificationDate", columnDefinition = "TIMESTAMP", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
protected Date modificationDate;
}
\ No newline at end of file
......@@ -2,55 +2,69 @@ package bmci.esign.backendend.models;
import bmci.esign.backendend.models.enums.EDemande;
import bmci.esign.backendend.models.enums.EStatut;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.*;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Getter
@Setter
@Entity
public class Demande {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class Demande extends AuditorEntity implements Serializable {
private String confidentiality;
private String priority;
private String objetMail;
private String message;
@Enumerated(EnumType.STRING)
@Column(length = 50)
private EStatut statut;
@Enumerated(EnumType.STRING)
@Column(length = 50)
private EDemande edemande;
@ManyToOne
@JoinColumn(name = "user_id")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private User user;
@ManyToOne
@JoinColumn(name = "typeDocument_id")
private TypeDocument typeDocument;
@Temporal(TemporalType.TIMESTAMP)
private Date expirationDate;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@OneToMany(mappedBy = "demande")
@OneToMany(mappedBy = "demande", fetch = FetchType.LAZY)
// @JsonManagedReference
private List<Destinataire> destinataires;
@OneToMany(mappedBy = "demande")
private List<Document> documents;
@Override
public String toString() {
return "Demande{" +
"confidentiality='" + confidentiality + '\'' +
", priority='" + priority + '\'' +
", objetMail='" + objetMail + '\'' +
", message='" + message + '\'' +
", statut=" + statut +
", edemande=" + edemande +
", user=" + user +
", typeDocument=" + typeDocument +
", expirationDate=" + expirationDate +
", destinataires=" + destinataires +
", documents=" + documents +
", id=" + id +
", creationDate=" + creationDate +
", modificationDate=" + modificationDate +
'}';
}
}
......@@ -7,7 +7,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
......@@ -28,7 +27,9 @@ public class Destinataire {
private String envoie;
private int place;
@ManyToOne
@JoinColumn(name = "demande_id") @JsonIgnore
@JoinColumn(name = "demande_id")
@JsonIgnore
// @JsonBackReference
private Demande demande;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
......
package bmci.esign.backendend.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
@Data @AllArgsConstructor @NoArgsConstructor
@Entity
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class Document extends AuditorEntity implements Serializable {
private String directory;
@ManyToOne
@JoinColumn(name = "demande_id")
@JsonIgnore
private Demande demande;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
}
......@@ -2,23 +2,17 @@ package bmci.esign.backendend.models;
import bmci.esign.backendend.models.enums.EMailStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import lombok.*;
import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
@Data
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class MailRequest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class MailRequest extends AuditorEntity implements Serializable {
private String destination;
private String email_type;
private long demandeId;
......@@ -31,11 +25,24 @@ public class MailRequest {
private EMailStatus status;
private String responseMessage;
private String url_sign;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@Override
public String toString() {
return "MailRequest{" +
"destination='" + destination + '\'' +
", email_type='" + email_type + '\'' +
", demandeId=" + demandeId +
", processCamundaId='" + processCamundaId + '\'' +
", token='" + token + '\'' +
", expiration_date='" + expiration_date + '\'' +
", name='" + name + '\'' +
", userMessage='" + userMessage + '\'' +
", status=" + status +
", responseMessage='" + responseMessage + '\'' +
", url_sign='" + url_sign + '\'' +
", id=" + id +
", creationDate=" + creationDate +
", modificationDate=" + modificationDate +
'}';
}
}
package bmci.esign.backendend.models;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Notification extends AuditorEntity implements Serializable {
private String title;
private String message;
}
......@@ -6,12 +6,10 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.*;
import javax.persistence.*;
import javax.persistence.Entity;
import java.util.Date;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
@Data
@AllArgsConstructor @NoArgsConstructor
......@@ -19,20 +17,12 @@ import java.util.Map;
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
@Entity
public class Position {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class Position extends AuditorEntity implements Serializable {
@ManyToOne
@JoinColumn(name = "destinataire_id") @JsonIgnore
private Destinataire destinataire;
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private HashMap<String, Object> information;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
}
......@@ -4,30 +4,16 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
@Data
@NoArgsConstructor @AllArgsConstructor
@Table
@Entity
public class Signature {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class Signature extends AuditorEntity implements Serializable {
private String directory;
@ManyToOne
@JoinColumn(name = "user_id") @JsonIgnore
private User user;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
}
package bmci.esign.backendend.models;
import bmci.esign.backendend.models.enums.EDemande;
import bmci.esign.backendend.models.enums.EStatut;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class Statut {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class Statut extends AuditorEntity implements Serializable {
// @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// private Long id;
@Enumerated(EnumType.STRING)
@Column(length = 50)
private EStatut name;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
// @CreationTimestamp
// @Temporal(TemporalType.TIMESTAMP)
// private Date creationDate;
// @UpdateTimestamp
// @Temporal(TemporalType.TIMESTAMP)
// private Date modificationDate;
}
package bmci.esign.backendend.models;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.util.List;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class TypeDemande {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class TypeDemande extends AuditorEntity implements Serializable {
private String name;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
}
......@@ -4,26 +4,15 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.util.Date;
import java.io.Serializable;
import java.util.List;
@NoArgsConstructor @AllArgsConstructor
@Data
@Entity
public class TypeDocument {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class TypeDocument extends AuditorEntity implements Serializable {
private String name;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@OneToMany(mappedBy = "typeDocument") @JsonIgnore
private List<Demande> demandes;
......
......@@ -4,12 +4,9 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
......@@ -17,10 +14,8 @@ import java.util.Set;
@NoArgsConstructor @AllArgsConstructor
@Entity
@Table(name = "userEntity")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
public class User extends AuditorEntity implements Serializable {
@Column(length = 120)
private String firstname;
@Column(length = 120)
......@@ -30,12 +25,6 @@ public class User {
private String email;
@Column(length = 60)
private String password;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date modificationDate;
@OneToMany(mappedBy = "user") @JsonIgnore
private List<Demande> demandes = new ArrayList<>();
......
package bmci.esign.backendend.repositories;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.Demande;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DemandeRepository extends JpaRepository<Demande, Long> {
public interface DemandeRepository extends JpaRepository<Demande, Long>, JpaSpecificationExecutor<Demande> {
List<Demande> findAllByUserId(Long id);
@Query(value = "SELECT count(d.id) as count, d.statut as statut FROM Demande d WHERE d.user.email= :email GROUP BY d.statut")
List<DashboardChart> loadSignaturesChart(@Param("email") String email);
}
package bmci.esign.backendend.repositories;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.Destinataire;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface DestinataireRepository extends JpaRepository<Destinataire, Long> {
public interface DestinataireRepository extends JpaRepository<Destinataire, Long>, JpaSpecificationExecutor<Destinataire> {
List<Destinataire> findAllByDemandeId(Long id);
@Query(value = "SELECT count(d.id) as count, d.statut as statut FROM Destinataire d WHERE d.email= :email GROUP BY d.statut")
List<DashboardChart> loadSignDm(@Param("email") String email);
}
package bmci.esign.backendend.services;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.enums.EStatut;
import org.springframework.data.domain.Page;
import java.util.Date;
import java.util.List;
......@@ -20,4 +22,7 @@ public interface DemandeService {
List<DemandeDto> getAll();
List<DemandeDto> getAllbyUser(Long userId);
Map<String, Object> getForUserDemandeSearch(Long userId, int page, int limit, String statut, String eDemande, Date dateStart);
Page<DemandeDto> findDemandesByUser(FilterDto filterDto);
List<DashboardChart> loadSignaturesChart(String email);
}
package bmci.esign.backendend.services;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.models.Destinataire;
import org.springframework.data.domain.Page;
import java.util.List;
......@@ -12,4 +16,6 @@ public interface DestinataireService {
DestinataireDto getDestinataire(Long id);
Destinataire findDestinataire(Long id);
List<DestinataireDto> findAllByDemandeId(Long id);
Page<DemandeDto> findAllDemandesToSigne(FilterDto destinataireFilterDto);
List<DashboardChart> loadSignDmChart(String email);
}
package bmci.esign.backendend.services;
import bmci.esign.backendend.dto.TypeDocumentDto;
import bmci.esign.backendend.dto.request.TypeDocAddDto;
import java.util.List;
public interface TypeDocumentService {
TypeDocumentDto addTypeDocument(TypeDocumentDto typeDocumentDto);
TypeDocumentDto addTypeDocument(TypeDocAddDto type);
List<TypeDocumentDto> getAll();
}
package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.PositionDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.*;
import bmci.esign.backendend.models.enums.EDemande;
......@@ -13,8 +15,14 @@ import bmci.esign.backendend.repositories.DocumentRepository;
import bmci.esign.backendend.repositories.PositionRepository;
import bmci.esign.backendend.services.DemandeService;
import bmci.esign.backendend.services.EmailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
......@@ -26,6 +34,7 @@ import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
public class DemandeServiceImpl implements DemandeService {
@Autowired
......@@ -49,6 +58,7 @@ public class DemandeServiceImpl implements DemandeService {
@Override
public DemandeDto addDemande(DemandeDto demandeDto) {
log.info("PROCESSING<>{addDemande}... REQUEST_ID: {}", demandeDto.getId());
List<DestinataireDto> destinataireDtos = demandeDto.getDestinataires();
Demande demande = demandeMapping.convertToEntity(demandeDto, Demande.class);
......@@ -110,6 +120,7 @@ public class DemandeServiceImpl implements DemandeService {
@Override
public DemandeDto getDemande(Long id) {
log.info("PROCESSING<>{getDemande}... REQUEST_DM_ID: {}", id);
Optional<Demande> demande = demandeRepository.findById(id);
return demande.map(value -> demandeMapping.convertToDto(value, DemandeDto.class)).orElse(null);
}
......@@ -122,6 +133,7 @@ public class DemandeServiceImpl implements DemandeService {
@Override
public void processEmail(Demande demande) {
log.info("PROCESSING<>{processEmail} REQUEST {}",demande);
List<Destinataire> destinataires = demande.getDestinataires().stream().filter(destinataire ->
destinataire.getStatut().name().equals(EStatut.WAITING.name())).collect(Collectors.toList());
......@@ -240,6 +252,7 @@ public class DemandeServiceImpl implements DemandeService {
@Override
public Map<String, Object> getForUserDemandeSearch(Long userId, int page, int limit, String statut, String eDemande, Date dateStart) {
log.info("PROCESSING<>{getForUserDemandeSearch}... REQUEST: userId {}; page {}; limit {}; ", userId, page, limit);
Map<String, Object> resp = new HashMap<String, Object>();
Calendar cal = Calendar.getInstance();
cal.setTime(dateStart);
......@@ -284,4 +297,75 @@ public class DemandeServiceImpl implements DemandeService {
return resp;
}
}
// Received
@Override
@Transactional(readOnly = true)
public Page<DemandeDto> findDemandesByUser(FilterDto filterDto){
log.info("PROCESSING<>{findDemandesByUser}... REQUEST: {}", filterDto);
try {
int page = filterDto.getPage();
int size = filterDto.getSize();
Pageable pageable = PageRequest.of(page, size);
Specification<Demande> specification = buildSpecification(filterDto);
Page<Demande> demandePage= demandeRepository.findAll(specification, pageable);
demandePage.stream().forEach(demande -> {
demande.setDestinataires(mapDestinatairesToDto(demande.getDestinataires()));
});
return demandeMapping.convertResponseToPageDto(demandePage, DemandeDto.class);
} catch (Exception e) {
log.error("EXCEPTION<>findAllDemandesToSigne: {}", e.getMessage(), e);
return Page.empty();
}
}
private Specification<Demande> buildSpecification(FilterDto dto) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (dto.getCreatedDate() != null) {
log.info("creation_date: {}",dto.getCreatedDate());
predicates.add(criteriaBuilder.equal(root.get("creation_date"), dto.getCreatedDate()));
}
if(dto.getPriority() != null){
log.info("priority: {}",dto.getPriority());
predicates.add(criteriaBuilder.equal(root.get("demande").get("priority"), dto.getPriority()));
}
predicates.add(criteriaBuilder.equal(root.get("user").get("email"), dto.getEmail()));
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
private List<Destinataire> mapDestinatairesToDto(List<Destinataire> destinataires) {
return destinataires.stream()
.map(dest -> new Destinataire(
dest.getId(),
dest.getName(),
dest.getEmail(),
dest.getRole(),
dest.getStatut(),
dest.getEnvoie(),
dest.getPlace(),
null,
dest.getCreationDate(),
dest.getModificationDate(),
Collections.emptyList()
))
.collect(Collectors.toList());
}
@Override
@Transactional(readOnly = true)
public List<DashboardChart> loadSignaturesChart(String email) {
log.info("PROCESSING<>{loadSignaturesChart}... EMAIL: {}", email);
try {
if(email.isEmpty()){
return null;
}
return demandeRepository.loadSignaturesChart(email);
}catch (Exception e){
log.error("EXCEPTION<>loadSignaturesChart: {}", e.getMessage(), e);
return Collections.emptyList();
}
}
}
\ No newline at end of file
package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.dto.DemandeDto;
import bmci.esign.backendend.dto.DestinataireDto;
import bmci.esign.backendend.dto.request.FilterDto;
import bmci.esign.backendend.dto.response.DashboardChart;
import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.Demande;
import bmci.esign.backendend.models.Destinataire;
import bmci.esign.backendend.models.enums.EStatut;
import bmci.esign.backendend.repositories.DestinataireRepository;
import bmci.esign.backendend.services.DestinataireService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.criteria.Predicate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Service
@Slf4j
public class DestinataireServiceImpl implements DestinataireService {
@Autowired
private DestinataireRepository destinataireRepository;
private final DestinataireRepository destinataireRepository;
private final IMapClassWithDto<Destinataire, DestinataireDto> destinataireMapping;
private final IMapClassWithDto<Demande, DemandeDto> demandeMapping;
@Autowired
private IMapClassWithDto<Destinataire, DestinataireDto> destinataireMapping;
public DestinataireServiceImpl(DestinataireRepository destinataireRepository, IMapClassWithDto<Destinataire, DestinataireDto> destinataireMapping, IMapClassWithDto<Demande, DemandeDto> demandeMapping) {
this.destinataireRepository = destinataireRepository;
this.destinataireMapping = destinataireMapping;
this.demandeMapping = demandeMapping;
}
@Override
public DestinataireDto addDestinataire(DestinataireDto destinataireDto) {
......@@ -56,4 +72,62 @@ public class DestinataireServiceImpl implements DestinataireService {
public List<DestinataireDto> findAllByDemandeId(Long id) {
return destinataireMapping.convertListToListDto(destinataireRepository.findAllByDemandeId(id), DestinataireDto.class);
}
@Override
@Transactional(readOnly = true)
public Page<DemandeDto> findAllDemandesToSigne(FilterDto destinataireFilterDto) {
log.info("PROCESSING<>{findAllDemandesToSigne}... REQUEST: {}", destinataireFilterDto);
try {
int page = destinataireFilterDto.getPage();
int size = destinataireFilterDto.getSize();
Pageable pageable = PageRequest.of(page, size);
Specification<Destinataire> specification = buildSpecification(destinataireFilterDto);
Page<Destinataire> destinataires= destinataireRepository.findAll(specification, pageable);
Page<Destinataire> destinatairePage = destinataires.map(destinataire -> {
destinataire.getDemande().getDestinataires().get(0).setPositions(new ArrayList<>());
return destinataire;
});
return destinatairePage.map(this::mapToResponseDto);
} catch (Exception e) {
log.error("EXCEPTION<>findAllDemandesToSigne: {}", e.getMessage(), e);
return Page.empty();
}
}
private Specification<Destinataire> buildSpecification(FilterDto dto) {
return (root, query, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (dto.getCreatedDate() != null) {
log.info("creation_date: {}",dto.getCreatedDate());
predicates.add(criteriaBuilder.equal(root.get("creation_date"), dto.getCreatedDate()));
}
if(dto.getPriority() != null){
log.info("priority: {}",dto.getPriority());
predicates.add(criteriaBuilder.equal(root.get("demande").get("priority"), dto.getPriority()));
}
predicates.add(criteriaBuilder.equal(root.get("statut"), EStatut.WAITING));
predicates.add(criteriaBuilder.equal(root.get("email"), dto.getEmail()));
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
};
}
private DemandeDto mapToResponseDto(Destinataire destinataire) {
return demandeMapping.convertToDto(destinataire.getDemande(), DemandeDto.class);
}
@Override
@Transactional(readOnly = true)
public List<DashboardChart> loadSignDmChart(String email) {
log.info("PROCESSING<Destinataire>{loadSignDmChart}... EMAIL: {}", email);
try {
if(email.isEmpty()){
return null;
}
return destinataireRepository.loadSignDm(email);
}catch (Exception e){
log.error("EXCEPTION<>loadSignaturesChart: {}", e.getMessage(), e);
return Collections.emptyList();
}
}
}
......@@ -7,6 +7,7 @@ import bmci.esign.backendend.services.EmailService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
......@@ -22,6 +23,7 @@ import java.util.Map;
import java.util.Random;
@Service
@Slf4j
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender mailSender;
......@@ -53,6 +55,7 @@ public class EmailServiceImpl implements EmailService {
@Override
public void SendEmail(MailRequest req, Map<String, String> model) {
log.info("PROCESSING<>{sendEmail} REQUEST {}", req.toString());
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
String template_name = "";
......@@ -83,6 +86,7 @@ public class EmailServiceImpl implements EmailService {
mailRequestRepository.save(req);
} catch (IOException | TemplateException | MessagingException e) {
log.error("ERROR: {sendEmail}_ Message {} ; Cause {} ; Localized {}",e.getMessage(),e.getCause(), e.getLocalizedMessage(),e);
e.printStackTrace();
}
......
package bmci.esign.backendend.services.impl;
import bmci.esign.backendend.dto.TypeDocumentDto;
import bmci.esign.backendend.dto.request.TypeDocAddDto;
import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.TypeDocument;
import bmci.esign.backendend.repositories.TypeDocumentRepository;
import bmci.esign.backendend.services.TypeDocumentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
public class TypeDocumentServiceImpl implements TypeDocumentService {
@Autowired
......@@ -19,14 +22,17 @@ public class TypeDocumentServiceImpl implements TypeDocumentService {
private IMapClassWithDto<TypeDocument, TypeDocumentDto> typeDocumentMapping;
@Override
public TypeDocumentDto addTypeDocument(TypeDocumentDto typeDocumentDto) {
TypeDocument typeDocument = typeDocumentMapping.convertToEntity(typeDocumentDto, TypeDocument.class);
public TypeDocumentDto addTypeDocument(TypeDocAddDto type) {
log.info("PROCESSING<>{addTypeDocument}.. REQUEST {}",type);
TypeDocument typeDocument=new TypeDocument();
typeDocument.setName(type.getType());
typeDocument = typeDocumentRepository.save(typeDocument);
return typeDocumentMapping.convertToDto(typeDocument, TypeDocumentDto.class);
}
@Override
public List<TypeDocumentDto> getAll() {
log.info("PROCESSING<>{TypeDocument_getAll}..");
List<TypeDocument> typeDocuments = typeDocumentRepository.findAll();
return typeDocumentMapping.convertListToListDto(typeDocuments, TypeDocumentDto.class);
}
......
......@@ -5,12 +5,14 @@ import bmci.esign.backendend.dto.services.IMapClassWithDto;
import bmci.esign.backendend.models.User;
import bmci.esign.backendend.repositories.UserRepository;
import bmci.esign.backendend.services.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Autowired
......@@ -52,6 +54,7 @@ public class UserServiceImpl implements UserService {
@Override
public UserDto findByEmail(String email) {
log.info("PROCESSING<>{findByEmail}... REQUEST: {}", email);
User user = userRepository.findByEmail(email);
return userMapping.convertToDto(user, UserDto.class);
}
......
spring.application.name=backend-esign
# App Properties
spring.mvc.converters.preferred-json-mapper=gson
server.address=192.168.1.40
server.address=localhost
server.servlet.context-path=/esignback
#server.address=192.168.11.106
#server.servlet-path=/*
......@@ -10,11 +10,11 @@ spring.sql.init.platform= postgres
#server.ssl.enabled= true
#spring.datasource.url= jdbc:postgresql://192.168.1.46:5433/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00
spring.datasource.url= jdbc:postgresql://localhost:5432/esigndb?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=GMT+1:00
spring.datasource.password= 2011
spring.datasource.password= admin
#spring.datasource.password= @sql$23asas
spring.datasource.username=postgres
spring.datasource.username=admin
spring.jpa.database = postgresql
spring.jpa.show-sql=true
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect
......@@ -34,12 +34,15 @@ spring.servlet.multipart.max-request-size=10MB
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
camunda.bpm.admin-user.email=anas@indatacore.com
camunda.bpm.admin-user.password=123456
#file.upload-dir.access=/opt/SIGNATURES
file.upload-dir.access=C:\\Users\\hp\\Documents\\SIGNATURES
#file.upload-dir.access=C:\\Users\\hp\\Documents\\SIGNATURES
file.upload-dir.access=/Users/anace/Desktop/InDataCore/bmsi/Documents/SIGNATURES
url.esign.acess=http://localhost:4200/#/online-signature/
#url.esign.acess=https://skyanalytics.indatacore.com/esign/#/online-signature/
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment