package com.ciandt.techgallery.service.impl;
import com.google.api.server.spi.response.BadRequestException;
import com.google.api.server.spi.response.InternalServerErrorException;
import com.google.api.server.spi.response.NotFoundException;
import com.google.appengine.api.users.User;
import com.ciandt.techgallery.persistence.model.TechGalleryUser;
import com.ciandt.techgallery.service.RecommendationService;
import com.ciandt.techgallery.service.UserServiceTG;
import com.ciandt.techgallery.service.enums.RecommendationEnums;
import com.ciandt.techgallery.service.enums.ValidationMessageEnums;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Services for Recommendation Endpoint requests.
*
* @author Thulio Ribeiro
*
*/
public class RecommendationServiceImpl implements RecommendationService {
UserServiceTG userService = UserServiceTGImpl.getInstance();
private static RecommendationServiceImpl instance;
private RecommendationServiceImpl() {}
/**
* Singleton method for the service.
*
* @author <a href="mailto:joaom@ciandt.com"> João Felipe de Medeiros Moreira </a>
* @since 07/10/2015
*
* @return RecommendationServiceImpl instance.
*/
public static RecommendationServiceImpl getInstance() {
if (instance == null) {
instance = new RecommendationServiceImpl();
}
return instance;
}
@Override
public List<String> getRecommendations(User user)
throws NotFoundException, BadRequestException, InternalServerErrorException {
validateUser(user);
final List<RecommendationEnums> enumValues = Arrays.asList(RecommendationEnums.values());
final List<String> recommendations = new ArrayList<>();
for (final RecommendationEnums enumEntry : enumValues) {
recommendations.add(enumEntry.message());
}
return recommendations;
}
/**
* Validate the user logged in.
*
* @param user info about user from google
* @throws InternalServerErrorException in case something goes wrong
* @throws NotFoundException in case the information are not founded
* @throws BadRequestException in case a request with problem were made.
*/
private void validateUser(User user)
throws BadRequestException, NotFoundException, InternalServerErrorException {
if (user == null || user.getUserId() == null || user.getUserId().isEmpty()) {
throw new BadRequestException(ValidationMessageEnums.USER_GOOGLE_ENDPOINT_NULL.message());
}
final TechGalleryUser techUser = userService.getUserByGoogleId(user.getUserId());
if (techUser == null) {
throw new NotFoundException(ValidationMessageEnums.USER_NOT_EXIST.message());
}
}
}