Feature #24022 Add api the get posts with range filter parameters
This commit is contained in:
parent
f0fa56a7dd
commit
61203ff9f7
|
@ -1,6 +1,6 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [v2.8.0] - 2022-10-20
|
## [v2.8.0-SNAPSHOT - 2022-10-20
|
||||||
|
|
||||||
- Feature #23891 Refactored following updates social lib
|
- Feature #23891 Refactored following updates social lib
|
||||||
- Feature #23847 Social service: temporarily block of notifications for given username(s)
|
- Feature #23847 Social service: temporarily block of notifications for given username(s)
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -12,7 +12,7 @@
|
||||||
<groupId>org.gcube.portal</groupId>
|
<groupId>org.gcube.portal</groupId>
|
||||||
<artifactId>social-networking-library-ws</artifactId>
|
<artifactId>social-networking-library-ws</artifactId>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<version>2.8.0</version>
|
<version>2.8.0-SNAPSHOT</version>
|
||||||
<name>social-networking-library-ws</name>
|
<name>social-networking-library-ws</name>
|
||||||
<description>Rest interface for the social networking library.</description>
|
<description>Rest interface for the social networking library.</description>
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
@ -26,6 +26,10 @@ import org.gcube.portal.databook.server.DatabookStore;
|
||||||
import org.gcube.portal.databook.shared.ApplicationProfile;
|
import org.gcube.portal.databook.shared.ApplicationProfile;
|
||||||
import org.gcube.portal.databook.shared.Feed;
|
import org.gcube.portal.databook.shared.Feed;
|
||||||
import org.gcube.portal.databook.shared.Post;
|
import org.gcube.portal.databook.shared.Post;
|
||||||
|
import org.gcube.portal.databook.shared.RangePosts;
|
||||||
|
import org.gcube.portal.databook.shared.ex.ColumnNameNotFoundException;
|
||||||
|
import org.gcube.portal.databook.shared.ex.FeedTypeNotFoundException;
|
||||||
|
import org.gcube.portal.databook.shared.ex.PrivacyLevelTypeNotFoundException;
|
||||||
import org.gcube.portal.social.networking.ws.inputs.PostInputBean;
|
import org.gcube.portal.social.networking.ws.inputs.PostInputBean;
|
||||||
import org.gcube.portal.social.networking.ws.outputs.ResponseBean;
|
import org.gcube.portal.social.networking.ws.outputs.ResponseBean;
|
||||||
import org.gcube.portal.social.networking.ws.utils.CassandraConnection;
|
import org.gcube.portal.social.networking.ws.utils.CassandraConnection;
|
||||||
|
@ -46,7 +50,7 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
|
||||||
@RequestHeaders ({
|
@RequestHeaders ({
|
||||||
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
|
@RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"),
|
||||||
@RequestHeader( name = "Content-Type", description = "application/json")
|
@RequestHeader( name = "Content-Type", description = "application/json")
|
||||||
})
|
})
|
||||||
public class Posts {
|
public class Posts {
|
||||||
|
|
||||||
// Logger
|
// Logger
|
||||||
|
@ -419,6 +423,52 @@ public class Posts {
|
||||||
return Response.status(status).entity(responseBean).build();
|
return Response.status(status).entity(responseBean).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("get-recent-posts-vre-by-range/")
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@StatusCodes ({
|
||||||
|
@ResponseCode ( code = 201, condition = "Sccessfull retrieved posts, they are reported in the 'result' field of the returned object"),
|
||||||
|
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
|
||||||
|
})
|
||||||
|
/**
|
||||||
|
* return the most recent posts for this vre up to quantity param and the last index of the posts in the timeline
|
||||||
|
* lastReturnedPostTimelineIndex is useful to know from where to start the range the next time you ask, because there are deletions
|
||||||
|
*
|
||||||
|
* @param from the range start (most recent feeds for this vre) has to be greater than 0
|
||||||
|
* @param quantity the number of most recent feeds for this vre starting from "from" param
|
||||||
|
* @return a <class>RangePosts</class> containing of most recent feeds for this vre
|
||||||
|
* @throws FeedTypeNotFoundException
|
||||||
|
* @throws PrivacyLevelTypeNotFoundException
|
||||||
|
* @throws ColumnNameNotFoundException
|
||||||
|
*/
|
||||||
|
public Response getRecentPostsByVREAndRange(
|
||||||
|
@QueryParam("from")
|
||||||
|
@Min(value=1, message="from cannot be negative")
|
||||||
|
int from,
|
||||||
|
@QueryParam("quantity")
|
||||||
|
@Min(value=1, message="quantity cannot be negative")
|
||||||
|
int quantity) throws ValidationException {
|
||||||
|
|
||||||
|
String context = ScopeProvider.instance.get();
|
||||||
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
|
logger.debug("Retrieving all posts coming from vre = " + context);
|
||||||
|
ResponseBean responseBean = new ResponseBean();
|
||||||
|
Status status = Status.OK;
|
||||||
|
try{
|
||||||
|
RangePosts rangePosts = CassandraConnection.getInstance().getDatabookStore().getRecentPostsByVREAndRange(context, from, quantity);
|
||||||
|
Filters.hideSensitiveInformation(rangePosts.getPosts(), caller.getClient().getId());
|
||||||
|
responseBean.setResult(rangePosts);
|
||||||
|
responseBean.setSuccess(true);
|
||||||
|
}catch(Exception e){
|
||||||
|
logger.error("Unable to retrieve posts for vre = " + context, e);
|
||||||
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
responseBean.setMessage(e.toString());
|
||||||
|
responseBean.setSuccess(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("get-posts-by-hashtag/")
|
@Path("get-posts-by-hashtag/")
|
||||||
@Produces({MediaType.APPLICATION_JSON})
|
@Produces({MediaType.APPLICATION_JSON})
|
||||||
|
|
Loading…
Reference in New Issue