mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
Refactor UploadRoutes to remove duplicate code
This commit is contained in:
parent
f519a8effa
commit
24caba1457
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user