Class: OpenehrRails::OpenehrApi::CompositionsController

Inherits:
ApplicationController show all
Defined in:
app/controllers/openehr_rails/openehr_api/compositions_controller.rb

Overview

openEHR REST API COMPOSITION resource (base URL: /v1/ehr/:ehr_id/composition). Compositions committed here are graph-only (no owning scaffolded record) via OpenehrRails::Rm::CompositionCommitter -- the same versioning path Storable uses on save, so a REST-created composition is a first-class citizen of the RM graph (AQL-queryable, FHIR-exportable if mapped).

Defined Under Namespace

Classes: PreconditionFailed

Instance Method Summary collapse

Instance Method Details

#createObject

POST /v1/ehr/:ehr_id/composition



24
25
26
27
28
29
30
31
32
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 24

def create
  ehr = find_ehr!
  canonical = parsed_body
  uid = canonical.dig('uid', 'value').presence || SecureRandom.uuid
  canonical['uid'] = { '_type' => 'HIER_OBJECT_ID', 'value' => uid }

  composition = OpenehrRails::Rm::CompositionCommitter.commit(canonical, uid: uid, ehr: ehr)
  render_composition(composition, status: :created)
end

#destroyObject

DELETE /v1/ehr/:ehr_id/composition/:uid (logical delete: appends a LIFECYCLE_DELETED version)



54
55
56
57
58
59
60
61
62
63
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 54

def destroy
  ehr = find_ehr!
  head_composition = find_composition!
  check_if_match!(head_composition) if request.headers['If-Match'].present?

  composition = OpenehrRails::Rm::CompositionCommitter.commit(head_composition.to_canonical_hash,
                                                                uid: head_composition.uid, ehr: ehr)
  composition.version.update!(lifecycle_state_code: OpenehrRails::Rm::Version::LIFECYCLE_DELETED)
  head :no_content
end

#showObject

GET /v1/ehr/:ehr_id/composition/:uid (versioned "uid::system::n" or bare uid; either resolves the head)



35
36
37
38
39
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 35

def show
  find_ehr!
  composition = find_composition!
  render json: composition.to_canonical_hash
end

#updateObject

PUT /v1/ehr/:ehr_id/composition/:uid (requires If-Match: "")



42
43
44
45
46
47
48
49
50
51
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 42

def update
  ehr = find_ehr!
  head_composition = find_composition!
  check_if_match!(head_composition)

  canonical = parsed_body
  canonical['uid'] = { '_type' => 'HIER_OBJECT_ID', 'value' => head_composition.uid }
  composition = OpenehrRails::Rm::CompositionCommitter.commit(canonical, uid: head_composition.uid, ehr: ehr)
  render_composition(composition)
end