20136b7ac8
* add base controller for public api * add dossiers controller with basic checks * create the dossier * ensure content-type is json * prefill dossier with given values * mark a dossier as prefilled When a dossier is prefilled, it's allowed not to have a user. Plus, we add a secure token to the dossier, which we will need later to set a user after sign in / sign up. * set user as owner of an orphan prefilled dossier When a visitor comes from the dossier_url answered by the public api, the dossier is orphan: - when the user is already authenticated: they become the owner - when the user is not authenticated: they can sign in / sign up / france_connect and then they become the owner So here is the procedure: - allow to sign in / sign up / france connect when user is unauthenticated - set dossier ownership when the dossier is orphan - check dossier ownership when the dossier is not - redirect to brouillon path when user is signed in and owner * mark the dossier as prefilled when it's prefilled (even with a GET request, because it will be useful later on, for exmample in order to cleanup the unused prefilled dossiers) * system spec: prefilling dossier with post request
26 lines
888 B
Ruby
26 lines
888 B
Ruby
class API::Public::V1::DossiersController < API::Public::V1::BaseController
|
|
before_action :retrieve_procedure
|
|
|
|
def create
|
|
dossier = Dossier.new(
|
|
revision: @procedure.active_revision,
|
|
groupe_instructeur: @procedure.defaut_groupe_instructeur_for_new_dossier,
|
|
state: Dossier.states.fetch(:brouillon),
|
|
prefilled: true
|
|
)
|
|
dossier.build_default_individual
|
|
if dossier.save
|
|
dossier.prefill!(PrefillParams.new(dossier, params.to_unsafe_h).to_a)
|
|
render json: { dossier_url: commencer_url(@procedure.path, prefill_token: dossier.prefill_token) }, status: :created
|
|
else
|
|
render_bad_request(dossier.errors.full_messages.to_sentence)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def retrieve_procedure
|
|
@procedure = Procedure.publiees_ou_brouillons.find_by(id: params[:id])
|
|
render_not_found("procedure", params[:id]) if @procedure.blank?
|
|
end
|
|
end
|