diff --git a/pom.xml b/pom.xml index 5e9580cbe6b2cd9728a65ba717edb3955f829de7..74a9b9b428bbcaf4a53d0d71111b16494298c500 100644 --- a/pom.xml +++ b/pom.xml @@ -144,6 +144,40 @@ <version>2.0.1.Final</version> </dependency> + <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + <version>5.3.6</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-api --> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-api</artifactId> + <version>10.0.5</version> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <version>4.0.1</version> + <scope>provided</scope> + </dependency> + + <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>2.12.3</version> + </dependency> + + <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + <version>2.12.3</version> + </dependency> </dependencies> </dependencyManagement> @@ -176,5 +210,6 @@ <module>persistence</module> <module>service</module> <module>api</module> + <module>rest</module> </modules> </project> diff --git a/rest/pom.xml b/rest/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..efa463a75cbcd453d116542513c7b8919e543c3e --- /dev/null +++ b/rest/pom.xml @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>iceHockeyManager</artifactId> + <groupId>cz.muni.fi.pv165</groupId> + <version>0.0.1-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <version>1.0.2.RELEASE</version> + + <artifactId>rest</artifactId> + + <dependencies> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + </dependency> + + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + + <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-api --> + <dependency> + <groupId>org.apache.tomcat</groupId> + <artifactId>tomcat-api</artifactId> + </dependency> + + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>cz.muni.fi.pv165</groupId> + <artifactId>service</artifactId> + <version>0.0.1-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <mainClass>cz.muni.fi.pa165.icehockeymanager.config.RestApplicationConfig</mainClass> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat7-maven-plugin</artifactId> + <version>2.2</version> + <configuration> + <path>/eshop-rest</path> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/config/RestApplicationConfig.java b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/config/RestApplicationConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ac12ff42fe225aae24d80aa3805da4f5cc88383d --- /dev/null +++ b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/config/RestApplicationConfig.java @@ -0,0 +1,69 @@ +package cz.muni.fi.pa165.icehockeymanager.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import cz.muni.fi.pa165.icehockeymanager.interceptor.RestHeaderInterceptor; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Locale; + +//@EnableWebMvc +//@EnableAutoConfiguration +//@Configuration +@Import(ApplicationConfig.class) +//@ComponentScan(basePackages = "cz.muni.fi.pa165.icehockeymanager") +@SpringBootApplication +public class RestApplicationConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new RestHeaderInterceptor()); + } + + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } + + @Bean + @Primary + public MappingJackson2HttpMessageConverter customJackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH)); + + objectMapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION); + + jsonConverter.setObjectMapper(objectMapper); + return jsonConverter; + } + + @Override + public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { + converters.add(customJackson2HttpMessageConverter()); + } + + public static void main(String[] args) throws Exception { + SpringApplication.run(RestApplicationConfig.class, args); + } +} diff --git a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/controller/TeamManagerController.java b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/controller/TeamManagerController.java new file mode 100644 index 0000000000000000000000000000000000000000..8f056a19edd5b3eea28ac8907ae090ec6bab25d1 --- /dev/null +++ b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/controller/TeamManagerController.java @@ -0,0 +1,25 @@ +package cz.muni.fi.pa165.icehockeymanager.controller; + +import cz.muni.fi.pa165.icehockeymanager.dto.PlayerDTO; +import cz.muni.fi.pa165.icehockeymanager.facades.TeamManagerFacade; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collection; + +@RestController +@RequestMapping("/team-manager") +public class TeamManagerController { + + private final TeamManagerFacade teamManagerFacade; + + public TeamManagerController(TeamManagerFacade teamManagerFacade) { + this.teamManagerFacade = teamManagerFacade; + } + + @GetMapping("/players/free") + public Collection<PlayerDTO> getFreePlayers() { + return teamManagerFacade.getFreePlayers(); + } +} diff --git a/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/interceptor/RestHeaderInterceptor.java b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/interceptor/RestHeaderInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..c75e200f17b08e125642ac26ac95ab518006630e --- /dev/null +++ b/rest/src/main/java/cz/muni/fi/pa165/icehockeymanager/interceptor/RestHeaderInterceptor.java @@ -0,0 +1,21 @@ +package cz.muni.fi.pa165.icehockeymanager.interceptor; + + +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class RestHeaderInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) + throws Exception { + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", + "GET, POST, PUT, DELETE, OPTIONS"); + return true; + } + +} diff --git a/rest/src/main/resources/application.properties b/rest/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..ba17f62cd032e649b00cfa1ecd2b5433133b6307 --- /dev/null +++ b/rest/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.main.web-application-type=none \ No newline at end of file