How Burni Work
本章節將告訴你 Burni 的工作原理
Mongoose Model Generator
- Burni 的 Mongoose Model 主要由 FHIR 提供的 FHIR JSON Schema 分析產生而成
- 首先,因為 FHIR 底層都是以 Primitive Type (e.g. string, integer, boolean 等)組成,所以要先產生 Primitive Type 的程式碼
- 不過,Burni 已經是程式碼產生完畢,若有興趣or核心出問題請自行查看原始碼
- 主要程式碼可以在
FHIR-mongoose-Models-Generator/PrimitiveGenerator.js
中找到
- 其餘資料型態 (i.e. General-Purpose, Metadata 以及 Special Purpose) 也已經被產生,若有興趣or核心出問題請自行查看原始碼
- 主要程式碼可以在
FHIR-mongoose-Models-Generator/ComplexGenerator.js
中找到
- 主要程式碼可以在
- Resource Type: 此為 Burni 產生 Mongoose 主要的 Data Type
- Burni 會在你
config/config.js
設定的欄位進行產生相對應 Resource Type 的 Schema 程式碼 - 主要程式碼可以在
FHIR-mongoose-Models-Generator/resourceGenerator.js
中找到 - 產生的 Schema 都會放在
models/mongodb/model
當中
- Burni 會在你
API Generator
- Burni 會對你在
config/config.js
設定的 Resource Type,產生不同的 controller - 主要程式碼可以在
api_generator/API_Generator_V2.js
找到 -
基本的 controller 如下
const create = require('../../../FHIRApiService/create'); module.exports = async function(req, res) { return await create(req, res, "Account"); };
- 你可以發現所有產生出來的都只會指向一個 function,這是因為要讓開發者能夠彈性的在不同的 Resource Type 更改其 controller (e.g. 增加前處理)
Search Parameter Generator
- Burni 最複雜的就是 Search Parameter 的產生
- 透過 Search Parameter Registry 抓取所有的 Search Parameter
- 然後將每個 Search Parameter 做資料整理變成
api_generator/FHIRParametersClean.json
檔案 - 每個 Search Parameter 都有 Type,透過 Type 去產生對應的程式碼
- 主要程式碼可以在
api_generator/searchParametersCodeGenerator.js
以及api_generator/parameterHandler.js
找到
- 主要程式碼可以在
Search Parameter
- 每個 Resource Type 的 Search Parameter 處理器都可以在
api/FHIR/${ResourceType}/${ResourceType}ParametersHandler.js
找到 - 每種 Search Parameter 的核心組成 MongoDB Query 的程式碼可以在
models/FHIR/searchParameterQueryHandler.js
以及models/FHIR/queryBuild.js
APIs
- Burni 每一個 API 主要操作可以在
api/FHIRApiService
中找到,並且每個檔案名稱基本都與 FHIR 官方所提供的名稱一樣