added the comment post method
This commit is contained in:
parent
cdf61e73c4
commit
bffac60eb1
|
@ -1,6 +1,10 @@
|
|||
# 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 #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>
|
||||
<artifactId>social-networking-library-ws</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<version>2.8.0-SNAPSHOT</version>
|
||||
<version>2.9.0-SNAPSHOT</version>
|
||||
<name>social-networking-library-ws</name>
|
||||
<description>Rest interface for the social networking library.</description>
|
||||
<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;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.ValidationException;
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
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.scope.api.ScopeProvider;
|
||||
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.utils.CassandraConnection;
|
||||
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.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 com.webcohesion.enunciate.metadata.rs.RequestHeader;
|
||||
|
@ -153,4 +167,95 @@ public class Comments {
|
|||
|
||||
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.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.DocumentBuilderFactory;
|
||||
|
||||
|
@ -19,6 +22,7 @@ import org.gcube.applicationsupportlayer.social.NotificationsManager;
|
|||
import org.gcube.applicationsupportlayer.social.ex.ApplicationProfileNotFoundException;
|
||||
import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite;
|
||||
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.resources.gcore.utils.XPathHelper;
|
||||
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.Feed;
|
||||
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.ex.FeedIDNotFoundException;
|
||||
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.liferay.ws.GroupManagerWSBuilder;
|
||||
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.resources.discovery.client.api.DiscoveryClient;
|
||||
import org.gcube.resources.discovery.client.queries.api.Query;
|
||||
|
@ -495,4 +501,5 @@ public class SocialUtils {
|
|||
}
|
||||
return toShare;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue