added the comment post method
This commit is contained in:
parent
cdf61e73c4
commit
bffac60eb1
|
@ -1,6 +1,10 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [v2.8.0-SNAPSHOT] - 2022-10-20
|
## [v2.9.0-SNAPSHOT] - 2023-02-02
|
||||||
|
|
||||||
|
- Feature #24456 get a specific post by ID
|
||||||
|
|
||||||
|
## [v2.8.0] - 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-SNAPSHOT</version>
|
<version>2.9.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>
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
package org.gcube.portal.social.networking.ws.inputs;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.webcohesion.enunciate.metadata.DocumentationExample;
|
||||||
|
/**
|
||||||
|
* Generic input bean for methods that allow to comment posts
|
||||||
|
*/
|
||||||
|
@JsonIgnoreProperties(ignoreUnknown = true) // ignore in serialization/deserialization
|
||||||
|
public class CommentInputBean implements Serializable{
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5274608088828232980L;
|
||||||
|
|
||||||
|
@JsonProperty("text")
|
||||||
|
@NotNull(message="text cannot be null")
|
||||||
|
@Size(min=1, message="text cannot be empty")
|
||||||
|
@DocumentationExample("I would like to comment that ...")
|
||||||
|
/**
|
||||||
|
* text the text of the comment
|
||||||
|
*/
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
@NotNull(message="postid cannot be null")
|
||||||
|
@JsonProperty("postid")
|
||||||
|
/**
|
||||||
|
* postid the postid of the post where you attach the comment
|
||||||
|
*/
|
||||||
|
private String postid;
|
||||||
|
|
||||||
|
public CommentInputBean() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param text
|
||||||
|
* @param postid
|
||||||
|
* @param params
|
||||||
|
*/
|
||||||
|
public CommentInputBean(String text, String postid) {
|
||||||
|
super();
|
||||||
|
this.text = text;
|
||||||
|
this.postid = postid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPostid() {
|
||||||
|
return postid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPostid(String postid) {
|
||||||
|
this.postid = postid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CommentInputBean [text=" + text + ", postid=" + postid + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +1,17 @@
|
||||||
package org.gcube.portal.social.networking.ws.methods.v2;
|
package org.gcube.portal.social.networking.ws.methods.v2;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
import javax.validation.ValidationException;
|
import javax.validation.ValidationException;
|
||||||
import javax.validation.constraints.Min;
|
import javax.validation.constraints.Min;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.QueryParam;
|
import javax.ws.rs.QueryParam;
|
||||||
|
@ -18,10 +23,19 @@ import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
||||||
import org.gcube.common.authorization.library.utils.Caller;
|
import org.gcube.common.authorization.library.utils.Caller;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.portal.databook.shared.Comment;
|
import org.gcube.portal.databook.shared.Comment;
|
||||||
|
import org.gcube.portal.databook.shared.Feed;
|
||||||
|
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
|
||||||
|
import org.gcube.portal.social.networking.liferay.ws.UserManagerWSBuilder;
|
||||||
|
import org.gcube.portal.social.networking.ws.inputs.CommentInputBean;
|
||||||
|
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;
|
||||||
import org.gcube.portal.social.networking.ws.utils.ErrorMessages;
|
import org.gcube.portal.social.networking.ws.utils.ErrorMessages;
|
||||||
import org.gcube.portal.social.networking.ws.utils.Filters;
|
import org.gcube.portal.social.networking.ws.utils.Filters;
|
||||||
|
import org.gcube.portal.social.networking.ws.utils.SocialUtils;
|
||||||
|
import org.gcube.socialnetworking.socialtoken.SocialMessageParser;
|
||||||
|
import org.gcube.vomanagement.usermanagement.UserManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
|
import com.webcohesion.enunciate.metadata.rs.RequestHeader;
|
||||||
|
@ -153,4 +167,95 @@ public class Comments {
|
||||||
|
|
||||||
return Response.status(status).entity(responseBean).build();
|
return Response.status(status).entity(responseBean).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new comment to a post having as owner the auth token's owner
|
||||||
|
* @param post The post to be written
|
||||||
|
* @return
|
||||||
|
* @throws ValidationException
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("comment-post")
|
||||||
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
|
@StatusCodes ({
|
||||||
|
@ResponseCode ( code = 201, condition = "Successfull created, the new post is reported in the 'result' field of the returned object"),
|
||||||
|
@ResponseCode ( code = 500, condition = ErrorMessages.ERROR_IN_API_RESULT)
|
||||||
|
})
|
||||||
|
public Response writeComment(
|
||||||
|
@NotNull(message="Comment to write is missing")
|
||||||
|
@Valid
|
||||||
|
CommentInputBean comment) throws ValidationException{
|
||||||
|
|
||||||
|
Caller caller = AuthorizationProvider.instance.get();
|
||||||
|
String username = caller.getClient().getId();
|
||||||
|
logger.debug("Request of writing a comment coming from user " + username);
|
||||||
|
String context = ScopeProvider.instance.get();
|
||||||
|
ResponseBean responseBean = new ResponseBean();
|
||||||
|
Status status = Status.OK;
|
||||||
|
//check that the postId exists first
|
||||||
|
String postId = comment.getPostid();
|
||||||
|
try {
|
||||||
|
CassandraConnection.getInstance().getDatabookStore().readPost(postId);
|
||||||
|
} catch(Exception e){
|
||||||
|
responseBean.setMessage("You're probably trying comment a post with id " + postId + " that does not exist ");
|
||||||
|
responseBean.setSuccess(false);
|
||||||
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
SocialMessageParser messageParser = new SocialMessageParser(comment.getText());
|
||||||
|
String escapedCommentText = messageParser.getParsedMessage();
|
||||||
|
// parse
|
||||||
|
String key = UUID.randomUUID().toString();
|
||||||
|
String commentText = escapedCommentText;
|
||||||
|
String userid = username;
|
||||||
|
Date time = new Date();
|
||||||
|
|
||||||
|
GCubeUser user;
|
||||||
|
|
||||||
|
// retrieve group information
|
||||||
|
UserManager uManager = UserManagerWSBuilder.getInstance().getUserManager();
|
||||||
|
try {
|
||||||
|
user = uManager.getUserByUsername(userid);
|
||||||
|
} catch(Exception e){
|
||||||
|
logger.error("Unable to get user informations, comment write fails.", e);
|
||||||
|
responseBean.setMessage("Unable to get user informations, comment write fails with username " + userid + " that does not exist ");
|
||||||
|
responseBean.setSuccess(false);
|
||||||
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
}
|
||||||
|
String fullName = user.getFirstName() + " " + user.getLastName();
|
||||||
|
String thumbnailURL = user.getUserAvatarURL();
|
||||||
|
|
||||||
|
Date lastEditTime = null;
|
||||||
|
|
||||||
|
Comment theComment = new Comment(key, userid, lastEditTime, userid, commentText, fullName, thumbnailURL);
|
||||||
|
boolean result = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = CassandraConnection.getInstance().getDatabookStore().addComment(theComment);
|
||||||
|
} catch(Exception e){
|
||||||
|
responseBean.setMessage("Could not reach the DB to write the comment, something went wrong");
|
||||||
|
responseBean.setSuccess(false);
|
||||||
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(result){
|
||||||
|
logger.debug("Comment correctly written by user " + username);
|
||||||
|
responseBean.setResult(result);
|
||||||
|
responseBean.setSuccess(true);
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.error("Unable to write comment.");
|
||||||
|
responseBean.setMessage("Unable to write comment");
|
||||||
|
responseBean.setSuccess(false);
|
||||||
|
status = Status.INTERNAL_SERVER_ERROR;
|
||||||
|
return Response.status(status).entity(responseBean).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,9 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.ws.rs.core.Response.Status;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
|
||||||
|
@ -19,6 +22,7 @@ import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
||||||
import org.gcube.applicationsupportlayer.social.ex.ApplicationProfileNotFoundException;
|
import org.gcube.applicationsupportlayer.social.ex.ApplicationProfileNotFoundException;
|
||||||
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
|
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
|
||||||
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
|
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser;
|
||||||
|
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
||||||
import org.gcube.common.authorization.library.utils.Caller;
|
import org.gcube.common.authorization.library.utils.Caller;
|
||||||
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
import org.gcube.common.resources.gcore.utils.XPathHelper;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
@ -26,6 +30,7 @@ import org.gcube.common.scope.impl.ScopeBean;
|
||||||
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.FeedType;
|
import org.gcube.portal.databook.shared.FeedType;
|
||||||
|
import org.gcube.portal.databook.shared.Post;
|
||||||
import org.gcube.portal.databook.shared.PrivacyLevel;
|
import org.gcube.portal.databook.shared.PrivacyLevel;
|
||||||
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
|
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException;
|
||||||
import org.gcube.portal.notifications.bean.GenericItemBean;
|
import org.gcube.portal.notifications.bean.GenericItemBean;
|
||||||
|
@ -34,6 +39,7 @@ import org.gcube.portal.notifications.thread.PostNotificationsThread;
|
||||||
import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder;
|
import org.gcube.portal.social.networking.caches.SocialNetworkingSiteFinder;
|
||||||
import org.gcube.portal.social.networking.liferay.ws.GroupManagerWSBuilder;
|
import org.gcube.portal.social.networking.liferay.ws.GroupManagerWSBuilder;
|
||||||
import org.gcube.portal.social.networking.liferay.ws.UserManagerWSBuilder;
|
import org.gcube.portal.social.networking.liferay.ws.UserManagerWSBuilder;
|
||||||
|
import org.gcube.portal.social.networking.ws.outputs.ResponseBean;
|
||||||
import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
|
import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
|
||||||
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||||
import org.gcube.resources.discovery.client.queries.api.Query;
|
import org.gcube.resources.discovery.client.queries.api.Query;
|
||||||
|
@ -495,4 +501,5 @@ public class SocialUtils {
|
||||||
}
|
}
|
||||||
return toShare;
|
return toShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue