Add unit test for LikePostCommand.
[Sone.git] / src / main / java / net / pterodactylus / sone / database / PostDatabase.java
1 /*
2  * Sone - PostDatabase.java - Copyright © 2013 David Roden
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
17
18 package net.pterodactylus.sone.database;
19
20 import java.util.Collection;
21 import java.util.Set;
22
23 import net.pterodactylus.sone.data.Post;
24 import net.pterodactylus.sone.data.Sone;
25
26 import com.google.common.base.Function;
27 import com.google.common.base.Optional;
28
29 /**
30  * Database for handling {@link Post}s.
31  *
32  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
33  */
34 public interface PostDatabase {
35
36         Function<String, Optional<Post>> getPost();
37
38         /**
39          * Returns the post with the given ID.
40          *
41          * @param postId
42          *            The ID of the post to return
43          * @return The post with the given ID, or {@code null}
44          */
45         Optional<Post> getPost(String postId);
46
47         /**
48          * Returns all posts from the given Sone.
49          *
50          * @param soneId
51          *            The ID of the Sone
52          * @return All posts from the given Sone
53          */
54         Collection<Post> getPosts(String soneId);
55
56         /**
57          * Returns all posts that have the given Sone as recipient.
58          *
59          * @see Post#getRecipient()
60          * @param recipientId
61          *            The ID of the recipient of the posts
62          * @return All posts that have the given Sone as recipient
63          */
64         Collection<Post> getDirectedPosts(String recipientId);
65
66         /**
67          * Adds the given post to the store.
68          *
69          * @param post
70          *            The post to store
71          */
72         void storePost(Post post);
73
74         /**
75          * Removes the given post.
76          *
77          * @param post
78          *            The post to remove
79          */
80         void removePost(Post post);
81
82         /**
83          * Stores the given posts as all posts of a single {@link Sone}. This method
84          * will removed all other posts from the Sone!
85          *
86          * @param sone
87          *            The Sone to store the posts for
88          * @param posts
89          *            The posts to store
90          * @throws IllegalArgumentException
91          *             if posts do not all belong to the same Sone
92          */
93         void storePosts(Sone sone, Collection<Post> posts) throws IllegalArgumentException;
94
95         /**
96          * Removes all posts of the given {@link Sone}
97          *
98          * @param sone
99          *            The Sone to remove all posts for
100          */
101         void removePosts(Sone sone);
102
103         void likePost(Post post, Sone localSone);
104         void unlikePost(Post post, Sone localSone);
105         Set<Sone> getLikes(Post post);
106
107 }