commit cca0bfa060693b22234608b8456527366cbd2aca
Author: Lukáš Vlček <vlcek@net-inout.cz>
Date:   Sun May 8 11:10:05 2022 +0200

    Build issues fixed (merge problems)

diff --git a/webapp/api/api.ts b/webapp/api/api.ts
index 6035620..50cf8c7 100644
--- a/webapp/api/api.ts
+++ b/webapp/api/api.ts
@@ -21,6 +21,32 @@ import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObj
 // @ts-ignore
 import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from './base';
 
+/**
+ * 
+ * @export
+ * @interface AddNoteToAnnotationRequest
+ */
+export interface AddNoteToAnnotationRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof AddNoteToAnnotationRequest
+     */
+    'note'?: string | null;
+}
+/**
+ * 
+ * @export
+ * @interface AddNoteToTagOccurenceRequest
+ */
+export interface AddNoteToTagOccurenceRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof AddNoteToTagOccurenceRequest
+     */
+    'note'?: string | null;
+}
 /**
  * 
  * @export
@@ -232,6 +258,105 @@ export interface ClientInfo {
      */
     'ip'?: string | null;
 }
+/**
+ * 
+ * @export
+ * @interface CreateCategoryRequest
+ */
+export interface CreateCategoryRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateCategoryRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateCategoryRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateCategoryRequest
+     */
+    'color'?: string | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof CreateCategoryRequest
+     */
+    'disabledForAnnotators'?: boolean;
+}
+/**
+ * 
+ * @export
+ * @interface CreateSubTagRequest
+ */
+export interface CreateSubTagRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateSubTagRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateSubTagRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateSubTagRequest
+     */
+    'tagId'?: string;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof CreateSubTagRequest
+     */
+    'sentimentEnabled'?: boolean;
+}
+/**
+ * 
+ * @export
+ * @interface CreateTagRequest
+ */
+export interface CreateTagRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateTagRequest
+     */
+    'categoryId'?: string;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateTagRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateTagRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof CreateTagRequest
+     */
+    'color'?: string | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof CreateTagRequest
+     */
+    'sentimentEnabled'?: boolean;
+}
 /**
  * 
  * @export
@@ -375,6 +500,19 @@ export interface DocumentListResponse {
      */
     'documents'?: Array<DocumentListInfo> | null;
 }
+/**
+ * 
+ * @export
+ * @interface DocumentPreviewResponse
+ */
+export interface DocumentPreviewResponse {
+    /**
+     * 
+     * @type {string}
+     * @memberof DocumentPreviewResponse
+     */
+    'content'?: string | null;
+}
 /**
  * 
  * @export
@@ -469,6 +607,21 @@ export const EState = {
 export type EState = typeof EState[keyof typeof EState];
 
 
+/**
+ * 
+ * @export
+ * @enum {string}
+ */
+
+export const ETagSentiment = {
+    Neutral: 'NEUTRAL',
+    Positive: 'POSITIVE',
+    Negative: 'NEGATIVE'
+} as const;
+
+export type ETagSentiment = typeof ETagSentiment[keyof typeof ETagSentiment];
+
+
 /**
  * 
  * @export
@@ -546,6 +699,93 @@ export interface LoginResponse {
      */
     'role'?: ERole;
 }
+/**
+ * 
+ * @export
+ * @interface ModifyCategoryRequest
+ */
+export interface ModifyCategoryRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyCategoryRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyCategoryRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyCategoryRequest
+     */
+    'color'?: string | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof ModifyCategoryRequest
+     */
+    'disabledForAnnotators'?: boolean | null;
+}
+/**
+ * 
+ * @export
+ * @interface ModifySubTagRequest
+ */
+export interface ModifySubTagRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifySubTagRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifySubTagRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof ModifySubTagRequest
+     */
+    'sentimentEnabled'?: boolean | null;
+}
+/**
+ * 
+ * @export
+ * @interface ModifyTagRequest
+ */
+export interface ModifyTagRequest {
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyTagRequest
+     */
+    'name'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyTagRequest
+     */
+    'description'?: string | null;
+    /**
+     * 
+     * @type {string}
+     * @memberof ModifyTagRequest
+     */
+    'color'?: string | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof ModifyTagRequest
+     */
+    'sentimentEnabled'?: boolean | null;
+}
 /**
  * 
  * @export
@@ -585,6 +825,19 @@ export interface ProblemDetails {
      */
     'instance'?: string | null;
 }
