Add routes to manage spaces

This commit is contained in:
Eike Kettner
2020-07-03 00:08:32 +02:00
parent 7ec0fc2593
commit c12201c4a5
4 changed files with 197 additions and 1 deletions

View File

@ -35,6 +35,7 @@ trait BackendApp[F[_]] {
def mail: OMail[F]
def joex: OJoex[F]
def userTask: OUserTask[F]
def space: OSpace[F]
}
object BackendApp {
@ -67,6 +68,7 @@ object BackendApp {
JavaMailEmil(blocker, Settings.defaultSettings.copy(debug = cfg.mailDebug))
mailImpl <- OMail(store, javaEmil)
userTaskImpl <- OUserTask(utStore, queue, joexImpl)
spaceImpl <- OSpace(store)
} yield new BackendApp[F] {
val login: Login[F] = loginImpl
val signup: OSignup[F] = signupImpl
@ -84,6 +86,7 @@ object BackendApp {
val mail = mailImpl
val joex = joexImpl
val userTask = userTaskImpl
val space = spaceImpl
}
def apply[F[_]: ConcurrentEffect: ContextShift](

View File

@ -0,0 +1,84 @@
package docspell.backend.ops
import cats.effect._
import docspell.common._
import docspell.store.{AddResult, Store}
import docspell.store.records.RSpace
trait OSpace[F[_]] {
def findAll(account: AccountId, nameQuery: Option[String]): F[Vector[OSpace.SpaceItem]]
def findById(id: Ident, collective: Ident): F[Option[OSpace.SpaceDetail]]
def delete(id: Ident, collective: Ident): F[Int]
def add(space: RSpace): F[AddResult]
def changeName(space: Ident, account: AccountId, name: String): F[AddResult]
def addMember(
space: Ident,
account: AccountId,
member: Ident
): F[OSpace.MemberChangeResult]
def removeMember(
space: Ident,
account: AccountId,
member: Ident
): F[OSpace.MemberChangeResult]
}
object OSpace {
sealed trait MemberChangeResult
object MemberChangeResult {
case object Success extends MemberChangeResult
case object NotFound extends MemberChangeResult
case object Forbidden extends MemberChangeResult
}
final case class SpaceItem(
id: Ident,
name: String,
owner: IdRef,
created: Timestamp,
members: Int
)
final case class SpaceDetail(
id: Ident,
name: String,
owner: IdRef,
created: Timestamp,
members: List[IdRef]
)
def apply[F[_]: Effect](store: Store[F]): Resource[F, OSpace[F]] =
Resource.pure[F, OSpace[F]](new OSpace[F] {
println(s"$store")
def findAll(
account: AccountId,
nameQuery: Option[String]
): F[Vector[OSpace.SpaceItem]] = ???
def findById(id: Ident, collective: Ident): F[Option[OSpace.SpaceDetail]] = ???
def add(space: RSpace): F[AddResult] = ???
def changeName(space: Ident, account: AccountId, name: String): F[AddResult] = ???
def delete(id: Ident, collective: Ident): F[Int] = ???
def addMember(
space: Ident,
account: AccountId,
member: Ident
): F[MemberChangeResult] =
???
def removeMember(
space: Ident,
account: AccountId,
member: Ident
): F[MemberChangeResult] =
???
})
}