跳轉到

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 當中

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 官方所提供的名稱一樣