+/**
+ * 
+ * @export
+ * @interface SetInstanceSentimentRequest
+ */
+export interface SetInstanceSentimentRequest {
+    /**
+     * 
+     * @type {ETagSentiment}
+     * @memberof SetInstanceSentimentRequest
+     */
+    'sentiment'?: ETagSentiment;
+}
 /**
  * 
  * @export
@@ -678,6 +931,12 @@ export interface TagCategoryInfo {
      * @memberof TagCategoryInfo
      */
     'tags'?: Array<TagInfo> | null;
+    /**
+     * 
+     * @type {boolean}
+     * @memberof TagCategoryInfo
+     */
+    'disabledForAnnotators'?: boolean;
 }
 /**
  * 
@@ -788,6 +1047,12 @@ export interface TagInstanceInfo {
      * @memberof TagInstanceInfo
      */
     'note'?: string | null;
+    /**
+     * 
+     * @type {ETagSentiment}
+     * @memberof TagInstanceInfo
+     */
+    'sentiment'?: ETagSentiment;
 }
 /**
  * 
@@ -869,6 +1134,18 @@ export interface UserInfo {
      * @memberof UserInfo
      */
     'surname'?: string | null;
+    /**
+     * 
+     * @type {number}
+     * @memberof UserInfo
+     */
+    'assignedDocumentsCount'?: number;
+    /**
+     * 
+     * @type {ERole}
+     * @memberof UserInfo
+     */
+    'role'?: ERole;
 }
 /**
  * 
@@ -926,18 +1203,19 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
         /**
          * 
          * @param {string} annotationId 
-         * @param {string} occurenceId 
+         * @param {string} instanceId 
+         * @param {SetInstanceSentimentRequest} [setInstanceSentimentRequest] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        annotationAnnotationIdOccurenceIdDelete: async (annotationId: string, occurenceId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+        annotationAnnotationIdInstanceIdSentimentPut: async (annotationId: string, instanceId: string, setInstanceSentimentRequest?: SetInstanceSentimentRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             // verify required parameter 'annotationId' is not null or undefined
-            assertParamExists('annotationAnnotationIdOccurenceIdDelete', 'annotationId', annotationId)
-            // verify required parameter 'occurenceId' is not null or undefined
-            assertParamExists('annotationAnnotationIdOccurenceIdDelete', 'occurenceId', occurenceId)
-            const localVarPath = `/annotation/{annotationId}/{occurenceId}`
+            assertParamExists('annotationAnnotationIdInstanceIdSentimentPut', 'annotationId', annotationId)
+            // verify required parameter 'instanceId' is not null or undefined
+            assertParamExists('annotationAnnotationIdInstanceIdSentimentPut', 'instanceId', instanceId)
+            const localVarPath = `/annotation/{annotationId}/{instanceId}/sentiment`
                 .replace(`{${"annotationId"}}`, encodeURIComponent(String(annotationId)))
-                .replace(`{${"occurenceId"}}`, encodeURIComponent(String(occurenceId)));
+                .replace(`{${"instanceId"}}`, encodeURIComponent(String(instanceId)));
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
             let baseOptions;
@@ -945,15 +1223,18 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
                 baseOptions = configuration.baseOptions;
             }
 
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
+            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
 
     
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
             setSearchParams(localVarUrlObj, localVarQueryParameter);
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(setInstanceSentimentRequest, localVarRequestOptions, configuration)
 
             return {
                 url: toPathString(localVarUrlObj),
@@ -963,14 +1244,14 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
         /**
          * 
          * @param {string} annotationId 
-         * @param {AnnotationInstanceAddRequest} [annotationInstanceAddRequest] 
+         * @param {AddNoteToAnnotationRequest} [addNoteToAnnotationRequest] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        annotationAnnotationIdPost: async (annotationId: string, annotationInstanceAddRequest?: AnnotationInstanceAddRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+        annotationAnnotationIdNotePost: async (annotationId: string, addNoteToAnnotationRequest?: AddNoteToAnnotationRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             // verify required parameter 'annotationId' is not null or undefined
-            assertParamExists('annotationAnnotationIdPost', 'annotationId', annotationId)
-            const localVarPath = `/annotation/{annotationId}`
+            assertParamExists('annotationAnnotationIdNotePost', 'annotationId', annotationId)
+            const localVarPath = `/annotation/{annotationId}/note`
                 .replace(`{${"annotationId"}}`, encodeURIComponent(String(annotationId)));
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@@ -990,7 +1271,7 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
             setSearchParams(localVarUrlObj, localVarQueryParameter);
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            localVarRequestOptions.data = serializeDataIfNeeded(annotationInstanceAddRequest, localVarRequestOptions, configuration)
+            localVarRequestOptions.data = serializeDataIfNeeded(addNoteToAnnotationRequest, localVarRequestOptions, configuration)
 
             return {
                 url: toPathString(localVarUrlObj),
@@ -999,12 +1280,19 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
         },
         /**
          * 
-         * @param {AnnotationsAddRequest} [annotationsAddRequest] 
+         * @param {string} annotationId 
+         * @param {string} occurenceId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        annotationsPost: async (annotationsAddRequest?: AnnotationsAddRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/annotations`;
+        annotationAnnotationIdOccurenceIdDelete: async (annotationId: string, occurenceId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'annotationId' is not null or undefined
+            assertParamExists('annotationAnnotationIdOccurenceIdDelete', 'annotationId', annotationId)
+            // verify required parameter 'occurenceId' is not null or undefined
+            assertParamExists('annotationAnnotationIdOccurenceIdDelete', 'occurenceId', occurenceId)
+            const localVarPath = `/annotation/{annotationId}/{occurenceId}`
+                .replace(`{${"annotationId"}}`, encodeURIComponent(String(annotationId)))
+                .replace(`{${"occurenceId"}}`, encodeURIComponent(String(occurenceId)));
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
             let baseOptions;
@@ -1012,34 +1300,142 @@ export const AnnotationApiAxiosParamCreator = function (configuration?: Configur
                 baseOptions = configuration.baseOptions;
             }
 
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
 
     
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
             setSearchParams(localVarUrlObj, localVarQueryParameter);
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            localVarRequestOptions.data = serializeDataIfNeeded(annotationsAddRequest, localVarRequestOptions, configuration)
 
             return {
                 url: toPathString(localVarUrlObj),
                 options: localVarRequestOptions,
             };
         },
-    }
-};
-
-/**
- * AnnotationApi - functional programming interface
- * @export
- */
-export const AnnotationApiFp = function(configuration?: Configuration) {
-    const localVarAxiosParamCreator = AnnotationApiAxiosParamCreator(configuration)
-    return {
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {AnnotationInstanceAddRequest} [annotationInstanceAddRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationAnnotationIdPost: async (annotationId: string, annotationInstanceAddRequest?: AnnotationInstanceAddRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'annotationId' is not null or undefined
+            assertParamExists('annotationAnnotationIdPost', 'annotationId', annotationId)
+            const localVarPath = `/annotation/{annotationId}`
+                .replace(`{${"annotationId"}}`, encodeURIComponent(String(annotationId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(annotationInstanceAddRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {string} occurenceId 
+         * @param {AddNoteToTagOccurenceRequest} [addNoteToTagOccurenceRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationAnnotationIdTagOccurenceIdNotePost: async (annotationId: string, occurenceId: string, addNoteToTagOccurenceRequest?: AddNoteToTagOccurenceRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'annotationId' is not null or undefined
+            assertParamExists('annotationAnnotationIdTagOccurenceIdNotePost', 'annotationId', annotationId)
+            // verify required parameter 'occurenceId' is not null or undefined
+            assertParamExists('annotationAnnotationIdTagOccurenceIdNotePost', 'occurenceId', occurenceId)
+            const localVarPath = `/annotation/{annotationId}/tag/{occurenceId}/note`
+                .replace(`{${"annotationId"}}`, encodeURIComponent(String(annotationId)))
+                .replace(`{${"occurenceId"}}`, encodeURIComponent(String(occurenceId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(addNoteToTagOccurenceRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {AnnotationsAddRequest} [annotationsAddRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationsPost: async (annotationsAddRequest?: AnnotationsAddRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/annotations`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(annotationsAddRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+    }
+};
+
+/**
+ * AnnotationApi - functional programming interface
+ * @export
+ */
+export const AnnotationApiFp = function(configuration?: Configuration) {
+    const localVarAxiosParamCreator = AnnotationApiAxiosParamCreator(configuration)
+    return {
         /**
          * 
          * @param {string} annotationId 
@@ -1050,6 +1446,29 @@ export const AnnotationApiFp = function(configuration?: Configuration) {
             const localVarAxiosArgs = await localVarAxiosParamCreator.annotationAnnotationIdGet(annotationId, options);
             return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
         },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {string} instanceId 
+         * @param {SetInstanceSentimentRequest} [setInstanceSentimentRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async annotationAnnotationIdInstanceIdSentimentPut(annotationId: string, instanceId: string, setInstanceSentimentRequest?: SetInstanceSentimentRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.annotationAnnotationIdInstanceIdSentimentPut(annotationId, instanceId, setInstanceSentimentRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {AddNoteToAnnotationRequest} [addNoteToAnnotationRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async annotationAnnotationIdNotePost(annotationId: string, addNoteToAnnotationRequest?: AddNoteToAnnotationRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.annotationAnnotationIdNotePost(annotationId, addNoteToAnnotationRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
         /**
          * 
          * @param {string} annotationId 
@@ -1072,6 +1491,18 @@ export const AnnotationApiFp = function(configuration?: Configuration) {
             const localVarAxiosArgs = await localVarAxiosParamCreator.annotationAnnotationIdPost(annotationId, annotationInstanceAddRequest, options);
             return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
         },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {string} occurenceId 
+         * @param {AddNoteToTagOccurenceRequest} [addNoteToTagOccurenceRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async annotationAnnotationIdTagOccurenceIdNotePost(annotationId: string, occurenceId: string, addNoteToTagOccurenceRequest?: AddNoteToTagOccurenceRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.annotationAnnotationIdTagOccurenceIdNotePost(annotationId, occurenceId, addNoteToTagOccurenceRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
         /**
          * 
          * @param {AnnotationsAddRequest} [annotationsAddRequest] 
@@ -1101,6 +1532,27 @@ export const AnnotationApiFactory = function (configuration?: Configuration, bas
         annotationAnnotationIdGet(annotationId: string, options?: any): AxiosPromise<AnnotationInfo> {
             return localVarFp.annotationAnnotationIdGet(annotationId, options).then((request) => request(axios, basePath));
         },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {string} instanceId 
+         * @param {SetInstanceSentimentRequest} [setInstanceSentimentRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationAnnotationIdInstanceIdSentimentPut(annotationId: string, instanceId: string, setInstanceSentimentRequest?: SetInstanceSentimentRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.annotationAnnotationIdInstanceIdSentimentPut(annotationId, instanceId, setInstanceSentimentRequest, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {AddNoteToAnnotationRequest} [addNoteToAnnotationRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationAnnotationIdNotePost(annotationId: string, addNoteToAnnotationRequest?: AddNoteToAnnotationRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.annotationAnnotationIdNotePost(annotationId, addNoteToAnnotationRequest, options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @param {string} annotationId 
@@ -1121,6 +1573,17 @@ export const AnnotationApiFactory = function (configuration?: Configuration, bas
         annotationAnnotationIdPost(annotationId: string, annotationInstanceAddRequest?: AnnotationInstanceAddRequest, options?: any): AxiosPromise<void> {
             return localVarFp.annotationAnnotationIdPost(annotationId, annotationInstanceAddRequest, options).then((request) => request(axios, basePath));
         },
+        /**
+         * 
+         * @param {string} annotationId 
+         * @param {string} occurenceId 
+         * @param {AddNoteToTagOccurenceRequest} [addNoteToTagOccurenceRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        annotationAnnotationIdTagOccurenceIdNotePost(annotationId: string, occurenceId: string, addNoteToTagOccurenceRequest?: AddNoteToTagOccurenceRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.annotationAnnotationIdTagOccurenceIdNotePost(annotationId, occurenceId, addNoteToTagOccurenceRequest, options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @param {AnnotationsAddRequest} [annotationsAddRequest] 
@@ -1151,6 +1614,31 @@ export class AnnotationApi extends BaseAPI {
         return AnnotationApiFp(this.configuration).annotationAnnotationIdGet(annotationId, options).then((request) => request(this.axios, this.basePath));
     }
 
+    /**
+     * 
+     * @param {string} annotationId 
+     * @param {string} instanceId 
+     * @param {SetInstanceSentimentRequest} [setInstanceSentimentRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof AnnotationApi
+     */
+    public annotationAnnotationIdInstanceIdSentimentPut(annotationId: string, instanceId: string, setInstanceSentimentRequest?: SetInstanceSentimentRequest, options?: AxiosRequestConfig) {
+        return AnnotationApiFp(this.configuration).annotationAnnotationIdInstanceIdSentimentPut(annotationId, instanceId, setInstanceSentimentRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} annotationId 
+     * @param {AddNoteToAnnotationRequest} [addNoteToAnnotationRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof AnnotationApi
+     */
+    public annotationAnnotationIdNotePost(annotationId: string, addNoteToAnnotationRequest?: AddNoteToAnnotationRequest, options?: AxiosRequestConfig) {
+        return AnnotationApiFp(this.configuration).annotationAnnotationIdNotePost(annotationId, addNoteToAnnotationRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
     /**
      * 
      * @param {string} annotationId 
@@ -1175,6 +1663,19 @@ export class AnnotationApi extends BaseAPI {
         return AnnotationApiFp(this.configuration).annotationAnnotationIdPost(annotationId, annotationInstanceAddRequest, options).then((request) => request(this.axios, this.basePath));
     }
 
+    /**
+     * 
+     * @param {string} annotationId 
+     * @param {string} occurenceId 
+     * @param {AddNoteToTagOccurenceRequest} [addNoteToTagOccurenceRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof AnnotationApi
+     */
+    public annotationAnnotationIdTagOccurenceIdNotePost(annotationId: string, occurenceId: string, addNoteToTagOccurenceRequest?: AddNoteToTagOccurenceRequest, options?: AxiosRequestConfig) {
+        return AnnotationApiFp(this.configuration).annotationAnnotationIdTagOccurenceIdNotePost(annotationId, occurenceId, addNoteToTagOccurenceRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
     /**
      * 
      * @param {AnnotationsAddRequest} [annotationsAddRequest] 
@@ -1407,6 +1908,39 @@ export class AuthApi extends BaseAPI {
  */
 export const DocumentApiAxiosParamCreator = function (configuration?: Configuration) {
     return {
+        /**
+         * 
+         * @param {string} documentId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        documentDocumentIdGet: async (documentId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'documentId' is not null or undefined
+            assertParamExists('documentDocumentIdGet', 'documentId', documentId)
+            const localVarPath = `/document/{documentId}`
+                .replace(`{${"documentId"}}`, encodeURIComponent(String(documentId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
         /**
          * 
          * @param {number} [pageIndex] 
@@ -1584,6 +2118,16 @@ export const DocumentApiAxiosParamCreator = function (configuration?: Configurat
 export const DocumentApiFp = function(configuration?: Configuration) {
     const localVarAxiosParamCreator = DocumentApiAxiosParamCreator(configuration)
     return {
+        /**
+         * 
+         * @param {string} documentId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async documentDocumentIdGet(documentId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<DocumentPreviewResponse>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.documentDocumentIdGet(documentId, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
         /**
          * 
          * @param {number} [pageIndex] 
@@ -1644,6 +2188,15 @@ export const DocumentApiFp = function(configuration?: Configuration) {
 export const DocumentApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
     const localVarFp = DocumentApiFp(configuration)
     return {
+        /**
+         * 
+         * @param {string} documentId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        documentDocumentIdGet(documentId: string, options?: any): AxiosPromise<DocumentPreviewResponse> {
+            return localVarFp.documentDocumentIdGet(documentId, options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @param {number} [pageIndex] 
@@ -1699,6 +2252,17 @@ export const DocumentApiFactory = function (configuration?: Configuration, baseP
  * @extends {BaseAPI}
  */
 export class DocumentApi extends BaseAPI {
+    /**
+     * 
+     * @param {string} documentId 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof DocumentApi
+     */
+    public documentDocumentIdGet(documentId: string, options?: AxiosRequestConfig) {
+        return DocumentApiFp(this.configuration).documentDocumentIdGet(documentId, options).then((request) => request(this.axios, this.basePath));
+    }
+
     /**
      * 
      * @param {number} [pageIndex] 
@@ -1764,11 +2328,12 @@ export const TagApiAxiosParamCreator = function (configuration?: Configuration)
     return {
         /**
          * 
+         * @param {CreateCategoryRequest} [createCategoryRequest] 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        tagsGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/tags`;
+        categoriesPost: async (createCategoryRequest?: CreateCategoryRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/categories`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
             let baseOptions;
@@ -1776,39 +2341,440 @@ export const TagApiAxiosParamCreator = function (configuration?: Configuration)
                 baseOptions = configuration.baseOptions;
             }
 
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
             const localVarHeaderParameter = {} as any;
             const localVarQueryParameter = {} as any;
 
 
     
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
             setSearchParams(localVarUrlObj, localVarQueryParameter);
             let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
             localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(createCategoryRequest, localVarRequestOptions, configuration)
 
             return {
                 url: toPathString(localVarUrlObj),
                 options: localVarRequestOptions,
             };
         },
-    }
-};
-
-/**
- * TagApi - functional programming interface
- * @export
- */
-export const TagApiFp = function(configuration?: Configuration) {
-    const localVarAxiosParamCreator = TagApiAxiosParamCreator(configuration)
-    return {
         /**
          * 
+         * @param {string} categoryId 
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async tagsGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TagTreeResponse>> {
-            const localVarAxiosArgs = await localVarAxiosParamCreator.tagsGet(options);
-            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        categoryCategoryIdDelete: async (categoryId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'categoryId' is not null or undefined
+            assertParamExists('categoryCategoryIdDelete', 'categoryId', categoryId)
+            const localVarPath = `/category/{categoryId}`
+                .replace(`{${"categoryId"}}`, encodeURIComponent(String(categoryId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} categoryId 
+         * @param {ModifyCategoryRequest} [modifyCategoryRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        categoryCategoryIdPut: async (categoryId: string, modifyCategoryRequest?: ModifyCategoryRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'categoryId' is not null or undefined
+            assertParamExists('categoryCategoryIdPut', 'categoryId', categoryId)
+            const localVarPath = `/category/{categoryId}`
+                .replace(`{${"categoryId"}}`, encodeURIComponent(String(categoryId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(modifyCategoryRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagSubtagIdDelete: async (subtagId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'subtagId' is not null or undefined
+            assertParamExists('subtagSubtagIdDelete', 'subtagId', subtagId)
+            const localVarPath = `/subtag/{subtagId}`
+                .replace(`{${"subtagId"}}`, encodeURIComponent(String(subtagId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {ModifySubTagRequest} [modifySubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagSubtagIdPut: async (subtagId: string, modifySubTagRequest?: ModifySubTagRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'subtagId' is not null or undefined
+            assertParamExists('subtagSubtagIdPut', 'subtagId', subtagId)
+            const localVarPath = `/subtag/{subtagId}`
+                .replace(`{${"subtagId"}}`, encodeURIComponent(String(subtagId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(modifySubTagRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {CreateSubTagRequest} [createSubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagsPost: async (createSubTagRequest?: CreateSubTagRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/subtags`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(createSubTagRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagTagIdDelete: async (tagId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'tagId' is not null or undefined
+            assertParamExists('tagTagIdDelete', 'tagId', tagId)
+            const localVarPath = `/tag/{tagId}`
+                .replace(`{${"tagId"}}`, encodeURIComponent(String(tagId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {ModifyTagRequest} [modifyTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagTagIdPut: async (tagId: string, modifyTagRequest?: ModifyTagRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            // verify required parameter 'tagId' is not null or undefined
+            assertParamExists('tagTagIdPut', 'tagId', tagId)
+            const localVarPath = `/tag/{tagId}`
+                .replace(`{${"tagId"}}`, encodeURIComponent(String(tagId)));
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(modifyTagRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagsGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/tags`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
+         * @param {CreateTagRequest} [createTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagsPost: async (createTagRequest?: CreateTagRequest, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/tags`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+
+            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+
+    
+            localVarHeaderParameter['Content-Type'] = 'application/json';
+
+            setSearchParams(localVarUrlObj, localVarQueryParameter);
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            localVarRequestOptions.data = serializeDataIfNeeded(createTagRequest, localVarRequestOptions, configuration)
+
+            return {
+                url: toPathString(localVarUrlObj),
+                options: localVarRequestOptions,
+            };
+        },
+    }
+};
+
+/**
+ * TagApi - functional programming interface
+ * @export
+ */
+export const TagApiFp = function(configuration?: Configuration) {
+    const localVarAxiosParamCreator = TagApiAxiosParamCreator(configuration)
+    return {
+        /**
+         * 
+         * @param {CreateCategoryRequest} [createCategoryRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async categoriesPost(createCategoryRequest?: CreateCategoryRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.categoriesPost(createCategoryRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} categoryId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async categoryCategoryIdDelete(categoryId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.categoryCategoryIdDelete(categoryId, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} categoryId 
+         * @param {ModifyCategoryRequest} [modifyCategoryRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async categoryCategoryIdPut(categoryId: string, modifyCategoryRequest?: ModifyCategoryRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.categoryCategoryIdPut(categoryId, modifyCategoryRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async subtagSubtagIdDelete(subtagId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.subtagSubtagIdDelete(subtagId, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {ModifySubTagRequest} [modifySubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async subtagSubtagIdPut(subtagId: string, modifySubTagRequest?: ModifySubTagRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.subtagSubtagIdPut(subtagId, modifySubTagRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {CreateSubTagRequest} [createSubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async subtagsPost(createSubTagRequest?: CreateSubTagRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.subtagsPost(createSubTagRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async tagTagIdDelete(tagId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.tagTagIdDelete(tagId, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {ModifyTagRequest} [modifyTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async tagTagIdPut(tagId: string, modifyTagRequest?: ModifyTagRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.tagTagIdPut(tagId, modifyTagRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async tagsGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<TagTreeResponse>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.tagsGet(options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
+        },
+        /**
+         * 
+         * @param {CreateTagRequest} [createTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async tagsPost(createTagRequest?: CreateTagRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
+            const localVarAxiosArgs = await localVarAxiosParamCreator.tagsPost(createTagRequest, options);
+            return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
         },
     }
 };
@@ -1820,6 +2786,81 @@ export const TagApiFp = function(configuration?: Configuration) {
 export const TagApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
     const localVarFp = TagApiFp(configuration)
     return {
+        /**
+         * 
+         * @param {CreateCategoryRequest} [createCategoryRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        categoriesPost(createCategoryRequest?: CreateCategoryRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.categoriesPost(createCategoryRequest, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} categoryId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        categoryCategoryIdDelete(categoryId: string, options?: any): AxiosPromise<void> {
+            return localVarFp.categoryCategoryIdDelete(categoryId, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} categoryId 
+         * @param {ModifyCategoryRequest} [modifyCategoryRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        categoryCategoryIdPut(categoryId: string, modifyCategoryRequest?: ModifyCategoryRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.categoryCategoryIdPut(categoryId, modifyCategoryRequest, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagSubtagIdDelete(subtagId: string, options?: any): AxiosPromise<void> {
+            return localVarFp.subtagSubtagIdDelete(subtagId, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} subtagId 
+         * @param {ModifySubTagRequest} [modifySubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagSubtagIdPut(subtagId: string, modifySubTagRequest?: ModifySubTagRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.subtagSubtagIdPut(subtagId, modifySubTagRequest, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {CreateSubTagRequest} [createSubTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        subtagsPost(createSubTagRequest?: CreateSubTagRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.subtagsPost(createSubTagRequest, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagTagIdDelete(tagId: string, options?: any): AxiosPromise<void> {
+            return localVarFp.tagTagIdDelete(tagId, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
+         * @param {string} tagId 
+         * @param {ModifyTagRequest} [modifyTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagTagIdPut(tagId: string, modifyTagRequest?: ModifyTagRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.tagTagIdPut(tagId, modifyTagRequest, options).then((request) => request(axios, basePath));
+        },
         /**
          * 
          * @param {*} [options] Override http request option.
@@ -1828,6 +2869,15 @@ export const TagApiFactory = function (configuration?: Configuration, basePath?:
         tagsGet(options?: any): AxiosPromise<TagTreeResponse> {
             return localVarFp.tagsGet(options).then((request) => request(axios, basePath));
         },
+        /**
+         * 
+         * @param {CreateTagRequest} [createTagRequest] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        tagsPost(createTagRequest?: CreateTagRequest, options?: any): AxiosPromise<void> {
+            return localVarFp.tagsPost(createTagRequest, options).then((request) => request(axios, basePath));
+        },
     };
 };
 
@@ -1838,6 +2888,97 @@ export const TagApiFactory = function (configuration?: Configuration, basePath?:
  * @extends {BaseAPI}
  */
 export class TagApi extends BaseAPI {
+    /**
+     * 
+     * @param {CreateCategoryRequest} [createCategoryRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public categoriesPost(createCategoryRequest?: CreateCategoryRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).categoriesPost(createCategoryRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} categoryId 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public categoryCategoryIdDelete(categoryId: string, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).categoryCategoryIdDelete(categoryId, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} categoryId 
+     * @param {ModifyCategoryRequest} [modifyCategoryRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public categoryCategoryIdPut(categoryId: string, modifyCategoryRequest?: ModifyCategoryRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).categoryCategoryIdPut(categoryId, modifyCategoryRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} subtagId 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public subtagSubtagIdDelete(subtagId: string, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).subtagSubtagIdDelete(subtagId, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} subtagId 
+     * @param {ModifySubTagRequest} [modifySubTagRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public subtagSubtagIdPut(subtagId: string, modifySubTagRequest?: ModifySubTagRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).subtagSubtagIdPut(subtagId, modifySubTagRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {CreateSubTagRequest} [createSubTagRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public subtagsPost(createSubTagRequest?: CreateSubTagRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).subtagsPost(createSubTagRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} tagId 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public tagTagIdDelete(tagId: string, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).tagTagIdDelete(tagId, options).then((request) => request(this.axios, this.basePath));
+    }
+
+    /**
+     * 
+     * @param {string} tagId 
+     * @param {ModifyTagRequest} [modifyTagRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public tagTagIdPut(tagId: string, modifyTagRequest?: ModifyTagRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).tagTagIdPut(tagId, modifyTagRequest, options).then((request) => request(this.axios, this.basePath));
+    }
+
     /**
      * 
      * @param {*} [options] Override http request option.
@@ -1847,6 +2988,17 @@ export class TagApi extends BaseAPI {
     public tagsGet(options?: AxiosRequestConfig) {
         return TagApiFp(this.configuration).tagsGet(options).then((request) => request(this.axios, this.basePath));
     }
+
+    /**
+     * 
+     * @param {CreateTagRequest} [createTagRequest] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof TagApi
+     */
+    public tagsPost(createTagRequest?: CreateTagRequest, options?: AxiosRequestConfig) {
+        return TagApiFp(this.configuration).tagsPost(createTagRequest, options).then((request) => request(this.axios, this.basePath));
+    }
 }
 
 
diff --git a/webapp/pages/documents/admin/index.tsx b/webapp/pages/documents/admin/index.tsx
index 5742a2d..710747c 100644
--- a/webapp/pages/documents/admin/index.tsx
+++ b/webapp/pages/documents/admin/index.tsx
@@ -44,7 +44,7 @@ function AdminDocumentPage() {
 
     const [documents, setDocuments] = useState<TableDocInfo[]>([]);
     const [userFilters, setUserFilters] = useState<UserFilter[]>([]);
-    const [selectedDocs, setSelectedDocs] = useState<string[] | undefined[]>([]);
+    const [selectedDocs, setSelectedDocs] = useState<string[]>([]);
     const [previewDocContent, setPreviewDocContent] = useState<string>();
     const [previewDocName, setPreviewDocName] = useState<string>();
 
@@ -269,8 +269,8 @@ function AdminDocumentPage() {
                     documentName={previewDocName ?? ''}
                     content={
                         previewDocContent ?? 'Nastala chyba při načítání obsahu dokumentu'
-                    } 
-                /> 
+                    }
+                />
             )}
             {visibleSetCount && (
                 <SetRequiredAnnotationsCountModal
diff --git a/webapp/pages/documents/annotator/index.tsx b/webapp/pages/documents/annotator/index.tsx
index 12a4f50..40a56aa 100644
--- a/webapp/pages/documents/annotator/index.tsx
+++ b/webapp/pages/documents/annotator/index.tsx
@@ -56,7 +56,7 @@ function UserDocumentPage() {
             title: 'Stav anotace',
             key: 'state',
             dataIndex: 'state',
-            render: (state: string) => {
+            render: (state: EState) => {
                 const color = getAnnotationStateColor(state);
                 const label = getAnnotationStateString(state);
                 let icon = <CheckCircleOutlined />;
@@ -65,7 +65,7 @@ function UserDocumentPage() {
                 }
                 if (state === 'IN_PROGRESS') {
                     icon = <SyncOutlined />;
-                }              
+                }
 
                 return (
                     <Tag icon={icon} color={color} key={label}>
