package controllers import javax.inject._ import play.api.mvc._ import play.api.libs.json.JsValue import models.{Daily} 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. */ def getAll() = Action { println("DailyController:getAll") try { val result: Seq[Daily] = Daily.getAllDailiesAsync() 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 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) Ok(jsonResult) } catch { 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 { // Dummy data val result: Daily = Daily.createDailyAsync(new ObjectId(userId), new ObjectId(questionId), content) val jsonResult: JsValue = Daily.toJson(result) Ok(jsonResult) } catch { 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)) 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") } } /** * 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") } } }