/*
* Copyright 2007 Zhang, Zheng <oldbig@gmail.com>
*
* This file is part of ZOJ.
*
* ZOJ is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either revision 3 of the License, or (at your option) any later revision.
*
* ZOJ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with ZOJ. if not, see
* <http://www.gnu.org/licenses/>.
*/
package cn.edu.zju.acm.onlinejudge.persistence;
import java.util.List;
import cn.edu.zju.acm.onlinejudge.bean.UserPreference;
import cn.edu.zju.acm.onlinejudge.bean.UserProfile;
import cn.edu.zju.acm.onlinejudge.bean.enumeration.Country;
import cn.edu.zju.acm.onlinejudge.bean.request.UserCriteria;
/**
* <p>
* UserPersistence interface defines the API used to manager the user profile related affairs in persistence layer.
* </p>
*
* @version 2.0
* @author Zhang, Zheng
*/
public interface UserPersistence {
/**
* <p>
* Creates the specified user profile in persistence layer.
* </p>
*
* @param profile
* the UserProfile instance to create
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void createUserProfile(UserProfile profile, long user) throws PersistenceException;
/**
* <p>
* Creates the specified teacher in persistence layer.
* </p>
*
* @param profile
* the UserProfile instance to create
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void createTeacher(UserProfile profile, long user) throws PersistenceException;
/**
* <p>
* Updates the specified user profile in persistence layer.
* </p>
*
* @param profile
* the UserProfile instance to update
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void updateUserProfile(UserProfile profile, long user) throws PersistenceException;
/**
* <p>
* Deletes the specified user profile in persistence layer.
* </p>
*
* @param id
* the id of the user profile to delete
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void deleteUserProfile(long id, long user) throws PersistenceException;
/**
* <p>
* Gets the user profile with given id in persistence layer.
* </p>
*
* @param id
* the id of the user profile
* @return the user profile with given id in persistence layer
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
UserProfile getUserProfile(long id) throws PersistenceException;
/**
* <p>
* Gets the user profile with given handle in persistence layer.
* </p>
*
* @param handle
* the handle of the user profile
* @return the user profile with given handle in persistence layer
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
UserProfile getUserProfileByHandle(String handle) throws PersistenceException;
UserProfile login(String handle, String password) throws PersistenceException;
/**
* <p>
* Gets the user profile with given email in persistence layer.
* </p>
*
* @param email
* the email of the user profile
* @return the user profile with given email in persistence layer
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
UserProfile getUserProfileByEmail(String email) throws PersistenceException;
/**
* <p>
* Gets the user profile with given code in persistence layer.
* </p>
*
* @param code
* the code of the user profile
* @return the user profile with given code in persistence layer
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
UserProfile getUserProfileByCode(String code) throws PersistenceException;
/**
* <p>
* Searchs all user profiles according with the given criteria in persistence layer.
* </p>
*
* @return a list of user profiles according with the given criteria
* @param criteria
* the user profile search criteria
* @param offset
* the offset of the start position to search
* @param count
* the maximum number of user profiles in returned list
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
List<UserProfile> searchUserProfiles(UserCriteria criteria, int offset, int count) throws PersistenceException;
int searchUserProfilesCount(UserCriteria criteria) throws PersistenceException;
/**
* <p>
* Creates the specified user preference in persistence layer.
* </p>
*
* @param preference
* the UserPreference instance to create
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void createUserPreference(UserPreference preference, long user) throws PersistenceException;
/**
* <p>
* Updates the specified user preference in persistence layer.
* </p>
*
* @param preference
* the UserPreference instance to update
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void updateUserPreference(UserPreference preference, long user) throws PersistenceException;
/**
* <p>
* Gets the user preference with given id in persistence layer.
* </p>
*
* @param id
* the id of the user preference
* @return the user preference with given id in persistence layer
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
UserPreference getUserPreference(long id) throws PersistenceException;
/**
* <p>
* Creates a confirm code for given user in persistence layer.
* </p>
*
* @param id
* the id of the user
* @param code
* the confirm code
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void createConfirmCode(long id, String code, long user) throws PersistenceException;
/**
* <p>
* Deletes the confirm code of given user in persistence layer.
* </p>
*
* @param id
* the id of the user
* @param user
* the id of the user who made this modification
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
void deleteConfirmCode(long id, long user) throws PersistenceException;
/**
* <p>
* Gets the confirm code with given id in persistence layer.
* </p>
*
* @param id
* the id of the user
* @return the confirm code of given user
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
String getConfirmCode(long id) throws PersistenceException;
/**
* <p>
* Gets all countries from the persistence layer.
* </p>
*
* @return a list containing all country names
* @throws PersistenceException
* wrapping a persistence implementation specific exception
*/
// TODO(xuchuan): move this to a CountryPersistence
List<Country> getAllCountries() throws PersistenceException;
/**
* <p>
* Get a teacher's all student.
* </p>
* @param userId the teacher
* @return
* @throws PersistenceException
*/
List getStudents(long userId) throws PersistenceException;
long getCreateUser(long userId) throws PersistenceException;
}