MiniDigger/Hangar

View on GitHub
ore/app/form/RoleSetBuilder.scala

Summary

Maintainability
A
0 mins
Test Coverage
package form

import ore.models.user.User
import ore.models.user.role.UserRoleModel
import ore.db.DbRef
import ore.permission.role.Role

/**
  * Builds a set of [[UserRoleModel]]s based on input data.
  *
  * @tparam M RoleModel type
  */
trait RoleSetBuilder[M] {

  /**
    * Returns the user IDs to use in building the set.
    *
    * @return User IDs
    */
  def users: List[DbRef[User]]

  /**
    * Returns the role names to use in building the set.
    *
    * @return Role names
    */
  def roles: List[String]

  /**
    * Builds the result set from the form data.
    *
    * @return Result set
    */
  def build(): Set[M] = users.zip(roles).map { case (userId, role) => newRole(userId, Role.withValue(role)) }.toSet

  /**
    * Creates a new role for the specified user ID and role type.
    *
    * @param userId User ID
    * @param role   Role type
    * @return       New role
    */
  def newRole(userId: DbRef[User], role: Role): M
}