@@ -6,15 +6,20 @@ import akka.stream.ActorMaterializer
66import akka .util .Timeout
77import hmda .api .http .HmdaCustomDirectives
88import akka .http .scaladsl .server .Directives ._
9- import hmda .api .model .public .ULIModel .{ Loan , ULI , ULICheck , ULIValidated }
9+ import hmda .api .model .public .ULIModel ._
1010import hmda .validation .engine .lar .ULI ._
1111import akka .http .scaladsl .marshallers .sprayjson .SprayJsonSupport ._
1212import akka .http .scaladsl .marshalling .ToResponseMarshallable
13+ import akka .http .scaladsl .model .StatusCodes
14+ import akka .stream .scaladsl .Sink
15+ import hmda .api .protocol .processing .ApiErrorProtocol
1316import hmda .api .protocol .public .ULIProtocol
17+ import hmda .api .util .FlowUtils
1418
1519import scala .concurrent .ExecutionContext
20+ import scala .util .{ Failure , Success }
1621
17- trait PublicHttpApi extends PublicLarHttpApi with HmdaCustomDirectives with ULIProtocol {
22+ trait PublicHttpApi extends PublicLarHttpApi with HmdaCustomDirectives with ApiErrorProtocol with ULIProtocol with FlowUtils {
1823 implicit val system : ActorSystem
1924 implicit val materializer : ActorMaterializer
2025 implicit val timeout : Timeout
@@ -46,7 +51,27 @@ trait PublicHttpApi extends PublicLarHttpApi with HmdaCustomDirectives with ULIP
4651 val isValid = validateULI(uli)
4752 val validated = ULIValidated (isValid)
4853 complete(ToResponseMarshallable (validated))
49- }
54+ } ~
55+ fileUpload(" file" ) {
56+ case (_, byteSource) =>
57+ val validatedF = byteSource
58+ .via(framing)
59+ .map(_.utf8String)
60+ .map(uli => (uli, validateULI(uli)))
61+ .map(validated => ULIBatchValidated (validated._1, validated._2))
62+ .runWith(Sink .seq)
63+
64+ onComplete(validatedF) {
65+ case Success (validated) =>
66+ complete(ToResponseMarshallable (ULIBatchValidatedResponse (validated)))
67+ case Failure (error) =>
68+ log.error(error.getLocalizedMessage)
69+ complete(ToResponseMarshallable (StatusCodes .InternalServerError ))
70+ }
71+
72+ case _ =>
73+ complete(ToResponseMarshallable (StatusCodes .BadRequest ))
74+ }
5075 }
5176 }
5277 }
0 commit comments