package in.partake.controller.api.user;
import in.partake.base.PartakeException;
import in.partake.base.Util;
import in.partake.controller.api.AbstractPartakeAPI;
import in.partake.model.IPartakeDAOs;
import in.partake.model.UserEx;
import in.partake.model.access.DBAccess;
import in.partake.model.dao.DAOException;
import in.partake.model.dao.PartakeConnection;
import in.partake.model.daofacade.UserDAOFacade;
import in.partake.model.dto.UserTwitterLink;
import in.partake.resource.UserErrorCode;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.node.ObjectNode;
import play.mvc.Result;
public class SearchUserAPI extends AbstractPartakeAPI {
public static Result get() throws DAOException, PartakeException {
return new SearchUserAPI().execute();
}
@Override
protected Result doExecute() throws DAOException, PartakeException {
String userNamePrefix = getParameter("userNamePrefix");
if (StringUtils.isBlank(userNamePrefix))
return renderInvalid(UserErrorCode.MISSING_USERNAME);
int limit = optIntegerParameter("limit", 10);
limit = Util.ensureRange(limit, 1, 100);
List<UserEx> users = new SearchUserAccess(userNamePrefix, limit).execute();
ArrayNode array = Util.toSafeJSONArray(users);
ObjectNode obj = new ObjectNode(JsonNodeFactory.instance);
obj.put("users", array);
return renderOK(obj);
}
}
class SearchUserAccess extends DBAccess<List<UserEx>> {
private String userNamePrefix;
private int limit;
public SearchUserAccess(String userNamePrefix, int limit) {
this.userNamePrefix = userNamePrefix;
this.limit = limit;
}
@Override
protected List<UserEx> doExecute(PartakeConnection con, IPartakeDAOs daos) throws DAOException, PartakeException {
List<UserTwitterLink> links = daos.getTwitterLinkageAccess().findByScreenNamePrefix(con, userNamePrefix, limit);
List<UserEx> users = new ArrayList<UserEx>();
for (UserTwitterLink link : links) {
UserEx user = UserDAOFacade.getUserEx(con, daos, link.getUserId());
if (user == null)
continue;
users.add(user);
}
return users;
}
}