package in.partake.controller.api.account;
import play.mvc.Result;
import in.partake.base.PartakeException;
import in.partake.controller.api.AbstractPartakeAPI;
import in.partake.model.IPartakeDAOs;
import in.partake.model.UserEx;
import in.partake.model.access.Transaction;
import in.partake.model.dao.DAOException;
import in.partake.model.dao.PartakeConnection;
import in.partake.model.dto.UserPreference;
public class SetPreferenceAPI extends AbstractPartakeAPI {
public static Result post() throws DAOException, PartakeException {
return new SetPreferenceAPI().execute();
}
@Override
public Result doExecute() throws DAOException, PartakeException {
UserEx user = ensureLogin();
ensureValidSessionToken();
new SetPreferenceAPITransaction(
user,
getBooleanParameter("profilePublic"),
getBooleanParameter("receivingTwitterMessage"),
getBooleanParameter("tweetingAttendanceAutomatically")
).execute();
return renderOK();
}
}
class SetPreferenceAPITransaction extends Transaction<Void> {
UserEx user;
Boolean profilePublic;
Boolean receivingTwitterMessage;
Boolean tweetingAttendanceAutomatically;
public SetPreferenceAPITransaction(UserEx user, Boolean profilePublic, Boolean receivingTwitterMessage, Boolean tweetingAttendanceAutomatically) {
this.user = user;
this.profilePublic = profilePublic;
this.receivingTwitterMessage = receivingTwitterMessage;
this.tweetingAttendanceAutomatically = tweetingAttendanceAutomatically;
}
/**
* Updates UserPreference. Null arguments won't be updated.
*/
public Void doExecute(PartakeConnection con, IPartakeDAOs daos) throws DAOException, PartakeException {
final UserPreference pref = daos.getUserPreferenceAccess().find(con, user.getId());
UserPreference newPref = new UserPreference(pref != null ? pref : UserPreference.getDefaultPreference(user.getId()));
if (profilePublic != null)
newPref.setProfilePublic(profilePublic);
if (receivingTwitterMessage != null)
newPref.setReceivingTwitterMessage(receivingTwitterMessage);
if (tweetingAttendanceAutomatically != null)
newPref.setTweetingAttendanceAutomatically(tweetingAttendanceAutomatically);
daos.getUserPreferenceAccess().put(con, newPref);
return null;
}
}