package org.bitionaire.elbombillo.account.model;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import org.bitionaire.elbombillo.account.resources.AccountResource;
import org.glassfish.jersey.linking.Binding;
import org.glassfish.jersey.linking.InjectLink;
import java.io.Serializable;
import java.net.URI;
@ToString @EqualsAndHashCode
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@JsonView({ AccountRepresentation.Abbreviated.class, AccountRepresentation.Complete.class })
@Getter private final Long id;
@JsonView({ AccountRepresentation.Abbreviated.class, AccountRepresentation.Complete.class })
@Getter private final String username;
@JsonView({ AccountRepresentation.Complete.class })
@Getter private final String firstName;
@JsonView({ AccountRepresentation.Complete.class })
@Getter private final String lastName;
@JsonView({ AccountRepresentation.Complete.class })
@Getter private final String email;
@JsonView({ AccountRepresentation.Abbreviated.class, AccountRepresentation.Complete.class })
@InjectLink(
resource = AccountResource.class,
style = InjectLink.Style.ABSOLUTE,
method = "get",
bindings = @Binding(name = "username", value = "${instance.username}"),
rel = "self"
)
@Getter private URI self;
@JsonCreator
public Account(@JsonProperty("id") final Long id,
@JsonProperty("username") final String username,
@JsonProperty("firstName") final String firstName,
@JsonProperty("lastName") final String lastName,
@JsonProperty("email") final String email) {
this.id = id;
this.username = username;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
}