user note OAuth API: POST /api/user/:name/note

pull/4551/head
Thibault Duplessis 2018-08-21 10:26:00 +02:00
parent f3c86900b1
commit 5d476de857
2 changed files with 23 additions and 8 deletions

View File

@ -1,5 +1,6 @@
package controllers
import play.api.data.Form
import play.api.libs.json._
import play.api.mvc._
import scala.concurrent.duration._
@ -273,16 +274,29 @@ object User extends LilaController {
}
def writeNote(username: String) = AuthBody { implicit ctx => me =>
OptionFuResult(UserRepo named username) { user =>
implicit val req = ctx.body
env.forms.note.bindFromRequest.fold(
err => renderShow(user, Results.BadRequest),
data => env.noteApi.write(user, data.text, me, data.mod && isGranted(_.ModNote)) inject
Redirect(routes.User.show(username).url + "?note")
)
}
doWriteNote(username, me)(
err = _ => user => renderShow(user, Results.BadRequest),
suc = Redirect(routes.User.show(username).url + "?note")
)(ctx.body)
}
def apiWriteNote(username: String) = ScopedBody() { implicit req => me =>
doWriteNote(username, me)(
err = err => _ => fuccess(BadRequest(errorsAsJson(err))),
suc = jsonOkResult
)
}
private def doWriteNote(username: String, me: UserModel)(err: Form[_] => UserModel => Fu[Result], suc: => Result)(implicit req: Request[_]) =
UserRepo named username flatMap {
_ ?? { user =>
env.forms.note.bindFromRequest.fold(
e => err(e)(user),
data => env.noteApi.write(user, data.text, me, data.mod && isGranted(_.ModNote, me)) inject suc
)
}
}
def deleteNote(id: String) = Auth { implicit ctx => me =>
OptionFuResult(env.noteApi.byId(id)) { note =>
(note.isFrom(me) && !note.mod) ?? {

View File

@ -499,6 +499,7 @@ GET /api/user/:name controllers.Api.user(name: String)
GET /api/user/:name/activity controllers.Api.activity(name: String)
GET /api/user/:name/following controllers.Relation.apiFollowing(name: String)
GET /api/user/:name/followers controllers.Relation.apiFollowers(name: String)
POST /api/user/:name/note controllers.User.apiWriteNote(name: String)
GET /api/game/:id controllers.Api.game(id: String)
GET /api/games/team/:teamId controllers.Api.gamesVsTeam(teamId: String)
GET /api/tournament controllers.Api.currentTournaments