// Path: microservices-catalog/src/main/java/com/idugalic/catalog/models/Category.java
// @Entity
// @Table(name = "categories")
// public class Category {
// 
// 	@Id
// 	@GeneratedValue
// 	private Long id;
// 
// 	@Column(nullable = false)
// 	private String name;
// 
// 	@ManyToMany(mappedBy = "categories")
// 	@JsonIgnore
// 	private List<Product> products;
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public List<Product> getProducts() {
// 		return products;
// 	}
// 
// 	public void setProducts(List<Product> products) {
// 		this.products = products;
// 	}
// 
// }
// 
// Path: microservices-catalog/src/main/java/com/idugalic/catalog/models/Product.java
// @Entity
// @Table(name = "products")
// public class Product {
// 
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.AUTO)
// 	@Column(name = "id")
// 	private Long id;
// 
// 	@Version
// 	@Column(name = "version")
// 	private Integer version;
// 
// 	private String name;
// 
// 	private int quantity;
// 
// 	private MonetaryAmount price;
// 
// 	@ManyToMany(cascade = CascadeType.ALL)
// 	@JoinTable(name = "products_categories", joinColumns = {
// 			@JoinColumn(name = "product_id", referencedColumnName = "id") }, inverseJoinColumns = {
// 					@JoinColumn(name = "category_id", referencedColumnName = "id") })
// 	private List<Category> categories;
// 
// 	public Long getId() {
// 		return this.id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public Integer getVersion() {
// 		return this.version;
// 	}
// 
// 	public void setVersion(Integer version) {
// 		this.version = version;
// 	}
// 
// 	protected Product() {
// 
// 	}
// 
// 	public Product(String name, MonetaryAmount price) {
// 		this.name = name;
// 		this.price = price;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public int getQuantity() {
// 		return quantity;
// 	}
// 
// 	public void setQuantity(int quantity) {
// 		this.quantity = quantity;
// 	}
// 
// 	public MonetaryAmount getPrice() {
// 		return price;
// 	}
// 
// 	public void setPrice(MonetaryAmount price) {
// 		this.price = price;
// 	}
// 
// 	public List<Category> getCategories() {
// 		return categories;
// 	}
// 
// 	public void setCategories(List<Category> categories) {
// 		this.categories = categories;
// 	}
// 
// }


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import com.idugalic.catalog.models.Category;
import com.idugalic.catalog.models.Product;
package com.idugalic.catalog;



@SpringBootApplication
@EnableJpaRepositories
@EnableDiscoveryClient
public class Application

{
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Configuration
	static class RestMvc extends RepositoryRestMvcConfiguration {

		@Override
		protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
// Path: microservices-catalog/src/main/java/com/idugalic/catalog/models/Category.java
// @Entity
// @Table(name = "categories")
// public class Category {
// 
// 	@Id
// 	@GeneratedValue
// 	private Long id;
// 
// 	@Column(nullable = false)
// 	private String name;
// 
// 	@ManyToMany(mappedBy = "categories")
// 	@JsonIgnore
// 	private List<Product> products;
// 
// 	public Long getId() {
// 		return id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public List<Product> getProducts() {
// 		return products;
// 	}
// 
// 	public void setProducts(List<Product> products) {
// 		this.products = products;
// 	}
// 
// }
// 
// Path: microservices-catalog/src/main/java/com/idugalic/catalog/models/Product.java
// @Entity
// @Table(name = "products")
// public class Product {
// 
// 	@Id
// 	@GeneratedValue(strategy = GenerationType.AUTO)
// 	@Column(name = "id")
// 	private Long id;
// 
// 	@Version
// 	@Column(name = "version")
// 	private Integer version;
// 
// 	private String name;
// 
// 	private int quantity;
// 
// 	private MonetaryAmount price;
// 
// 	@ManyToMany(cascade = CascadeType.ALL)
// 	@JoinTable(name = "products_categories", joinColumns = {
// 			@JoinColumn(name = "product_id", referencedColumnName = "id") }, inverseJoinColumns = {
// 					@JoinColumn(name = "category_id", referencedColumnName = "id") })
// 	private List<Category> categories;
// 
// 	public Long getId() {
// 		return this.id;
// 	}
// 
// 	public void setId(Long id) {
// 		this.id = id;
// 	}
// 
// 	public Integer getVersion() {
// 		return this.version;
// 	}
// 
// 	public void setVersion(Integer version) {
// 		this.version = version;
// 	}
// 
// 	protected Product() {
// 
// 	}
// 
// 	public Product(String name, MonetaryAmount price) {
// 		this.name = name;
// 		this.price = price;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// 	public int getQuantity() {
// 		return quantity;
// 	}
// 
// 	public void setQuantity(int quantity) {
// 		this.quantity = quantity;
// 	}
// 
// 	public MonetaryAmount getPrice() {
// 		return price;
// 	}
// 
// 	public void setPrice(MonetaryAmount price) {
// 		this.price = price;
// 	}
// 
// 	public List<Category> getCategories() {
// 		return categories;
// 	}
// 
// 	public void setCategories(List<Category> categories) {
// 		this.categories = categories;
// 	}
// 
// }


// Path: microservices-catalog/src/main/java/com/idugalic/catalog/Application.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import com.idugalic.catalog.models.Category;
import com.idugalic.catalog.models.Product;

package com.idugalic.catalog;



@SpringBootApplication
@EnableJpaRepositories
@EnableDiscoveryClient
public class Application

{
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

	@Configuration
	static class RestMvc extends RepositoryRestMvcConfiguration {

		@Override
		protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
			config.exposeIdsFor(Product.class, Category.class);