All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mailchimp.domain.customer.CustomerCreate Maven / Gradle / Ivy

package com.mailchimp.domain.customer;

import java.util.Objects;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mailchimp.domain.Address;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class CustomerCreate {

    private final String id;
    @JsonProperty("email_address")
    private final String emailAddress;
    @JsonProperty("opt_in_status")
    private final boolean optInStatus;
    private final String company;
    @JsonProperty("first_name")
    private final String firstName;
    @JsonProperty("last_name")
    private final String lastName;
    @JsonProperty("orders_count")
    private final int ordersCount;
    @JsonProperty("total_spent")
    private final long totalSpent;
    private final Address address;

    private CustomerCreate(final Builder builder) {
        this.id = builder.id;
        this.emailAddress = builder.emailAddress;
        this.optInStatus = builder.optInStatus;
        this.company = builder.company;
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.ordersCount = builder.ordersCount;
        this.totalSpent = builder.totalSpent;
        this.address = builder.address;
    }

    /**
     * Returns a new builder instance.
     * @return Builder
     */
    public static Builder builder() {
        return new Builder();
    }

    public String getId() {
        return id;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public boolean getOptInStatus() {
        return optInStatus;
    }

    public String getCompany() {
        return company;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getOrdersCount() {
        return ordersCount;
    }

    public long getTotalSpent() {
        return totalSpent;
    }

    public Address getAddress() {
        return address;
    }

    public static final class Builder {

        private String id;
        private String emailAddress;
        private boolean optInStatus;
        private String company;
        private String firstName;
        private String lastName;
        private int ordersCount;
        private long totalSpent;
        private Address address;

        public Builder setId(final String id) {
            this.id = id;
            return this;
        }

        public Builder setEmailAddress(final String emailAddress) {
            this.emailAddress = emailAddress;
            return this;
        }

        public Builder setOptInStatus(final boolean optInStatus) {
            this.optInStatus = optInStatus;
            return this;
        }

        public Builder setCompany(final String company) {
            this.company = company;
            return this;
        }

        public Builder setFirstName(final String firstName) {
            this.firstName = firstName;
            return this;
        }

        public Builder setLastName(final String lastName) {
            this.lastName = lastName;
            return this;
        }

        public Builder setOrdersCount(final int ordersCount) {
            this.ordersCount = ordersCount;
            return this;
        }

        public Builder setTotalSpent(final long totalSpent) {
            this.totalSpent = totalSpent;
            return this;
        }

        public Builder setAddress(final Address address) {
            this.address = address;
            return this;
        }

        /**
         * Builds a new object after validating the necessary fields.
         * @return CustomerCreate
         */
        public CustomerCreate build() {
            if (Objects.isNull(this.id) || Objects.isNull(this.emailAddress)) {
                throw new IllegalStateException("Required fields are id, email_address, opt_in_status");
            }
            return new CustomerCreate(this);
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy