Django apps
The ZAC is a Django project made up of a number of Django apps.
zac.accounts
Deals with user authentication and permissions.
zac.activities
Deals with ad-hoc activities for cases.
zac.api
Top level backend-for-frontend (BFF) API entrypoint.
Use this for:
project level URL routing
project level django-rest-framework utilities/extensions
There should not be any concrete views, serializers, fields… defined here, only base classes.
zac.camunda
Intended for interaction/bindings with the Camunda process engine. This should be seen as an extension of django-camunda.
zac.camunda deals with Camunda concepts and offers pluggable interfaces to specific
Camunda concepts, such as dynamic forms defined in BPMN process models.
If you find yourself using the pluggable interfaces inside of this app, there’s probably a better, more specific app for that.
zac.contrib
Integrations with (usually) optional external APIs that add value to the core of case-oriented working. Often these are specific commercial products, such as ValidSign, Xential… or highly specific components.
zac.core
Intended for all interaction with the core of case-oriented working, which entails the standards as determined by VNG.
Usually contrib apps depend on functionality from the core app, not the other way around.
zac.elasticsearch
Intended for interfacing with Elasticsearch search index. To the outside world, we ‘hide’ this implementation detail. Other apps should not interface directly with elastic search, but rather interface through this app for particular searches.
This keeps the backend pluggable - if we need to look at alternatives, we only have to swap out a single app.
zac.notifications
Deal with incoming notifications and subscriptions on notification channels.
zac.werkvoorraad
Aggregate the “workload” for an end-user.