mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-11-03 18:00:11 +00:00 
			
		
		
		
	Refactor UploadRoutes to remove duplicate code
This commit is contained in:
		@@ -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
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user