Adds infrastructure layer.

This commit is contained in:
rogelio-o
2018-06-18 19:41:18 +02:00
parent 955d91717f
commit 32935d831a
8 changed files with 130 additions and 1 deletions

View File

@@ -0,0 +1,5 @@
{"properties": [{
"name": "movies-server.url",
"type": "java.lang.String",
"description": "The base URL of the server to retrieve the movies."
}]}

View File

@@ -0,0 +1,2 @@
movies-server:
url: https://de1e2a9b-a4e8-406f-abf3-747cfff8c873.mock.pstmn.io

View File

@@ -12,7 +12,7 @@ import lombok.Setter;
public class Movie {
@EqualsAndHashCode.Include
private String id;
private String movieId;
private String title;

View File

@@ -0,0 +1,27 @@
package com.rogelioorts.training.spring.ddd.entities;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class FeignMovie {
@EqualsAndHashCode.Include
private long id;
private String tit;
private String poster;
private String desc;
private String url;
private double punc;
private String level;
}

View File

@@ -0,0 +1,14 @@
package com.rogelioorts.training.spring.ddd.entities;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class PageFeignMovie {
private List<FeignMovie> movies;
}

View File

@@ -0,0 +1,40 @@
package com.rogelioorts.training.spring.ddd.mappers;
import org.springframework.stereotype.Component;
import com.rogelioorts.training.spring.ddd.entities.FeignMovie;
import com.rogelioorts.training.spring.ddd.entities.Movie;
import com.rogelioorts.training.spring.ddd.value.objects.CensoringLevel;
@Component
public class FeignMoviesMapper {
public Movie map(FeignMovie in) {
Movie out = new Movie();
out.setMovieId(String.valueOf(in.getId()));
out.setTitle(in.getTit());
out.setImage(in.getPoster());
out.setDescription(in.getDesc());
out.setStreamUrl(in.getUrl());
out.setPunctuation(in.getPunc());
out.setCensoringLevel(mapCensoringLevel(in.getLevel()));
return out;
}
private CensoringLevel mapCensoringLevel(String rawLevel) {
if(rawLevel == null) {
return null;
}
switch(rawLevel) {
case "censored":
return CensoringLevel.CENSORED;
case "uncensored":
return CensoringLevel.UNCENSORED;
default:
return null;
}
}
}

View File

@@ -0,0 +1,15 @@
package com.rogelioorts.training.spring.ddd.repositories;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.rogelioorts.training.spring.ddd.entities.PageFeignMovie;
@FeignClient("${movies-server.url}")
public interface MoviesFeignRepository {
@RequestMapping(method = RequestMethod.GET, path = "/movies")
PageFeignMovie getPage();
}

View File

@@ -0,0 +1,26 @@
package com.rogelioorts.training.spring.ddd.repositories.impl;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import com.rogelioorts.training.spring.ddd.entities.Movie;
import com.rogelioorts.training.spring.ddd.mappers.FeignMoviesMapper;
import com.rogelioorts.training.spring.ddd.repositories.MoviesFeignRepository;
import com.rogelioorts.training.spring.ddd.repositories.MoviesRepository;
public class MoviesFeignRepositoryImpl implements MoviesRepository {
@Autowired
private MoviesFeignRepository repository;
@Autowired
private FeignMoviesMapper mapper;
@Override
public List<Movie> findAll() {
return repository.getPage().getMovies().stream().map(mapper::map).collect(Collectors.toList());
}
}