FINERACT-2091: Support for string type primary keys

This commit is contained in:
Marta Jankovics
2024-06-13 20:29:23 +02:00
committed by Adam Saghy
parent 111e28ed1b
commit f48f94c454
216 changed files with 243 additions and 273 deletions
@@ -45,7 +45,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class GLAccount extends AbstractPersistableCustom {
public class GLAccount extends AbstractPersistableCustom<Long> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
@@ -20,7 +20,7 @@ package org.apache.fineract.cob;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
public interface COBBusinessStep<T extends AbstractPersistableCustom> {
public interface COBBusinessStep<T extends AbstractPersistableCustom<Long>> {
T execute(T input);
@@ -33,7 +33,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
@Entity
@Table(name = "m_portfolio_command_source")
public class CommandSource extends AbstractPersistableCustom {
public class CommandSource extends AbstractPersistableCustom<Long> {
@Column(name = "action_name", nullable = true, length = 100)
private String actionName;
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
@Accessors(chain = true)
@Entity
@Table(name = "m_business_date", uniqueConstraints = { @UniqueConstraint(name = "uq_business_date_type", columnNames = { "type" }) })
public class BusinessDate extends AbstractAuditableWithUTCDateTimeCustom {
public class BusinessDate extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@Enumerated(EnumType.STRING)
@Column(name = "type")
@@ -33,7 +33,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class PlatformCache extends AbstractPersistableCustom {
public class PlatformCache extends AbstractPersistableCustom<Long> {
@Column(name = "cache_type_enum")
private Integer cacheType;
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class Code extends AbstractPersistableCustom {
public class Code extends AbstractPersistableCustom<Long> {
@Column(name = "code_name", length = 100)
private String name;
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class CodeValue extends AbstractPersistableCustom {
public class CodeValue extends AbstractPersistableCustom<Long> {
@Column(name = "code_value", length = 100)
private String label;
@@ -39,7 +39,7 @@ import org.springframework.data.jpa.domain.AbstractAuditable;
* the type of the auditing type's identifier
*/
@MappedSuperclass
public abstract class AbstractAuditableCustom extends AbstractPersistableCustom implements Auditable<Long, Long, LocalDateTime> {
public abstract class AbstractAuditableCustom extends AbstractPersistableCustom<Long> implements Auditable<Long, Long, LocalDateTime> {
private static final long serialVersionUID = 141481953116476081L;
@@ -26,6 +26,7 @@ import static org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
import jakarta.persistence.Column;
import jakarta.persistence.MappedSuperclass;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.OffsetDateTime;
import java.util.Optional;
import lombok.AccessLevel;
@@ -47,8 +48,8 @@ import org.springframework.data.jpa.domain.AbstractAuditable;
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class AbstractAuditableWithUTCDateTimeCustom extends AbstractPersistableCustom
implements Auditable<Long, Long, OffsetDateTime> {
public abstract class AbstractAuditableWithUTCDateTimeCustom<T extends Serializable> extends AbstractPersistableCustom<T>
implements Auditable<Long, T, OffsetDateTime> {
private static final long serialVersionUID = 141481953116476081L;
@@ -48,14 +48,14 @@ import org.springframework.data.domain.Persistable;
@Getter
@Setter
@NoArgsConstructor
public abstract class AbstractPersistableCustom implements Persistable<Long>, Serializable {
public abstract class AbstractPersistableCustom<T extends Serializable> implements Persistable<T>, Serializable {
private static final long serialVersionUID = 9181640245194392646L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Getter(onMethod = @__(@Override))
private Long id;
private T id;
@Transient
@Setter(value = AccessLevel.NONE)
@@ -25,7 +25,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_image")
public final class Image extends AbstractPersistableCustom {
public final class Image extends AbstractPersistableCustom<Long> {
@Column(name = "location", length = 500)
private String location;
@@ -37,7 +37,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
@Table(name = "m_external_event")
@Getter
@NoArgsConstructor
public class ExternalEvent extends AbstractPersistableCustom {
public class ExternalEvent extends AbstractPersistableCustom<Long> {
@Column(name = "type", nullable = false)
private String type;
@@ -62,7 +62,7 @@ import org.apache.fineract.organisation.office.domain.Office;
@Setter
@NoArgsConstructor
@Accessors(chain = true)
public class Holiday extends AbstractPersistableCustom {
public class Holiday extends AbstractPersistableCustom<Long> {
@Column(name = "name", unique = true, nullable = false, length = 100)
private String name;
@@ -26,7 +26,7 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData;
@Entity
@Table(name = "m_currency")
public class ApplicationCurrency extends AbstractPersistableCustom {
public class ApplicationCurrency extends AbstractPersistableCustom<Long> {
@Column(name = "code", nullable = false, length = 3)
private String code;
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
*/
@Entity
@Table(name = "m_organisation_currency")
public class OrganisationCurrency extends AbstractPersistableCustom {
public class OrganisationCurrency extends AbstractPersistableCustom<Long> {
@Column(name = "code", nullable = false, length = 3)
private String code;
@@ -49,7 +49,7 @@ import org.apache.fineract.organisation.office.exception.RootOfficeParentCannotB
@UniqueConstraint(columnNames = { "external_id" }, name = "externalid_org") })
@Getter
@Setter
public class Office extends AbstractPersistableCustom implements Serializable {
public class Office extends AbstractPersistableCustom<Long> implements Serializable {
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
@@ -41,7 +41,7 @@ import org.apache.fineract.organisation.office.domain.Office;
@Table(name = "m_staff", uniqueConstraints = { @UniqueConstraint(columnNames = { "display_name" }, name = "display_name"),
@UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE"),
@UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") })
public class Staff extends AbstractPersistableCustom {
public class Staff extends AbstractPersistableCustom<Long> {
@Column(name = "firstname", length = 50)
private String firstname;
@@ -32,7 +32,7 @@ import org.apache.fineract.organisation.workingdays.api.WorkingDaysApiConstants;
@Getter
@Entity
@Table(name = "m_working_days")
public class WorkingDays extends AbstractPersistableCustom {
public class WorkingDays extends AbstractPersistableCustom<Long> {
@Column(name = "recurrence", length = 100, nullable = true)
private String recurrence;
@@ -50,7 +50,7 @@ import org.apache.fineract.portfolio.common.domain.NthDayType;
@Entity
@Table(name = "m_calendar")
public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
public class Calendar extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@Column(name = "title", length = 50, nullable = false)
private String title;
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
@Entity
@Table(name = "m_calendar_history")
public class CalendarHistory extends AbstractPersistableCustom {
public class CalendarHistory extends AbstractPersistableCustom<Long> {
@ManyToOne(optional = false)
@JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false)
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_calendar_instance")
public class CalendarInstance extends AbstractPersistableCustom {
public class CalendarInstance extends AbstractPersistableCustom<Long> {
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "calendar_id", nullable = false)
@@ -60,7 +60,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
@Setter
@Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE"), //
@UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") })
public class Client extends AbstractAuditableWithUTCDateTimeCustom {
public class Client extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@Column(name = "account_no", length = 20, unique = true, nullable = false)
private String accountNumber;
@@ -181,16 +181,6 @@ public class Client extends AbstractAuditableWithUTCDateTimeCustom {
@Column(name = "submittedon_date")
private LocalDate submittedOnDate;
/*
* Deprecated since common Auditable fields were introduced. Columns and data left untouched to help migration.
*
* @Column(name = "updated_on") private LocalDate updatedOnDate;
*
* @ManyToOne(optional = true, fetch = FetchType.LAZY)
*
* @JoinColumn(name = "updated_by") private AppUser updatedBy;
*/
@ManyToOne(optional = true, fetch = FetchType.LAZY)
@JoinColumn(name = "activatedon_userid")
private AppUser activatedBy;
@@ -751,5 +741,4 @@ public class Client extends AbstractAuditableWithUTCDateTimeCustom {
setDisplayName(null);
}
}
}
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
@Table(name = "m_client_identifier", uniqueConstraints = {
@UniqueConstraint(columnNames = { "document_type_id", "document_key" }, name = "unique_identifier_key"),
@UniqueConstraint(columnNames = { "client_id", "document_key", "active" }, name = "unique_active_client_identifier") })
public class ClientIdentifier extends AbstractAuditableWithUTCDateTimeCustom {
public class ClientIdentifier extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@ManyToOne
@JoinColumn(name = "client_id", nullable = false)
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
@Entity
@Table(name = "m_delinquency_bucket", uniqueConstraints = {
@UniqueConstraint(name = "uq_delinquency_bucket_name", columnNames = { "name" }) })
public class DelinquencyBucket extends AbstractAuditableWithUTCDateTimeCustom {
public class DelinquencyBucket extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@Column(name = "name", nullable = false)
private String name;
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
@Entity
@Table(name = "m_delinquency_range", uniqueConstraints = {
@UniqueConstraint(name = "uq_delinquency_range_classification", columnNames = { "classification" }) })
public class DelinquencyRange extends AbstractAuditableWithUTCDateTimeCustom {
public class DelinquencyRange extends AbstractAuditableWithUTCDateTimeCustom<Long> {
@Column(name = "classification", nullable = false)
private String classification;
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_fund", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "fund_name_org"),
@UniqueConstraint(columnNames = { "external_id" }, name = "fund_externalid_org") })
public class Fund extends AbstractPersistableCustom {
public class Fund extends AbstractPersistableCustom<Long> {
@Column(name = "name")
private String name;
@@ -58,7 +58,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
@Entity
@Table(name = "m_group")
public final class Group extends AbstractPersistableCustom {
public final class Group extends AbstractPersistableCustom<Long> {
@Column(name = "external_id", length = 100, unique = true)
private String externalId;
@@ -25,7 +25,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_group_level")
public class GroupLevel extends AbstractPersistableCustom {
public class GroupLevel extends AbstractPersistableCustom<Long> {
@Column(name = "parent_id")
private Long parentId;
@@ -33,7 +33,7 @@ import org.apache.fineract.portfolio.group.api.GroupingTypesApiConstants;
@Entity
@Table(name = "m_group_roles")
public class GroupRole extends AbstractPersistableCustom {
public class GroupRole extends AbstractPersistableCustom<Long> {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id")
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.paymenttype.domain.PaymentType;
@Entity
@Getter
@Table(name = "m_payment_detail")
public final class PaymentDetail extends AbstractPersistableCustom {
public class PaymentDetail extends AbstractPersistableCustom<Long> {
@ManyToOne
@JoinColumn(name = "payment_type_id", nullable = false)
@@ -57,9 +57,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
@Column(name = "bank_number", length = 50)
private String bankNumber;
PaymentDetail() {
}
protected PaymentDetail() {}
public static PaymentDetail generatePaymentDetail(final PaymentType paymentType, final JsonCommand command,
final Map<String, Object> changes) {
@@ -85,9 +83,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
changes.put(PaymentDetailConstants.bankNumberParamName, bankNumber);
}
changes.put("paymentTypeId", paymentType.getId());
final PaymentDetail paymentDetail = new PaymentDetail(paymentType, accountNumber, checkNumber, routingCode, receiptNumber,
bankNumber);
return paymentDetail;
return new PaymentDetail(paymentType, accountNumber, checkNumber, routingCode, receiptNumber, bankNumber);
}
public static PaymentDetail instance(final PaymentType paymentType, final String accountNumber, final String checkNumber,
@@ -107,8 +103,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
public PaymentDetailData toData() {
final PaymentTypeData paymentTypeData = null; // this.paymentType.toData();
final PaymentDetailData paymentDetailData = new PaymentDetailData(getId(), paymentTypeData, this.accountNumber, this.checkNumber,
this.routingCode, this.receiptNumber, this.bankNumber);
return paymentDetailData;
return new PaymentDetailData(getId(), paymentTypeData, this.accountNumber, this.checkNumber, this.routingCode, this.receiptNumber,
this.bankNumber);
}
}
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.paymenttype.api.PaymentTypeApiResourceConst
@Entity
@Table(name = "m_payment_type")
@AllArgsConstructor
public class PaymentType extends AbstractPersistableCustom {
public class PaymentType extends AbstractPersistableCustom<Long> {
@Column(name = "value")
private String name;
@@ -57,7 +57,7 @@ import org.springframework.security.core.userdetails.User;
@Entity
@Table(name = "m_appuser", uniqueConstraints = @UniqueConstraint(columnNames = { "username" }, name = "username_org"))
public class AppUser extends AbstractPersistableCustom implements PlatformUser {
public class AppUser extends AbstractPersistableCustom<Long> implements PlatformUser {
@Column(name = "email", nullable = false, length = 100)
private String email;
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.client.domain.Client;
@Entity
@Table(name = "m_selfservice_user_client_mapping")
public class AppUserClientMapping extends AbstractPersistableCustom {
public class AppUserClientMapping extends AbstractPersistableCustom<Long> {
@ManyToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumn(name = "appuser_id", nullable = false)
@@ -26,7 +26,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
@Entity
@Table(name = "m_permission")
public class Permission extends AbstractPersistableCustom implements Serializable {
public class Permission extends AbstractPersistableCustom<Long> implements Serializable {
@Column(name = "grouping", nullable = false, length = 45)
private String grouping;
@@ -38,7 +38,7 @@ import org.apache.fineract.useradministration.data.RoleData;
@Entity
@Table(name = "m_role", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
public class Role extends AbstractPersistableCustom implements Serializable {
public class Role extends AbstractPersistableCustom<Long> implements Serializable {
@Column(name = "name", unique = true, nullable = false, length = 100)
private String name;