@@ -9,6 +9,8 @@ defmodule ExCnab.Cnab240.Services.Decode do
99
1010 alias ExCnab.Cnab240.Services.GetFileInfo
1111
12+ alias ExCnab.Cnab240.Services.HasIdenticalInformations
13+
1214 @ item_type % {
1315 "0" => :file_header ,
1416 "1" => :chunk_header ,
@@ -20,38 +22,46 @@ defmodule ExCnab.Cnab240.Services.Decode do
2022
2123 @ spec run ( String . t ( ) , Map . t ( ) ) :: { :ok , Map . t ( ) } | { :error , String . t ( ) }
2224 def run ( file , attrs \\ % { } ) do
23- list = read_file ( file )
24-
25- with { :ok , map } <- classify_by_type ( list ) ,
26- { :ok , file_header } <- FileHeader . generate ( map . file_header , attrs ) ,
27- { :ok , details } <- BuildDetails . run ( map . chunks , attrs ) ,
28- { :ok , footer } <- FileFooter . generate ( map . file_footer , attrs ) ,
29- { :ok , filename_info } <- GetFileInfo . run ( file , attrs ) do
30- build_response ( file_header , details , footer , filename_info , :ok )
31- else
32- { :error , error , line_error } ->
33- line =
34- list
35- |> Enum . find_index ( & ( & 1 == line_error ) )
36- |> Kernel . + ( 1 )
37-
38- { :error , error , "Falha na linha #{ line } " }
39-
40- { :error , error } ->
41- { :error , error }
25+ with list <- read_file ( file ) ,
26+ { :ok , content } <- generate_content ( file , attrs , list ) do
27+ build_response (
28+ content . file_header ,
29+ content . details ,
30+ content . footer ,
31+ content . filename_info ,
32+ :ok
33+ )
4234 end
4335 end
4436
4537 @ spec run! ( String . t ( ) , Map . t ( ) ) :: Map . t ( ) | { :error , String . t ( ) }
4638 def run! ( file , attrs ) do
47- list = read_file ( file )
39+ with list <- read_file ( file ) ,
40+ { :ok , content } <- generate_content ( file , attrs , list ) do
41+ build_response (
42+ content . file_header ,
43+ content . details ,
44+ content . footer ,
45+ content . filename_info ,
46+ :no
47+ )
48+ end
49+ end
4850
49- with { :ok , map } <- classify_by_type ( list ) ,
51+ defp generate_content ( file , attrs , list ) do
52+ with :ok <- HasIdenticalInformations . run ( list ) ,
53+ { :ok , map } <- classify_by_type ( list ) ,
5054 { :ok , file_header } <- FileHeader . generate ( map . file_header , attrs ) ,
5155 { :ok , details } <- BuildDetails . run ( map . chunks , attrs ) ,
5256 { :ok , footer } <- FileFooter . generate ( map . file_footer , attrs ) ,
5357 { :ok , filename_info } <- GetFileInfo . run ( file , attrs ) do
54- build_response ( file_header , details , footer , filename_info , :no )
58+ { :ok ,
59+ % {
60+ file_header: file_header ,
61+ details: details ,
62+ footer: footer ,
63+ filename_info: filename_info
64+ } }
5565 else
5666 { :error , error , line_error } ->
5767 line =
0 commit comments