package de.anycook.api.backend;
import de.anycook.db.mysql.DBMessage;
import de.anycook.messages.MessageSession;
import de.anycook.api.providers.MessageSessionProvider;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.*;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.sql.SQLException;
/**
* @author Jan Graßegger<jan@anycook.de>
*/
@Path("backend/message")
public class MessageApi {
@Context private HttpServletRequest req;
private final Logger logger;
public MessageApi() {
logger = LogManager.getLogger(getClass());
}
@GET
public void get(@Suspended final AsyncResponse asyncResponse){
MessageSessionProvider.INSTANCE.suspend(0, asyncResponse);
}
@PUT
@Path("{sessionId}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void answerSession(@PathParam("sessionId") int sessionId,
@FormParam("message") String message){
if(message == null){
logger.info("message was null");
throw new WebApplicationException(400);
}
try {
MessageSession.getSession(sessionId, 0).newMessage(0, message);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
} catch (DBMessage.SessionNotFoundException e) {
logger.warn(e);
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
}