diff options
Diffstat (limited to 'app/controllers/api')
4 files changed, 170 insertions, 2 deletions
diff --git a/app/controllers/api/v1/internals/application_controller.rb b/app/controllers/api/v1/internals/application_controller.rb new file mode 100644 index 000000000..77b74f5f6 --- /dev/null +++ b/app/controllers/api/v1/internals/application_controller.rb @@ -0,0 +1,16 @@ +module Api +  module V1 +    module Internals +      class ApplicationController < ActionController::Base +        respond_to :json +        layout false +        before_action :authenticate + +        private +        def authenticate +          authenticate_with_http_token { |token| Rails.application.secrets.api_token == token } +        end +      end +    end +  end +end diff --git a/app/controllers/api/v1/internals/compliance_check_sets_controller.rb b/app/controllers/api/v1/internals/compliance_check_sets_controller.rb new file mode 100644 index 000000000..db92c3fad --- /dev/null +++ b/app/controllers/api/v1/internals/compliance_check_sets_controller.rb @@ -0,0 +1,46 @@ +module Api +  module V1 +    module Internals +      class ComplianceCheckSetsController < ApplicationController +        include ControlFlow + +        def validated +          find_compliance_check_set + +          if @compliance_check_set.update_status +            render :validated +          else +            render json: { +              status: "error", +              messages: @compliance_check_set.errors.full_messages +            } +          end +        end + +        def notify_parent +          find_compliance_check_set +          if  @compliance_check_set.notify_parent && @compliance_check_set.parent +            render json: { +              status: "ok", +              message:"#{@compliance_check_set.parent_type} (id: #{@compliance_check_set.parent_id}) successfully notified at #{l(@compliance_check_set.notified_parent_at)}" +            } +          else +            render json: {status: "error", message: @compliance_check_set.errors.full_messages } +          end          +        end + +        private + +        def find_compliance_check_set +          @compliance_check_set = ComplianceCheckSet.find(params[:id]) +        rescue ActiveRecord::RecordNotFound +          render json: { +            status: "error",  +            message: "Record not found" +          } +          finish_action!    +        end +      end +    end +  end +end   diff --git a/app/controllers/api/v1/internals/netex_imports_controller.rb b/app/controllers/api/v1/internals/netex_imports_controller.rb new file mode 100644 index 000000000..89bc1b81d --- /dev/null +++ b/app/controllers/api/v1/internals/netex_imports_controller.rb @@ -0,0 +1,104 @@ +module Api +  module V1 +    module Internals +      class NetexImportsController < ApplicationController +        include ControlFlow + +        def create +          respond_to do | format | +            format.json(&method(:create_models)) +          end +        end + +        def notify_parent +          find_netex_import +          if @netex_import.notify_parent +            render json: { +              status: "ok", +              message:"#{@netex_import.parent_type} (id: #{@netex_import.parent_id}) successfully notified at #{l(@netex_import.notified_parent_at)}" +            } +          else +            render json: {status: "error", message: @netex_import.errors.full_messages } +          end +        end + +        private + +        def find_netex_import +          @netex_import = NetexImport.find(params[:id]) +        rescue ActiveRecord::RecordNotFound +          render json: { +            status: "error",  +            message: "Record not found" +          } +          finish_action!    +        end + +        def find_workbench +          @workbench = Workbench.find(netex_import_params['workbench_id']) +        rescue ActiveRecord::RecordNotFound +          render json: {errors: {'workbench_id' => 'missing'}}, status: 406 +          finish_action! +        end + +        def create_models +          find_workbench +          create_referential +          create_netex_import +        end + +        def create_netex_import +          attributes = netex_import_params.merge creator: "Webservice" + +          attributes = attributes.merge referential_id: @new_referential.id + +          @netex_import = NetexImport.new attributes +          @netex_import.save! + +          unless @netex_import.referential +            Rails.logger.info "Can't create referential for import #{@netex_import.id}: #{@new_referential.inspect} #{@new_referential.metadatas.inspect} #{@new_referential.errors.full_messages}" +            @netex_import.messages.create criticity: :error, message_key: "referential_creation" +          end +        rescue ActiveRecord::RecordInvalid +          render json: {errors: @netex_import.errors}, status: 406 +          finish_action! +        end + +        def create_referential +          @new_referential = +            Referential.new( +              name: netex_import_params['name'], +              organisation_id: @workbench.organisation_id, +              workbench_id: @workbench.id, +              metadatas: [metadata] +            ) +          @new_referential.save +        end + +        def metadata +          metadata = ReferentialMetadata.new + +          if netex_import_params['file'] +            netex_file = STIF::NetexFile.new(netex_import_params['file'].to_io) +            frame = netex_file.frames.first + +            if frame +              metadata.periodes = frame.periods + +              line_objectids = frame.line_refs.map { |ref| "STIF:CODIFLIGNE:Line:#{ref}" } +              metadata.line_ids = @workbench.lines.where(objectid: line_objectids).pluck(:id) +            end +          end + +          metadata +        end + +        def netex_import_params +          params +            .require('netex_import') +            .permit(:file, :name, :workbench_id, :parent_id, :parent_type) +        end +      end +    end +  end +end diff --git a/app/controllers/api/v1/netex_imports_controller.rb b/app/controllers/api/v1/netex_imports_controller.rb index 8e8c48986..d86c1fcd8 100644 --- a/app/controllers/api/v1/netex_imports_controller.rb +++ b/app/controllers/api/v1/netex_imports_controller.rb @@ -1,9 +1,11 @@  module Api    module V1 -    class NetexImportsController < ChouetteController +    class NetexImportsController < ActionController::Base        include ControlFlow -      skip_before_action :authenticate + +      respond_to :json, :xml +      layout false        def create          respond_to do | format |  | 
