mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-10-31 09:30:12 +00:00 
			
		
		
		
	Refactor UploadRoutes to remove duplicate code
This commit is contained in:
		| @@ -29,6 +29,19 @@ trait OUpload[F[_]] { | ||||
|       notifyJoex: Boolean, | ||||
|       itemId: Option[Ident] | ||||
|   ): 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 { | ||||
|   | ||||
| @@ -2,13 +2,13 @@ package docspell.restserver.routes | ||||
|  | ||||
| import cats.effect._ | ||||
| import cats.implicits._ | ||||
| import docspell.common._ | ||||
| import docspell.backend.BackendApp | ||||
| import docspell.backend.auth.AuthToken | ||||
| import docspell.common.{Ident, Priority} | ||||
| import docspell.restserver.Config | ||||
| import docspell.restserver.conv.Conversions._ | ||||
| import docspell.restserver.http4s.ResponseGenerator | ||||
| import org.http4s.HttpRoutes | ||||
| import org.http4s._ | ||||
| import org.http4s.circe.CirceEntityEncoder._ | ||||
| import org.http4s.EntityDecoder._ | ||||
| import org.http4s.dsl.Http4sDsl | ||||
| @@ -26,32 +26,14 @@ object UploadRoutes { | ||||
|     val dsl = new Http4sDsl[F] with ResponseGenerator[F] {} | ||||
|     import dsl._ | ||||
|  | ||||
|     val submitting = submitFiles[F](backend, cfg, Right(user.account)) _ | ||||
|  | ||||
|     HttpRoutes.of { | ||||
|       case req @ POST -> Root / "item" => | ||||
|         for { | ||||
|           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 | ||||
|         submitting(req, None, Priority.High, dsl) | ||||
|  | ||||
|       case req @ POST -> Root / "item" / Ident(itemId) => | ||||
|         for { | ||||
|           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 | ||||
|         submitting(req, Some(itemId), Priority.High, dsl) | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -61,30 +43,35 @@ object UploadRoutes { | ||||
|  | ||||
|     HttpRoutes.of { | ||||
|       case req @ POST -> Root / "item" / Ident(id) => | ||||
|         for { | ||||
|           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 | ||||
|         submitFiles(backend, cfg, Left(id))(req, None, Priority.Low, dsl) | ||||
|  | ||||
|       case req @ POST -> Root / "item" / Ident(itemId) / Ident(id) => | ||||
|         for { | ||||
|           multipart <- req.as[Multipart[F]] | ||||
|           updata <- readMultipart( | ||||
|             multipart, | ||||
|             logger, | ||||
|             Priority.Low, | ||||
|             cfg.backend.files.validMimeTypes | ||||
|           ) | ||||
|           result <- backend.upload.submit(updata, id, true, Some(itemId)) | ||||
|           res    <- Ok(basicResult(result)) | ||||
|         } yield res | ||||
|         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 { | ||||
|       multipart <- req.as[Multipart[F]] | ||||
|       updata <- readMultipart( | ||||
|         multipart, | ||||
|         logger, | ||||
|         prio, | ||||
|         cfg.backend.files.validMimeTypes | ||||
|       ) | ||||
|       result <- backend.upload.submitEither(updata, accOrSrc, true, itemId) | ||||
|       res    <- Ok(basicResult(result)) | ||||
|     } yield res | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user