Skip to content

Commit

Permalink
refactor SingleChange logic
Browse files Browse the repository at this point in the history
I wouldn't say simplify
  • Loading branch information
kraktus committed Jan 3, 2025
1 parent c63047d commit 616a3c4
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 15 deletions.
4 changes: 3 additions & 1 deletion app/controllers/TeamApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ final class TeamApi(env: Env, apiC: => Api) extends LilaController(env):

def update(id: TeamId, name: String) = ScopedBody(_.Team.Lead) { _ ?=> me ?=>
WithOwnedTeamEnabled(id, _.Settings): team =>
TeamSingleChange.changes.get(name).fold(fuccess(ApiResult.ClientError("incorrect setting key"))): change =>
TeamSingleChange.changes
.get(name)
.fold(fuccess(ApiResult.ClientError("incorrect setting key"))): change =>
bindForm(change.form)(
form => fuccess(ApiResult.ClientError(form.errors.flatMap(_.messages).mkString("\n"))),
v => api.insertUpdate(change.update(v)(team)).inject(ApiResult.Done)
Expand Down
9 changes: 9 additions & 0 deletions modules/common/src/main/Form.scala
Original file line number Diff line number Diff line change
Expand Up @@ -382,3 +382,12 @@ object Form:
def unbind(key: String, value: Instant) =
Map(key -> value.atZone(zone).toLocalDateTime.format(localFormatter))
val mapping: Mapping[Instant] = of[Instant](format)

object SingleChange:
case class Change[Model, A](field: String, mapping: Mapping[A], update: A => Model => Model):
def form: PlayForm[A] = PlayForm(single(field -> mapping))

def changing[Model, FieldsType, A](field: FieldsType => (String, Mapping[A]))(
f: A => Model => Model
)(using fieldsType: FieldsType): Change[Model, A] =
Change(field(fieldsType)._1, field(fieldsType)._2, f)
10 changes: 3 additions & 7 deletions modules/pref/src/main/PrefSingleChange.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,9 @@ import play.api.data.Forms.*

object PrefSingleChange:

case class Change[A](field: String, mapping: Mapping[A], update: A => Pref => Pref):
def form: Form[A] = Form(single(field -> mapping))

private def changing[A](field: PrefForm.fields.type => (String, Mapping[A]))(
f: A => Pref => Pref
): Change[A] =
Change(field(PrefForm.fields)._1, field(PrefForm.fields)._2, f)
type Change[A] = lila.common.Form.SingleChange.Change[Pref, A]
given fieldsInstance: PrefForm.fields.type = PrefForm.fields
private def changing[A] = lila.common.Form.SingleChange.changing[Pref, PrefForm.fields.type, A]

val changes: Map[String, Change[?]] = List[Change[?]](
changing(_.bg): v =>
Expand Down
10 changes: 3 additions & 7 deletions modules/team/src/main/TeamForm.scala
Original file line number Diff line number Diff line change
Expand Up @@ -183,13 +183,9 @@ object TeamForm:

object TeamSingleChange:

case class Change[A](field: String, mapping: Mapping[A], update: A => Team => Team):
def form: Form[A] = Form(single(field -> mapping))

private def changing[A](field: TeamForm.Fields.type => (String, Mapping[A]))(
f: A => Team => Team
): Change[A] =
Change(field(TeamForm.Fields)._1, field(TeamForm.Fields)._2, f)
type Change[A] = lila.common.Form.SingleChange.Change[Team, A]
given fieldsInstance: TeamForm.Fields.type = TeamForm.Fields
private def changing[A] = lila.common.Form.SingleChange.changing[Team, TeamForm.Fields.type, A]

val changes: Map[String, Change[?]] = List[Change[?]](
changing(_.password): v =>
Expand Down

0 comments on commit 616a3c4

Please sign in to comment.