@@ -19,11 +19,13 @@ def new
1919
2020 def create
2121 unless params [ :agenda_file ] . present?
22- flash . now [ :alert ] = "Please select a JSON file to upload."
22+ flash . now [ :alert ] = "Please select a file to upload."
2323 return render :new , status : :unprocessable_entity
2424 end
2525
26- data = JSON . parse ( params [ :agenda_file ] . read )
26+ data = parse_agenda_upload ( params [ :agenda_file ] )
27+ return render :new , status : :unprocessable_entity unless data
28+
2729 service = AgendaImportService . new ( data ) . call
2830
2931 if service . success?
@@ -37,20 +39,22 @@ def create
3739 flash . now [ :alert ] = service . errors . join ( ", " )
3840 render :new , status : :unprocessable_entity
3941 end
40- rescue JSON ::ParserError
41- flash . now [ :alert ] = "Invalid JSON file."
42- render :new , status : :unprocessable_entity
4342 end
4443
4544 def import_minutes
4645 @meeting = Meeting . find ( params [ :id ] )
4746
4847 unless params [ :minutes_file ] . present?
49- redirect_to admin_meeting_path ( @meeting ) , alert : "Please select a JSON file to upload."
48+ redirect_to admin_meeting_path ( @meeting ) , alert : "Please select a file to upload."
49+ return
50+ end
51+
52+ data = parse_minutes_upload ( params [ :minutes_file ] )
53+ unless data
54+ redirect_to admin_meeting_path ( @meeting ) , alert : @parse_error
5055 return
5156 end
5257
53- data = JSON . parse ( params [ :minutes_file ] . read )
5458 service = MinutesImportService . new ( data ) . call
5559
5660 if service . success?
@@ -60,8 +64,6 @@ def import_minutes
6064 else
6165 redirect_to admin_meeting_path ( @meeting ) , alert : service . errors . join ( ", " )
6266 end
63- rescue JSON ::ParserError
64- redirect_to admin_meeting_path ( @meeting ) , alert : "Invalid JSON file."
6567 end
6668
6769 def delete_minutes
@@ -94,5 +96,46 @@ def destroy
9496 @meeting . destroy!
9597 redirect_to admin_meetings_path , notice : "Meeting deleted."
9698 end
99+
100+ private
101+
102+ def parse_agenda_upload ( file )
103+ if pdf_file? ( file )
104+ parser = AgendaPdfParserService . new ( file . tempfile )
105+ data = parser . call
106+ unless parser . success?
107+ flash . now [ :alert ] = parser . errors . join ( ", " )
108+ return nil
109+ end
110+ data
111+ else
112+ JSON . parse ( file . read )
113+ end
114+ rescue JSON ::ParserError
115+ flash . now [ :alert ] = "Invalid JSON file."
116+ nil
117+ end
118+
119+ def parse_minutes_upload ( file )
120+ if pdf_file? ( file )
121+ parser = MinutesPdfParserService . new ( file . tempfile )
122+ data = parser . call
123+ unless parser . success?
124+ @parse_error = parser . errors . join ( ", " )
125+ return nil
126+ end
127+ data
128+ else
129+ JSON . parse ( file . read )
130+ end
131+ rescue JSON ::ParserError
132+ @parse_error = "Invalid JSON file."
133+ nil
134+ end
135+
136+ def pdf_file? ( file )
137+ file . content_type == "application/pdf" ||
138+ file . original_filename &.end_with? ( ".pdf" )
139+ end
97140 end
98141end
0 commit comments