Refactor UploadRoutes to remove duplicate code

This commit is contained in:
Eike Kettner 2020-05-24 11:12:30 +02:00
parent f519a8effa
commit 24caba1457
2 changed files with 46 additions and 46 deletions

View File

@ -29,6 +29,19 @@ trait OUpload[F[_]] {
notifyJoex: Boolean, notifyJoex: Boolean,
itemId: Option[Ident] itemId: Option[Ident]
): F[OUpload.UploadResult] ): F[OUpload.UploadResult]
final def submitEither(
data: OUpload.UploadData[F],
accOrSrc: Either[Ident, AccountId],
notifyJoex: Boolean,
itemId: Option[Ident]
): F[OUpload.UploadResult] =
accOrSrc match {
case Right(acc) =>
submit(data, acc, notifyJoex, itemId)
case Left(srcId) =>
submit(data, srcId, notifyJoex, itemId)
}
} }
object OUpload { object OUpload {

View File

@ -2,13 +2,13 @@ package docspell.restserver.routes
import cats.effect._ import cats.effect._
import cats.implicits._ import cats.implicits._
import docspell.common._
import docspell.backend.BackendApp import docspell.backend.BackendApp
import docspell.backend.auth.AuthToken import docspell.backend.auth.AuthToken
import docspell.common.{Ident, Priority}
import docspell.restserver.Config import docspell.restserver.Config
import docspell.restserver.conv.Conversions._ import docspell.restserver.conv.Conversions._
import docspell.restserver.http4s.ResponseGenerator import docspell.restserver.http4s.ResponseGenerator
import org.http4s.HttpRoutes import org.http4s._
import org.http4s.circe.CirceEntityEncoder._ import org.http4s.circe.CirceEntityEncoder._
import org.http4s.EntityDecoder._ import org.http4s.EntityDecoder._
import org.http4s.dsl.Http4sDsl import org.http4s.dsl.Http4sDsl
@ -26,32 +26,14 @@ object UploadRoutes {
val dsl = new Http4sDsl[F] with ResponseGenerator[F] {} val dsl = new Http4sDsl[F] with ResponseGenerator[F] {}
import dsl._ import dsl._
val submitting = submitFiles[F](backend, cfg, Right(user.account)) _
HttpRoutes.of { HttpRoutes.of {
case req @ POST -> Root / "item" => case req @ POST -> Root / "item" =>
for { submitting(req, None, Priority.High, dsl)
multipart <- req.as[Multipart[F]]
updata <- readMultipart(
multipart,
logger,
Priority.High,
cfg.backend.files.validMimeTypes
)
result <- backend.upload.submit(updata, user.account, true, None)
res <- Ok(basicResult(result))
} yield res
case req @ POST -> Root / "item" / Ident(itemId) => case req @ POST -> Root / "item" / Ident(itemId) =>
for { submitting(req, Some(itemId), Priority.High, dsl)
multipart <- req.as[Multipart[F]]
updata <- readMultipart(
multipart,
logger,
Priority.High,
cfg.backend.files.validMimeTypes
)
result <- backend.upload.submit(updata, user.account, true, Some(itemId))
res <- Ok(basicResult(result))
} yield res
} }
} }
@ -61,30 +43,35 @@ object UploadRoutes {
HttpRoutes.of { HttpRoutes.of {
case req @ POST -> Root / "item" / Ident(id) => case req @ POST -> Root / "item" / Ident(id) =>
for { submitFiles(backend, cfg, Left(id))(req, None, Priority.Low, dsl)
multipart <- req.as[Multipart[F]]
updata <- readMultipart(
multipart,
logger,
Priority.Low,
cfg.backend.files.validMimeTypes
)
result <- backend.upload.submit(updata, id, true, None)
res <- Ok(basicResult(result))
} yield res
case req @ POST -> Root / "item" / Ident(itemId) / Ident(id) => case req @ POST -> Root / "item" / Ident(itemId) / Ident(id) =>
submitFiles(backend, cfg, Left(id))(req, Some(itemId), Priority.Low, dsl)
}
}
private def submitFiles[F[_]: Effect](
backend: BackendApp[F],
cfg: Config,
accOrSrc: Either[Ident, AccountId]
)(
req: Request[F],
itemId: Option[Ident],
prio: Priority,
dsl: Http4sDsl[F]
): F[Response[F]] = {
import dsl._
for { for {
multipart <- req.as[Multipart[F]] multipart <- req.as[Multipart[F]]
updata <- readMultipart( updata <- readMultipart(
multipart, multipart,
logger, logger,
Priority.Low, prio,
cfg.backend.files.validMimeTypes cfg.backend.files.validMimeTypes
) )
result <- backend.upload.submit(updata, id, true, Some(itemId)) result <- backend.upload.submitEither(updata, accOrSrc, true, itemId)
res <- Ok(basicResult(result)) res <- Ok(basicResult(result))
} yield res } yield res
} }
}
} }