package fr.keemto.web;
import fr.keemto.core.Account;
import fr.keemto.core.User;
import fr.keemto.core.UserRepository;
import fr.keemto.provider.social.SocialAccountRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Controller
@RequestMapping(value = "/api/accounts")
public class RandomAccountController {
public static final int MAX_RANDOM_ACCOUNTS = 5;
private final SocialAccountRepository accountFactory;
private final UserRepository userRepository;
private int maxRandomAccount = MAX_RANDOM_ACCOUNTS;
@Autowired
public RandomAccountController(SocialAccountRepository accountFactory, UserRepository userRepository) {
this.accountFactory = accountFactory;
this.userRepository = userRepository;
}
@RequestMapping(value = "/random", method = RequestMethod.GET)
@ResponseBody
public List<Account> getRandomAccounts() {
List<Account> accounts = new ArrayList<Account>();
List<User> users = userRepository.getAllUsers();
for (User user : users) {
accounts.addAll(accountFactory.getAccounts(user));
}
return randomize(accounts, Account.class);
}
private <T> List<T> randomize(List<T> accounts, Class<T> clazz) {
Collections.shuffle(accounts);
return accounts.subList(0, accounts.size() < maxRandomAccount ? accounts.size() : maxRandomAccount);
}
public void setMaxRandomAccount(int maxRandomAccount) {
this.maxRandomAccount = maxRandomAccount;
}
}