lila/modules/study/src/main/StudyMember.scala

47 lines
1.1 KiB
Scala

package lila.study
import lila.user.User
case class StudyMember(id: User.ID, role: StudyMember.Role) {
def canContribute = role.canWrite
}
object StudyMember {
type MemberMap = Map[User.ID, StudyMember]
def make(user: User) = StudyMember(id = user.id, role = Role.Read)
sealed abstract class Role(val id: String, val canWrite: Boolean)
object Role {
case object Read extends Role("r", false)
case object Write extends Role("w", true)
val byId = List(Read, Write).map { x =>
x.id -> x
}.toMap
}
}
case class StudyMembers(members: StudyMember.MemberMap) {
def +(member: StudyMember) = copy(members = members + (member.id -> member))
def contains(userId: User.ID): Boolean = members contains userId
def contains(user: User): Boolean = contains(user.id)
def get = members.get _
def ids = members.keys
def idSet = members.keySet
def contributorIds: Set[User.ID] =
members.view.collect {
case (id, member) if member.canContribute => id
}.toSet
}
object StudyMembers {
val empty = StudyMembers(Map.empty)
}