MembershipValidator using membershipRepository.hasUncancelledMembershipForCustomer
This commit is contained in:
		@@ -2,17 +2,16 @@ package org.hostsharing.hsadminng.domain;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 | 
			
		||||
import org.hostsharing.hsadminng.domain.enumeration.AssetAction;
 | 
			
		||||
 | 
			
		||||
import javax.persistence.*;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
import org.hostsharing.hsadminng.domain.enumeration.AssetAction;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A Asset.
 | 
			
		||||
 */
 | 
			
		||||
@@ -44,6 +43,7 @@ public class Asset implements Serializable {
 | 
			
		||||
    @Column(name = "jhi_comment", length = 160)
 | 
			
		||||
    private String comment;
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JsonIgnoreProperties("assets")
 | 
			
		||||
    private Membership member;
 | 
			
		||||
 
 | 
			
		||||
@@ -36,8 +36,11 @@ public class Membership implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @OneToMany(mappedBy = "member")
 | 
			
		||||
    private Set<Share> shares = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
    @OneToMany(mappedBy = "member")
 | 
			
		||||
    private Set<Asset> assets = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JsonIgnoreProperties("memberships")
 | 
			
		||||
    private Customer customer;
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,7 @@ public class Share implements Serializable {
 | 
			
		||||
    @Column(name = "jhi_comment", length = 160)
 | 
			
		||||
    private String comment;
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    @ManyToOne
 | 
			
		||||
    @JsonIgnoreProperties("shares")
 | 
			
		||||
    private Membership member;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,10 @@
 | 
			
		||||
package org.hostsharing.hsadminng.repository;
 | 
			
		||||
 | 
			
		||||
import org.hostsharing.hsadminng.domain.Membership;
 | 
			
		||||
import org.springframework.data.jpa.repository.*;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -12,4 +15,7 @@ import org.springframework.stereotype.Repository;
 | 
			
		||||
@Repository
 | 
			
		||||
public interface MembershipRepository extends JpaRepository<Membership, Long>, JpaSpecificationExecutor<Membership> {
 | 
			
		||||
 | 
			
		||||
    @Query("SELECT CASE WHEN COUNT(m)> 0 THEN TRUE ELSE FALSE END " +
 | 
			
		||||
        " FROM Membership m WHERE m.customer.id=:customerId AND m.untilDate IS NULL")
 | 
			
		||||
    boolean hasUncancelledMembershipForCustomer(@Param("customerId") final long customerId);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,25 @@
 | 
			
		||||
package org.hostsharing.hsadminng.service;
 | 
			
		||||
 | 
			
		||||
import org.hostsharing.hsadminng.domain.Membership;
 | 
			
		||||
import org.hostsharing.hsadminng.repository.MembershipRepository;
 | 
			
		||||
import org.hostsharing.hsadminng.service.dto.MembershipDTO;
 | 
			
		||||
import org.hostsharing.hsadminng.web.rest.errors.BadRequestAlertException;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class MembershipValidator {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private MembershipRepository membershipRepository;
 | 
			
		||||
 | 
			
		||||
    public void validate(final MembershipDTO membershipDTO) {
 | 
			
		||||
        if (membershipDTO.getUntilDate() != null && !membershipDTO.getUntilDate().isAfter(membershipDTO.getSinceDate())) {
 | 
			
		||||
            throw new BadRequestAlertException("Invalid untilDate", Membership.ENTITY_NAME, "untilDateMustBeAfterSinceDate");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (membershipRepository.hasUncancelledMembershipForCustomer(membershipDTO.getCustomerId())) {
 | 
			
		||||
            throw new BadRequestAlertException("Another uncancelled membership exists", Membership.ENTITY_NAME, "anotherUncancelledMembershipExists");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
package org.hostsharing.hsadminng.service.dto;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
 | 
			
		||||
import org.hostsharing.hsadminng.domain.enumeration.AssetAction;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import org.hostsharing.hsadminng.domain.enumeration.AssetAction;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A DTO for the Asset entity.
 | 
			
		||||
@@ -25,7 +28,7 @@ public class AssetDTO implements Serializable {
 | 
			
		||||
    @Size(max = 160)
 | 
			
		||||
    private String comment;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    private Long memberId;
 | 
			
		||||
 | 
			
		||||
    public Long getId() {
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ public class MembershipDTO implements Serializable {
 | 
			
		||||
 | 
			
		||||
    private LocalDate untilDate;
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    private Long customerId;
 | 
			
		||||
 | 
			
		||||
    private String customerPrefix;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
package org.hostsharing.hsadminng.service.dto;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
import org.hostsharing.hsadminng.domain.enumeration.ShareAction;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A DTO for the Share entity.
 | 
			
		||||
 */
 | 
			
		||||
@@ -24,7 +27,7 @@ public class ShareDTO implements Serializable {
 | 
			
		||||
    @Size(max = 160)
 | 
			
		||||
    private String comment;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @NotNull
 | 
			
		||||
    private Long memberId;
 | 
			
		||||
 | 
			
		||||
    public Long getId() {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
        "shareCancellationNegativeQuantity": "Kündigungen von Geschäftsanteilen erfordern eine negative Stückzahl",
 | 
			
		||||
        "shareTransactionImmutable": "Transaktionen mit Geschäftsanteilen sind unveränderlich",
 | 
			
		||||
        "membershipNotDeletable": "Mitgliedschaft kann nicht gelöscht werden, setze stattdessen das 'untilDate'",
 | 
			
		||||
        "untilDateMustBeAfterSinceDate": "Mitgliedshafts-Austrittsdatum muss nach dem Beitrittsdatum liegen"
 | 
			
		||||
        "untilDateMustBeAfterSinceDate": "Mitgliedshafts-Austrittsdatum muss nach dem Beitrittsdatum liegen",
 | 
			
		||||
        "anotherUncancelledMembershipExists": "Nur eine einzige ungekündigte Mitgliedschaft pro Kunde ist zulässig"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
        "shareCancellationNegativeQuantity": "Share cancellations require a negative quantity",
 | 
			
		||||
        "shareTransactionImmutable": "Share transactions are immutable",
 | 
			
		||||
        "membershipNotDeletable": "Membership cannot be deleted, instead set 'untilDate'",
 | 
			
		||||
        "untilDateMustBeAfterSinceDate": "Membership until date must be after since date"
 | 
			
		||||
        "untilDateMustBeAfterSinceDate": "Membership until date must be after since date",
 | 
			
		||||
        "anotherUncancelledMembershipExists": "Only a single uncancelled membership allowed per customer"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user