1
0

add hs-office-membership entity+repo + fix rbac

This commit is contained in:
Michael Hoennig
2022-10-17 19:42:14 +02:00
parent 28bdd9220d
commit e6f9484f99
10 changed files with 662 additions and 10 deletions

View File

@ -0,0 +1,88 @@
package net.hostsharing.hsadminng.hs.office.membership;
import com.vladmihalcea.hibernate.type.basic.PostgreSQLEnumType;
import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType;
import com.vladmihalcea.hibernate.type.range.Range;
import lombok.*;
import net.hostsharing.hsadminng.Stringify;
import net.hostsharing.hsadminng.Stringifyable;
import net.hostsharing.hsadminng.errors.DisplayName;
import net.hostsharing.hsadminng.hs.office.debitor.HsOfficeDebitorEntity;
import net.hostsharing.hsadminng.hs.office.partner.HsOfficePartnerEntity;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.UUID;
import static net.hostsharing.hsadminng.Stringify.stringify;
@Entity
@Table(name = "hs_office_membership_rv")
@TypeDef(
name = "pgsql_enum",
typeClass = PostgreSQLEnumType.class
)
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@DisplayName("Membership")
@TypeDef(
typeClass = PostgreSQLRangeType.class,
defaultForType = Range.class
)
public class HsOfficeMembershipEntity implements Stringifyable {
private static Stringify<HsOfficeMembershipEntity> stringify = stringify(HsOfficeMembershipEntity.class)
.withProp(HsOfficeMembershipEntity::getMemberNumber)
.withProp(e -> e.getPartner().toShortString())
.withProp(e -> e.getMainDebitor().toShortString())
.withProp(e -> e.getValidity().asString())
.withProp(HsOfficeMembershipEntity::getReasonForTermination)
.withSeparator(", ")
.quotedValues(false);
private @Id UUID uuid;
@ManyToOne
@JoinColumn(name = "partneruuid")
private HsOfficePartnerEntity partner;
@ManyToOne
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "maindebitoruuid")
private HsOfficeDebitorEntity mainDebitor;
@Column(name = "membernumber")
private int memberNumber;
@Column(name = "validity", columnDefinition = "daterange")
private Range<LocalDate> validity;
@Column(name = "reasonfortermination")
@Enumerated(EnumType.STRING)
@Type(type = "pgsql_enum")
private HsOfficeReasonForTermination reasonForTermination;
@Override
public String toString() {
return stringify.apply(this);
}
@Override
public String toShortString() {
return String.valueOf(memberNumber);
}
@PrePersist
void init() {
if (getReasonForTermination() == null) {
setReasonForTermination(HsOfficeReasonForTermination.NONE);
}
}
}

View File

@ -0,0 +1,29 @@
package net.hostsharing.hsadminng.hs.office.membership;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
public interface HsOfficeMembershipRepository extends Repository<HsOfficeMembershipEntity, UUID> {
Optional<HsOfficeMembershipEntity> findByUuid(UUID id);
@Query("""
SELECT membership FROM HsOfficeMembershipEntity membership
WHERE :memberNumber is null
OR membership.memberNumber = :memberNumber
ORDER BY membership.memberNumber
""")
List<HsOfficeMembershipEntity> findMembershipByOptionalMemberNumber(Integer memberNumber);
List<HsOfficeMembershipEntity> findMembershipsByPartnerUuid(UUID partnerUuid);
HsOfficeMembershipEntity save(final HsOfficeMembershipEntity entity);
long count();
int deleteByUuid(UUID uuid);
}

View File

@ -0,0 +1,5 @@
package net.hostsharing.hsadminng.hs.office.membership;
public enum HsOfficeReasonForTermination {
NONE, CANCELLATION, TRANSFER, DEATH, LIQUIDATION, EXPULSION;
}