Country.java

package cl.restapi.retrievecountriesapi.models;

import cl.restapi.retrievecountriesapi.v1.Views;
import com.fasterxml.jackson.annotation.JsonView;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.ArrayList;
import java.util.List;

@Document(collection = "countries")
public class Country {
    @Id
    private String id;

    @Indexed
    @JsonView(Views.Single.class)
    private String name;

    @Indexed
    @JsonView(Views.Single.class)
    private String capital;

    @Indexed(unique = true)
    @JsonView(Views.Single.class)
    private String code;

    @Indexed
    @JsonView(Views.Single.class)
    private String iso3;

    @Indexed
    @JsonView(Views.Single.class)
    private String region;

    @Indexed
    @JsonView(Views.Single.class)
    private String subregion;

    @JsonView(Views.Single.class)
    private String tld;

    @Field("phone_code")
    @JsonView(Views.Single.class)
    private String phoneCode;

    @JsonView(Views.Single.class)
    private Double latitude;

    @JsonView(Views.Single.class)
    private Double longitude;

    @JsonView(Views.Single.class)
    private Currency currency;

    @JsonView(Views.Single.class)
    private Flag flags;

    @JsonView({Views.Complete.class, Views.WithStates.class})
    private List<State> states;

    @JsonView({Views.Complete.class, Views.WithCities.class})
    private List<City> cities;

    public Country() {
        this.states = new ArrayList<>();
        this.cities = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCapital() {
        return capital;
    }

    public void setCapital(String capital) {
        this.capital = capital;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getIso3() {
        return iso3;
    }

    public void setIso3(String iso3) {
        this.iso3 = iso3;
    }

    public String getRegion() {
        return region;
    }

    public void setRegion(String region) {
        this.region = region;
    }

    public String getSubregion() {
        return subregion;
    }

    public void setSubregion(String subregion) {
        this.subregion = subregion;
    }

    public String getTld() {
        return tld;
    }

    public void setTld(String tld) {
        this.tld = tld;
    }

    public String getPhoneCode() {
        return phoneCode;
    }

    public void setPhoneCode(String phoneCode) {
        this.phoneCode = phoneCode;
    }

    public Double getLatitude() {
        return latitude;
    }

    public void setLatitude(Double latitude) {
        this.latitude = latitude;
    }

    public Double getLongitude() {
        return longitude;
    }

    public void setLongitude(Double longitude) {
        this.longitude = longitude;
    }

    public Currency getCurrency() {
        return currency;
    }

    public void setCurrency(Currency currency) {
        this.currency = currency;
    }

    public Flag getFlags() {
        return flags;
    }

    public void setFlags(Flag flags) {
        this.flags = flags;
    }

    public List<State> getStates() {
        return states;
    }

    public void setStates(List<State> states) {
        this.states = states;
    }

    public List<City> getCities() {
        return cities;
    }

    public void setCities(List<City> cities) {
        this.cities = cities;
    }
}