SitesController.java
package net.andresbustamante.yafoot.core.web.controllers;
import net.andresbustamante.yafoot.commons.exceptions.DatabaseException;
import net.andresbustamante.yafoot.commons.model.UserContext;
import net.andresbustamante.yafoot.commons.web.controllers.AbstractController;
import net.andresbustamante.yafoot.core.services.SiteManagementService;
import net.andresbustamante.yafoot.core.services.SiteSearchService;
import net.andresbustamante.yafoot.core.web.mappers.SiteMapper;
import net.andresbustamante.yafoot.web.dto.Site;
import net.andresbustamante.yafoot.web.dto.SiteForm;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;
import java.util.ArrayList;
import java.util.List;
import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
/**
* REST controller for sites related operations.
*
* @author andresbustamante
*/
@RestController
public class SitesController extends AbstractController implements SitesApi {
private final SiteSearchService siteSearchService;
private final SiteManagementService siteManagementService;
private final SiteMapper siteMapper;
@Value("${api.sites.one.path}")
private String siteApiPath;
public SitesController(
final SiteSearchService siteSearchService, final SiteManagementService siteManagementService,
final SiteMapper siteMapper) {
this.siteSearchService = siteSearchService;
this.siteManagementService = siteManagementService;
this.siteMapper = siteMapper;
}
@Override
public ResponseEntity<List<Site>> loadSites() {
try {
UserContext ctx = getUserContext();
List<net.andresbustamante.yafoot.core.model.Site> sites = siteSearchService.findSites(ctx);
List<Site> result = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sites)) {
result.addAll(siteMapper.map(sites));
}
return ResponseEntity.ok(result);
} catch (DatabaseException e) {
throw new ResponseStatusException(INTERNAL_SERVER_ERROR, translate(DATABASE_BASIC_ERROR, null));
}
}
@CrossOrigin(exposedHeaders = {HttpHeaders.LOCATION})
@Override
public ResponseEntity<Void> addNewSite(final SiteForm site) {
try {
UserContext userContext = getUserContext();
long id = siteManagementService.saveSite(siteMapper.map(site), userContext);
String location = String.format(siteApiPath, id);
return ResponseEntity.created(getLocationURI(location)).build();
} catch (DatabaseException e) {
throw new ResponseStatusException(INTERNAL_SERVER_ERROR, translate(DATABASE_BASIC_ERROR, null));
}
}
}