Skip to content
Snippets Groups Projects
Commit 5ed6da25 authored by Sven Kästle's avatar Sven Kästle
Browse files

feat: New REST gateway for submission parts

parent 45a52eb3
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,13 @@ package unipotsdam.gf.interfaces;
import unipotsdam.gf.modules.submission.model.FullSubmission;
import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
import unipotsdam.gf.modules.submission.model.SubmissionPart;
import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public interface ISubmission {
/**
......@@ -22,11 +28,35 @@ public interface ISubmission {
FullSubmission getFullSubmission(String fullSubmissionId);
/**
* Checks if an full submission id already exists in the database
* Checks if a full submission id already exists in the database
*
* @param id The id of the full submission
* @param fullSubmissionId The id of the full submission
* @return Returns true if the id exists
*/
boolean existsFullSubmissionId(String id);
boolean existsFullSubmissionId(String fullSubmissionId);
/**
* Store the submission part text in the database
*
* @param submissionPartPostRequest The submission part post request
* @return The new submission part
*/
SubmissionPart addSubmissionPart(SubmissionPartPostRequest submissionPartPostRequest);
/**
* Get the entire submission part from database
*
* @param submissionPartId The id of the submission part
* @return The new submission part
*/
SubmissionPart getSubmissionPart(String submissionPartId);
/**
* Checks if a submission part id already exists in the database
*
* @param submissionPartId The id of the submission part
* @return Returns true if the id exists
*/
boolean existsSubmissionPartId(String submissionPartId);
}
......@@ -3,8 +3,11 @@ package unipotsdam.gf.modules.submission.controller;
import unipotsdam.gf.core.database.mysql.MysqlConnect;
import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
import unipotsdam.gf.interfaces.ISubmission;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
import unipotsdam.gf.modules.submission.model.FullSubmission;
import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
import unipotsdam.gf.modules.submission.model.SubmissionPart;
import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest;
import java.util.UUID;
......@@ -52,7 +55,6 @@ public class SubmissionController implements ISubmission {
VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId);
if (rs.next()) {
// save submission
FullSubmission fullSubmission = getFullSubmissionFromResultSet(rs);
......@@ -103,8 +105,96 @@ public class SubmissionController implements ISubmission {
}
@Override
public SubmissionPart addSubmissionPart(SubmissionPartPostRequest submissionPartPostRequest) {
// create a new id if we found no id.
String uuid = UUID.randomUUID().toString();
while (existsSubmissionPartId(uuid)) {
uuid = UUID.randomUUID().toString();
}
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "INSERT INTO submissionparts (`id`, `userId`, `fullSubmissionId`, `text`, `category`) VALUES (?,?,?,?,?);";
connection.issueInsertOrDeleteStatement(request, uuid, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getText(), submissionPartPostRequest.getCategory().toString());
// get the new submission from database
SubmissionPart submissionPart = getSubmissionPart(uuid);
// close connection
connection.close();
return submissionPart;
}
@Override
public SubmissionPart getSubmissionPart(String submissionPartId) {
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "SELECT * FROM submissionparts WHERE id = ?;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId);
if (rs.next()) {
// save submission
SubmissionPart submissionPart = getSubmissionPartFromResultSelt(rs);
// close connection
connection.close();
return submissionPart;
}
else {
// close connection
connection.close();
return null;
}
}
@Override
public boolean existsSubmissionPartId(String submissionPartId) {
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "SELECT COUNT(*) > 0 AS `exists` FROM submissionparts WHERE id = ?;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId);
if (rs.next()) {
// save the response
int count = rs.getInt("exists");
// close connection
connection.close();
// return true if we found the id
if (count < 1) {
return false;
}
else {
return true;
}
}
// something happened
return true;
}
/**
* Build an full submission object from a given result set
* Build a full submission object from a given result set
*
* @param rs The result set from a database query
* @return A new full submission object
......@@ -119,4 +209,22 @@ public class SubmissionController implements ISubmission {
return new FullSubmission(id, timestamp, user, text);
}
/**
* Build a submission part object from a given result set
*
* @param rs The result set from the database query
* @return A new submission part object
*/
private SubmissionPart getSubmissionPartFromResultSelt(VereinfachtesResultSet rs) {
String id = rs.getString("id");
long timestamp = rs.getTimestamp("timestamp").getTime();
String userId = rs.getString("userId");
String fullSubmissionId = rs.getString("fullSubmissionId");
String text = rs.getString("text");
Category category = Category.valueOf(rs.getString("category").toUpperCase());
return new SubmissionPart(id, timestamp, userId, fullSubmissionId, text, category);
}
}
package unipotsdam.gf.modules.submission.model;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionPart {
// variables
private String id;
private long timestamp;
private String userId;
private String fullSubmissionId;
private String text;
private Category category;
// constructor
public SubmissionPart(String id, long timestamp, String userId, String fullSubmissionId, String text, Category category) {
this.id = id;
this.timestamp = timestamp;
this.userId = userId;
this.fullSubmissionId = fullSubmissionId;
this.text = text;
this.category = category;
}
public SubmissionPart(){}
// methods
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getFullSubmissionId() {
return fullSubmissionId;
}
public void setFullSubmissionId(String fullSubmissionId) {
this.fullSubmissionId = fullSubmissionId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Override
public String toString() {
return "SubmissionPart{" +
"id='" + id + '\'' +
", timestamp=" + timestamp +
", userId='" + userId + '\'' +
", fullSubmissionId='" + fullSubmissionId + '\'' +
", text='" + text + '\'' +
", category=" + category +
'}';
}
}
package unipotsdam.gf.modules.submission.model;
import unipotsdam.gf.modules.peer2peerfeedback.Category;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionPartPostRequest {
// variables
private String userId;
private String fullSubmissionId;
private String text;
private Category category;
// constructors
public SubmissionPartPostRequest(String userId, String fullSubmissionId, String text, Category category) {
this.userId = userId;
this.fullSubmissionId = fullSubmissionId;
this.text = text;
this.category = category;
}
public SubmissionPartPostRequest(){}
// methods
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getFullSubmissionId() {
return fullSubmissionId;
}
public void setFullSubmissionId(String fullSubmissionId) {
this.fullSubmissionId = fullSubmissionId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Override
public String toString() {
return "SubmissionPartPostRequest{" +
"userId='" + userId + '\'' +
", fullSubmissionId='" + fullSubmissionId + '\'' +
", text='" + text + '\'' +
", category=" + category +
'}';
}
}
package unipotsdam.gf.modules.submission.view;
import unipotsdam.gf.modules.annotation.model.AnnotationResponse;
import unipotsdam.gf.modules.submission.controller.SubmissionController;
import unipotsdam.gf.modules.submission.model.FullSubmission;
import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
import unipotsdam.gf.modules.submission.model.SubmissionResponse;
import unipotsdam.gf.modules.submission.model.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
......@@ -23,7 +20,7 @@ public class SubmissionService {
@POST
@Path("/full")
public Response addFullSubmission(FullSubmissionPostRequest fullSubmissionPostRequest) {
// save full submission request in database and return the new id
// save full submission request in database and return the new full submission
SubmissionController controller = new SubmissionController();
FullSubmission fullSubmission = controller.addFullSubmission(fullSubmissionPostRequest);
......@@ -49,6 +46,34 @@ public class SubmissionService {
return Response.status(Response.Status.NOT_FOUND).entity(response).build();
}
}
@POST
@Path("/part")
public Response addSubmissionPart(SubmissionPartPostRequest submissionPartPostRequest) {
// save submission part request in the database and return the new submission part
SubmissionController controller = new SubmissionController();
SubmissionPart submissionPart = controller.addSubmissionPart(submissionPartPostRequest);
return Response.ok(submissionPart).build();
}
@GET
@Path("/part/{id}")
public Response getSubmissionPart(@PathParam("id") String submissionPartId) {
// get submission part from database based by id
SubmissionController controller = new SubmissionController();
SubmissionPart submissionPart = controller.getSubmissionPart(submissionPartId);
if(submissionPart != null) {
return Response.ok(submissionPart).build();
}
else {
// declare response
SubmissionResponse response = new SubmissionResponse();
response.setMessage("Submission with the id '" + submissionPartId + "' can't be found");
return Response.status(Response.Status.NOT_FOUND).entity(response).build();
}
}
}
......@@ -129,6 +129,16 @@ CREATE TABLE if not exists `fullsubmissions` (
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE if not exists `submissionparts` (
`id` VARCHAR(120) NOT NULL,
`timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`userId` VARCHAR(120) NOT NULL,
`fullSubmissionId` VARCHAR(120) NOT NULL,
`text` MEDIUMTEXT NOT NULL,
`category` VARCHAR(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
alter table users
add isStudent tinyint(1) default '1' null;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment