diff --git a/.gitignore b/.gitignore index 9e1271988e8db720d29760b240179021763780c4..9cce52ad1d30c52abeef5e51ffa87d6cd95256a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ # mkdocs documentation site/ -docs/technical-documentation/CHANGELOG.md -docs/technical-documentation/README.md -docs/openapi.yml +docs/tech/architecture/definitions.md +docs/tech/CHANGELOG.md +docs/tech/installation/back-README.md +docs/tech/installation/front-README.md +docs/tech/api/openapi.yml # python .python-version diff --git a/.gitmodules b/.gitmodules index 691c234d61929e07401a3c9d0d3e33c1350162c8..bfedea40a2ab4ec67a3fd89702fd2bb243464e41 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,8 @@ [submodule "backend-submodule"] path = backend url = ../backend + branch = main +[submodule "frontend"] + path = frontend + url = ../frontend + branch = master diff --git a/docs/openapi.yml b/docs/openapi.yml deleted file mode 100644 index a2fe355b27051fb2abf8aa0847b10b9cc7281662..0000000000000000000000000000000000000000 --- a/docs/openapi.yml +++ /dev/null @@ -1,234 +0,0 @@ -openapi: 3.0.0 -info: - title: Inject API - version: 0.4.0 -servers: - - url: http://api.example.com/ttxbackend/api/v1 - description: Example API URL -paths: - /version: - get: - tags: - - Version - summary: Retrieve the backend version - responses: - '200': - $ref: "#/components/responses/Success" - '500': - $ref: "#/components/responses/Error" - - /user/create-users: - post: - tags: - - user - summary: Upload a list of users in CSV format - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - required: - - file - responses: - '201': - $ref: "#/components/responses/Success" - '500': - $ref: "#/components/responses/Error" - - /export_import: - get: - tags: - - export_import - summary: Export database - description: "" - responses: - '200': - description: Exported file - content: - application/zip: - schema: - type: string - format: binary - '500': - $ref: "#/components/responses/Error" - post: - tags: - - export_import - summary: Import database - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - required: - - file - responses: - '200': - $ref: "#/components/responses/Success" - '500': - $ref: "#/components/responses/Error" - - /exercise_definition/upload-definition: - post: - tags: - - upload_definition - description: Upload a definition - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - name: - type: string - description: Name of the definition - file: - type: string - format: binary - description: Definition file - required: - - name - - file - responses: - '200': - $ref: "#/components/responses/Success" - '500': - $ref: "#/components/responses/Error" - - /running_exercise/get_exercise_logs/{exercise_id}: - get: - tags: - - get_exercise_logs - description: Retrieve logs for the specific exercise - parameters: - - name: anonymize - in: query - description: Set to true for user anonymization otherwise leave empty - schema: - type: boolean - allowEmptyValue: true - - name: exercise_id - in: path - description: Id of the exercise - required: true - schema: - type: integer - responses: - '200': - description: Exported file - content: - application/zip: - schema: - type: string - format: binary - '500': - $ref: "#/components/responses/Error" - - /running_exercise/upload/{team_id}/: - post: - tags: - - team_upload_file - description: Upload a file as the specified team - parameters: - - name: team_id - in: path - description: Team id - required: true - schema: - type: integer - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - file: - type: string - format: binary - description: File to upload - required: - - file - responses: - '200': - $ref: "#/components/responses/Success" - '500': - $ref: "#/components/responses/Error" - - /running_exercise/{team_id}/{file_id}/: - get: - tags: - - team_download_file - parameters: - - name: team_id - in: path - required: true - schema: - type: integer - - name: file_id - in: path - required: true - schema: - type: string - responses: - '200': - description: File - content: - application/*: - schema: - type: string - format: binary - text/*: - schema: - type: string - format: binary - image/*: - schema: - type: string - format: binary - '500': - $ref: "#/components/responses/Error" - - - -components: - schemas: - JsonResponse: - type: object - properties: - status: - type: string - enum: - - ok - - error - detail: - type: string - description: Message with extra details - required: - - status - - detail - responses: - Success: - description: Operation successful - content: - application/json: - schema: - $ref: "#/components/schemas/JsonResponse" - Error: - description: "Error" - content: - application/json: - schema: - $ref: "#/components/schemas/JsonResponse" - diff --git a/docs/tech/api/graphql-docs.md b/docs/tech/api/graphql-docs.md new file mode 100644 index 0000000000000000000000000000000000000000..0e8521fad4bd4be7201c0e009cf26317384d6815 --- /dev/null +++ b/docs/tech/api/graphql-docs.md @@ -0,0 +1 @@ +TBA \ No newline at end of file diff --git a/docs/tech/api/overview.md b/docs/tech/api/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..90253a92782f60d0313995f9e05275e84badcf5f --- /dev/null +++ b/docs/tech/api/overview.md @@ -0,0 +1,8 @@ + +The INJECT API is designed to facilitate communication between the frontend and backend components of the INJECT platform. It enables clients to perform various operations, including data retrieval, manipulation, and real-time updates. +### GraphQL API + +The GraphQL API provides a flexible and efficient way to interact with the INJECT platform. It allows clients to query specific data fields, reducing over-fetching. The [GraphQL documentation](graphql-docs.md) provides detailed information about the available queries, mutations, and subscriptions, along with examples and usage guidelines. +### REST API + +The REST API complements the GraphQL API by providing additional functionality and support for file transfers and other operations not supported by GraphQL. The [REST documentation](swagger-docs.md) covers endpoints, request methods, parameters, and response formats, offering comprehensive guidance for integrating with the INJECT platform. \ No newline at end of file diff --git a/docs/swager_docs.md b/docs/tech/api/swagger-docs.md similarity index 100% rename from docs/swager_docs.md rename to docs/tech/api/swagger-docs.md diff --git a/docs/tech/architecture/overview.md b/docs/tech/architecture/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..40a362a37de61bf6ed20e025c3142509453e5bb6 --- /dev/null +++ b/docs/tech/architecture/overview.md @@ -0,0 +1,16 @@ +## Key Components +### Backend Architecture +The backend component of the INJECT platform handles data management, authentication, and communication with the frontend. It is built using Python and Django, a high-level web development framework. Key components of the backend architecture include: + +* Python Backend: The backend of the INJECT platform is implemented using Python. +* Django Framework: Django, the most popular web development framework for Python, is used to build the backend application. Django provides robust features for database management, user authentication, and more. +* GraphQL API: The backend exposes a GraphQL API for communication with the frontend. GraphQL allows efficient data fetching and enables the client to request only the data it needs. +* Django REST Framework: For file transfers and other functionalities not supported by GraphQL, a REST API is implemented using Django REST Framework. + +### Frontend Architecture +The frontend component of the INJECT platform is responsible for providing a user-friendly interface for designing, performing, and evaluating tabletop exercises. It utilizes modern web technologies including: + +* React Frontend: The frontend application of the INJECT platform is developed using React, library for building user interfaces. +* TypeScript: TypeScript is used instead of JavaScript to ensure type safety and improve code quality. +* React Hooks: React hooks play a crucial role in modern React programming, providing essential features such as state management and performing side effects. +* Libraries and Tools: Various libraries and tools, including Yarn, Vite, Apollo Client, and Generouted, are utilized for package management, building, data management, and routing within the frontend application. \ No newline at end of file diff --git a/docs/tech/installation/overview.md b/docs/tech/installation/overview.md new file mode 100644 index 0000000000000000000000000000000000000000..c864d22f6c3940a277ae5e2e4eae61fa10d7cb1f --- /dev/null +++ b/docs/tech/installation/overview.md @@ -0,0 +1,10 @@ +## Installation Guides +### Frontend Installation Guide + +The frontend of the INJECT project is responsible for providing a user-friendly interface for interacting with exercises and educational content. To get started with the frontend installation and configuration, refer to the [Frontend Installation Guide](front-README.md). This guide will walk you through the necessary steps to set up the frontend environment, install dependencies, and deploy the frontend application. + +### Backend Installation Guide + +The backend of the INJECT project handles data management, authentication, and running the INJECT project. To begin setting up the backend environment and running the backend server, follow the instructions outlined in the [Backend Installation Guide](back-README.md). This guide provides detailed steps for installing dependencies, configuring the backend, and deploying the backend server. + +By following the installation guides for both the frontend and backend components, you'll be able to successfully set up and run the INJECT project. If you encounter any issues or need further assistance, please check out our [FAQ](TBA). Additionally, if you encounter any bugs or require further assistance, don't hesitate to report them to us. The [FAQ](TBA) includes instructions on how to report bugs. diff --git a/docs/tech/security-auth.md b/docs/tech/security-auth.md new file mode 100644 index 0000000000000000000000000000000000000000..0e8521fad4bd4be7201c0e009cf26317384d6815 --- /dev/null +++ b/docs/tech/security-auth.md @@ -0,0 +1 @@ +TBA \ No newline at end of file diff --git a/docs/tech/security-overview.md b/docs/tech/security-overview.md new file mode 100644 index 0000000000000000000000000000000000000000..0e8521fad4bd4be7201c0e009cf26317384d6815 --- /dev/null +++ b/docs/tech/security-overview.md @@ -0,0 +1 @@ +TBA \ No newline at end of file diff --git a/docs/technical-documentation/CHANGELOG.md b/docs/technical-documentation/CHANGELOG.md deleted file mode 100644 index fcae7bccb5567b93dcd61a3275de5431d2ba5616..0000000000000000000000000000000000000000 --- a/docs/technical-documentation/CHANGELOG.md +++ /dev/null @@ -1,57 +0,0 @@ -## 0.3.0 - -### New features - - add mutation for milestone modification #116 - - add uuid field to exercise #120 - - allow higher definition decomposition #128 - - add email thread subject #126 - - REST API endpoints for export and import #79 #124 - -### Changes - - create graphql input objects for mutations #94 - - rename PerformTeamToolAction mutation to UseTool #94 - - reach_milestone is replaced by fields activate_milestone and deactivate_milestone #98 - - add option to override some definition config values #109 - - add an optional parameter 'instructor' to file download REST API endpoint #119 - - remove implicit exercise loop mutations #20 - - add exercise_id to exercise loop mutations #20 - - rename ConfigOverride to ConfigOverrideInput for consistency #127 - - rework exercise loop subscription #137 - -### Fixes - - fix move time not working for exercise loop #106 - - replace incorrect usages of extended tool type with tool type #123 - - Fix exercise time query #129 - - Change exercise duration units in definition config #130 - - only activate a file download milestone if the exercise is running #135 - - prohibit uploading files with existing names #132 - - fix ExercisesSubscription not notifying any changes to exercises #138 - -## 0.2.0 - -### New features - - implement markdown support #84 - - add finish_time to teams #74 - - add specific team query #103 - -### Changes - - autoInjects query return emails too #95 - - -## 0.1.1 - -### New features - - add organization to category and email address #83 - - add milestones query #87 - - add email-templates query #92 - -### Fixes - - fix repeat option not working for inject #86 - - fix wrong filter condition in get contacts for emails #91 - -### Documentation updates - - update toplevel readme #82 - - -## 0.1.0 -Initial version, no changes. \ No newline at end of file diff --git a/docs/technical-documentation/README.md b/docs/technical-documentation/README.md deleted file mode 100644 index e3fb6c4a75f070fdafad991fbe4db38e2e8ece15..0000000000000000000000000000000000000000 --- a/docs/technical-documentation/README.md +++ /dev/null @@ -1,232 +0,0 @@ -# definitions -This directory contains the example definitions which showcase various functionality. - -## Versioning -Modified [Semver](https://semver.org/): -- **Patch** - Adding fields and files to the definition, this allows for older versions of definitions to run on newer backends. -Sensible defaults should be selected when adding fields to allow for backwards compatibility. -- **Minor** - Modifying existing fields, such as renaming, deleting or changing their meaning. -Such changes would either break the definition validation or it would cause unintended/incorrect behaviour. -- **Major** - No set of rules are defined, can be used for extreme changes to the definition format. - - -The current definition version the backend supports is the first version in the [changelog](CHANGELOG.md). - - -## Definition file structure -``` -- content/ - - various markdown files -- files/ - - various files which are used as file attachments -- config.yml -- email.yml -- injects.yml -- milestones.yml -- tools.yml -- roles.yml -``` - -The `content` and `files` directories are optional, they do not need to be present if your definition does not use -the features these directories are needed for. - -Furthermore, it is possible to use a directory instead of a single YAML file. -The files inside this directory must follow the same structure as the original YAML file. -For example, if you decide that the current `injects.yml` file is too big to easily navigate, -you can create a directory `injects`, inside of which you create 4 different files, -which when combined will contain the original content of the `injects.yml` file. -These files can be named in any way you like, however they must have the YAML format. - -The above currently holds true for all YAML files except `config.yml`. -These approaches can be mixed and matched, meaning that if you have many injects, -but not that many tools, you can put the injects into a directory and still use a single `tools.yml` file. - -Note: If the definition contains both a YAML file and a directory for the same structure, -the YAML file will be prioritized and the directory ignored. -E.g. if you have an `injects.yml` and an `injects` directory, the directory will be skipped. - -## Current file formats -Below are field definitions for each file. Every field is required unless a default value is -specified, or it is stated otherwise. - -### Quick list -- [config.yml](#configyml) -- [injects.yml](#injectsyml) -- [tools.yml](#toolsyml) -- [milestones.yml](#milestonesyml) -- [email.yml](#emailyml) -- [roles.yml](#rolesyml) - -### config.yml -This file contains various settings for an exercise. All advanced features are disabled by default: -- **exercise_duration**: _int_ - Duration of the exercise in minutes. -- **enable_email**: _bool, default=False_ - Enable the emails feature. -- **email_between_teams**: _bool, default=False_ - Allow emails between teams. Can only be enabled if -emails are enabled. -- **custom_email_suffix**: _string, default="mail.com"_ - Used only when email between teams is enabled. -Changes the domain of email addresses of teams, e.g. if set to `gmail.com` team email addresses will have the form `team_name@gmail.com`. -- **team_visible_milestones**: _bool, default=False_ - Enable some milestones to be visible to trainees. -- **show_exercise_time**: _bool, default=False_ - Show the remaining duration of the ongoing exercise to trainees on the frontend. -- **enable_roles**: _bool, default=False_ - Enables use of team roles. Requires `roles.yml` file to be included in the definition. -- **version**: _string_ - semver version string of the format this definition uses, see [versioning](#versioning) for details. - - -### injects.yml -This file contains inject categories (ICs), which group injects, for which it only makes sense -to send one of them to the team. An important attribute of IC is `auto`, which determines whether -it gets evaluated and sent automatically after any of its injects meet its conditions, or is -passed to an instructor for further evaluation once its conditions are met. If `auto` is set -to True, the first inject in the `injects` from the top that fulfills its condition is immediately -sent to the trainees, marking the IC as resolved for the exercise, and it is no longer -evaluated for the given team to which it was sent. If `auto` is set to False, when any of -the injects in the IC fulfills its condition, the following happens: -An _inject selection (IS)_ is created out of all injects in this IC that meet their conditions -at this very point in time. This resolves the IC, which is no longer evaluated for this team, -and the resulting IS is no longer updated, even if the conditions of the underlying injects no -longer match. At this point, the IS is sent to the instructor, where they may (or may not) select -one of these injects that at the time of evaluating the IC met their conditions and forward it -to the team. This is done to cut off injects that did not meet their conditions from the IS, -so that the instructor does not have to re-evaluate which conditions do not match manually. - -Each inject category has the following fields: - -- **name**: _string, unique_ - Name of the Inject Category (IC). -- **auto**: _bool_ - Whether this IC gets evaluated automatically, or is passed to an instructor once its conditions are met. -- **time**: _int, default=0_ - Minimum time in minutes since the exercise start which -must be reached before the category is processed. Nothing happens ff the time is reached but no Injects fulfill the conditions. -- **email**: _bool_, default=False - Usable only if the email feature is enabled. If set to true, the inject will be -sent to the team as an email, and the sender of each inject has to be a valid email address defined in `email.yml`. -- **delay**: _int, default=0_ - After one of the injects in this IC is about to be sent, it gets -delayed by this number of minutes. Works only on automatically sent injects (auto=True). -- **organization**: _string, default=""_ - Name of the organization this inject was sent from. -- **injects**: - - **name**: _string_ - Name of the inject. - - **milestone_condition**: _string, default=""_ - A list of milestones that must be reached in - order for this inject to be sent. Multiple milestones can be separated with `and` keyword. - Inject may also depend on a certain milestone not being reached, in that case it has to be prepended with a `not` keyword. - - **hidden**: _bool, default=False_ - A hidden inject is not displayed to the trainees - (once sent, inject is not generated). It can still reach milestones though. - - **sender**: _string, default="Exercise"_ - Sender of an inject. In case of email injects - this has to be set as a valid email address defined in `email.yml`. - - **subject**: _string_ - Subject of the email thread. Ignored if not an email inject. - The inject email will be sent to an existing thread with the same subject and the participants being - the sender and the addressed team. In case no such thread exists, a new one will be created. - - **content**: _string, default=""_ - Content of this inject. Mutually exclusive with the `content_path` field. - - **content_path**: _string, default=""_ - Name of a markdown file that contains the content for this inject. - Mutually exclusive with the `content` field. - - **file_name**: _string, default=""_ - Name of a file that should be attached to this inject. - Has to be a file present in the `/files` directory in the exercise definition. - - **activate_milestone**: _string, default=""_ - A list of milestones that are activated once this inject is sent. - [Syntax rules](#milestone-activation) for _activate_milestone_. - - **deactivate_milestone**: _string, default=""_ - A list of milestones that are deactivated once this inject is sent. - [Syntax rules](#milestone-activation) for _deactivate_milestone_. - - **repeat**: _int, default=0_ - States how many times the inject should be repeated. - If set to 0, the inject will be sent only once. - - **roles**: _string, default=""_ - Usable only if roles are enabled. Defines which roles can - receive this inject. If inject is meant for multiple roles, it can be achieved by writing the role names separated by spaces. - - -### tools.yml -This file contains a list of tools. A tool can be thought of as a simple function, which based on -its input and current state of the exercise returns some output. Each tool has the following fields: -- **name**: _string, unique_ - Name of the tool -- **tooltip_description**: _string, default=""_ - Description of a tool displayed to trainees. -- **hint**: _string, default=""_ - Argument hint -- **default_response**: _string_ - Response that the tool returns if no other response gets matched. -- **roles**: _string, default=""_ - Usable only if roles are enabled. -Defines which roles will be able to use the tool. By default, all roles can access the tool. -If tool is meant for multiple roles, it can be achieved by writing the role names separated by spaces: -```yml -- roles: role_name_1 role_name_2 role_name_3 -``` -- **responses**: - A list of responses. A response is matched when its conditions are met. -When trainees use a tool, the list of responses is examined from top to bottom and -only the **first** matched response is sent back. - - **param**: _string_ - A parameter that is matched **exactly** to the input of trainees. Can be written - as [python regular expression](https://docs.python.org/3/library/re.html) if parameter `regex` is set to true. - - **regex**: _bool, default=False_ - Determines whether parameter `param` is matched as a string or a regex. - - **time**: _int, default=0_ - Time since the beginning of the exercise in minutes after which this - response can be matched. If the trainees use correct param but this time was not reached yet, it will not match. - - **milestone_condition**: _string, default=""_ - A list of milestones that must be reached - in order for this response to get matched. Multiple milestones can be separated with `and` keyword. - Inject may also depend on a certain milestone not being reached, in that case it has to be prepended with a `not` keyword. - - **content**: _string, default=""_ - This is the message that will be sent to the trainees as a response. - Mutually exclusive with the `content_path` field. - - **content_path**: _string, default=""_ - Name of a markdown file that contains the content for this response. - Mutually exclusive with the `content` field. - - **file_name**: _string, default=""_ - Name of the file which should be attached to this response when matched, - has to be a file present in the `/files` directory in the exercise definition. - - **activate_milestone**: _string, default=""_ - A list of milestones that are activated once this response is matched and sent. - [Syntax rules](#milestone-activation) for _activate_milestone_. - - **deactivate_milestone**: _string, default=""_ - A list of milestones that are deactivated once this response is matched and sent. - [Syntax rules](#milestone-activation) for _deactivate_milestone_. - - **roles**: _string, default=""_ - Usable only if roles are enabled. - Defines specific responses for specific roles. By default, this response is available for every role. - If response is meant for multiple roles, it can be achieved by writing the role names separated by spaces. - - -### milestones.yml -This file contains all milestones in an exercise. Any `milestone_condition` or `(de)activate_milestone` -field in the whole definition can only contain milestones defined in here. Each milestone has the following fields: -- **name**: _string, unique_ - Name of the milestone. \ - Rules for the naming of the milestones: - - A name must start with a letter or the underscore character - - A name cannot start with a number - - A name can only contain alphanumeric characters and underscores (A-z, 0-9, and _ ) - - Variable names are case-sensitive (age, Age and AGE are three different variables) - - A name must be continuous string -> a name can not contain spaces -- **team_visible**: _bool, default=False_ - Makes a milestone visible to trainees during the exercise. -They will be able to observe its status (whether it is reached by their team or not) in real time. -- **roles**: _string, default=""_ - Usable only if roles are enabled. Works only if the milestone is marked as visible. -Defines, which roles will see the milestone. By default, all roles will see the milestone. -- **file_names**: _string, default=""_ - Defines the name of a file from the definition. Multiple file names -can be specified as a space separated list. If at least one of these files is downloaded, this milestone activates. -- **final**: _bool, default=False_ - sets this milestone as a final milestone. If a team reaches this -milestone, their exercise is considered to be finished. There _must_ be at least _one_ milestone, -however there can be _more than one_. - - -### email.yml -This file contains all email addresses where each address has the following fields: -- **address**: _string_ - Address of the simulated correspondent. -- **team_visible**: _bool, default=False_ - Adds this address into contact list of each team. -- **description**: _string_ - Description of the correspondent and related context for the instructor. -- **activate_milestone**: _string, default=""_ - A list of milestones that are activated once an email -thread with this correspondent is started. This may happen automatically (through injects, prompted -by trainees sending email to this address, or an instructor sending email to trainees from this address). -[Syntax rules](#milestone-activation) for _activate_milestone_. -- **deactivate_milestone**: _string, default=""_ - A list of milestones that are deactivated once this inject is sent. -[Syntax rules](#milestone-activation) for _deactivate_milestone_. -- **team_visible**: _bool, default=False_ - Specifies if this email address should be visible to the teams. -- **organization**: _string, default=""_ - Name of the organization this email address belongs to. -- **templates**: _not required_ - A list of template emails that the instructor can choose from when writing an email. - - **context**: _string_ - Description of the context of this email answer for the instructor. - - **content**: _string, default=""_ - Content of this email template. Mutually exclusive with the `content_path` field. - - **content_path**: _string, default=""_ - Name of a markdown file that contains the content for this email template. - Mutually exclusive with the `content` field. - - **activate_milestone**: _string, default=""_ - A list of milestones that are activated once this email template is sent by an instructor. - [Syntax rules](#milestone-activation) for _activate_milestone_. - - **deactivate_milestone**: _string, default=""_ - A list of milestones that are deactivated once this email template is sent by an instructor. - [Syntax rules](#milestone-activation) for _deactivate_milestone_. - - **file_name**: _string, default=""_ - Filename of a file attached to this email response, - has to be a file present in the `/files` directory in the exercise definition. - -### roles.yml -Required if roles are enabled. This file contains all role names: -- **name**: _string_ - Name of the role. - -## Syntax rules and additional information for attributes/fields -Below are specific syntax requirements for some attributes. - -### Milestone activation -Both fields have the same syntax rules. - -Milestones written in this fields have to be defined in `milestones.yml`. -If multiple milestones are written, they have to be separated by either _comma_, _space_, or _comma with following space_. -Following inputs are valid and recommended to use (same for _deactivate_milestone_): -``` -- activate_milestone: milestone_1 -- activate_milestone: milestone_1 milestone_2 -- activate_milestone: milestone_1,milestone_2 -- activate_milestone: milestone_1, milestone_2 -``` diff --git a/frontend b/frontend new file mode 160000 index 0000000000000000000000000000000000000000..3781cb057acf5a305ba675cce25bfabfee4e2061 --- /dev/null +++ b/frontend @@ -0,0 +1 @@ +Subproject commit 3781cb057acf5a305ba675cce25bfabfee4e2061 diff --git a/mkdocs.yml b/mkdocs.yml index 5586e00fdb3736c68ed95547ad92f1aa8c5c8622..a85007158ceefa9b8ef07c89398d798ed1e0e473 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,14 +16,27 @@ nav: - Home: index.md - Test: - Test site: testing-nav/test-site.md - - Technical documentation: - - Definition documentation: technical-documentation/README.md + - Technical documentation: + - Installation and system requirements: + - Overview: tech/installation/overview.md + - Front-end installation: tech/installation/front-README.md + - Back-end installation: tech/installation/back-README.md + - System architecture: + - Overview: tech/architecture/overview.md + - Definition documentation: tech/architecture/definitions.md + - Security features: + - Overview: tech/security-overview.md + - Authentization: tech/security-auth.md + - API Documentation: + - Overview: tech/api/overview.md + - Graphql Documentation: tech/api/graphql-docs.md + - Swagger REST documentation: tech/api/swagger-docs.md + - Changelog on backend: tech/CHANGELOG.md - FAQ: faq.md - Glossary of Terms: glosary-of-terms.md - Authors: authors.md - Acknowledgements: acknowledgements.md - License: license.md - - Changelog: technical-documentation/CHANGELOG.md markdown_extensions: - attr_list diff --git a/utilities.sh b/utilities.sh index 12ac19e18ffc94e3c54f6c5858b57d04f602b26b..0e4be91d46168aeca4fa360e82b9beea2a9364cf 100755 --- a/utilities.sh +++ b/utilities.sh @@ -1,8 +1,10 @@ #!/usr/bin/env bash git submodule init -git submodule foreach git pull origin main +git submodule update --remote -mkdir -p docs/technical-documentation -cp ./backend/definitions/README.md ./docs/technical-documentation/README.md -cp ./backend/CHANGELOG.md ./docs/technical-documentation/CHANGELOG.md -cp ./backend/openapi.yml ./docs/openapi.yml +mkdir -p docs/tech +cp ./backend/definitions/README.md ./docs/tech/architecture/definitions.md +cp ./backend/CHANGELOG.md ./docs/tech/CHANGELOG.md +cp ./backend/INSTALATION.md ./docs/tech/installation/back-README.md +cp ./frontend/README.md ./docs/tech/installation/front-README.md +cp ./backend/openapi.yml ./docs/tech/api/openapi.yml