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



28
29
30
31
32
33
34
35
36
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 28

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)



58
59
60
61
62
63
64
65
66
67
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 58

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

#openehr_access_scopeObject



23
24
25
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 23

def openehr_access_scope
  :rest_api
end

#showObject

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



39
40
41
42
43
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 39

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: "")



46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/openehr_rails/openehr_api/compositions_controller.rb', line 46

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