010  
Общее описание таблиц MongoDB
011  
012  
MyBPM создаёт в MongoDB несколько баз данных:
013  
014  
015  - 
016  
mybpm - содержит коллекции, в которых хранится
017  структурная информация. Данных для бизнеса тут нет, за некоторыми
018  исключениями.
019   
020  
021  - 
022  
mybpm_boi - здесь хранятся инстанции
023  бизнес-объектов (последние значения полей и мета-информация). В
024  этой БД есть коллекции, которые начинаются на boi_ а
025  дальше идёт идентификатор бизнес-объекта, который находиться в
026  коллекции mybpm.Bo.
027   
028  
029  - 
030  
mybpm_aux - тут хранятся всякие временные
031  данные.
032   
033  
034  - 
035  
mybpm_chat - здесь хранятся сообщения
036  чатов.
037   
038  
039  - 
040  
mybpm_event - тут находиться история изменений
041  инстанций бизнес-объектов подготовленная для отображении на
042  клиенте.
043   
044  
045  - 
046  
mybpm_process - здесь находятся данные о
047  состоянии бизнес-процессов. Какие шаги пройдены, а какие ещё
048  нет.
049   
050  
051  - 
052  
mybpm_sessions - здесь хранятся сессии
053  пользователей, и ключи защиты сессий.
054   
055  
056  - 
057  
mybpm_files - здесь хранятся файлы системы.
058   
059  
060  
061  
Коллекции в базе данных mybpm
062  
063  
064  
065  
066  | Коллекция | 
067  Описание | 
068  
069  
070  
071  
072  
073  | Bo | 
074  Хранит структуру бизнес-объектов. Так же здесь храниться
075  структура полей БО | 
076  
077  
078  
079  | BoGroup | 
080  Группы бизнес-объектов | 
081  
082  
083  
084  | BoiInMigrationRef | 
086  Связи инстанций БО с внешними идентификаторами БО при входящей
087  миграции из PostgreSQL | 
088  
089  
090  
091  | BoProcess | 
092  Структура процессов (квадратики и стрелочки между ними) | 
093  
094  
095  
096  | BoProcessVersions | 
098  Версии структур процессов по каждому БО процесса | 
099  
100  
101  
102  | BracketFilter | 
103  Фильтры для меню слева | 
104  
105  
106  
107  | BracketPersonFilter | 
109  Фильтры | 
110  
111  
112  
113  | CompanyDto | 
114  Компания (аккаунт) | 
115  
116  
117  
118  | Department | 
119  Департаменты | 
120  
121  
122  
123  | LiquidMongoUpdateDto | 
125  Одноразовые задачи, и признак их применения (аналог liquibase
126  но для MongoDB) | 
127  
128  
129  
130  | MainMenuDto | 
131  Меню слева | 
132  
133  
134  
135  | Person | 
136  Пользователи в систему. Через них происходит аутентификация и
137  авторизация | 
138  
139  
140  
141  | PersonGroupLink | 
142  Связи многие-ко-многим между пользователями и рабочими
143  группами | 
144  
145  
146  
147  | PersonSearch | 
148  Информация о поиске пользователей | 
149  
150  
151  
152  | ReportGroup | 
153  Группы отчётов | 
154  
155  
156  
157  | ScriptModule | 
158  Модули скриптов (их структура - блоки и выражения связанные
159  между собой) | 
160  
161  
162  
163  | SignatureNcaValidation | 
165  Подписи | 
166  
167  
168  
169  | SystemSettings | 
170  Системные настройки | 
171  
172  
173  
174  | Token | 
175  Токены пользователей для АПИ (API_TOKEN) | 
176  
177  
178  
179  | TouchedBoi | 
180  Инстанции БО, которые подверглись воздействию | 
181  
182  
183  
184  
185  
Коллекции в базе данных mybpm_aux
186  
187  
188  
189  
190  | Коллекция | 
191  Описание | 
192  
193  
194  
195  
196  
197  | AdminInvitation | 
198  Подтверждение email для администраторов | 
199  
200  
201  
202  | BoiDraft | 
203  Черновик изменения инстанций БО при ручном редактировании | 
204  
205  
206  
207  | BoImportError | 
208  Ошибки импорта данные через xlsx | 
209  
210  
211  
212  | BoImportInstance | 
213  Про-импортированные, но ещё не применённые, инстанции БО | 
214  
215  
216  
217  | Certificate | 
218  Сертификаты для подписей | 
219  
220  
221  
222  | EmailVerifyInvitation | 
224  Подтверждения email для обычных пользователей | 
225  
226  
227  
228  | GoProcess | 
229  Очередь на исполнение (Go) процесса | 
230  
231  
232  
233  | GoProcessError | 
234  Ошибки исполнения процессов | 
235  
236  
237  
238  | GoProcessGrouped | 
239  Сгруппированная по идентификатору инстанции БО очередь на
240  исполнение процессов | 
241  
242  
243  
244  | LockTask | 
245  Коллекция для осуществления блокировки задач | 
246  
247  
248  
249  | MobileVerify | 
250  Сообщения для различных подтверждений пользователя через смс
251  или почту по сгенерированному коду | 
252  
253  
254  
255  | PersonInvitation | 
256  Регистрационное приглашение пользователя | 
257  
258  
259  
260  | PersonPassword | 
261  Список паролей пользователя | 
262  
263  
264  
265  | ReportCoViewStruct | 
267  Структура вьюшки для ЦО. Её нужно отслеживать чтобы можно было
268  менять без ошибок со стороны PostgreSQL - он позволяет добавлять
269  поля в конец, но удалять и менять местами поля вьюшки нельзя. | 
270  
271  
272  
273  | ScriptModuleJar_1 | 
274  Место где хранятся откомпилированные модули, которые являются
275  jar-файлами | 
276  
277  
278  
279  | UndoLog | 
280  Ссылочная информация о журнала действий пользователя для
281  Ctrl+Z | 
282  
283  
284  
285  | UndoLogPage | 
286  Журнал запоминания действий пользователя при редактировании
287  скриптов разбитый по страницам | 
288  
289  
290  
291  | UserNotificationRow | 
293  Оповещение пользователям | 
294  
295  
296  
297  
298  
Коллекции в базе данных mybpm_boi
299  
300  
В этой БД лежат коллекции, которые начинаются на
301  boi_. Дальше идёт идентификатор БО. В этих коллекциях
302  лежат данные по инстанциям БО - это основная база данных, где
303  хранятся данные инстанций БО.
304  
305  
Коллекции в базе данных mybpm_process
306  
307  
Здесь хранятся данные по исполнению процессов. А именно шаги
308  исполнения. Какой процесс на каком месте исполняется.
309  
310  
В этой БД лежат коллекции, которые начинаются на
311  bo_process_. Дальше идёт идентификатор из таблицы
312  mybpm.BoProcess.
313  
314  
Коллекции в базе данных mybpm_files
315  
316  
Здесь используется механизм хранения файлов, которые подготовили
317  разработчики MongoDB. Называется она GridFS. Про неё можно
318  прочитать здесь: https://www.mongodb.com/docs/manual/core/gridfs/
320  
321  
Коллекции в базе данных
322  mybpm_sessions
323  
324  
Здесь хранится информация о сессиях работы пользователей в
325  системы.
326  
327  
В коллекции cryptoKeys хранятся ключи шифрования идентификаторов
328  сессии, которые нужны для того, чтобы нельзя было подсунуть
329  инородный идентификатор сессии. Эту коллекцию можно зачистить, и
330  тогда пользователи все вылетят из текущего сеанса работы. Система
331  автоматически создаст новые ключи шифрования. Пользователям нужно
332  будет ещё раз пройти процесс входа в систему.
333  
334  
В таблице sessionStorage хранится информация по сеансам работы
335  пользователе. Эту таблицу можно удалить, и тогда пользователям
336  придётся опять пройти процесс входа в систему.
337  
338  
Коллекции в базе данных mybpm_chat
339  
340  
341  
342  
343  | Коллекция | 
344  Описание | 
345  
346  
347  
348  
349  
350  | ChatMessagePage | 
351  Сообщения чата в соответствующей комнате, разбитые по
352  страницам, для возможности точечного доступа | 
353  
354  
355  
356  | ChatRoom | 
357  Комнаты чатов. Обычно чаты парные (два собеседника в одном
358  чате). Но есть возможность использовать многопользовательские
359  чаты | 
360  
361  
362  
363  
364  
Коллекции в базе данных mybpm_event
365  
366  
BoiEventKafkaIdDto - данная коллекция содержит те
367  идентификаторы сообщений из кафки, которые были обработаны. Это
368  нужно, чтобы одно изменение не было учтено дважды. Кафка не
369  гарантирует одиночную обработку сообщений - иногда она может быть
370  обработана дважды.
371  
372  
boi_current_(boiId) - данные коллекции начинаются
373  на boi_current_ и заканчиваются идентификатором БО. В
374  этой коллекции скапливаются старые и новые значения полей. Это
375  нужно чтобы достоверно сгенерировать событие изменения поля со
376  старым\ и новым значением.
377  
378  
event_(boiId) - данные коллекции начинаются на
379  event_ и заканчиваются идентификатором БО. В этой
380  коллекции хранятся изменения по инстанции БО. Они разбиты на
381  страницы, чтобы можно было их загружать на клиента в режиме доступа
382  по одному идентификатору. В коллекции boi_current_...
383  храниться идентификатор первой страницы. А в первой странице, кроме
384  списка изменений, храниться ещё идентификатор следующей страницы. И
385  так можно загружать историю изменений вниз сколько нужно.
386  
387  
Отображение коллекций в Dto-классы
388  
389  
В системе для каждой коллекции существует Dto-класс, через
390  который происходит работа с этой коллекцией. Общая логика
391  ассоциации коллекции с Dto-классом осуществляется так:
392  
393  
Берётся имя коллекции, например Person. Дальше к ней добавляется
394  окончание Dto и получаем PersonDto и это значит, что существует
395  класс PersonDto, через который происходит работа с коллекцией из
396  Java. В этом классе описаны все поля и их предназначения.
397  
398  
Ассоциация эта происходит в классе MongoAccess.
399  
 
400  
401  
	at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:80)
	at kz.greetgo.md_reader.core.MdConverter.prepareHtmlFileFrom(MdConverter.java:136)
	at kz.greetgo.md_reader.core.MdConverter.convert(MdConverter.java:208)
	at kz.greetgo.md_reader.controller.RenderController.downloadToc(RenderController.java:360)
	at kz.greetgo.md_reader.controller.RenderController.request(RenderController.java:108)
	at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at kz.greetgo.md_reader.interceptors.TextReplaceFilter.doFilter(TextReplaceFilter.java:36)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.IOException: Server returned HTTP response code: 429 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:2000)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1589)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1397)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1333)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.startPE(XMLDTDScannerImpl.java:732)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.skipSeparator(XMLDTDScannerImpl.java:2101)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:2064)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDExternalSubset(XMLDTDScannerImpl.java:299)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1165)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
	at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122)
	at kz.greetgo.md_reader.util.MdUtil.xmlTextToDoc(MdUtil.java:71)
	... 48 more