<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.czechidm.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.czechidm.com/feed.php">
        <title>IdStory Identity Manager - devel:documentation:architecture:dev</title>
        <description></description>
        <link>https://wiki.czechidm.com/</link>
        <image rdf:resource="https://wiki.czechidm.com/_media/wiki/logo.png" />
       <dc:date>2026-04-12T17:01:27+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/backend?rev=1558937982&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/basic-objects?rev=1521805642&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/database?rev=1628758033&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/events?rev=1628839122&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/filters?rev=1591906278&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/flyway?rev=1542274837&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/frontend?rev=1580129659&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/modularity?rev=1521799214&amp;do=diff"/>
                <rdf:li rdf:resource="https://wiki.czechidm.com/devel/documentation/architecture/dev/swagger?rev=1697712404&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.czechidm.com/_media/wiki/logo.png">
        <title>IdStory Identity Manager</title>
        <link>https://wiki.czechidm.com/</link>
        <url>https://wiki.czechidm.com/_media/wiki/logo.png</url>
    </image>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/backend?rev=1558937982&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2019-05-27T06:19:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Architecture - backend</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/backend?rev=1558937982&amp;do=diff</link>
        <description>Architecture - backend

backend architecture



Backend is based primarily on the Spring and Activiti workflow technologies.

Application layers

Going from the bottom:

Entity (AbstractEntity ⇒ repository (AbstractEntityRepository) ⇒ dto (AbstractDto) ⇒ service (AbstractReadWriteDtoService</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/basic-objects?rev=1521805642&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2018-03-23T11:47:22+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Basic IdM objects</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/basic-objects?rev=1521805642&amp;do=diff</link>
        <description>Basic IdM objects

identity role contract

Identity

Identity is the most basic object in CzechIdM. From the user's point of view, it must have an identity to login to the IdM.

Identity is used for:

	*  Assigning permissions - this means binding to a role. This relation is implemented by</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/database?rev=1628758033&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-08-12T08:47:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Database design</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/database?rev=1628758033&amp;do=diff</link>
        <description>Database design

database

indexmenu_n_40 
Conventions of database design
Database scripts

For the automatic creation and modification of the database scheme, the Database scripts (Flyway) is used.

JPA metamodel

We are using generated jpa metamodel by configuration, where criteria api is used.


...
// id
if (filter.getId() != null) {
  predicates.add(builder.equal(root.get(AbstractEntity_.id), filter.getId()));
}
...</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/events?rev=1628839122&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2021-08-13T07:18:42+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Events - processing of events</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/events?rev=1628839122&amp;do=diff</link>
        <description>Events - processing of events

event architecture configuration processor

An event mechanism has been designed to make extending and overlapping of the CzechIdM core functionality within any module possible.

The event (EntityEvent) with type (EventType) is published via EntityEventManager from different places in the application (</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/filters?rev=1591906278&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-06-11T20:11:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Filters</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/filters?rev=1591906278&amp;do=diff</link>
        <description>Filters

filter architecture security



JPA criteria API is used for search entities from underlying database. JPA predicate has to be constructed for all supported filter properties. Predicate can be constructed two ways:

	*  by service - predicates are constructed in AbstractReadDtoService#toPredicates method. This predicates are statically implemented and not overidable.</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/flyway?rev=1542274837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2018-11-15T09:40:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Database scripts (Flyway)</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/flyway?rev=1542274837&amp;do=diff</link>
        <description>Database scripts (Flyway)

database



The application uses the Flyway tool to create and update the database scheme. Each module can contain its own set of scripts, which are applied to the application database scheme at the start of the application (in the phase after initializing the data connection, or rather after initializing the hibernate context)</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/frontend?rev=1580129659&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-01-27T12:54:19+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Architecture - frontend</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/frontend?rev=1580129659&amp;do=diff</link>
        <description>Architecture - frontend



frontend architecture

The application is divided into 2 technological lines: backend (java) and frontend (javascript). There is a REST interface between the two.

	*  FE - Frontend (javascript)
		*  NodeJS
		*  Gulp
		*  ReactJS (view layer)
			*</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/modularity?rev=1521799214&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2018-03-23T10:00:14+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Modularity</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/modularity?rev=1521799214&amp;do=diff</link>
        <description>Modularity

modularity frontend backend architecture installation

Backend

After discussing the topic, Spring Plugin was chosen as a framework for ensuring backend modularity. Compared to other considered frameworks such as OSGi or Microservices, it is the simplest option based on interfaces, their implementations and registration of these implementations for their use in the application. The accepted disadvantage is application server restart after installing a module (module =</description>
    </item>
    <item rdf:about="https://wiki.czechidm.com/devel/documentation/architecture/dev/swagger?rev=1697712404&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-10-19T10:46:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>API documentation (Swagger)</title>
        <link>https://wiki.czechidm.com/devel/documentation/architecture/dev/swagger?rev=1697712404&amp;do=diff</link>
        <description>API documentation (Swagger)

documentation



We use swagger specification for RESTful API documentation with tools:

	*  Swagger UI - visualize and interact with the API’s resources. It is available at IdM backend url &lt;server&gt;/idm-backend/api.
	*  Swagger2Markup - generation of an up-to-date RESTful API documentation by combining documentation that’s been hand-written with auto-generated</description>
    </item>
</rdf:RDF>
