package com.robonobo.remote.service;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import com.robonobo.core.api.model.Library;
import com.robonobo.core.api.model.Playlist;
import com.robonobo.midas.model.*;
public interface MidasService {
public List<MidasUser> getAllUsers();
public MidasUser getUserByEmail(String email);
public MidasUser getUserById(long userId);
public MidasUser createUser(MidasUser user);
public void saveUser(MidasUser user);
/**
* Returns the target user, but only the bits that are allowed to be seen by
* the requesting user
*/
public MidasUser getUserAsVisibleBy(MidasUser target, MidasUser requestor);
public void deleteUser(long userId);
public MidasPlaylist getPlaylistById(long playlistId);
public MidasPlaylist getPlaylistByUserIdAndTitle(long uid, String title);
/**
* Returns the playlist with the playlistId set
*/
public MidasPlaylist newPlaylist(MidasPlaylist playlist);
public void savePlaylist(MidasPlaylist playlist);
public void deletePlaylist(MidasPlaylist playlist);
public MidasStream getStreamById(String streamId);
public void saveStream(MidasStream stream);
public void deleteStream(MidasStream stream);
/**
* This is for monitoring, ensures db connection is ok
*/
public Long countUsers();
public MidasFriendRequest createOrUpdateFriendRequest(MidasUser requestor, MidasUser requestee, MidasPlaylist pl);
public MidasFriendRequest getFriendRequest(String requestCode);
/**
* Returns error message, null if no error
*/
public String acceptFriendRequest(MidasFriendRequest request);
public void ignoreFriendRequest(MidasFriendRequest request);
public List<MidasFriendRequest> getPendingFriendRequests(long userId);
public MidasInvite createOrUpdateInvite(String email, MidasUser friend, MidasPlaylist pl);
public MidasInvite getInvite(String inviteCode);
public void inviteAccepted(long acceptedUserId, String inviteCode);
/**
* @param since Pass null to get the whole library
*/
public Library getLibrary(MidasUser u, Date since);
public void putLibrary(Library lib);
public MidasUserConfig getUserConfig(MidasUser u);
public void putUserConfig(MidasUserConfig config);
public List<MidasPlaylist> getRecentPlaylists(long maxAgeMs);
public void addFriends(long userId, List<Long> friendIds, List<String> friendEmails);
/**
* Returns message to be displayed to the requesting user
*/
public String requestAccountTopUp(long userId);
public abstract MidasInvite getInviteByEmail(String email);
public abstract void deleteComment(MidasComment c);
public abstract void saveComment(MidasComment c);
public abstract MidasComment newCommentForLibrary(MidasComment comment, long userId);
public abstract MidasComment newCommentForPlaylist(MidasComment comment, long playlistId);
public abstract List<MidasComment> getCommentsForLibrary(long uid, Date since);
public abstract List<MidasComment> getCommentsForPlaylist(long plId, Date since);
public abstract MidasComment getComment(long commentId);
public abstract void lovesChanged(MidasUser u, Playlist oldP, Playlist newP) throws IOException;
}