1.0.0 • Published 4 years ago

emil-backend v1.0.0

Weekly downloads
-
License
ISC
Repository
bitbucket
Last release
4 years ago

EMIL

Architektur

Architektur Diese Grafik kann mit draw.io bearbeitet und wieder als SVG gespeichert werden.

Tech

EMIL-Backend

  • Node.js
  • Typescript
  • Koa
  • awilix
  • SQLite (wenn nötig)
  • Deployen als Docker-image

EMIl-Hub

  • Node.js
  • Typescript
  • Koa oder express
  • awilix oder inversify
  • Deployen in Swisscom-Cloud

EMIL-App

  • React Native
  • React Native Elements
  • Apollo Client (GraphQl)
  • Typescript

Konfigurationsdaten

EMIL-Hub

Siehe hub-data.ts

EMIL-Backend

Siehe hub-data.ts

Architekturentscheide

EMIL-Backend & Hub

Als Optionen gab es für uns know-how mässig folgende 2 Optionen: Node.js Stack & Spring Boot Stack.

Aus folgenden Gründen haben wir uns für den Node.js Stack entschieden:

  • gleiche Sprache & libraries wie frontend
  • Installer Erfahrungen aus anderen Projekten
  • geringerer Ressourcenverbrauch / kleinere Laufzeitumgebung
  • selber Stack für Hub & Backend

Web-Framework

Als Web-Framework haben wir uns für Koa entschieden. Koa wurden vom Express-Entwicklungsteam entwickelt. Das Framework ist modularer aufgebaut als Express und unterstützt beispielsweise async-await. Für ein Projekt auf grüner Wiese anerbietet sich der Einsatz von Koa.

https://raygun.com/blog/koa-vs-express/

https://medium.com/@theomalaper.cognez/express-vs-koa-and-hapi-a2c65f949b78

DI-Framework

Für ein DI-Framework gibt es mehrere Optionen. Am populärsten ist wohl Inversify. An zweiter Stelle kommt Awilix, welches sich an steigender Beliebtheit erfreut. Bei Inversify ist meistens relativ viel Boilerplate-Code notwendig. Daher setzen wir in diesem Fall auf Awilix.

https://www.npmtrends.com/awilix-vs-bottlejs-vs-inversify-vs-node-dependency-injection

EMIL-App

Development

Um sich mit dem Apollo-Server zu verbinden folgende Datei anpassen und unbennenen dev-constants-sample.ts --> dev-constants.ts

Kommunikation zwischen EMIL-App und EMIL-Backend

Aus folgenden Gründen haben wir uns für GraphQL entschieden:

  • Simple Doku mit Apollo-Server. So ist es sehr einfach zu sehen, welche Mutationen und Queries existieren.
  • Automatische Typ-Validierung ohne zusätzliche Frameworks.
  • Gute Etablierung von TypeGraphQL (https://typegraphql.com/)
  • Synergien: Aktuell verwenden wir in einem anderen Projekt ebenfalls TypeGraphQL

Entwicklung

Config-Files

  • Das Passwort von "EMIL Firebase Service Account" aus dem Passwortmanager in die Datei "firebase-key.json" speichern.

Image Builden & Deployen

  1. Falls noch nicht gemacht: docker login registry.gitlab.com
  2. npm run deploy