package org.knowm.xchange.coinbase.dto.account;
import java.util.List;
import org.knowm.xchange.coinbase.dto.CoinbaseBaseResponse;
import org.knowm.xchange.coinbase.dto.auth.CoinbaseOAuth;
import org.knowm.xchange.coinbase.dto.marketdata.CoinbaseMoney;
import org.knowm.xchange.coinbase.dto.merchant.CoinbaseMerchant;
import org.knowm.xchange.coinbase.dto.serialization.CoinbaseMoneyDeserializer;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
/**
* @author jamespedwards42
*/
@JsonInclude(Include.NON_NULL)
public class CoinbaseUser extends CoinbaseBaseResponse {
@JsonProperty("user")
private final CoinbaseUserInfo user;
private final CoinbaseOAuth oAuth;
@JsonProperty("client_id")
private String oAuthClientId;
private CoinbaseUser(@JsonProperty("user") final CoinbaseUserInfo user, @JsonProperty("oauth") final CoinbaseOAuth oAuth,
@JsonProperty("success") final boolean success, @JsonProperty("errors") final List<String> errors) {
super(success, errors);
this.user = user;
this.oAuth = oAuth;
}
public CoinbaseUser(CoinbaseUserInfo user) {
super(true);
this.user = user;
this.oAuth = null;
}
public static CoinbaseUser createNewCoinbaseUser(String email, final String password) {
return new CoinbaseUser(new CoinbaseUserInfo(email, password, null));
}
public static CoinbaseUser createCoinbaseNewUserWithReferrerId(String email, final String password, final String referrerId) {
return new CoinbaseUser(new CoinbaseUserInfo(email, password, referrerId));
}
@JsonIgnore
public String getId() {
return user.getId();
}
@JsonIgnore
public String getEmail() {
return user.getEmail();
}
public CoinbaseUser updateEmail(String email) {
user.setEmail(email);
return this;
}
@JsonIgnore
public String getName() {
return user.getName();
}
public CoinbaseUser updateName(String name) {
user.setName(name);
return this;
}
@JsonIgnore
public String getPassword() {
return user.getPassword();
}
@JsonIgnore
public String getReceiveAddress() {
return user.getReceiveAddress();
}
@JsonIgnore
public String getReferrerId() {
return user.getReferrerId();
}
@JsonIgnore
public String getTimeZone() {
return user.getTimeZone();
}
public CoinbaseUser updateTimeZone(String timeZone) {
user.setTimeZone(timeZone);
return this;
}
@JsonIgnore
public CoinbaseMoney getBalance() {
return user.getBalance();
}
@JsonIgnore
public String getNativeCurrency() {
return user.getNativeCurrency();
}
public CoinbaseUser updateNativeCurrency(String nativeCurrency) {
user.setNativeCurrency(nativeCurrency);
return this;
}
@JsonIgnore
public CoinbaseBuySellLevel getBuyLevel() {
return user.getBuyLevel();
}
@JsonIgnore
public CoinbaseBuySellLevel getSellLevel() {
return user.getSellLevel();
}
@JsonIgnore
public CoinbaseMoney getBuyLimit() {
return user.getBuyLimit();
}
@JsonIgnore
public CoinbaseMoney getSellLimit() {
return user.getSellLimit();
}
@JsonIgnore
public String getPin() {
return user.getPin();
}
public CoinbaseUser updatePin(String pin) {
user.setPin(pin);
return this;
}
@JsonIgnore
public CoinbaseMerchant getMerchant() {
return user.getMerchant();
}
@JsonIgnore
public CoinbaseOAuth getOAuth() {
return oAuth;
}
public String getoAuthClientId() {
return oAuthClientId;
}
public CoinbaseUser withoAuthClientId(String oAuthClientId) {
this.oAuthClientId = oAuthClientId;
return this;
}
@Override
public String toString() {
return "CoinbaseUser [user=" + user + ", oAuth=" + oAuth + ", oAuthClientId=" + oAuthClientId + "]";
}
@JsonInclude(Include.NON_NULL)
public static class CoinbaseUserInfo {
private final String id;
@JsonProperty("email")
private String email;
@JsonProperty("name")
private String name;
@JsonProperty("password")
private final String password;
private final String receiveAddress;
@JsonProperty("referrer_id")
private final String referrerId;
@JsonProperty("time_zone")
private String timeZone;
private final CoinbaseMoney balance;
@JsonProperty("native_currency")
private String nativeCurrency;
private final CoinbaseBuySellLevel buyLevel;
private final CoinbaseBuySellLevel sellLevel;
private final CoinbaseMoney buyLimit;
private final CoinbaseMoney sellLimit;
@JsonProperty("pin")
private String pin;
private final CoinbaseMerchant merchant;
private CoinbaseUserInfo(@JsonProperty("id") final String id, @JsonProperty("email") final String email, @JsonProperty("name") final String name,
@JsonProperty("password") final String password, @JsonProperty("receive_address") final String receiveAddress,
@JsonProperty("referrer_id") final String referrerId, @JsonProperty("time_zone") final String timeZone,
@JsonProperty("balance") @JsonDeserialize(using = CoinbaseMoneyDeserializer.class) final CoinbaseMoney balance,
@JsonProperty("native_currency") final String nativeCurrency, @JsonProperty("buy_level") final CoinbaseBuySellLevel buyLevel,
@JsonProperty("sell_level") final CoinbaseBuySellLevel sellLevel,
@JsonProperty("buy_limit") @JsonDeserialize(using = CoinbaseMoneyDeserializer.class) final CoinbaseMoney buyLimit,
@JsonProperty("sell_limit") @JsonDeserialize(using = CoinbaseMoneyDeserializer.class) final CoinbaseMoney sellLimit,
@JsonProperty("pin") final String pin, @JsonProperty("merchant") final CoinbaseMerchant merchant) {
this.id = id;
this.email = email;
this.name = name;
this.password = password;
this.receiveAddress = receiveAddress;
this.referrerId = referrerId;
this.timeZone = timeZone;
this.balance = balance;
this.nativeCurrency = nativeCurrency;
this.buyLevel = buyLevel;
this.sellLevel = sellLevel;
this.buyLimit = buyLimit;
this.sellLimit = sellLimit;
this.pin = pin;
this.merchant = merchant;
}
private CoinbaseUserInfo(String email, final String password, final String referrerId) {
this.email = email;
this.password = password;
this.referrerId = referrerId;
this.id = null;
this.name = null;
this.receiveAddress = null;
this.timeZone = null;
this.balance = null;
this.nativeCurrency = null;
this.buyLevel = null;
this.sellLevel = null;
this.buyLimit = null;
this.sellLimit = null;
this.pin = null;
this.merchant = null;
}
@JsonIgnore
public String getId() {
return id;
}
public String getEmail() {
return email;
}
private void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
@JsonIgnore
public String getReceiveAddress() {
return receiveAddress;
}
public String getReferrerId() {
return referrerId;
}
public String getTimeZone() {
return timeZone;
}
private void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
@JsonIgnore
public CoinbaseMoney getBalance() {
return balance;
}
public String getNativeCurrency() {
return nativeCurrency;
}
private void setNativeCurrency(String nativeCurrency) {
this.nativeCurrency = nativeCurrency;
}
@JsonIgnore
public CoinbaseBuySellLevel getBuyLevel() {
return buyLevel;
}
@JsonIgnore
public CoinbaseBuySellLevel getSellLevel() {
return sellLevel;
}
@JsonIgnore
public CoinbaseMoney getBuyLimit() {
return buyLimit;
}
@JsonIgnore
public CoinbaseMoney getSellLimit() {
return sellLimit;
}
public String getPin() {
return pin;
}
private void setPin(String pin) {
this.pin = pin;
}
@JsonIgnore
public CoinbaseMerchant getMerchant() {
return merchant;
}
@Override
public String toString() {
return "CoinbaseUserInfo [id=" + id + ", email=" + email + ", name=" + name + ", password=" + password + ", receiveAddress=" + receiveAddress
+ ", referrerId=" + referrerId + ", timeZone=" + timeZone + ", balance=" + balance + ", nativeCurrency=" + nativeCurrency + ", buyLevel="
+ buyLevel + ", sellLevel=" + sellLevel + ", buyLimit=" + buyLimit + ", sellLimit=" + sellLimit + ", pin=" + pin + ", merchant=" + merchant
+ "]";
}
}
}