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

feat: New REST gateway to create and receive full submission

parent d2aae249
No related branches found
No related tags found
No related merge requests found
package unipotsdam.gf.interfaces;
import unipotsdam.gf.modules.submission.model.FullSubmission;
import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
public interface ISubmission {
/**
* Store the full submission text in the database
*
* @param request The full submission post request
* @return The new full submission
*/
FullSubmission addFullSubmission(FullSubmissionPostRequest request);
/**
* Get the entire submission from the databse
*
* @param fullSubmissionId The id of the submission
* @return The full submission
*/
FullSubmission getFullSubmission(String fullSubmissionId);
/**
* Checks if an full submission id already exists in the database
*
* @param id The id of the full submission
* @return Returns true if the id exists
*/
boolean existsFullSubmissionId(String id);
}
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.submission.model.FullSubmission;
import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
import java.util.UUID;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionController implements ISubmission {
@Override
public FullSubmission addFullSubmission(FullSubmissionPostRequest fullSubmissionPostRequest) {
// create a new id if we found no id.
String uuid = UUID.randomUUID().toString();
while (existsFullSubmissionId(uuid)) {
uuid = UUID.randomUUID().toString();
}
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "INSERT INTO fullsubmissions (`id`, `user`, `text`) VALUES (?,?,?);";
connection.issueInsertOrDeleteStatement(request, uuid, fullSubmissionPostRequest.getUser(), fullSubmissionPostRequest.getText());
// get the new submission from database
FullSubmission fullSubmission = getFullSubmission(uuid);
// close connection
connection.close();
return fullSubmission;
}
@Override
public FullSubmission getFullSubmission(String fullSubmissionId) {
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "SELECT * FROM fullsubmissions WHERE id = ?;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId);
if (rs.next()) {
// save submission
FullSubmission fullSubmission = getFullSubmissionFromResultSet(rs);
// close connection
connection.close();
return fullSubmission;
}
else {
// close connection
connection.close();
return null;
}
}
@Override
public boolean existsFullSubmissionId(String id) {
// establish connection
MysqlConnect connection = new MysqlConnect();
connection.connect();
// build and execute request
String request = "SELECT COUNT(*) > 0 AS `exists` FROM fullsubmissions WHERE id = ?;";
VereinfachtesResultSet rs = connection.issueSelectStatement(request, id);
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
*
* @param rs The result set from a database query
* @return A new full submission object
*/
private FullSubmission getFullSubmissionFromResultSet(VereinfachtesResultSet rs) {
String id = rs.getString("id");
long timestamp = rs.getTimestamp(2).getTime();
String user = rs.getString("user");
String text = rs.getString("text");
return new FullSubmission(id, timestamp, user, text);
}
}
package unipotsdam.gf.modules.submission.model;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class FullSubmission {
// variables
private String id;
private long timestamp;
private String user;
private String text;
// constructor
public FullSubmission(String id, long timestamp, String user, String text) {
this.id = id;
this.timestamp = timestamp;
this.user = user;
this.text = text;
}
// 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 getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "FullSubmission{" +
"id='" + id + '\'' +
", timestamp=" + timestamp +
", user='" + user + '\'' +
", text='" + text + '\'' +
'}';
}
}
package unipotsdam.gf.modules.submission.model;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class FullSubmissionPostRequest {
// variables
private String user;
private String text;
// constructors
public FullSubmissionPostRequest(String user, String text) {
this.user = user;
this.text = text;
}
public FullSubmissionPostRequest() {}
// methods
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@Override
public String toString() {
return "FullSubmissionPostRequest{" +
"user='" + user + '\'' +
", text='" + text + '\'' +
'}';
}
}
package unipotsdam.gf.modules.submission.model;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
public class SubmissionResponse {
// variables
String message;
// constructors
public SubmissionResponse(String message) {
this.message = message;
}
public SubmissionResponse(){}
// methods
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "SubmissionResponse{" +
"message='" + message + '\'' +
'}';
}
}
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 javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* @author Sven Kästle
* skaestle@uni-potsdam.de
*/
@Path("/submissions")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class SubmissionService {
@POST
@Path("/full")
public Response addFullSubmission(FullSubmissionPostRequest fullSubmissionPostRequest) {
// save full submission request in database and return the new id
SubmissionController controller = new SubmissionController();
FullSubmission fullSubmission = controller.addFullSubmission(fullSubmissionPostRequest);
return Response.ok(fullSubmission).build();
}
@GET
@Path("/full/{id}")
public Response getFullSubmission(@PathParam("id") String fullSubmissionId) {
// get full submission from database based by id
SubmissionController controller = new SubmissionController();
FullSubmission fullSubmission = controller.getFullSubmission(fullSubmissionId);
if (fullSubmission != null) {
return Response.ok(fullSubmission).build();
}
else {
// declare response
SubmissionResponse response = new SubmissionResponse();
response.setMessage("Submission with the id '" + fullSubmissionId + "' can't be found");
return Response.status(Response.Status.NOT_FOUND).entity(response).build();
}
}
}
......@@ -121,6 +121,14 @@ CREATE TABLE if not exists `annotations` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE if not exists `fullsubmissions` (
`id` VARCHAR(120) NOT NULL,
`timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user` VARCHAR(120) NOT NULL,
`text` MEDIUMTEXT 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