Newer
Older
package controllers
import javax.inject._
import play.api.mvc._
import play.api.libs.json.JsValue
import models.exceptions.{ConflictException, NotFoundException}
import scala.concurrent.TimeoutException
import org.bson.types.ObjectId
/**
* This controller handles all the Daily endpoints.
*/
@Singleton
class DailyController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {
/**
* Create an Action to fetch all the Dailies in the DB.
*/
println("DailyController:getAll")
try {
val result: Seq[Daily] = Daily.getAllDailiesAsync()
val jsonResult: JsValue = Daily.toJson(result)
case _: TimeoutException => BadRequest("Request timed out")
case _: Throwable => BadRequest("Exception raised")
/**
* Create an Action to fetch the user's Dailies in the DB.
*/
def getUserDailies(userId: String) = Action {
println("DailyController:getUserDailies")
try {
val result: Seq[Daily] = Daily.getUserDailiesAsync(new ObjectId(userId))
val jsonResult: JsValue = Daily.toJson(result)
Ok(jsonResult)
} catch {
case _: TimeoutException => BadRequest("Request timed out")
case _: Throwable => BadRequest("Exception raised")
/**
* Create an Action to fetch the user's Feed.
*/
def getUserFeed(userId: String) = Action {
println("DailyController:getUserFeed")
try {
val result: Seq[Daily] = Daily.getUserFeedAsync(new ObjectId(userId))
val jsonResult: JsValue = Daily.toJson(result)
case _: TimeoutException => BadRequest("Request timed out")
case _: Throwable => BadRequest("Exception raised")
/**
* Create an Action to create a Daily.
*/
def create(userId: String, questionId: String, content: String) = Action {
println("DailyController:create")
try {
val result: Daily = Daily.createDailyAsync(new ObjectId(userId), new ObjectId(questionId), content)
val jsonResult: JsValue = Daily.toJson(result)
case _: TimeoutException => BadRequest("Request timed out")
case _: Throwable => BadRequest("Exception raised")
/**
* Create an Action to like a Daily.
*/
def like(dailyId: String, likerId: String) = Action {
println("DailyController:like")
try {
// Dummy data
Daily.likeAsync(new ObjectId(dailyId), new ObjectId(likerId))
case _: TimeoutException => BadRequest("Request timed out")
case ex: ConflictException => BadRequest(ex.getMessage())
case ex: NotFoundException => BadRequest(ex.getMessage())
case _: Throwable => BadRequest("Exception raised")
/**
* Create an Action to unlike a Daily.
*/
def unlike(dailyId: String, likerId: String) = Action {
println("DailyController:unlike")
try {
// Dummy data
Daily.unlikeAsync(new ObjectId(dailyId), new ObjectId(likerId))
Ok("Updated")
} catch {
case _: TimeoutException => BadRequest("Request timed out")
case ex: ConflictException => BadRequest(ex.getMessage())
case ex: NotFoundException => BadRequest(ex.getMessage())
case _: Throwable => BadRequest("Exception raised")
}
}