Skip to content
Snippets Groups Projects

Add a question management page

16 files
+ 427
19
Compare changes
  • Side-by-side
  • Inline
Files
16
@@ -2,7 +2,7 @@ package controllers
import models.{Question}
import models.actions.{AuthenticatedUserAction, AuthenticationRequest}
import models.exceptions.{ConflictException, InvalidRequestBodyException, ForbiddenException}
import models.exceptions.{ConflictException, InvalidRequestBodyException, InvalidQueryParameterException, ForbiddenException}
import javax.inject._
import play.api.mvc._
@@ -10,6 +10,7 @@ import play.api.libs.json.{JsValue}
import play.api.libs.json.JsLookupResult
import scala.concurrent.TimeoutException
import org.bson.types.ObjectId
/**
@@ -19,6 +20,27 @@ import scala.concurrent.TimeoutException
class QuestionController @Inject()(val controllerComponents: ControllerComponents, authenticatedUserAction: AuthenticatedUserAction)
extends BaseController {
/**
* Create an Action to get all the Questions in the DB.
*/
def getQuestions() = authenticatedUserAction { implicit request: AuthenticationRequest[AnyContent] =>
println("QuestionController:getQuestions")
try {
if (!request.isAdmin) throw new ForbiddenException("You must be an admin to get the stored questions.")
val questions: Seq[Question] = Question.getQuestionsAsync()
val jsonResult: JsValue = Question.toJson(questions)
Ok(jsonResult)
} catch {
case _: TimeoutException => BadRequest("Request timed out")
case ex: ForbiddenException => Forbidden(ex.getMessage())
case ex: Throwable => {
println(ex.getMessage())
BadRequest("Exception raised")
}
}
}
/**
* Create an Action to insert a Question to the DB.
*/
@@ -41,6 +63,30 @@ class QuestionController @Inject()(val controllerComponents: ControllerComponent
}
}
/**
* Create an Action to disable a Question in the DB.
*/
def disableQuestion(questionId: String) = authenticatedUserAction { implicit request: AuthenticationRequest[AnyContent] =>
println("QuestionController:disableQuestion")
try {
if (!ObjectId.isValid(questionId)) throw new InvalidQueryParameterException("Invalid query parameter ID format: questionId")
if (!request.isAdmin) throw new ForbiddenException("You must be an admin to disable a question.")
Question.disableQuestionAsync(new ObjectId(questionId))
Ok("Disabled question")
} catch {
case _: TimeoutException => BadRequest("Request timed out")
case ex: InvalidQueryParameterException => BadRequest(ex.getMessage())
case ex: ConflictException => BadRequest(ex.getMessage())
case ex: ForbiddenException => Forbidden(ex.getMessage())
case ex: Throwable => {
println(ex.getMessage())
BadRequest("Exception raised")
}
}
}
/**
* Fetch the needed values from the request body for the liking/unliking a Daily endpoint.
*
Loading