package crmdna.api.endpoint;
import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiMethod.HttpMethod;
import com.google.appengine.api.users.User;
import crmdna.api.endpoint.ClientApi.ClientEnum;
import crmdna.api.endpoint.ProgramIshaApi.GroupEnum;
import crmdna.common.Utils;
import crmdna.common.api.APIResponse;
import crmdna.common.api.APIResponse.Status;
import crmdna.common.api.APIUtils;
import crmdna.common.api.RequestInfo;
import crmdna.user.User.App;
import crmdna.user.User.ClientLevelPrivilege;
import crmdna.user.User.GroupLevelPrivilege;
import crmdna.user.UserProp;
import javax.annotation.Nullable;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Api(name = "user")
public class UserApi {
@ApiMethod(path = "create", httpMethod = HttpMethod.POST)
public APIResponse create(@Named("client") String client, @Named("email") String email,
@Named("group_id") long groupId, @Nullable @Named("showStackTrace") Boolean showStackTrace,
HttpServletRequest req, User user) {
if (client == null)
client = "isha";
String login = null;
try {
login = Utils.getLoginEmail(user);
UserProp prop = crmdna.user.User.create(client, email, groupId, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "addClientLevelPrivilege", httpMethod = HttpMethod.POST)
public APIResponse addClientLevelPrivilege(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("privilege") ClientLevelPrivilege privilege,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
String login = null;
try {
login = Utils.getLoginEmail(user);
UserProp prop = crmdna.user.User.addClientLevelPrivilege(client, email, privilege, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "deleteClientLevelPrivilege", httpMethod = HttpMethod.POST)
public APIResponse deleteClientLevelPrivilege(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("privilege") ClientLevelPrivilege privilege,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
String login = null;
try {
login = Utils.getLoginEmail(user);
UserProp prop = crmdna.user.User.deleteClientLevelPrivilege(client, email, privilege, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "addGroupLevelPrivilege", httpMethod = HttpMethod.POST)
public APIResponse addGroupLevelPrivilege(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("group") GroupEnum groupEnum,
@Nullable @Named("groupOtherIdOrName") String groupOtherIdOrName,
@Named("privilege") GroupLevelPrivilege privilege,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
long groupId = EndpointUtils.getGroupId(client, groupEnum, groupOtherIdOrName);
String login = null;
try {
login = Utils.getLoginEmail(user);
UserProp prop =
crmdna.user.User.addGroupLevelPrivilege(client, groupId, email, privilege, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "deleteGroupLevelPrivilege", httpMethod = HttpMethod.POST)
public APIResponse deleteGroupLevelPrivilege(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("group") GroupEnum groupEnum,
@Nullable @Named("groupOtherIdOrName") String groupOtherIdOrName,
@Named("privilege") GroupLevelPrivilege privilege,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
long groupId = EndpointUtils.getGroupId(client, groupEnum, groupOtherIdOrName);
String login = null;
try {
login = Utils.getLoginEmail(user);
UserProp prop =
crmdna.user.User.deleteGroupLevelPrivilege(client, groupId, email, privilege, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "addApp", httpMethod = HttpMethod.POST)
public APIResponse addApp(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("app") App app,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = null;
String login = null;
try {
client = EndpointUtils.getClient(clientEnum, clientOther);
login = Utils.getLoginEmail(user);
UserProp prop =
crmdna.user.User.addApp(client, email, app, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "removeApp", httpMethod = HttpMethod.POST)
public APIResponse removeApp(@Named("client") ClientEnum clientEnum,
@Named("email") String email, @Named("app") App app,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = null;
String login = null;
try {
client = EndpointUtils.getClient(clientEnum, clientOther);
login = Utils.getLoginEmail(user);
UserProp prop =
crmdna.user.User.removeApp(client, email, app, login);
return new APIResponse().status(Status.SUCCESS).object(prop);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
// TODO: remove this and add query method
@ApiMethod(path = "getAll", httpMethod = HttpMethod.GET)
public APIResponse getAll(@Named("client") ClientEnum clientEnum,
@Nullable @Named("clientIfOther") String clientOther,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
String login = null;
try {
login = Utils.getLoginEmail(user);
List<UserProp> props = crmdna.user.User.getAll(client, login);
return new APIResponse().status(Status.SUCCESS).object(props);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().client(client).req(req)
.login(login));
}
}
@ApiMethod(path = "getLoggedInUser", httpMethod = HttpMethod.GET)
public APIResponse getLoggedInUser(@Nullable @Named("showStackTrace") Boolean showStackTrace,
HttpServletRequest req, User user) {
String login = null;
try {
login = Utils.getLoginEmail(user);
Utils.getLoginEmail(user);
if (null == login)
login = "not logged in";
return new APIResponse().status(Status.SUCCESS).object(login);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().req(req).login(login));
}
}
@ApiMethod(path = "clonePrivileges", httpMethod = HttpMethod.POST)
public APIResponse clonePrivileges(@Named("client") ClientEnum clientEnum,
@Nullable @Named("clientIfOther") String clientOther,
@Named("sourceEmail") String sourceEmail, @Named("targetEmail") String targetEmail,
@Nullable @Named("showStackTrace") Boolean showStackTrace, HttpServletRequest req, User user) {
String client = EndpointUtils.getClient(clientEnum, clientOther);
String login = null;
try {
login = Utils.getLoginEmail(user);
crmdna.user.User.clonePrivileges(client, sourceEmail, targetEmail, login);
UserProp afterCloning = crmdna.user.User.get(client, targetEmail).toProp(client);
return new APIResponse().status(Status.SUCCESS).object(afterCloning);
} catch (Exception ex) {
return APIUtils.toAPIResponse(ex, showStackTrace, new RequestInfo().req(req).login(login));
}
}
}