├── .gitignore ├── LICENSE ├── README.md └── qirk-parent ├── deployment ├── log4j2.xml └── qirk.example.properties ├── pom.xml ├── qirk-chat-parent ├── pom.xml ├── qirk-chat-model │ ├── diagram │ │ └── maria │ │ │ └── entity_diagram.uxf │ ├── mysql │ │ ├── _initial.sql │ │ ├── alter-2.0.0-1.sql │ │ ├── alter-2.0.0-2.sql │ │ └── alter-2.0.0-3.sql │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── chat │ │ └── model │ │ └── sql │ │ ├── BaseAttachedChatMessage.class │ │ ├── BaseAttachedChatMessage.java │ │ ├── BaseAttachedChatMessage_.class │ │ ├── BaseAttachedChatMessage_.java │ │ ├── BaseChatMessage.class │ │ ├── BaseChatMessage.java │ │ ├── BaseChatMessage_.class │ │ ├── BaseChatMessage_.java │ │ ├── DialogMessage.class │ │ ├── DialogMessage.java │ │ ├── DialogMessage_.class │ │ ├── DialogMessage_.java │ │ ├── IssueMessage.class │ │ ├── IssueMessage.java │ │ ├── IssueMessage_.class │ │ ├── IssueMessage_.java │ │ ├── ProjectMessage.class │ │ ├── ProjectMessage.java │ │ ├── ProjectMessage_.class │ │ ├── ProjectMessage_.java │ │ ├── TaskMessage.class │ │ ├── TaskMessage.java │ │ ├── TaskMessage_.class │ │ └── TaskMessage_.java ├── qirk-chat-repo │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── chat │ │ │ └── repo │ │ │ └── sql │ │ │ ├── BaseAttachedChatMessageRepo.class │ │ │ ├── BaseAttachedChatMessageRepo.java │ │ │ ├── BaseChatMessageRepo.class │ │ │ ├── BaseChatMessageRepo.java │ │ │ ├── BaseChatRepo.class │ │ │ ├── BaseChatRepo.java │ │ │ ├── MariaDBChatDatabaseRepo.class │ │ │ ├── MariaDBDialogMessageRepo.class │ │ │ ├── MariaDBIssueMessageRepo.class │ │ │ ├── MariaDBProjectMessageRepo.class │ │ │ ├── MariaDBTaskMessageRepo.class │ │ │ ├── SQLChatDatabaseRepo.java │ │ │ ├── SQLDialogMessageRepo.java │ │ │ ├── SQLIssueMessageRepo.java │ │ │ ├── SQLProjectMessageRepo.java │ │ │ └── SQLTaskMessageRepo.java │ │ └── resources │ │ └── qirk-chat-repo-persistence-ctx.xml ├── qirk-chat-services-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── chat │ │ └── services │ │ ├── ChatService.class │ │ ├── ChatService.java │ │ ├── DialogChatService.class │ │ ├── DialogChatService.java │ │ ├── IssueChatService.class │ │ ├── IssueChatService.java │ │ ├── ProjectChatService.class │ │ ├── ProjectChatService.java │ │ ├── TaskChatService.class │ │ ├── TaskChatService.java │ │ ├── dto │ │ ├── ChatDTO.class │ │ ├── ChatDTO.java │ │ ├── ChatWithLastMessageDTO.class │ │ ├── ChatWithLastMessageDTO.java │ │ ├── ExternalUuidDTO.class │ │ ├── ExternalUuidDTO.java │ │ ├── MessageDTO.class │ │ └── MessageDTO.java │ │ ├── jms │ │ ├── MQDestination.class │ │ └── MQDestination.java │ │ ├── security │ │ ├── SecurityService.class │ │ └── SecurityService.java │ │ └── util │ │ └── json │ │ ├── JsonContainer_.class │ │ ├── JsonContainer_.java │ │ ├── JsonStatusCode.class │ │ └── JsonStatusCode.java ├── qirk-chat-services │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── chat │ │ │ └── services │ │ │ ├── DefaultChatService.class │ │ │ ├── DefaultChatService.java │ │ │ ├── DefaultDialogChatService.class │ │ │ ├── DefaultDialogChatService.java │ │ │ ├── DefaultIssueTaskChatService.class │ │ │ ├── DefaultIssueTaskChatService.java │ │ │ ├── DefaultProjectChatService.class │ │ │ ├── DefaultProjectChatService.java │ │ │ ├── DefaultTaskChatService.class │ │ │ ├── DefaultTaskChatService.java │ │ │ ├── jms │ │ │ ├── ChatListener.class │ │ │ ├── ChatListener.java │ │ │ ├── DialogChatListener.class │ │ │ ├── DialogChatListener.java │ │ │ ├── DialogChatSender.class │ │ │ ├── DialogChatSender.java │ │ │ ├── IssueChatListener.class │ │ │ ├── IssueChatListener.java │ │ │ ├── IssueChatSender.class │ │ │ ├── IssueChatSender.java │ │ │ ├── ProjectChatListener.class │ │ │ ├── ProjectChatListener.java │ │ │ ├── ProjectChatSender.class │ │ │ ├── ProjectChatSender.java │ │ │ ├── TaskChatListener.class │ │ │ ├── TaskChatListener.java │ │ │ ├── TaskChatSender.class │ │ │ └── TaskChatSender.java │ │ │ ├── scheduling │ │ │ ├── SelfCheckJobService.class │ │ │ └── SelfCheckJobService.java │ │ │ ├── security │ │ │ ├── DefaultSecurityService.class │ │ │ └── DefaultSecurityService.java │ │ │ └── sql │ │ │ ├── MariaDBAttachedChatService.class │ │ │ ├── MariaDBChatService.class │ │ │ ├── MariaDBDialogChatService.class │ │ │ ├── MariaDBIssueChatService.class │ │ │ ├── MariaDBProjectChatService.class │ │ │ ├── MariaDBTaskChatService.class │ │ │ ├── SQLAttachedChatService.java │ │ │ ├── SQLChatService.java │ │ │ ├── SQLDialogChatService.java │ │ │ ├── SQLIssueChatService.java │ │ │ ├── SQLProjectChatService.java │ │ │ └── SQLTaskChatService.java │ │ └── resources │ │ ├── qirk-chat-services-ctx.xml │ │ └── qirk-chat-services-jms-ctx.xml └── qirk-chat-web │ ├── docs │ ├── API.txt │ └── status_code.txt │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── chat │ │ └── web │ │ ├── controller │ │ ├── ChatWebSocketController.class │ │ ├── ChatWebSocketController.java │ │ ├── ChatWebSocketControllerStub.class │ │ ├── ChatWebSocketControllerStub.java │ │ ├── HeartbeatController.class │ │ └── HeartbeatController.java │ │ └── json │ │ ├── JsonContainer.class │ │ └── JsonContainer.java │ ├── resources │ ├── qirk-chat-web-config.xml │ ├── qirk-chat-web-ctx.xml │ └── qirk-chat-web-root-ctx.xml │ └── webapp │ └── WEB-INF │ └── web.xml ├── qirk-common ├── pom.xml ├── qirk-common-crypto │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── crypto │ │ ├── HashEncoder.java │ │ ├── TokenGenerator.java │ │ ├── dto │ │ └── TokenAndIvDTO.java │ │ └── token │ │ ├── chat │ │ ├── ChatTokenData.java │ │ ├── SecurityTokenData.java │ │ └── TaskChatTokenData.java │ │ └── notification │ │ ├── NotificationSettingsTokenData.java │ │ └── NotificationTokenData.java ├── qirk-common-deps-amazonaws │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── amazonaws │ │ ├── AmazonS3ClientFactory.class │ │ └── AmazonS3ClientFactory.java ├── qirk-common-deps-elasticsearch │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── elasticsearch │ │ └── ElasticsearchClientFactory.java ├── qirk-common-deps-httpclient │ └── pom.xml ├── qirk-common-deps-jackson │ └── pom.xml ├── qirk-common-deps-jms │ └── pom.xml ├── qirk-common-deps-logging │ └── pom.xml ├── qirk-common-deps-sql │ └── pom.xml ├── qirk-common-jdbc │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── jdbc │ │ ├── BaseMapper.java │ │ ├── BaseRepo.java │ │ └── transaction │ │ ├── Executor.java │ │ ├── RetryOnCannotAcquireLock.java │ │ ├── RetryOnCannotSerializeTransaction.java │ │ └── RetryOnDuplicateKey.java ├── qirk-common-jms │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── jms │ │ ├── message │ │ ├── notification │ │ │ ├── BaseNotificationMessage.java │ │ │ ├── BaseTaskNotificationMessage.java │ │ │ ├── TaskCommentMessage.java │ │ │ ├── TaskMessage.java │ │ │ └── TaskUpdateNotificationMessage.java │ │ └── statistics │ │ │ ├── BaseStatisticsMessage.java │ │ │ ├── NewCommentMessage.java │ │ │ ├── NewMemoMessage.java │ │ │ ├── NewTaskMessage.java │ │ │ ├── ProjectDocUpdateMessage.java │ │ │ └── TaskUpdateStatisticsMessage.java │ │ └── services │ │ ├── DefaultStatisticsSender.java │ │ ├── NotificationSourceSender.java │ │ ├── StatisticsSender.java │ │ ├── StatisticsSenderStub.java │ │ └── TaskLookupSubscribersSender.java ├── qirk-common-mail │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── common │ │ │ └── mail │ │ │ ├── BaseMailService.java │ │ │ ├── DevOpsMailService.java │ │ │ ├── EmailSentDTO.java │ │ │ └── UserMailService.java │ │ └── resources │ │ └── message-templates │ │ ├── default-html-template.vm │ │ ├── non-registered-html-template.vm │ │ ├── password-reset.vm │ │ ├── project-invite.vm │ │ ├── registration.vm │ │ ├── subscription-footer-html-template.vm │ │ ├── task-commented.vm │ │ ├── task-created.vm │ │ ├── task-updated.vm │ │ └── to-devops │ │ └── resource-failed.vm ├── qirk-common-util │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── common │ │ └── util │ │ ├── chat │ │ └── ChatType.java │ │ ├── collections │ │ ├── ExtendedArrayUtils.java │ │ ├── ExtendedCollectionUtils.java │ │ └── MapBuilder.java │ │ ├── datetime │ │ ├── DateTimeUtils.java │ │ └── DateTimeWithEpochDTO.java │ │ ├── io │ │ ├── DeleteOnCloseFileInputStream.java │ │ └── UnclosableInputStreamWrapper.java │ │ ├── strings │ │ ├── CharSet.java │ │ ├── ExtStringUtils.java │ │ ├── HtmlUtils.java │ │ ├── JSONifiable.java │ │ ├── JsonUtils.java │ │ ├── MarkdownUtils.java │ │ ├── RegExpPattern.java │ │ └── jira │ │ │ ├── JiraFormatHTMLUtils.java │ │ │ └── JiraFormatMarkdownUtils.java │ │ └── web │ │ └── FrontURI.java └── qirk-common-validation │ ├── pom.xml │ └── src │ └── main │ └── java │ └── org │ └── wrkr │ └── clb │ └── common │ └── validation │ ├── IdAndUiIdObject.java │ ├── IsLetterOrDigitOrWhitespaceValidator.java │ ├── NotNullIdOrUiIdValidator.java │ ├── constraints │ ├── IsLetterOrDigitOrWhitespace.java │ └── NotNullIdOrUiId.java │ └── groups │ ├── OnCreate.java │ ├── OnCreateBatch.java │ ├── OnCreateByEmail.java │ └── OnUpdate.java ├── qirk-elasticsearch-datasync ├── elasticsearch-scripts │ └── _initial.sh ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── elasticsearch │ │ └── datasync │ │ ├── DataSynchronizer.java │ │ ├── Main.java │ │ ├── config │ │ ├── DataSourceConfig.java │ │ └── ElasticsearchClientConfig.java │ │ ├── factory │ │ └── ElasticsearchClientFactoryBean.java │ │ └── services │ │ └── DatabaseService.java │ └── resources │ ├── datasync.properties │ ├── log4j2.xml │ ├── qirk-datasync-config.xml │ ├── qirk-datasync-persistence-ctx.xml │ ├── qirk-datasync-root-ctx.xml │ └── qirk-datasync-services-ctx.xml ├── qirk-front ├── front │ ├── .env │ ├── .env.development │ ├── .env.production │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.png │ │ └── index.html │ ├── src │ │ ├── actions │ │ │ ├── attachmentActions.ts │ │ │ ├── authActions.ts │ │ │ ├── cacheUsersActions.ts │ │ │ ├── chatActions.ts │ │ │ ├── commonActions.ts │ │ │ ├── inviteActions.ts │ │ │ ├── notificationActions.ts │ │ │ ├── projectActions.ts │ │ │ ├── projectSearchActions.ts │ │ │ ├── roadmapActions.ts │ │ │ ├── snackbarActions.ts │ │ │ ├── taskLinksActions.ts │ │ │ ├── taskSearchActions.ts │ │ │ ├── uiActions.ts │ │ │ ├── userActions.ts │ │ │ └── userSearchActions.ts │ │ ├── assets │ │ │ ├── icons │ │ │ │ ├── ic_arrow_down_v.svg │ │ │ │ ├── ic_spinner_dots.svg │ │ │ │ ├── ic_star_active.svg │ │ │ │ ├── ic_star_unactive.svg │ │ │ │ └── ic_x.svg │ │ │ └── pictures │ │ │ │ └── defaultAvatar.jpg │ │ ├── components │ │ │ ├── AddProjectMemberForm │ │ │ │ └── AddProjectMemberForm.tsx │ │ │ ├── AllProjectTasks │ │ │ │ ├── AllProjectTasks.jsx │ │ │ │ ├── AllProjectTasks.sass │ │ │ │ └── AllProjectTasksItem │ │ │ │ │ ├── AllProjectTaskItem.jsx │ │ │ │ │ └── AllProjectTaskItem.sass │ │ │ ├── App.jsx │ │ │ ├── App.sass │ │ │ ├── Attachments │ │ │ │ ├── Attachments.jsx │ │ │ │ └── Attachments.sass │ │ │ ├── AuthHandler │ │ │ │ ├── AuthHandler.jsx │ │ │ │ ├── AuthHandler.sass │ │ │ │ ├── SignInForm │ │ │ │ │ └── SignInForm.jsx │ │ │ │ └── SignUpForm │ │ │ │ │ └── SignUpForm.jsx │ │ │ ├── BreadCrumbs │ │ │ │ ├── Breadcrumbs-new.sass │ │ │ │ ├── Breadcrumbs.jsx │ │ │ │ └── Crumb │ │ │ │ │ ├── Crumb.jsx │ │ │ │ │ └── Crumb.sass │ │ │ ├── Button │ │ │ │ ├── Button.jsx │ │ │ │ └── Button.sass │ │ │ ├── Chat │ │ │ │ ├── Chat.jsx │ │ │ │ ├── Chat.sass │ │ │ │ └── Message │ │ │ │ │ ├── Message.jsx │ │ │ │ │ └── MessagesList.jsx │ │ │ ├── Checkbox │ │ │ │ ├── Checkbox.jsx │ │ │ │ └── Checkbox.sass │ │ │ ├── ConfirmRegistrationForm │ │ │ │ └── ConfirmRegistrationForm.jsx │ │ │ ├── CreatableChips │ │ │ │ ├── CreatableChips.jsx │ │ │ │ └── CreatableChips.sass │ │ │ ├── CreatableSelect │ │ │ │ ├── CreatableSelect.jsx │ │ │ │ └── CreatableSelect.sass │ │ │ ├── Dashboard │ │ │ │ ├── Dashboard.jsx │ │ │ │ ├── Dashboard.sass │ │ │ │ └── Favorites │ │ │ │ │ ├── Favorite.jsx │ │ │ │ │ ├── Favorite.sass │ │ │ │ │ └── Favorites.jsx │ │ │ ├── ExpandingListScrollNearBottomListener │ │ │ │ └── ExpandingListScrollNearBottomListener.js │ │ │ ├── FavStar │ │ │ │ ├── FavStar.jsx │ │ │ │ └── FavStar.sass │ │ │ ├── Footer │ │ │ │ ├── Footer.jsx │ │ │ │ └── Footer.sass │ │ │ ├── GoBackButton │ │ │ │ └── GoBackButton.jsx │ │ │ ├── HeaderMaterial │ │ │ │ ├── HeaderMaterial.jsx │ │ │ │ └── HeaderMaterial.sass │ │ │ ├── Input │ │ │ │ ├── Input.jsx │ │ │ │ └── Input.sass │ │ │ ├── InputWithValidation │ │ │ │ └── InputWithValidation.jsx │ │ │ ├── ListItem │ │ │ │ ├── ListItem.jsx │ │ │ │ └── ListItem.sass │ │ │ ├── ListItemHeader │ │ │ │ ├── ListItemHeader.jsx │ │ │ │ └── ListItemHeader.sass │ │ │ ├── Loading │ │ │ │ ├── Loading.jsx │ │ │ │ └── Loading.sass │ │ │ ├── LoadingScreen │ │ │ │ ├── LoadingScreen.jsx │ │ │ │ └── LoadingScreen.sass │ │ │ ├── MultiSelect │ │ │ │ └── MultiSelect.jsx │ │ │ ├── NotficationIcon │ │ │ │ └── NotficationIcon.jsx │ │ │ ├── NotificationItem │ │ │ │ ├── NotificationItem.js │ │ │ │ └── NotificationItem.sass │ │ │ ├── NotificationSocketController │ │ │ │ └── NotificationSocketController.js │ │ │ ├── Page │ │ │ │ ├── Page.jsx │ │ │ │ └── Page.sass │ │ │ ├── PathAuthConfirmed │ │ │ │ └── PathAuthConfirmed.jsx │ │ │ ├── PrivateComponent │ │ │ │ └── PrivateComponent.jsx │ │ │ ├── PrivatePage │ │ │ │ └── PrivatePage.jsx │ │ │ ├── ProjectListItem │ │ │ │ ├── ProjectListItem.jsx │ │ │ │ └── ProjectListItem.sass │ │ │ ├── PublicFooter │ │ │ │ └── PublicFooter.jsx │ │ │ ├── RadioInput │ │ │ │ └── RadioInput.jsx │ │ │ ├── Select │ │ │ │ ├── Select.jsx │ │ │ │ └── Select.sass │ │ │ ├── SelectAsync │ │ │ │ └── SelectAsync.jsx │ │ │ ├── SimpleSelect │ │ │ │ └── SimpleSelect.jsx │ │ │ ├── Tag │ │ │ │ └── Tag.jsx │ │ │ ├── TagList │ │ │ │ └── TagList.jsx │ │ │ ├── TagRadioButton │ │ │ │ ├── TagRadioButton.jsx │ │ │ │ └── TagRadioButton.sass │ │ │ ├── TaskLinks │ │ │ │ ├── TaskLinks.jsx │ │ │ │ └── TaskLinks.sass │ │ │ ├── TaskSearch │ │ │ │ ├── TaskSearch.jsx │ │ │ │ └── TaskSearch.sass │ │ │ ├── TaskSearchFetchSelectFilter │ │ │ │ └── TaskSearchFetchSelectFilter.js │ │ │ ├── TaskSearchSelectFilter │ │ │ │ └── TaskSearchSelectFilter.js │ │ │ ├── TaskSearchTextFilter │ │ │ │ └── TaskSearchTextFilter.js │ │ │ ├── TextInput │ │ │ │ └── TextInput.jsx │ │ │ ├── TypableSelectInput │ │ │ │ ├── TypableSelectInput.jsx │ │ │ │ └── TypableSelectInput.sass │ │ │ ├── WithFetch │ │ │ │ └── WithFetch.jsx │ │ │ ├── WithTooltip │ │ │ │ └── WithTooltip.jsx │ │ │ └── constants.sass │ │ ├── i18n.ts │ │ ├── index.tsx │ │ ├── pages │ │ │ ├── AcceptEmailInvite │ │ │ │ └── AcceptEmailInvite.jsx │ │ │ ├── DefaultHomePage │ │ │ │ ├── DefaultHomePage.jsx │ │ │ │ └── DefaultHomePage.sass │ │ │ ├── Error │ │ │ │ └── Error.jsx │ │ │ ├── FavoritesItems │ │ │ │ ├── FavoritesItems.jsx │ │ │ │ └── FavoritesItems.sass │ │ │ ├── Home │ │ │ │ ├── Home.jsx │ │ │ │ ├── Home.sass │ │ │ │ └── SignUpBlock │ │ │ │ │ ├── SignUpBlock.jsx │ │ │ │ │ └── SignUpBlock.sass │ │ │ ├── JiraImport │ │ │ │ ├── ImportStepper.js │ │ │ │ ├── JiraImport.js │ │ │ │ ├── JiraImportMappingPage.js │ │ │ │ ├── UploadListItem.js │ │ │ │ └── steps │ │ │ │ │ ├── MapPriorities.js │ │ │ │ │ ├── MapProjects.js │ │ │ │ │ ├── MapStatuses.js │ │ │ │ │ ├── MapTypes.js │ │ │ │ │ ├── MapUsers.js │ │ │ │ │ └── SelectProjects.js │ │ │ ├── Join │ │ │ │ ├── Join.jsx │ │ │ │ └── Join.sass │ │ │ ├── Login │ │ │ │ ├── Login.jsx │ │ │ │ └── Login.sass │ │ │ ├── MyProfile │ │ │ │ ├── MyProfile.jsx │ │ │ │ ├── MyProfile.sass │ │ │ │ └── PasswordChange │ │ │ │ │ └── PasswordChangeForm.jsx │ │ │ ├── MyProjects │ │ │ │ ├── MyProjects.jsx │ │ │ │ └── MyProjects.sass │ │ │ ├── NotFoundPage │ │ │ │ ├── NotFoundPage.jsx │ │ │ │ └── NotFoundPage.sass │ │ │ ├── ProjectCreate │ │ │ │ └── ProjectCreate.jsx │ │ │ ├── ProjectDiscussion │ │ │ │ └── ProjectDiscussion.jsx │ │ │ ├── ProjectDocumentation │ │ │ │ └── ProjectDocumentation.jsx │ │ │ ├── ProjectDocumentationEdit │ │ │ │ └── ProjectDocumentationEdit.jsx │ │ │ ├── ProjectEdit │ │ │ │ ├── ProjectEdit.jsx │ │ │ │ └── ProjectEdit.sass │ │ │ ├── ProjectMemberEditing │ │ │ │ └── ProjectMemberEditing.jsx │ │ │ ├── ProjectMembersOverview │ │ │ │ ├── ProjectMemberInviteListItem.jsx │ │ │ │ ├── ProjectMemberListItem.jsx │ │ │ │ └── ProjectMembersOverview.jsx │ │ │ ├── ProjectPredefinedPermissionsInviteEdit │ │ │ │ └── ProjectPredefinedPermissionsInviteEdit.jsx │ │ │ ├── ProjectView │ │ │ │ ├── ProjectView.jsx │ │ │ │ └── ProjectView.sass │ │ │ ├── RegisterConfirmation │ │ │ │ └── RegisterConfirmation.js │ │ │ ├── ResetPassword │ │ │ │ ├── ResetPassword.jsx │ │ │ │ └── ResetPassword.sass │ │ │ ├── Roadmap │ │ │ │ └── Roadmap.js │ │ │ ├── TaskContent │ │ │ │ ├── TaskContent.jsx │ │ │ │ └── TaskContent.sass │ │ │ └── TaskCreate │ │ │ │ ├── TaskCreate.jsx │ │ │ │ └── TaskCreate.sass │ │ ├── react-app-env.d.ts │ │ ├── reducers │ │ │ ├── attachmentsReducer.ts │ │ │ ├── authReducer.ts │ │ │ ├── cacheUsersReducer.ts │ │ │ ├── chatReducer.ts │ │ │ ├── favoritesReducer.ts │ │ │ ├── helpForSelectedTaskReducer.ts │ │ │ ├── index.ts │ │ │ ├── inviteReducer.ts │ │ │ ├── notificationReducer.ts │ │ │ ├── projectReducer.ts │ │ │ ├── roadmapReducer.ts │ │ │ ├── taskSearchReducer.ts │ │ │ ├── uiReducer.ts │ │ │ └── userReducer.ts │ │ ├── routes │ │ │ ├── paths.js │ │ │ └── routes.js │ │ ├── translations │ │ │ └── en.json │ │ └── utils │ │ │ ├── axios.ts │ │ │ ├── constants.ts │ │ │ ├── endpoints.ts │ │ │ ├── enums │ │ │ ├── ChatType.ts │ │ │ ├── NotificationType.ts │ │ │ ├── RequestStatus.ts │ │ │ ├── SnackbarType.ts │ │ │ ├── TaskPriority.ts │ │ │ ├── TaskStatus.ts │ │ │ └── TaskType.ts │ │ │ ├── favoriteUtils │ │ │ └── general.ts │ │ │ ├── hooks │ │ │ ├── useInterval.ts │ │ │ ├── useKeyPress.ts │ │ │ ├── useMountEffect.ts │ │ │ └── useOutsideClickListener.ts │ │ │ ├── logging.ts │ │ │ ├── store.ts │ │ │ ├── timeUtils.ts │ │ │ ├── types │ │ │ ├── Action.ts │ │ │ ├── Attachment.ts │ │ │ ├── Card.ts │ │ │ ├── ChatMessage.ts │ │ │ ├── ChatSender.ts │ │ │ ├── Favorite.ts │ │ │ ├── Notification.ts │ │ │ ├── Project.ts │ │ │ ├── ProjectMember.ts │ │ │ ├── Road.ts │ │ │ ├── Snackbar.ts │ │ │ ├── State.ts │ │ │ ├── Task.ts │ │ │ └── User.ts │ │ │ └── variousUtils.ts │ └── tsconfig.json ├── pom.xml └── src │ └── main │ └── webapp │ └── WEB-INF │ └── web.xml ├── qirk-main-parent ├── pom.xml ├── qirk-model │ ├── diagram │ │ ├── deployment_diagram.uxf │ │ └── entity_diagram.uxf │ ├── pom.xml │ ├── psql │ │ ├── _initial-1.sql │ │ ├── _initial-2.sql │ │ ├── auth │ │ │ ├── _initial-1.sql │ │ │ ├── _initial-2.sql │ │ │ └── alter-2.0.0-1.sql │ │ └── test-data.sql │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── model │ │ ├── BaseEntity.java │ │ ├── BaseEntityMeta.java │ │ ├── BaseIdEntity.java │ │ ├── BaseIdEntityMeta.java │ │ ├── BaseVersionedEntityMeta.java │ │ ├── UiIdEntity.java │ │ ├── VersionedIdEntity.java │ │ ├── auth │ │ ├── RememberMeToken.java │ │ └── RememberMeTokenMeta.java │ │ ├── project │ │ ├── ApplicationStatus.java │ │ ├── ApplicationStatusMeta.java │ │ ├── BaseProjectInvite.java │ │ ├── GrantedPermissionsProjectInvite.java │ │ ├── GrantedPermissionsProjectInviteMeta.java │ │ ├── InviteStatus.java │ │ ├── InviteStatusMeta.java │ │ ├── Issue.java │ │ ├── IssueMeta.java │ │ ├── Memo.java │ │ ├── MemoMeta.java │ │ ├── Project.java │ │ ├── ProjectApplication.java │ │ ├── ProjectApplicationMeta.java │ │ ├── ProjectInvite.java │ │ ├── ProjectInviteMeta.java │ │ ├── ProjectInviteToken.java │ │ ├── ProjectInviteTokenMeta.java │ │ ├── ProjectMember.java │ │ ├── ProjectMemberMeta.java │ │ ├── ProjectMeta.java │ │ ├── imprt │ │ │ └── jira │ │ │ │ ├── ImportedJiraProject.java │ │ │ │ ├── ImportedJiraProjectMeta.java │ │ │ │ ├── ImportedJiraTask.java │ │ │ │ ├── ImportedJiraTaskMeta.java │ │ │ │ ├── JiraUpload.java │ │ │ │ └── JiraUploadMeta.java │ │ ├── roadmap │ │ │ ├── Road.java │ │ │ ├── RoadMeta.java │ │ │ ├── TaskCard.java │ │ │ └── TaskCardMeta.java │ │ └── task │ │ │ ├── ProjectTaskNumberSequence.java │ │ │ ├── ProjectTaskNumberSequenceMeta.java │ │ │ ├── Task.java │ │ │ ├── TaskHashtag.java │ │ │ ├── TaskHashtagMeta.java │ │ │ ├── TaskHashtagToTaskMeta.java │ │ │ ├── TaskLink.java │ │ │ ├── TaskLinkMeta.java │ │ │ ├── TaskMeta.java │ │ │ ├── TaskPriority.java │ │ │ ├── TaskPriorityMeta.java │ │ │ ├── TaskStatus.java │ │ │ ├── TaskStatusMeta.java │ │ │ ├── TaskSubscriber.java │ │ │ ├── TaskSubscriberMeta.java │ │ │ ├── TaskType.java │ │ │ ├── TaskTypeMeta.java │ │ │ └── attachment │ │ │ ├── Attachment.java │ │ │ ├── AttachmentMeta.java │ │ │ ├── TemporaryAttachment.java │ │ │ └── TemporaryAttachmentMeta.java │ │ └── user │ │ ├── EmailActivationToken.java │ │ ├── FailedLoginAttempt.java │ │ ├── FailedLoginAttemptMeta.java │ │ ├── LoginStatistics.java │ │ ├── LoginStatisticsMeta.java │ │ ├── NotificationSettings.java │ │ ├── NotificationSettingsMeta.java │ │ ├── PasswordActivationToken.java │ │ ├── PasswordActivationTokenMeta.java │ │ ├── User.java │ │ ├── UserFavorite.java │ │ ├── UserFavoriteMeta.java │ │ └── UserMeta.java ├── qirk-repo │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── repo │ │ │ ├── EnumEntityRepo.java │ │ │ ├── JDBCBaseMainRepo.java │ │ │ ├── JDBCIdEntityRepo.java │ │ │ ├── JPABaseMainRepo.java │ │ │ ├── JPADeletingRepo.java │ │ │ ├── JPAIdEntityRepo.java │ │ │ ├── MainDatabaseRepo.java │ │ │ ├── auth │ │ │ ├── AuthDatabaseRepo.java │ │ │ ├── BaseAuthRepo.java │ │ │ └── RememberMeTokenRepo.java │ │ │ ├── context │ │ │ └── TaskSearchContext.java │ │ │ ├── mapper │ │ │ ├── BaseEntityMapper.java │ │ │ ├── VersionedEntityMapper.java │ │ │ ├── project │ │ │ │ ├── ApplicationStatusMapper.java │ │ │ │ ├── InviteStatusMapper.java │ │ │ │ ├── ProjectDocMapper.java │ │ │ │ ├── ProjectMemberMapper.java │ │ │ │ ├── ProjectMemberWithProjectMapper.java │ │ │ │ ├── ProjectMemberWithUserMapper.java │ │ │ │ ├── ProjectNameAndUiIdMapper.java │ │ │ │ ├── ProjectWithEverythingForReadAndSecurityMembershipMapper.java │ │ │ │ ├── ProjectWithEverythingForReadMapper.java │ │ │ │ ├── ShortProjectMapper.java │ │ │ │ ├── ShortProjectWithSecurityMembershipMapper.java │ │ │ │ ├── imprt │ │ │ │ │ └── jira │ │ │ │ │ │ ├── ImportedJiraProjectMapper.java │ │ │ │ │ │ └── JiraImportTaskMapper.java │ │ │ │ ├── roadmap │ │ │ │ │ ├── MoveRoadMapper.java │ │ │ │ │ ├── MoveTaskCardMapper.java │ │ │ │ │ ├── RoadMapper.java │ │ │ │ │ ├── RoadWithCardsAndTasksMapper.java │ │ │ │ │ ├── TaskCardMapper.java │ │ │ │ │ ├── TaskCardStatusMapper.java │ │ │ │ │ ├── TaskCardWithRoadMapper.java │ │ │ │ │ └── TaskCardWithTaskMapper.java │ │ │ │ └── task │ │ │ │ │ ├── LinkedTaskMapper.java │ │ │ │ │ ├── ShortTaskMapper.java │ │ │ │ │ ├── ShortTaskWithPriorityAndStatusMapper.java │ │ │ │ │ ├── TaskHashtagMapper.java │ │ │ │ │ ├── TaskNumberMapper.java │ │ │ │ │ ├── TaskNumberWithProjectMapper.java │ │ │ │ │ ├── TaskPriorityMapper.java │ │ │ │ │ ├── TaskStatusMapper.java │ │ │ │ │ ├── TaskTypeMapper.java │ │ │ │ │ ├── TaskWithEverythingForCardUpdateMapper.java │ │ │ │ │ ├── TaskWithEverythingForDatasyncMapper.java │ │ │ │ │ ├── TaskWithEverythingForListMapper.java │ │ │ │ │ ├── TaskWithEverythingForReadMapper.java │ │ │ │ │ ├── TaskWithEverythingForUpdateMapper.java │ │ │ │ │ └── attachment │ │ │ │ │ ├── AttachmentFilenameMapper.java │ │ │ │ │ ├── AttachmentMapper.java │ │ │ │ │ ├── AttachmentWithTaskMapper.java │ │ │ │ │ └── TemporaryAttachmentPathMapper.java │ │ │ ├── security │ │ │ │ ├── SecurityIssueWithProjectAndMembershipMapper.java │ │ │ │ ├── SecurityIssueWithProjectMapper.java │ │ │ │ ├── SecurityMemoWithProjectAndMembershipMapper.java │ │ │ │ ├── SecurityMemoWithProjectMapper.java │ │ │ │ ├── SecurityProjectMapper.java │ │ │ │ ├── SecurityProjectWithMembershipMapper.java │ │ │ │ ├── SecurityTaskHashtagWithProjectAndMembershipMapper.java │ │ │ │ ├── SecurityTaskHashtagWithProjectMapper.java │ │ │ │ ├── SecurityTaskWithProjectAndMembershipMapper.java │ │ │ │ └── SecurityTaskWithProjectMapper.java │ │ │ └── user │ │ │ │ ├── AccountUserMapper.java │ │ │ │ ├── BaseUserMapper.java │ │ │ │ ├── NotificationSettingsMapper.java │ │ │ │ ├── PasswordActivationTokenMapper.java │ │ │ │ ├── PasswordActivationTokenWithUserMapper.java │ │ │ │ ├── PublicUserMapper.java │ │ │ │ ├── PublicUserWithProjectMembershipMapper.java │ │ │ │ ├── UserFavoriteWithProjectAndSecurityMembershipMapper.java │ │ │ │ ├── UserMapper.java │ │ │ │ ├── UserWithNotificationSettingMapper.java │ │ │ │ └── UserWithNotificationSettingsMapper.java │ │ │ ├── project │ │ │ ├── ApplicationStatusRepo.java │ │ │ ├── GrantedPermissionsProjectInviteRepo.java │ │ │ ├── InviteStatusRepo.java │ │ │ ├── IssueRepo.java │ │ │ ├── JDBCGrantedPermissionsProjectInviteRepo.java │ │ │ ├── JDBCProjectInviteRepo.java │ │ │ ├── JDBCProjectMemberRepo.java │ │ │ ├── JDBCProjectRepo.java │ │ │ ├── MemoRepo.java │ │ │ ├── ProjectApplicationRepo.java │ │ │ ├── ProjectInviteRepo.java │ │ │ ├── ProjectInviteTokenRepo.java │ │ │ ├── ProjectMemberRepo.java │ │ │ ├── ProjectRepo.java │ │ │ ├── imprt │ │ │ │ └── jira │ │ │ │ │ ├── ImportedJiraProjectRepo.java │ │ │ │ │ ├── ImportedJiraTaskRepo.java │ │ │ │ │ └── JiraUploadRepo.java │ │ │ ├── roadmap │ │ │ │ ├── RoadRepo.java │ │ │ │ └── TaskCardRepo.java │ │ │ └── task │ │ │ │ ├── ProjectTaskNumberSequenceRepo.java │ │ │ │ ├── TaskHashtagRepo.java │ │ │ │ ├── TaskLinkRepo.java │ │ │ │ ├── TaskPriorityRepo.java │ │ │ │ ├── TaskRepo.java │ │ │ │ ├── TaskStatusRepo.java │ │ │ │ ├── TaskSubscriberRepo.java │ │ │ │ ├── TaskTypeRepo.java │ │ │ │ └── attachment │ │ │ │ ├── AttachmentRepo.java │ │ │ │ └── TemporaryAttachmentRepo.java │ │ │ ├── security │ │ │ ├── SecurityIssueRepo.java │ │ │ ├── SecurityMemoRepo.java │ │ │ ├── SecurityProjectRepo.java │ │ │ ├── SecurityTaskRepo.java │ │ │ └── SecurityUserRepo.java │ │ │ ├── sort │ │ │ └── SortingOption.java │ │ │ └── user │ │ │ ├── EmailActivationTokenRepo.java │ │ │ ├── FailedLoginAttemptRepo.java │ │ │ ├── JDBCUserFavoriteRepo.java │ │ │ ├── JDBCUserRepo.java │ │ │ ├── LoginStatisticsRepo.java │ │ │ ├── NotificationSettingsRepo.java │ │ │ ├── PasswordActivationTokenRepo.java │ │ │ ├── UserFavoriteRepo.java │ │ │ └── UserRepo.java │ │ └── resources │ │ └── qirk-repo-persistence-ctx.xml ├── qirk-services-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── services │ │ ├── api │ │ ├── OAuthService.java │ │ ├── dropbox │ │ │ └── DropboxApiService.java │ │ ├── elasticsearch │ │ │ ├── ElasticsearchService.java │ │ │ ├── ElasticsearchTaskService.java │ │ │ └── ElasticsearchUserService.java │ │ └── yandexcloud │ │ │ └── YandexCloudApiService.java │ │ ├── dto │ │ ├── AttachmentDTO.java │ │ ├── BaseEntityDTO.java │ │ ├── ChatPermissionsDTO.java │ │ ├── ExistsDTO.java │ │ ├── ExpiresAtDTO.java │ │ ├── IdDTO.java │ │ ├── IdOrUiIdDTO.java │ │ ├── MoveDTO.java │ │ ├── NameCodeDTO.java │ │ ├── OAuthCodeDTO.java │ │ ├── PaginatedListDTO.java │ │ ├── RejectDTO.java │ │ ├── RetryAfterDTO.java │ │ ├── TokenDTO.java │ │ ├── TokenRejectDTO.java │ │ ├── UuidDTO.java │ │ ├── VersionedEntityDTO.java │ │ ├── elasticsearch │ │ │ ├── ElasticsearchEntityDTO.java │ │ │ ├── ElasticsearchNestedProjectDTO.java │ │ │ ├── ElasticsearchTaskDTO.java │ │ │ └── ElasticsearchUserDTO.java │ │ ├── meta │ │ │ ├── ExternalUuidDTO.java │ │ │ └── PaginationMetaDTO.java │ │ ├── project │ │ │ ├── GrantedPermissionsProjectInviteDTO.java │ │ │ ├── GrantedPermissionsProjectInviteReadDTO.java │ │ │ ├── IssueDTO.java │ │ │ ├── IssueReadDTO.java │ │ │ ├── MemoDTO.java │ │ │ ├── MemoReadDTO.java │ │ │ ├── MoveToRoadDTO.java │ │ │ ├── ProjectApplicationDTO.java │ │ │ ├── ProjectApplicationReadDTO.java │ │ │ ├── ProjectApplicationStatusDTO.java │ │ │ ├── ProjectDTO.java │ │ │ ├── ProjectDocDTO.java │ │ │ ├── ProjectInviteDTO.java │ │ │ ├── ProjectInviteOptionDTO.java │ │ │ ├── ProjectInviteReadDTO.java │ │ │ ├── ProjectInviteStatusDTO.java │ │ │ ├── ProjectMemberDTO.java │ │ │ ├── ProjectMemberListDTO.java │ │ │ ├── ProjectMemberPermissionsDTO.java │ │ │ ├── ProjectMemberReadDTO.java │ │ │ ├── ProjectMemberUserDTO.java │ │ │ ├── ProjectNameAndUiIdDTO.java │ │ │ ├── ProjectReadDTO.java │ │ │ ├── imprt │ │ │ │ ├── ImportStatusDTO.java │ │ │ │ ├── QirkDataDTO.java │ │ │ │ ├── TaskAttributeDTO.java │ │ │ │ └── jira │ │ │ │ │ ├── JiraIdAndNameDTO.java │ │ │ │ │ ├── JiraProjectDTO.java │ │ │ │ │ ├── JiraProjectImportDTO.java │ │ │ │ │ ├── JiraProjectMatchDTO.java │ │ │ │ │ ├── JiraUploadDTO.java │ │ │ │ │ └── JiraUserDTO.java │ │ │ ├── roadmap │ │ │ │ ├── RoadDTO.java │ │ │ │ ├── RoadReadDTO.java │ │ │ │ ├── TaskCardDTO.java │ │ │ │ └── TaskCardReadDTO.java │ │ │ └── task │ │ │ │ ├── AttachmentCreateDTO.java │ │ │ │ ├── LinkedTaskDTO.java │ │ │ │ ├── SearchedTaskDTO.java │ │ │ │ ├── ShortTaskDTO.java │ │ │ │ ├── TaskCardIdDTO.java │ │ │ │ ├── TaskDTO.java │ │ │ │ ├── TaskHashtagDTO.java │ │ │ │ ├── TaskIdDTO.java │ │ │ │ ├── TaskLinkDTO.java │ │ │ │ └── TaskReadDTO.java │ │ └── user │ │ │ ├── AccountUserDTO.java │ │ │ ├── ActivationDTO.java │ │ │ ├── EmailAddressDTO.java │ │ │ ├── LoginDTO.java │ │ │ ├── NotificationSettingsDTO.java │ │ │ ├── PasswordChangeDTO.java │ │ │ ├── PriofileUpdateDTO.java │ │ │ ├── ProfileDTO.java │ │ │ ├── PublicUserDTO.java │ │ │ ├── RegisterDTO.java │ │ │ ├── RegisteredDTO.java │ │ │ ├── TokenRegisterDTO.java │ │ │ ├── UserFavoriteDTO.java │ │ │ ├── UserFavoriteReadDTO.java │ │ │ └── UserIdsDTO.java │ │ ├── file │ │ ├── FileService.java │ │ └── YandexCloudFileService.java │ │ ├── http │ │ └── CookieService.java │ │ ├── project │ │ ├── GrantedPermissionsProjectInviteService.java │ │ ├── IssueService.java │ │ ├── MemoService.java │ │ ├── ProjectApplicationService.java │ │ ├── ProjectInviteService.java │ │ ├── ProjectInviteTokenService.java │ │ ├── ProjectMemberService.java │ │ ├── ProjectService.java │ │ ├── imprt │ │ │ └── jira │ │ │ │ ├── ImportedJiraProjectService.java │ │ │ │ ├── ImportedJiraTaskRetryWrapperService.java │ │ │ │ ├── ImportedJiraTaskService.java │ │ │ │ └── JiraImportService.java │ │ ├── roadmap │ │ │ ├── RoadService.java │ │ │ └── TaskCardService.java │ │ └── task │ │ │ ├── TaskHashtagService.java │ │ │ ├── TaskRetryWrapperService.java │ │ │ ├── TaskService.java │ │ │ ├── TaskSubscriberService.java │ │ │ └── attachment │ │ │ ├── AttachmentFileService.java │ │ │ ├── AttachmentService.java │ │ │ └── TemporaryAttachmentService.java │ │ ├── security │ │ ├── ProjectSecurityService.java │ │ └── SecurityService.java │ │ ├── user │ │ ├── AuthnService.java │ │ ├── EmailActivationTokenService.java │ │ ├── LoginStatisticsService.java │ │ ├── NotificationSettingsService.java │ │ ├── PasswordActivationTokenService.java │ │ ├── ProfileRetryWrapperService.java │ │ ├── ProfileService.java │ │ ├── RegistrationRetryWrapperService.java │ │ ├── RegistrationService.java │ │ ├── RememberMeTokenService.java │ │ ├── UserFavoriteService.java │ │ └── UserService.java │ │ └── util │ │ ├── dom │ │ └── DOMUtils.java │ │ ├── exception │ │ ├── ApplicationException.java │ │ ├── BadRequestException.java │ │ ├── ConflictException.java │ │ ├── NotFoundException.java │ │ ├── PaymentRequiredException.java │ │ ├── RequestEntityTooLargeException.java │ │ └── TooManyLoginAttemptsException.java │ │ └── http │ │ ├── Cookies.java │ │ ├── JsonStatusCode.java │ │ └── SessionAttribute.java ├── qirk-services │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── org │ │ │ │ └── wrkr │ │ │ │ └── clb │ │ │ │ └── services │ │ │ │ ├── api │ │ │ │ ├── elasticsearch │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultElasticsearchService.java │ │ │ │ │ │ ├── DefaultElasticsearchTaskService.java │ │ │ │ │ │ └── DefaultElasticsearchUserService.java │ │ │ │ ├── impl │ │ │ │ │ └── DefaultOAuthService.java │ │ │ │ └── yandexcloud │ │ │ │ │ └── impl │ │ │ │ │ └── DefaultYandexCloudApiService.java │ │ │ │ ├── file │ │ │ │ └── impl │ │ │ │ │ ├── DefaultFileService.java │ │ │ │ │ └── DefaultYandexCloudFileService.java │ │ │ │ ├── http │ │ │ │ └── impl │ │ │ │ │ └── DefaultCookieService.java │ │ │ │ ├── impl │ │ │ │ └── VersionedEntityService.java │ │ │ │ ├── jms │ │ │ │ ├── JMSCheckService.java │ │ │ │ ├── SynchronousMessageSender.java │ │ │ │ └── TaskLookupSubscribersListener.java │ │ │ │ ├── project │ │ │ │ ├── impl │ │ │ │ │ ├── DefaultGrantedPermissionsProjectInviteService.java │ │ │ │ │ ├── DefaultIssueService.java │ │ │ │ │ ├── DefaultMemoService.java │ │ │ │ │ ├── DefaultProjectApplicationService.java │ │ │ │ │ ├── DefaultProjectInviteService.java │ │ │ │ │ ├── DefaultProjectInviteTokenService.java │ │ │ │ │ ├── DefaultProjectMemberService.java │ │ │ │ │ └── DefaultProjectService.java │ │ │ │ ├── imprt │ │ │ │ │ └── jira │ │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultImportedJiraProjectService.java │ │ │ │ │ │ ├── DefaultImportedJiraTaskRetryWrapperService.java │ │ │ │ │ │ ├── DefaultImportedJiraTaskService.java │ │ │ │ │ │ └── DefaultJiraImportService.java │ │ │ │ ├── roadmap │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultRoadService.java │ │ │ │ │ │ └── DefaultTaskCardService.java │ │ │ │ └── task │ │ │ │ │ ├── attachment │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultAttachmentFileService.java │ │ │ │ │ │ ├── DefaultAttachmentService.java │ │ │ │ │ │ └── DefaultTemporaryAttachmentService.java │ │ │ │ │ └── impl │ │ │ │ │ ├── DefaultTaskHashtagService.java │ │ │ │ │ ├── DefaultTaskRetryWrapperService.java │ │ │ │ │ ├── DefaultTaskService.java │ │ │ │ │ └── DefaultTaskSubscriberService.java │ │ │ │ ├── scheduling │ │ │ │ ├── SelfCheckJobService.java │ │ │ │ └── TemporaryAttachmentJobService.java │ │ │ │ ├── security │ │ │ │ └── impl │ │ │ │ │ ├── BaseProjectSecurityService.java │ │ │ │ │ ├── BaseSecurityService.java │ │ │ │ │ ├── DefaultProjectSecurityService.java │ │ │ │ │ └── DefaultSecurityService.java │ │ │ │ └── user │ │ │ │ └── impl │ │ │ │ ├── DefaultAuthnService.java │ │ │ │ ├── DefaultEmailActivationTokenService.java │ │ │ │ ├── DefaultLoginStatisticsService.java │ │ │ │ ├── DefaultNotificationSettingsService.java │ │ │ │ ├── DefaultPasswordActivationTokenService.java │ │ │ │ ├── DefaultProfileRetryWrapperService.java │ │ │ │ ├── DefaultProfileService.java │ │ │ │ ├── DefaultRegistrationRetryWrapperService.java │ │ │ │ ├── DefaultRegistrationService.java │ │ │ │ ├── DefaultRememberMeTokenService.java │ │ │ │ ├── DefaultUserFavoriteService.java │ │ │ │ └── DefaultUserService.java │ │ └── resources │ │ │ ├── qirk-services-ctx.xml │ │ │ └── qirk-services-jms-ctx.xml │ │ └── test │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ ├── common │ │ │ └── mail │ │ │ │ ├── DevOpsMailServiceTest.java │ │ │ │ └── UserMailServiceStub.java │ │ │ ├── services │ │ │ ├── BaseServiceTest.java │ │ │ ├── api │ │ │ │ ├── dropbox │ │ │ │ │ └── impl │ │ │ │ │ │ └── DropboxApiServiceStub.java │ │ │ │ └── yandexcloud │ │ │ │ │ └── impl │ │ │ │ │ └── YandexCloudApiServiceStub.java │ │ │ ├── project │ │ │ │ └── impl │ │ │ │ │ └── ProjectMemberServiceTest.java │ │ │ ├── security │ │ │ │ └── impl │ │ │ │ │ ├── ProjectSecurityServiceTest.java │ │ │ │ │ └── SecurityServiceTest.java │ │ │ └── user │ │ │ │ └── impl │ │ │ │ ├── PasswordActivationTokenServiceTest.java │ │ │ │ ├── ProfileServiceTest.java │ │ │ │ ├── RegistrationServiceTest.java │ │ │ │ └── TransactionalActivationTokenService.java │ │ │ └── test │ │ │ ├── repo │ │ │ ├── JDBCTestRepo.java │ │ │ └── TestRepo.java │ │ │ └── util │ │ │ ├── EasyMockFactoryBean.java │ │ │ ├── JsonStatusCodeMatcher.java │ │ │ └── TestDatabasePopulator.java │ │ └── resources │ │ ├── log4j2.xml │ │ ├── qirk-services-test-jms-ctx.xml │ │ ├── qirk-services-test-repo-ctx.xml │ │ ├── qirk-services-test-root-ctx.xml │ │ ├── qirk-services-test-services-ctx.xml │ │ ├── qirk.test.properties │ │ └── unit-test-data.sql └── qirk-web │ ├── docs │ └── API.txt │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── web │ │ ├── controller │ │ ├── BaseAuthenticationExceptionHandlerController.java │ │ ├── BaseController.java │ │ ├── BaseExceptionHandlerController.java │ │ ├── CsrfController.java │ │ ├── GlobalExceptionHandlerController.java │ │ ├── HeartbeatController.java │ │ ├── RootController.java │ │ ├── project │ │ │ ├── GrantedPermissionsProjectInviteController.java │ │ │ ├── IssueController.java │ │ │ ├── MemoController.java │ │ │ ├── ProjectApplicationController.java │ │ │ ├── ProjectController.java │ │ │ ├── ProjectInviteController.java │ │ │ ├── ProjectInviteTokenController.java │ │ │ ├── ProjectMemberController.java │ │ │ ├── imprt │ │ │ │ └── jira │ │ │ │ │ └── JiraImportController.java │ │ │ ├── roadmap │ │ │ │ ├── RoadController.java │ │ │ │ └── TaskCardController.java │ │ │ └── task │ │ │ │ ├── TaskController.java │ │ │ │ ├── TaskHashtagController.java │ │ │ │ ├── TaskPriorityController.java │ │ │ │ ├── TaskStatusController.java │ │ │ │ ├── TaskSubscriberController.java │ │ │ │ ├── TaskTypeController.java │ │ │ │ └── attachment │ │ │ │ ├── AttachmentController.java │ │ │ │ └── FileController.java │ │ └── user │ │ │ ├── AuthnController.java │ │ │ ├── NotificationSettingsController.java │ │ │ ├── UserController.java │ │ │ └── UserFavoriteController.java │ │ ├── filter │ │ ├── RememberMeAndCsrfFilter.java │ │ └── ResponseBodyFilter.java │ │ ├── http │ │ └── Header.java │ │ └── json │ │ └── JsonContainer.java │ ├── resources │ ├── qirk-web-config.xml │ ├── qirk-web-ctx.xml │ ├── qirk-web-root-ctx.xml │ └── qirk-web-security.xml │ └── webapp │ └── WEB-INF │ └── web.xml ├── qirk-notification-parent ├── pom.xml ├── qirk-notification-model │ ├── cassandra │ │ └── _initial.cql │ ├── pom.xml │ ├── psql │ │ ├── _initial-1.sql │ │ └── _initial-2.sql │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── wrkr │ │ └── clb │ │ └── notification │ │ └── model │ │ ├── Notification.java │ │ ├── NotificationLastCheck.java │ │ ├── NotificationLastCheck_.java │ │ └── Notification_.java ├── qirk-notification-repo │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── notification │ │ │ └── repo │ │ │ ├── NotifDatabaseRepo.java │ │ │ ├── NotificationLastCheckRepo.java │ │ │ ├── NotificationRepo.java │ │ │ ├── dto │ │ │ └── NotificationDTO.java │ │ │ └── postgresql │ │ │ ├── BaseNotifRepo.java │ │ │ ├── PostgresNotifDatabaseRepo.java │ │ │ ├── PostgresNotificationLastCheckRepo.java │ │ │ └── PostgresNotificationRepo.java │ │ └── resources │ │ └── qirk-notification-repo-persistence-ctx.xml ├── qirk-notification-services │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── wrkr │ │ │ └── clb │ │ │ └── notification │ │ │ └── services │ │ │ ├── BaseNotificationMailService.java │ │ │ ├── NotificationLastCheckService.java │ │ │ ├── NotificationMailService.java │ │ │ ├── NotificationService.java │ │ │ ├── dto │ │ │ └── LastCheckDTO.java │ │ │ ├── jms │ │ │ ├── MQDestination.java │ │ │ ├── NotificationDestinationListener.java │ │ │ ├── NotificationDestinationSender.java │ │ │ └── NotificationSourceListener.java │ │ │ ├── json │ │ │ └── JsonStatusCode.java │ │ │ ├── mail │ │ │ ├── TaskCreatedMailService.java │ │ │ └── TaskUpdatedMailService.java │ │ │ ├── scheduling │ │ │ └── SelfCheckJobService.java │ │ │ └── security │ │ │ └── SecurityService.java │ │ └── resources │ │ ├── qirk-notification-services-ctx.xml │ │ └── qirk-notification-services-jms-ctx.xml └── qirk-notification-web │ ├── api-docs │ ├── API.txt │ ├── notification_type.txt │ └── status_code.txt │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── notification │ │ └── web │ │ ├── controller │ │ ├── HeartbeatController.java │ │ └── NotificationWebSocketController.java │ │ └── json │ │ └── JsonContainer.java │ ├── resources │ ├── qirk-notification-web-config.xml │ ├── qirk-notification-web-ctx.xml │ └── qirk-notification-web-root-ctx.xml │ └── webapp │ └── WEB-INF │ └── web.xml └── qirk-statistics-parent ├── pom.xml ├── qirk-statistics-repo ├── pom.xml ├── psql │ ├── _initial-1.sql │ └── _initial-2.sql └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── statistics │ │ └── repo │ │ ├── BaseStatRepo.java │ │ ├── StatDatabaseRepo.java │ │ ├── chat │ │ └── NewMessageRepo.java │ │ ├── model │ │ ├── chat │ │ │ └── NewMessage_.java │ │ └── project │ │ │ ├── NewMemo_.java │ │ │ ├── NewTask_.java │ │ │ ├── ProjectDocUpdate_.java │ │ │ ├── TaskPriorityUpdate_.java │ │ │ ├── TaskStatusUpdate_.java │ │ │ ├── TaskTypeUpdate_.java │ │ │ └── TaskUpdate_.java │ │ └── project │ │ ├── NewMemoRepo.java │ │ ├── NewTaskRepo.java │ │ ├── ProjectDocUpdateRepo.java │ │ ├── TaskPriorityUpdateRepo.java │ │ ├── TaskStatusUpdateRepo.java │ │ ├── TaskTypeUpdateRepo.java │ │ └── TaskUpdateRepo.java │ └── resources │ ├── qirk-statistics-repo-persistence-ctx.xml │ └── qirk-statistics-repo-validation-ctx.xml ├── qirk-statistics-services ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── wrkr │ │ └── clb │ │ └── statistics │ │ └── services │ │ ├── BaseEventService.java │ │ ├── EventDispatcherService.java │ │ ├── EventService.java │ │ ├── chat │ │ └── NewMessageService.java │ │ ├── jms │ │ └── StatisticsListener.java │ │ ├── project │ │ ├── NewMemoService.java │ │ ├── NewTaskService.java │ │ ├── ProjectDocUpdateService.java │ │ └── TaskUpdateService.java │ │ └── scheduling │ │ └── SelfCheckJobService.java │ └── resources │ ├── qirk-statistics-services-ctx.xml │ └── qirk-statistics-services-jms-ctx.xml └── qirk-statistics-web ├── docs └── API.txt ├── pom.xml └── src └── main ├── java └── org │ └── wrkr │ └── clb │ └── statistics │ └── web │ └── controller │ ├── EventController.java │ └── HeartbeatController.java ├── resources ├── qirk-statistics-web-config.xml ├── qirk-statistics-web-ctx.xml └── qirk-statistics-web-root-ctx.xml └── webapp └── WEB-INF └── web.xml /.gitignore: -------------------------------------------------------------------------------- 1 | ### Linux ### 2 | *~ 3 | 4 | ### Java ### 5 | target/ 6 | *.class 7 | 8 | ### mvn npm build ### 9 | .npm/ 10 | .tmp/ 11 | 12 | ### STS ### 13 | .metadata/ 14 | .settings/ 15 | .classpath 16 | .project 17 | .springBeans 18 | .factorypath 19 | 20 | ### Idea ### 21 | .idea 22 | *.iml 23 | *.eml 24 | 25 | ### Tomcat ### 26 | Servers/ 27 | 28 | ### logs ### 29 | logs/ 30 | *.log 31 | npm-debug.log* 32 | yarn-debug.log* 33 | yarn-error.log* 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Project development deprecated. 2 | 3 | # QIRK 4 | 5 | Task management solution for teams. 6 | 7 | ## DOCS 8 | 9 | You can find docs for Frontend part there: /qirk-parent/qirk-front/front. 10 | Docs for backend there: Somewhere in JAVA jungles, but we have one for sure. 11 | 12 | ## License 13 | 14 | Project under MIT license. 15 | -------------------------------------------------------------------------------- /qirk-parent/deployment/qirk.example.properties: -------------------------------------------------------------------------------- 1 | environment=production 2 | node.id=1 3 | selfcheck.rate.millis=120000 4 | 5 | front.host=http://127.0.0.1:8000 6 | 7 | crypto.secret.key=secret_key 8 | 9 | rememberme.token.lifetime.seconds=31622400 10 | max.failed.login.attempts=10 11 | 12 | email.host=smtp.gmail.com 13 | email.port=587 14 | email.host.user=example@example.com 15 | email.host.password=password 16 | email.from=example@example.com 17 | email.devops=example@example.com,example@example.com 18 | 19 | file.upload.max.size=10485760 20 | attachment.tmp.clear.rate.millis=3600000 21 | attachment.tmp.lifetime.seconds=14400 22 | 23 | chat.token.notbefore.tolerance.seconds=60 24 | chat.token.lifetime.seconds=300 25 | notif.token.notbefore.tolerance.seconds=60 26 | notif.token.lifetime.seconds=300 27 | 28 | task.list.limit=42 29 | notif.list.limit=42 30 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/diagram/maria/entity_diagram.uxf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 4 | 5 | UMLClass 6 | 7 | 120 8 | 110 9 | 210 10 | 230 11 | 12 | task_message 13 | -- 14 | id (pkey) 15 | - 16 | uuid (string) 17 | - 18 | chat_id (index) 19 | - 20 | sender_id 21 | - 22 | sent_at 23 | - 24 | message 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/mysql/_initial.sql: -------------------------------------------------------------------------------- 1 | CREATE DATABASE clb_chat; 2 | SET storage_engine=InnoDB; 3 | CREATE USER hibernate IDENTIFIED BY '121212'; 4 | GRANT ALL PRIVILEGES ON clb_chat.* to hibernate@'%' IDENTIFIED BY '121212'; 5 | GRANT ALL PRIVILEGES ON clb_chat.* to hibernate@'localhost' IDENTIFIED BY '121212'; 6 | 7 | \r clb_chat 8 | 9 | 10 | CREATE TABLE task_message( 11 | uuid VARCHAR(36) NOT NULL, 12 | chat_id BIGINT NOT NULL, 13 | sender_id BIGINT NOT NULL, 14 | timestamp BIGINT NOT NULL, 15 | message VARCHAR(1023) NOT NULL, 16 | deleted BOOLEAN, 17 | updated_at BIGINT, 18 | in_response_to BIGINT, 19 | CONSTRAINT task_message_pk PRIMARY KEY (chat_id, timestamp) 20 | ) ENGINE = InnoDB; 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/mysql/alter-2.0.0-2.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE task_message CHARACTER SET = 'utf8mb4'; 2 | ALTER TABLE task_message MODIFY message VARCHAR(1023) CHARACTER SET utf8mb4 NOT NULL; 3 | 4 | ALTER TABLE issue_message CHARACTER SET = 'utf8mb4'; 5 | ALTER TABLE issue_message MODIFY message VARCHAR(1023) CHARACTER SET utf8mb4 NOT NULL; 6 | 7 | ALTER TABLE project_message CHARACTER SET = 'utf8mb4'; 8 | ALTER TABLE project_message MODIFY message VARCHAR(1023) CHARACTER SET utf8mb4 NOT NULL; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/mysql/alter-2.0.0-3.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE dialog_message( 2 | uuid VARCHAR(36) NOT NULL, 3 | user1_id BIGINT NOT NULL, 4 | user2_id BIGINT NOT NULL, 5 | sender_id BIGINT NOT NULL, 6 | timestamp BIGINT NOT NULL, 7 | message VARCHAR(1023) NOT NULL, 8 | deleted BOOLEAN, 9 | updated_at BIGINT, 10 | in_response_to BIGINT, 11 | CONSTRAINT task_message_pk PRIMARY KEY (user1_id, user2_id, timestamp) 12 | ) ENGINE = InnoDB CHARACTER SET = 'utf8mb4'; 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public abstract class BaseAttachedChatMessage extends BaseChatMessage { 4 | /** 5 | * sender may not be an user, so, system or third party senders will have 6 | * negative value, like -1 or so. 7 | */ 8 | public static final long SENDER_TYPE_EXAMPLE = -1L; 9 | private long chatId; 10 | 11 | public long getChatId() { 12 | return chatId; 13 | } 14 | 15 | public void setChatId(long chatId) { 16 | this.chatId = chatId; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseAttachedChatMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class BaseAttachedChatMessage_ extends BaseChatMessage_{ 4 | 5 | public static final String chatId = "chat_id"; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseChatMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseChatMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseChatMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseChatMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/BaseChatMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class BaseChatMessage_ { 4 | 5 | public static final String uuid = "uuid"; 6 | public static final String senderId = "sender_id"; 7 | 8 | public static final String timestamp = "timestamp"; 9 | public static final String message = "message"; 10 | 11 | public static final String deleted = "deleted"; 12 | public static final String updatedAt = "updated_at"; 13 | public static final String inResponseTo = "in_response_to"; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | import org.wrkr.clb.common.util.chat.ChatType; 4 | 5 | public class DialogMessage extends BaseChatMessage { 6 | 7 | private long user1Id; 8 | private long user2Id; 9 | 10 | public long getUser1Id() { 11 | return user1Id; 12 | } 13 | 14 | public long getUser2Id() { 15 | return user2Id; 16 | } 17 | 18 | public void setUser1Id(long id) { 19 | this.user1Id = id; 20 | } 21 | 22 | public void setUser2Id(long id) { 23 | this.user2Id = id; 24 | } 25 | 26 | @Override 27 | public String getChatType() { 28 | return ChatType.DIALOG; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/DialogMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class DialogMessage_ extends BaseChatMessage_ { 4 | 5 | public static final String TABLE_NAME = "dialog_message"; 6 | 7 | public static final String user1Id = "user1_id"; 8 | public static final String user2Id = "user2_id"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | import org.wrkr.clb.common.util.chat.ChatType; 4 | 5 | public class IssueMessage extends BaseAttachedChatMessage { 6 | 7 | @Override 8 | public String getChatType() { 9 | return ChatType.ISSUE; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/IssueMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class IssueMessage_ extends BaseAttachedChatMessage_ { 4 | 5 | public static final String TABLE_NAME = "issue_message"; 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | import org.wrkr.clb.common.util.chat.ChatType; 4 | 5 | public class ProjectMessage extends BaseAttachedChatMessage { 6 | 7 | @Override 8 | public String getChatType() { 9 | return ChatType.PROJECT; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/ProjectMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class ProjectMessage_ extends BaseAttachedChatMessage_ { 4 | 5 | public static final String TABLE_NAME = "project_message"; 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | import org.wrkr.clb.common.util.chat.ChatType; 4 | 5 | public class TaskMessage extends BaseAttachedChatMessage { 6 | 7 | @Override 8 | public String getChatType() { 9 | return ChatType.TASK; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-model/src/main/java/org/wrkr/clb/chat/model/sql/TaskMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.model.sql; 2 | 3 | public class TaskMessage_ extends BaseAttachedChatMessage_ { 4 | 5 | public static final String TABLE_NAME = "task_message"; 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseAttachedChatMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseAttachedChatMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatMessageRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.repo.sql; 2 | 3 | import java.sql.SQLException; 4 | 5 | import org.wrkr.clb.chat.model.sql.BaseChatMessage; 6 | 7 | public abstract class BaseChatMessageRepo extends BaseChatRepo { 8 | 9 | protected abstract String getSqlSelectMessagesStatement(); 10 | 11 | protected abstract String getSqlInsertStatement(); 12 | 13 | protected abstract String getSqlDeleteStatement(); 14 | 15 | protected abstract String getSqlSelectChatsStatement(); 16 | 17 | public abstract void save(BaseChatMessage message) throws SQLException; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/BaseChatRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.repo.sql; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.jdbc.core.JdbcTemplate; 7 | 8 | public abstract class BaseChatRepo { 9 | 10 | private JdbcTemplate jdbcTemplate; 11 | 12 | protected JdbcTemplate getJdbcTemplate() { 13 | return jdbcTemplate; 14 | } 15 | 16 | @Autowired 17 | public void setDataSource(DataSource dataSource) { 18 | this.jdbcTemplate = new JdbcTemplate(dataSource); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBChatDatabaseRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBChatDatabaseRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBDialogMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBDialogMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBIssueMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBIssueMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBProjectMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBProjectMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBTaskMessageRepo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/MariaDBTaskMessageRepo.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-repo/src/main/java/org/wrkr/clb/chat/repo/sql/SQLChatDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.repo.sql; 2 | 3 | import org.springframework.stereotype.Repository; 4 | 5 | 6 | @Repository 7 | public class SQLChatDatabaseRepo extends BaseChatRepo { 8 | 9 | private static final String SELECT_1 = "SELECT 1;"; 10 | 11 | public void check() { 12 | getJdbcTemplate().queryForList(SELECT_1); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | import java.util.List; 4 | 5 | import org.wrkr.clb.chat.services.dto.MessageDTO; 6 | import org.wrkr.clb.common.crypto.token.chat.ChatTokenData; 7 | 8 | public interface ChatService { 9 | 10 | public List getLastMessages(ChatTokenData tokenData, Long timestamp); 11 | 12 | public MessageDTO saveMessage(ChatTokenData tokenData, String message) throws Exception; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/DialogChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/DialogChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/DialogChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | public interface DialogChatService extends ChatService { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/IssueChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/IssueChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/IssueChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | public interface IssueChatService extends ChatService { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ProjectChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ProjectChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/ProjectChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | public interface ProjectChatService extends ChatService { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/TaskChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/TaskChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/TaskChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | public interface TaskChatService extends ChatService { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ChatDTO.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ChatDTO.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ChatDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | 6 | public class ChatDTO { 7 | 8 | @JsonIgnore 9 | public static final String CHAT_TYPE = "chat_type"; 10 | @JsonIgnore 11 | public static final String CHAT_ID = "chat_id"; 12 | 13 | @JsonProperty(CHAT_TYPE) 14 | public String chatType; 15 | 16 | @JsonProperty(CHAT_ID) 17 | public long chatId; 18 | 19 | public ChatDTO() { 20 | } 21 | 22 | public ChatDTO(String chatType, long chatId) { 23 | this.chatType = chatType; 24 | this.chatId = chatId; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ChatWithLastMessageDTO.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ChatWithLastMessageDTO.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ExternalUuidDTO.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ExternalUuidDTO.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/ExternalUuidDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class ExternalUuidDTO { 6 | 7 | @JsonProperty(value = "external_uuid") 8 | public String externalUuid; 9 | 10 | public ExternalUuidDTO(String externalUuid) { 11 | this.externalUuid = externalUuid; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/MessageDTO.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/dto/MessageDTO.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/jms/MQDestination.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/jms/MQDestination.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/jms/MQDestination.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | public interface MQDestination { 4 | 5 | public void sendMessageFromMQ(String chatType, long chatId, String message); 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/security/SecurityService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/security/SecurityService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/security/SecurityService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.security; 2 | 3 | import java.util.Map; 4 | 5 | import org.wrkr.clb.common.crypto.token.chat.SecurityTokenData; 6 | 7 | public interface SecurityService { 8 | 9 | public Map decryptToken(String token, String IV); 10 | 11 | public boolean validateTokenData(SecurityTokenData tokenData, boolean validateForWrite); 12 | 13 | public void validateTokenDataOrThrowSecurityException(SecurityTokenData tokenData, boolean validateForWrite) 14 | throws SecurityException; 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonContainer_.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonContainer_.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonContainer_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.util.json; 2 | 3 | public class JsonContainer_ { 4 | 5 | public static final String statusOk = "status_ok"; 6 | public static final String statusCode = "status_code"; 7 | public static final String data = "data"; 8 | public static final String meta = "meta"; 9 | public static final String responseType = "response_type"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonStatusCode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonStatusCode.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services-api/src/main/java/org/wrkr/clb/chat/services/util/json/JsonStatusCode.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.util.json; 2 | 3 | public class JsonStatusCode { 4 | 5 | public static final String OK = "OK"; 6 | 7 | public static final String INVALID_REQUEST_TYPE = "INVALID_REQUEST_TYPE"; 8 | public static final String INVALID_CHAT_TYPE = "INVALID_CHAT_TYPE"; 9 | public static final String INVALID_TOKEN = "INVALID_TOKEN"; 10 | public static final String INVALID_TOKEN_FOR_WRITE = "INVALID_TOKEN_FOR_WRITE"; 11 | public static final String INVALID_TOKEN_CHAT_TYPE = "TOKEN_INVALID_CHAT_TYPE"; 12 | 13 | public static final String INTERNAL_SERVER_ERROR = "ERROR"; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultDialogChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultDialogChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultIssueTaskChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultIssueTaskChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultIssueTaskChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Component; 5 | import org.wrkr.clb.chat.services.sql.SQLChatService; 6 | import org.wrkr.clb.chat.services.sql.SQLIssueChatService; 7 | 8 | @Component 9 | public class DefaultIssueTaskChatService extends DefaultChatService implements IssueChatService { 10 | 11 | @Deprecated 12 | @Autowired(required = false) 13 | private SQLIssueChatService mariaDBService; 14 | 15 | @Deprecated 16 | @Override 17 | protected SQLChatService getSQLService() { 18 | return mariaDBService; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultProjectChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultProjectChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultProjectChatService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Component; 5 | import org.wrkr.clb.chat.services.sql.SQLChatService; 6 | import org.wrkr.clb.chat.services.sql.SQLProjectChatService; 7 | 8 | @Component 9 | public class DefaultProjectChatService extends DefaultChatService implements ProjectChatService { 10 | 11 | @Deprecated 12 | @Autowired(required = false) 13 | private SQLProjectChatService mariaDBService; 14 | 15 | @Deprecated 16 | @Override 17 | protected SQLChatService getSQLService() { 18 | return mariaDBService; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultTaskChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/DefaultTaskChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ChatListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ChatListener.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatListener.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatListener.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import org.wrkr.clb.chat.services.jms.MQDestination; 7 | 8 | public class DialogChatListener extends ChatListener { 9 | 10 | private Map> chatIdToSessionIdsToControllers = new ConcurrentHashMap>(); 11 | 12 | @Override 13 | protected Map> getChatIdToSessionIdsToControllers() { 14 | return chatIdToSessionIdsToControllers; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatSender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatSender.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/DialogChatSender.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import javax.jms.Topic; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jms.core.JmsTemplate; 8 | import org.springframework.stereotype.Component; 9 | 10 | @Component 11 | public class DialogChatSender { 12 | 13 | @Autowired 14 | @Qualifier("dialogJmsTemplate") 15 | private JmsTemplate jmsTemplate; 16 | 17 | @Autowired 18 | @Qualifier("jmsDialogChatTopic") 19 | private Topic topic; 20 | 21 | public void send(String message) { 22 | jmsTemplate.send(topic, s -> s.createTextMessage(message)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatListener.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatListener.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import org.wrkr.clb.chat.services.jms.MQDestination; 7 | 8 | public class IssueChatListener extends ChatListener { 9 | 10 | private Map> chatIdToSessionIdsToControllers = new ConcurrentHashMap>(); 11 | 12 | @Override 13 | protected Map> getChatIdToSessionIdsToControllers() { 14 | return chatIdToSessionIdsToControllers; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatSender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatSender.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/IssueChatSender.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import javax.jms.Topic; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jms.core.JmsTemplate; 8 | import org.springframework.stereotype.Component; 9 | 10 | 11 | @Component 12 | public class IssueChatSender { 13 | 14 | @Autowired 15 | @Qualifier("issueJmsTemplate") 16 | private JmsTemplate jmsTemplate; 17 | 18 | @Autowired 19 | @Qualifier("jmsIssueChatTopic") 20 | private Topic topic; 21 | 22 | public void send(String message) { 23 | jmsTemplate.send(topic, s -> s.createTextMessage(message)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatListener.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatListener.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import org.wrkr.clb.chat.services.jms.MQDestination; 7 | 8 | public class ProjectChatListener extends ChatListener { 9 | 10 | private Map> chatIdToSessionIdsToControllers = new ConcurrentHashMap>(); 11 | 12 | @Override 13 | protected Map> getChatIdToSessionIdsToControllers() { 14 | return chatIdToSessionIdsToControllers; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatSender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatSender.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/ProjectChatSender.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import javax.jms.Topic; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jms.core.JmsTemplate; 8 | import org.springframework.stereotype.Component; 9 | 10 | 11 | @Component 12 | public class ProjectChatSender { 13 | 14 | @Autowired 15 | @Qualifier("projectJmsTemplate") 16 | private JmsTemplate jmsTemplate; 17 | 18 | @Autowired 19 | @Qualifier("jmsProjectChatTopic") 20 | private Topic topic; 21 | 22 | public void send(String message) { 23 | jmsTemplate.send(topic, s -> s.createTextMessage(message)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatListener.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatListener.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatListener.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import org.wrkr.clb.chat.services.jms.MQDestination; 7 | 8 | public class TaskChatListener extends ChatListener { 9 | 10 | private Map> chatIdToSessionIdsToControllers = new ConcurrentHashMap>(); 11 | 12 | @Override 13 | protected Map> getChatIdToSessionIdsToControllers() { 14 | return chatIdToSessionIdsToControllers; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatSender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatSender.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/jms/TaskChatSender.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.chat.services.jms; 2 | 3 | import javax.jms.Topic; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jms.core.JmsTemplate; 8 | import org.springframework.stereotype.Component; 9 | 10 | 11 | @Component 12 | public class TaskChatSender { 13 | 14 | @Autowired 15 | @Qualifier("taskJmsTemplate") 16 | private JmsTemplate jmsTemplate; 17 | 18 | @Autowired 19 | @Qualifier("jmsTaskChatTopic") 20 | private Topic topic; 21 | 22 | public void send(String message) { 23 | jmsTemplate.send(topic, s -> s.createTextMessage(message)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/scheduling/SelfCheckJobService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/scheduling/SelfCheckJobService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/security/DefaultSecurityService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/security/DefaultSecurityService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBAttachedChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBAttachedChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBDialogChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBDialogChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBIssueChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBIssueChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBProjectChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBProjectChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBTaskChatService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-services/src/main/java/org/wrkr/clb/chat/services/sql/MariaDBTaskChatService.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/docs/status_code.txt: -------------------------------------------------------------------------------- 1 | INVALID_TOKEN - token is missing or invalid 2 | INVALID_TOKEN_FOR_WRITE - token is valid for read, but invalid for write 3 | ERROR - an internal server error occured 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/ChatWebSocketController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/ChatWebSocketController.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/ChatWebSocketControllerStub.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/ChatWebSocketControllerStub.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/HeartbeatController.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/controller/HeartbeatController.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/json/JsonContainer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/java/org/wrkr/clb/chat/web/json/JsonContainer.class -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/resources/qirk-chat-web-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | file:${catalina.home}/conf/qirk.properties 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-chat-parent/qirk-chat-web/src/main/resources/qirk-chat-web-root-ctx.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-crypto/src/main/java/org/wrkr/clb/common/crypto/dto/TokenAndIvDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.crypto.dto; 2 | 3 | import java.util.Base64; 4 | 5 | /** 6 | * @summary DTO used to return the result of encryption by TokenGenerator 7 | * 8 | */ 9 | public class TokenAndIvDTO { 10 | 11 | public String token; 12 | 13 | public String IV; 14 | 15 | public TokenAndIvDTO() { 16 | } 17 | 18 | public TokenAndIvDTO(byte[] token, byte[] IV) { 19 | this.token = Base64.getEncoder().encodeToString(token); 20 | this.IV = Base64.getEncoder().encodeToString(IV); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-deps-amazonaws/src/main/java/org/wrkr/clb/common/amazonaws/AmazonS3ClientFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-common/qirk-common-deps-amazonaws/src/main/java/org/wrkr/clb/common/amazonaws/AmazonS3ClientFactory.class -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-jdbc/src/main/java/org/wrkr/clb/common/jdbc/transaction/Executor.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.jdbc.transaction; 2 | 3 | public interface Executor { 4 | 5 | public T exec(int retryNumber) throws Exception; 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-jms/src/main/java/org/wrkr/clb/common/jms/message/notification/BaseTaskNotificationMessage.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.jms.message.notification; 2 | 3 | import java.util.Collection; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public abstract class BaseTaskNotificationMessage extends BaseNotificationMessage { 8 | 9 | public static final String PROJECT_UI_ID = "project_ui_id"; 10 | 11 | @JsonProperty(value = PROJECT_UI_ID) 12 | public String projectUiId; 13 | 14 | protected BaseTaskNotificationMessage(String type) { 15 | super(type); 16 | } 17 | 18 | public BaseTaskNotificationMessage(String type, Collection subscriberIds, Collection subscriberEmails) { 19 | super(type, subscriberIds, subscriberEmails); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-jms/src/main/java/org/wrkr/clb/common/jms/services/StatisticsSender.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.jms.services; 2 | 3 | import org.wrkr.clb.common.jms.message.statistics.BaseStatisticsMessage; 4 | 5 | public interface StatisticsSender { 6 | 7 | public void send(BaseStatisticsMessage message); 8 | } 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-jms/src/main/java/org/wrkr/clb/common/jms/services/StatisticsSenderStub.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.jms.services; 2 | 3 | import org.wrkr.clb.common.jms.message.statistics.BaseStatisticsMessage; 4 | 5 | @SuppressWarnings("unused") 6 | public class StatisticsSenderStub implements StatisticsSender { 7 | 8 | @Override 9 | public void send(BaseStatisticsMessage message) { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/java/org/wrkr/clb/common/mail/EmailSentDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.mail; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class EmailSentDTO { 6 | 7 | @JsonProperty(value = "email_sent") 8 | public boolean emailSent; 9 | 10 | public EmailSentDTO(boolean emailSent) { 11 | this.emailSent = emailSent; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/password-reset.vm: -------------------------------------------------------------------------------- 1 | Hello!
2 |
3 | To reset your password click the link below:
4 |
5 | ${url}
-------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/registration.vm: -------------------------------------------------------------------------------- 1 | Hello!
2 |
3 | You need to activate your email before you start using our services. Click the link below to activate (this link will expire in 72 hours):
4 |
5 | ${url}
6 |
7 | Use the following password to sign in: ${password}
-------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/task-commented.vm: -------------------------------------------------------------------------------- 1 | ${commentedByName} has commented task #${taskNumber} in ${projectName} project:
2 |
3 | ${message}
-------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/task-created.vm: -------------------------------------------------------------------------------- 1 | ${createdByName} has created new task #${taskNumber} in ${projectName} project.
-------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/task-updated.vm: -------------------------------------------------------------------------------- 1 | ${updatedByName} has updated task #${taskNumber} in ${projectName} project.
2 |
3 | #if( $assigneeChanged ) 4 | Assignee changed to ${newAssignee}
5 | #end 6 | #if( $typeChanged ) 7 | Type changed to ${newType}
8 | #end 9 | #if( $priorityChanged ) 10 | Priority changed to ${newPriority}
11 | #end 12 | #if( $statusChanged ) 13 | Status changed to ${newStatus}
14 | #end -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-mail/src/main/resources/message-templates/to-devops/resource-failed.vm: -------------------------------------------------------------------------------- 1 | Resource ${resourceName} failed on Qirk project in ${environment}-${nodeId} environment at ${timestamp}.
2 | Exception stack-trace: ${exceptionMessage} -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/chat/ChatType.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.chat; 2 | 3 | public class ChatType { 4 | 5 | public static final String TASK = "TASK"; 6 | public static final String ISSUE = "ISSUE"; 7 | public static final String PROJECT = "PROJECT"; 8 | public static final String DIALOG = "DIALOG"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/collections/ExtendedArrayUtils.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.collections; 2 | 3 | public abstract class ExtendedArrayUtils { 4 | 5 | public static Object[] buildArrayOfElement(Object element, int size) { 6 | Object[] result = new Object[size]; 7 | for (int i = 0; i < size; i++) { 8 | result[i] = element; 9 | } 10 | return result; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/collections/ExtendedCollectionUtils.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.collections; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public abstract class ExtendedCollectionUtils { 7 | 8 | public static Map buildMapFromKeyAndValue(K key, V value) { 9 | HashMap map = new HashMap(); 10 | map.put(key, value); 11 | return map; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/collections/MapBuilder.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.collections; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class MapBuilder { 7 | 8 | private Map map; 9 | 10 | public MapBuilder() { 11 | map = new HashMap(); 12 | } 13 | 14 | public MapBuilder(Map map) { 15 | this.map = new HashMap(map); 16 | } 17 | 18 | public MapBuilder put(K key, V value) { 19 | map.put(key, value); 20 | return this; 21 | } 22 | 23 | public Map build() { 24 | return map; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/strings/CharSet.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.strings; 2 | 3 | public abstract class CharSet { 4 | 5 | public static final String UTF8 = "utf-8"; 6 | public static final String UTF8_UPPER = UTF8.toUpperCase(); 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/strings/JSONifiable.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.strings; 2 | 3 | import com.fasterxml.jackson.core.JsonProcessingException; 4 | 5 | public interface JSONifiable { 6 | 7 | public String toJson() throws JsonProcessingException; 8 | } 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-util/src/main/java/org/wrkr/clb/common/util/strings/RegExpPattern.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.util.strings; 2 | 3 | public abstract class RegExpPattern { 4 | 5 | public static final String LOWER_CASE_SLUG = "[a-z0-9]"; 6 | public static final String SLUG = "[a-zA-Z0-9_-]"; 7 | public static final String SLUG_WITH_POINT = "[a-zA-Z0-9_.-]"; 8 | public static final String NO_AT_SIGN = "[^@]"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/IdAndUiIdObject.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation; 2 | 3 | public interface IdAndUiIdObject { 4 | 5 | public Long getId(); 6 | 7 | public String getUiId(); 8 | } 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/NotNullIdOrUiIdValidator.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation; 2 | 3 | import javax.validation.ConstraintValidator; 4 | import javax.validation.ConstraintValidatorContext; 5 | 6 | import org.wrkr.clb.common.validation.constraints.NotNullIdOrUiId; 7 | 8 | public class NotNullIdOrUiIdValidator 9 | implements ConstraintValidator { 10 | 11 | @Override 12 | public boolean isValid(IdAndUiIdObject value, @SuppressWarnings("unused") ConstraintValidatorContext context) { 13 | return (value.getId() != null ^ value.getUiId() != null); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/groups/OnCreate.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation.groups; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | public interface OnCreate extends Default { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/groups/OnCreateBatch.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation.groups; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | public interface OnCreateBatch extends Default { 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/groups/OnCreateByEmail.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation.groups; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | public interface OnCreateByEmail extends Default { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-common/qirk-common-validation/src/main/java/org/wrkr/clb/common/validation/groups/OnUpdate.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.common.validation.groups; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | public interface OnUpdate extends Default { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-elasticsearch-datasync/src/main/java/org/wrkr/clb/elasticsearch/datasync/config/DataSourceConfig.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.elasticsearch.datasync.config; 2 | 3 | public class DataSourceConfig { 4 | 5 | private String url; 6 | private String username; 7 | private String password; 8 | 9 | public String getUrl() { 10 | return url; 11 | } 12 | 13 | public void setUrl(String url) { 14 | this.url = url; 15 | } 16 | 17 | public String getUsername() { 18 | return username; 19 | } 20 | 21 | public void setUsername(String username) { 22 | this.username = username; 23 | } 24 | 25 | public String getPassword() { 26 | return password; 27 | } 28 | 29 | public void setPassword(String password) { 30 | this.password = password; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /qirk-parent/qirk-elasticsearch-datasync/src/main/resources/datasync.properties: -------------------------------------------------------------------------------- 1 | database.url=jdbc:postgresql://localhost:5432/clb 2 | database.auth.url=jdbc:postgresql://localhost:5432/clb_auth 3 | database.username=hibernate 4 | database.password=121212 5 | 6 | elasticsearch.nodes=127.0.0.1:9200 7 | elasticsearch.scheme=http 8 | elasticsearch.username=clb1 9 | elasticsearch.password=121212 -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/.env: -------------------------------------------------------------------------------- 1 | REACT_APP_MONEY_SERVER_URL=/clb-crdt-web 2 | REACT_APP_MONEY_SERVER_API_PREFIX=/api 3 | REACT_APP_RUB_PER_LOCAL_USD=60 4 | REACT_APP_TEST_ENV_VAR=false -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/.env.development: -------------------------------------------------------------------------------- 1 | REACT_APP_DEBUG_LOGS=true 2 | REACT_APP_ERROR_LOGS=true 3 | REACT_APP_SERVER_URL=/ 4 | REACT_APP_FRONT_URL=/ 5 | REACT_APP_FRONT_STATIC_PAGES_PATH=pages/ 6 | REACT_APP_API_PREFIX=qirk-web/api 7 | REACT_APP_STATISTICS_API_PREFIX=qirk-statistics-web/api 8 | REACT_APP_MAX_ATTACHMANT_SIZE_BYTES=10485760 9 | REACT_APP_SITE_KEY_FOR_GRECAPTCHA=6LcLwL0UAAAAAG9GME11Z02-yuSBEGreGf3wrJJO 10 | REACT_APP_ATTACHMENT_ACTIVE_TIME=120 11 | REACT_APP_CLOUD_PAYMENTS_PUBLIC_ID=pk_e176eac16b8948ef49c05d90248ba 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/.env.production: -------------------------------------------------------------------------------- 1 | REACT_APP_DEBUG_LOGS=true 2 | REACT_APP_ERROR_LOGS=true 3 | REACT_APP_SERVER_URL=/ 4 | REACT_APP_FRONT_URL=/ 5 | REACT_APP_FRONT_STATIC_PAGES_PATH=pages/ 6 | REACT_APP_API_PREFIX=qirk-web/api 7 | REACT_APP_STATISTICS_API_PREFIX=qirk-statistics-web/api 8 | REACT_APP_MAX_ATTACHMANT_SIZE_BYTES=10485760 9 | REACT_APP_SITE_KEY_FOR_GRECAPTCHA=6LcLwL0UAAAAAG9GME11Z02-yuSBEGreGf3wrJJO 10 | REACT_APP_ATTACHMENT_ACTIVE_TIME=120 11 | REACT_APP_CLOUD_PAYMENTS_PUBLIC_ID=pk_e176eac16b8948ef49c05d90248ba 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-front/front/public/favicon.png -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/actions/cacheUsersActions.ts: -------------------------------------------------------------------------------- 1 | import actions from "../utils/constants"; 2 | import { User } from "../utils/types/User"; 3 | import { Dispatch } from "react"; 4 | import { Action } from "../utils/types/Action"; 5 | 6 | export const addCacheUsersDispatch = (usersList: User[]) => async ( 7 | dispatch: Dispatch 8 | ) => { 9 | dispatch(addCacheUsers(usersList)); 10 | }; 11 | 12 | const addCacheUsers = (usersList: User[]) => ({ 13 | payload: usersList, 14 | type: actions.ADD_CACHE_USERS_LIST 15 | }); 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/assets/pictures/defaultAvatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-front/front/src/assets/pictures/defaultAvatar.jpg -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/AllProjectTasks/AllProjectTasks.sass: -------------------------------------------------------------------------------- 1 | .all-project-tasks-content 2 | &__item-link 3 | &:hover 4 | color: #666 !important 5 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/BreadCrumbs/Breadcrumbs-new.sass: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-front/front/src/components/BreadCrumbs/Breadcrumbs-new.sass -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/BreadCrumbs/Crumb/Crumb.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Link } from "react-router-dom"; 3 | 4 | function Crumb(props) { 5 | return ( 6 | 7 | {props.hasNext && props.url ? ( 8 | {props.name} 9 | ) : ( 10 | {props.name} 11 | )} 12 | {props.hasNext && ` > `} 13 | 14 | ); 15 | } 16 | 17 | export default Crumb; 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/BreadCrumbs/Crumb/Crumb.sass: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nydevel/qirk/8538826c6aec6bf9de9e59b9d5bd1849e2588c6a/qirk-parent/qirk-front/front/src/components/BreadCrumbs/Crumb/Crumb.sass -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Checkbox/Checkbox.sass: -------------------------------------------------------------------------------- 1 | .custom-mdc-checkbox 2 | display: flex 3 | align-items: center 4 | .checkbox-input 5 | 6 | .checkbox-label 7 | margin-left: 8px -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/CreatableSelect/CreatableSelect.sass: -------------------------------------------------------------------------------- 1 | // override global input styling 2 | .react-creatable-select 3 | font-size: 12px 4 | input 5 | height: auto !important 6 | min-width: 0 !important 7 | cursor: pointer 8 | margin: 0 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Dashboard/Favorites/Favorite.sass: -------------------------------------------------------------------------------- 1 | .favorite-item 2 | &__project-name 3 | width: 100% 4 | span 5 | width: 100% 6 | display: inline-block 7 | &__add-task-button 8 | width: 100px 9 | height: 25px 10 | font-size: .75rem 11 | display: none 12 | 13 | .favorite-item__project-name 14 | width: calc(100% - 100px) 15 | .favorite-item__add-task-button 16 | display: inline-block 17 | opacity: 0.28 18 | &:hover 19 | .favorite-item__add-task-button 20 | opacity: 1 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/FavStar/FavStar.sass: -------------------------------------------------------------------------------- 1 | .fav-star__wrapper 2 | width: 15px 3 | height: 15px 4 | position: relative 5 | cursor: pointer 6 | img 7 | width: 100% 8 | height: 100% 9 | position: absolute 10 | top: 0 11 | right: 0 12 | transition: all 95ms ease 13 | img.fav-start__img_unactive 14 | opacity: 1 15 | 16 | .fav-star__wrapper.fav-star__is-fav 17 | img.fav-start__img_active 18 | opacity: 1 19 | &:hover 20 | img.fav-start__img_active 21 | opacity: 0 22 | 23 | .fav-star__wrapper.fav-star__is-not-fav 24 | img.fav-start__img_active 25 | opacity: 0 26 | &:hover 27 | img.fav-start__img_active 28 | opacity: 1 -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Footer/Footer.sass: -------------------------------------------------------------------------------- 1 | .footer 2 | margin-top: 40px 3 | height: 30px 4 | text-align: center 5 | vertical-align: middle -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Input/Input.sass: -------------------------------------------------------------------------------- 1 | @import "../constants" 2 | 3 | .input 4 | &--error 5 | border: 1px solid $red !important 6 | &--disabled 7 | border-color: hsl(0,0%,90%) !important 8 | background-color: hsl(0,0%,95%) !important 9 | &__wrapper 10 | position: relative 11 | input 12 | width: 100% 13 | input[type=checkbox] 14 | width: initial 15 | textarea 16 | width: 100% 17 | &__error 18 | font-size: 12px 19 | margin-top: 3px 20 | color: $red -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/ListItem/ListItem.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./ListItem.sass"; 3 | 4 | function ListItem({ children, className }) { 5 | return ( 6 |
7 | {children && 8 | React.Children.toArray(children) 9 | .filter(child => child) 10 | .map((child, index) =>
{child}
)} 11 |
12 | ); 13 | } 14 | 15 | export default ListItem; 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/ListItem/ListItem.sass: -------------------------------------------------------------------------------- 1 | .list-item 2 | display: flex 3 | justify-content: space-between 4 | margin-bottom: 10px 5 | padding: 10px 6 | background-color: #f0f0f0 7 | border: 1px solid #ededed 8 | div 9 | width: 100% 10 | text-align: center 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/ListItemHeader/ListItemHeader.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import PropTypes from "prop-types"; 3 | import "./ListItemHeader.sass"; 4 | 5 | function ListItemHeader({ fields, className }) { 6 | return ( 7 |
8 | {fields && fields.map((field, index) =>
{field}
)} 9 |
10 | ); 11 | } 12 | 13 | ListItemHeader.propTypes = { 14 | fields: PropTypes.array.isRequired, 15 | className: PropTypes.string 16 | }; 17 | 18 | export default ListItemHeader; 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/ListItemHeader/ListItemHeader.sass: -------------------------------------------------------------------------------- 1 | .list-item-header 2 | display: flex 3 | justify-content: space-between 4 | text-align: center 5 | padding: 0 10px 6 | margin-bottom: 10px 7 | div 8 | width: 100% 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Loading/Loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { makeStyles } from "@material-ui/core/styles"; 3 | import CircularProgress from "@material-ui/core/CircularProgress"; 4 | import "./Loading.sass"; 5 | 6 | const useStyles = makeStyles(() => ({ 7 | progress: { 8 | color: "#6200ee" 9 | } 10 | })); 11 | 12 | export default function Loading({ style ={}, ...props }) { 13 | const classes = useStyles(); 14 | 15 | return ( 16 |
17 | 18 |
19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Loading/Loading.sass: -------------------------------------------------------------------------------- 1 | .loading-wrapper 2 | padding-bottom: 15px 3 | // vertical-align: middle 4 | // * 5 | // vertical-align: middle 6 | // span 7 | 8 | // img 9 | // height: 25px 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/LoadingScreen/LoadingScreen.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./LoadingScreen.sass"; 3 | import Loading from "../Loading/Loading"; 4 | 5 | function LoadingScreen({ message }) { 6 | return ( 7 |
8 |
9 | {/*
*/} 10 | 11 | {message &&
{message}
} 12 |
13 |
14 | ); 15 | } 16 | 17 | export default LoadingScreen; 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/NotificationItem/NotificationItem.sass: -------------------------------------------------------------------------------- 1 | .notification-item 2 | &:hover 3 | background-color: rgb(245, 245, 245) 4 | * 5 | word-break: break-word 6 | 7 | .notification-card__items 8 | .notification-item:last-child 9 | border-bottom: 0 !important 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Page/Page.sass: -------------------------------------------------------------------------------- 1 | .page-wrapper 2 | min-height: calc(100vh - 205px) 3 | a 4 | color: #666 5 | text-decoration: none 6 | &:hover 7 | color: #1875f0 8 | text-decoration: none -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/PrivatePage/PrivatePage.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Page from "../Page/Page"; 3 | import PrivateComponent from "../PrivateComponent/PrivateComponent"; 4 | 5 | function PrivatePage({ children, onLoginConfirmed }) { 6 | return ( 7 | 8 | 9 | {children} 10 | 11 | 12 | ); 13 | } 14 | 15 | export default PrivatePage; 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/ProjectListItem/ProjectListItem.sass: -------------------------------------------------------------------------------- 1 | .project-item 2 | box-shadow: 1px 1px 4px -2px #000 3 | background: #ececec 4 | padding: 10px 5 | border-radius: 5px 6 | margin: 10px 0 0 0 7 | display: flex 8 | position: relative 9 | &__is-fav 10 | .project_add-to-fav 11 | opacity: 1 12 | &__is-not-fav 13 | .project_add-to-fav 14 | opacity: 1 15 | &:hover 16 | .project_add-to-fav 17 | opacity: 1 18 | .project_content 19 | flex: 1 20 | .project_add-to-fav 21 | width: 15px 22 | height: 15px 23 | transition: all 95ms ease -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/PublicFooter/PublicFooter.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function PublicFooter() { 4 | return
; 5 | } 6 | 7 | export default PublicFooter; 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/RadioInput/RadioInput.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Radio, { NativeRadioControl } from "@material/react-radio"; 3 | 4 | function RadioInput({ 5 | label, 6 | value, 7 | name, 8 | id, 9 | onChange, 10 | checked, 11 | disabled, 12 | className, 13 | ...props 14 | }) { 15 | return ( 16 | 17 | 25 | 26 | ); 27 | } 28 | 29 | export default RadioInput; 30 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Select/Select.sass: -------------------------------------------------------------------------------- 1 | // override global input styling 2 | .crs-ValueContainer 3 | input 4 | max-width: 180px 5 | 6 | .react-select 7 | font-size: 14px 8 | input 9 | color: black !important 10 | height: auto !important 11 | min-width: 0 !important 12 | cursor: pointer 13 | margin: 0 14 | 15 | .crs-ValueContainer 16 | flex: 1 17 | margin-top: -14px 18 | margin-left: -4px -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/Tag/Tag.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Chip } from "@material/react-chips"; 3 | 4 | function Tag({ tag: { name, id } }) { 5 | return ; 6 | } 7 | 8 | export default Tag; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TagList/TagList.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { ChipSet } from "@material/react-chips"; 3 | import Tag from "../Tag/Tag"; 4 | 5 | function TagList(props) { 6 | if (!props.tags || props.tags.length === 0) { 7 | return null; 8 | } 9 | 10 | return ( 11 | 12 | {props.tags.map(oneTag => ( 13 | 14 | ))} 15 | 16 | ); 17 | } 18 | 19 | export default TagList; 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TagRadioButton/TagRadioButton.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import classNames from "classnames"; 3 | import "./TagRadioButton.sass"; 4 | 5 | const TagRadioButton = ({ 6 | clickable = true, 7 | selected, 8 | children, 9 | onClick, 10 | ...props 11 | }) => { 12 | return ( 13 | { 15 | if (clickable && onClick) { 16 | onClick(e); 17 | } 18 | }} 19 | className={classNames({ 20 | "trb-tag": true, 21 | "trb-selected-tag": selected, 22 | "trb-clickable-tag": clickable 23 | })} 24 | {...props} 25 | > 26 | {children} 27 | 28 | ); 29 | }; 30 | 31 | export default TagRadioButton; 32 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TagRadioButton/TagRadioButton.sass: -------------------------------------------------------------------------------- 1 | .trb-tag 2 | background: #fff0 3 | border-radius: 20px 4 | padding: 5px 10px 5 | transition: 120ms all ease-in-out 6 | //box-shadow: 1px 1px 1px 0px #00000054 7 | 8 | .trb-selected-tag 9 | background: #e0e0e0 10 | 11 | .trb-clickable-tag 12 | cursor: pointer -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TaskLinks/TaskLinks.sass: -------------------------------------------------------------------------------- 1 | .x-hovered-linked-task 2 | color: red !important 3 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TaskSearchTextFilter/TaskSearchTextFilter.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { TextField } from "@material-ui/core"; 3 | 4 | const TaskSearchTextFilter = ({ ...props }) => { 5 | return ; 6 | }; 7 | 8 | export default TaskSearchTextFilter; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/TypableSelectInput/TypableSelectInput.sass: -------------------------------------------------------------------------------- 1 | .crs-ValueContainer-TSI 2 | overflow: hidden 3 | position: relative -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/components/constants.sass: -------------------------------------------------------------------------------- 1 | $mainGrey: #666666 2 | $supportGrey: #b3b3b3 3 | $elementsGrey: #d8d8d8 4 | $blue: #1875f0 5 | $green: #06ab74 6 | $red: #F74236 7 | 8 | $mediaTabletLandscape: '1024px' 9 | $mediaTablet: '769px' 10 | $mediaMobile: '540px' 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/i18n.ts: -------------------------------------------------------------------------------- 1 | import i18next from "i18next"; 2 | import detector from "i18next-browser-languagedetector"; 3 | import en from "./translations/en.json"; 4 | 5 | const resources = { 6 | en: { 7 | translation: en 8 | } 9 | }; 10 | 11 | i18next.use(detector).init({ 12 | interpolation: { 13 | escapeValue: false 14 | }, 15 | resources, 16 | fallbackLng: "en" 17 | }); 18 | 19 | export default i18next; 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import { Provider } from "react-redux"; 4 | import { ConnectedRouter } from "connected-react-router"; 5 | import App from "./components/App"; 6 | import store from "./utils/store"; 7 | import { history } from "./utils/store"; 8 | import { applyLoggingSettings } from "./utils/logging"; 9 | 10 | applyLoggingSettings(); 11 | 12 | ReactDOM.render( 13 | 14 | 15 | 16 | 17 | , 18 | document.getElementById("root") 19 | ); 20 | 21 | const versionComment = document.createComment( 22 | `UI v${process.env.REACT_APP_VERSION}` 23 | ); 24 | 25 | document.body.appendChild(versionComment); 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/Error/Error.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Page from "../../components/Page/Page"; 3 | import { useTranslation } from "react-i18next"; 4 | 5 | function Error() { 6 | const{t}=useTranslation() 7 | return ( 8 | 9 |

{`${t("something_went_wrong")} ...`}

10 |
11 | ); 12 | } 13 | 14 | export default Error; 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/FavoritesItems/FavoritesItems.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import PrivatePage from "../../components/PrivatePage/PrivatePage"; 3 | import Favorites from "../../components/Dashboard/Favorites/Favorites"; 4 | import "./FavoritesItems.sass"; 5 | import { useTranslation } from "react-i18next"; 6 | 7 | function FavoritesItems() {const{t}=useTranslation() 8 | return ( 9 | 10 |

{t("favorites")}

11 | 12 |
13 | ); 14 | } 15 | 16 | export default FavoritesItems; 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/FavoritesItems/FavoritesItems.sass: -------------------------------------------------------------------------------- 1 | .favorites-page 2 | li 3 | height: 38px 4 | box-shadow: 1px 1px 4px -2px #000 5 | background: #ececec 6 | border-radius: 5px 7 | margin: 10px 0 0 0 8 | display: flex 9 | li > a > .favorite-item__add-task-button 10 | height: 30px 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/Home/SignUpBlock/SignUpBlock.sass: -------------------------------------------------------------------------------- 1 | @import '../../../components/constants' 2 | 3 | .sign-up-block 4 | &__registration 5 | display: flex 6 | flex-direction: row 7 | justify-content: space-evenly 8 | &__announce 9 | text-align: left 10 | margin-right: 20px 11 | button 12 | display: block 13 | margin: auto 14 | &__form 15 | display: flex 16 | align-items: center 17 | border-radius: 3px 18 | padding: 30px 19 | width: 45% 20 | 21 | @media screen and (max-width: 850px) 22 | .sign-up-block 23 | &__registration 24 | flex-direction: column 25 | &__announce 26 | margin-right: 0 27 | text-align: center 28 | &__form 29 | width: 100% -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/Join/Join.sass: -------------------------------------------------------------------------------- 1 | .join 2 | width: 300px 3 | margin: calc(10vh) auto auto 4 | h1 5 | text-align: center 6 | margin: 0 0 30px 7 | &__form 8 | border: 2px solid #F5F5F5 9 | padding: 30px -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/Login/Login.sass: -------------------------------------------------------------------------------- 1 | .login 2 | width: 300px 3 | margin: calc(10vh) auto auto 4 | h1 5 | text-align: center 6 | margin: 0 0 30px 7 | &__form 8 | border: 2px solid #F5F5F5 9 | padding: 30px -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/MyProjects/MyProjects.sass: -------------------------------------------------------------------------------- 1 | .invites 2 | h1 3 | 4 | .invite-project-wrapper 5 | margin: 10px 0 0 0 6 | background: #eee 7 | box-shadow: 1px 1px 4px -2px #000 8 | border-radius: 5px 9 | padding: 10px 10 | .invite-project 11 | display: flex 12 | >a 13 | flex: 1 14 | display: flex 15 | align-items: center 16 | >span 17 | vertical-align: middle 18 | div.controls 19 | button 20 | margin-left: 10px 21 | .invite-text 22 | padding-top: 5px -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/NotFoundPage/NotFoundPage.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "./NotFoundPage.sass"; 3 | import Page from "../../components/Page/Page"; 4 | import { useTranslation } from "react-i18next"; 5 | 6 | function NotFoundPage() {const{t}=useTranslation() 7 | return ( 8 | 9 |
10 |
{t("Not found")}
11 |
404
12 |
13 |
14 | ); 15 | } 16 | 17 | export default NotFoundPage; 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/NotFoundPage/NotFoundPage.sass: -------------------------------------------------------------------------------- 1 | .not-found-page 2 | text-align: center 3 | min-height: calc(100vh - 90px - 330px) 4 | position: relative 5 | display: flex 6 | width: 100% 7 | flex-direction: column 8 | &__text 9 | height: 400px 10 | text-align: center 11 | justify-content: center 12 | align-items: center 13 | position: relative 14 | &_back 15 | top: 0 16 | font-size: 6rem 17 | color: #5f5f5f 18 | line-height: 1.5 19 | &_front 20 | font-size: 8rem 21 | color: #4d4d4d 22 | font-weight: 300 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/ProjectEdit/ProjectEdit.sass: -------------------------------------------------------------------------------- 1 | .organization-project-edit 2 | &__versions-link 3 | text-align: center 4 | margin-top: 30px 5 | &__column-wraper 6 | display: flex 7 | &__column 8 | margin-right: 30px 9 | width: 50% 10 | &__version-create 11 | display: flex 12 | align-items: center 13 | width: 100% 14 | justify-content: space-between 15 | label 16 | width: 100% 17 | button 18 | margin-left: 10px 19 | .btn-as-link 20 | cursor: pointer 21 | margin: 0 20px 22 | 23 | .mdc-text-field 24 | width: 100% 25 | 26 | .projectDescription 27 | width: 100% 28 | 29 | .custom-mdc-checkbox 30 | margin-bottom: 15px 31 | 32 | .mdc-text-field--textarea 33 | margin-top: 15px 34 | width: 100% 35 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/ProjectView/ProjectView.sass: -------------------------------------------------------------------------------- 1 | .item-index-1, .item-index-2, .item-index-3 2 | word-break: break-word -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/ResetPassword/ResetPassword.sass: -------------------------------------------------------------------------------- 1 | .reset-password_wrapper 2 | margin: 50px auto 3 | width: 300px 4 | text-align: center 5 | box-sizing: border-box 6 | border: 3px solid #f7f7f7 7 | padding-bottom: 30px 8 | h1 9 | padding: 0px 15px 10 | div 11 | p 12 | padding: 0 10% 13 | fieldset 14 | padding: 0px 15px 15 | 16 | button 17 | margin-top: 5px 18 | label 19 | text-align: left 20 | display: block 21 | width: 80% 22 | margin: 0 auto 23 | span 24 | text-align: left 25 | padding-bottom: 5px 26 | .input__wrapper 27 | margin: 5px auto 15px auto -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/pages/TaskCreate/TaskCreate.sass: -------------------------------------------------------------------------------- 1 | .project-task-new 2 | &__column-wrapper 3 | display: flex 4 | justify-content: space-between 5 | &__main-column 6 | width: 60% 7 | display: flex 8 | flex-direction: column 9 | &__main-column-select 10 | width: 45% 11 | &__main-column-select-wrapper 12 | justify-content: space-between 13 | display: flex 14 | &__main-column-textarea 15 | height: 100% 16 | div, textarea 17 | height: 96% 18 | &__sub-column 19 | width: 30% 20 | display: flex 21 | flex-direction: column 22 | .assign-to-me-label 23 | display: flex 24 | >span 25 | flex: 1 26 | .assignToMeWrapper 27 | width: 50px 28 | 29 | .headline-and-reset-form-block 30 | display: flex 31 | align-items: center 32 | justify-content: space-between 33 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/reducers/cacheUsersReducer.ts: -------------------------------------------------------------------------------- 1 | import actions from "../utils/constants"; 2 | import { Action } from "../utils/types/Action"; 3 | import { User } from "../utils/types/User"; 4 | 5 | export type CacheUsersReducerState = { 6 | usersList: { [key: string]: User }; 7 | }; 8 | 9 | const INITIAL_STATE: CacheUsersReducerState = { 10 | usersList: {} 11 | }; 12 | 13 | export default ( 14 | state: CacheUsersReducerState = INITIAL_STATE, 15 | action: Action 16 | ): CacheUsersReducerState => { 17 | switch (action.type) { 18 | case actions.DROP_STATE_ON_UNAUTH: 19 | return { ...INITIAL_STATE }; 20 | 21 | case actions.ADD_CACHE_USERS_LIST: 22 | return { ...state, usersList: { ...state.usersList, ...action.payload } }; 23 | 24 | default: 25 | return state; 26 | } 27 | }; 28 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/ChatType.ts: -------------------------------------------------------------------------------- 1 | export enum ChatType {} 2 | // TODO 3 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/NotificationType.ts: -------------------------------------------------------------------------------- 1 | export enum NotificationType { 2 | TASK_CREATED = "TASK_CREATED", 3 | TASK_UPDATED = "TASK_UPDATED", 4 | TASK_COMMENTED = "TASK_COMMENTED" 5 | } 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/RequestStatus.ts: -------------------------------------------------------------------------------- 1 | export enum RequestStatus { 2 | NOT_REQUESTED = "NOT_REQUESTED", 3 | WAITING = "WAITING", 4 | SUCCESS = "SUCCESS", 5 | FAILED = "FAILED" 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/SnackbarType.ts: -------------------------------------------------------------------------------- 1 | export enum SnackbarType { 2 | ERROR = "ERROR", 3 | INFO = "INFO", 4 | WARN = "WARN", 5 | SUCCESS = "SUCCESS" 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/TaskPriority.ts: -------------------------------------------------------------------------------- 1 | export enum TaskPriority { 2 | MAJOR = "MAJOR" // todo 3 | } 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/TaskStatus.ts: -------------------------------------------------------------------------------- 1 | export enum TaskStatus { 2 | OPEN = "OPEN" // todo 3 | } 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/enums/TaskType.ts: -------------------------------------------------------------------------------- 1 | export enum TaskType { 2 | TASK = "TASK", 3 | BUG = "BUG" // todo 4 | } 5 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/favoriteUtils/general.ts: -------------------------------------------------------------------------------- 1 | import { Favorite } from "../types/Favorite"; 2 | 3 | export const favIdOrderListRfomFavList = (favList: Favorite[]) => 4 | favList.map(f => f.id); 5 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/hooks/useInterval.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from "react"; 2 | 3 | export default function useInterval(callback: Function, delay: number) { 4 | const savedCallback = useRef(); 5 | 6 | useEffect(() => { 7 | savedCallback.current = callback; 8 | }, [callback]); 9 | 10 | useEffect(() => { 11 | function tick() { 12 | if (savedCallback && savedCallback.current) { 13 | savedCallback.current(); 14 | } 15 | } 16 | if (delay !== null) { 17 | let id = setInterval(tick, delay); 18 | return () => clearInterval(id); 19 | } 20 | }, [delay]); 21 | } 22 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/hooks/useKeyPress.ts: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export default function useKeyPress(targetKey: any) { 4 | const [keyPressed, setKeyPressed] = useState(false); 5 | 6 | function downHandler({ key }: { key: any }) { 7 | if (key === targetKey) { 8 | setKeyPressed(true); 9 | } 10 | } 11 | 12 | const upHandler = ({ key }: { key: any }) => { 13 | if (key === targetKey) { 14 | setKeyPressed(false); 15 | } 16 | }; 17 | 18 | useEffect(() => { 19 | window.addEventListener("keydown", downHandler); 20 | window.addEventListener("keyup", upHandler); 21 | return () => { 22 | window.removeEventListener("keydown", downHandler); 23 | window.removeEventListener("keyup", upHandler); 24 | }; 25 | }, []); 26 | 27 | return keyPressed; 28 | } 29 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/hooks/useMountEffect.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | 3 | export default (fun: any) => useEffect(fun, []); 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/hooks/useOutsideClickListener.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | 3 | export default (ref: any, onOutsideClick: any, onInsideClick: any) => { 4 | const handleClickOutside = (event: any) => { 5 | if (ref.current && !ref.current.contains(event.target)) { 6 | if (onOutsideClick) { 7 | onOutsideClick(); 8 | } 9 | } else { 10 | if (onInsideClick) { 11 | onInsideClick(); 12 | } 13 | } 14 | }; 15 | 16 | useEffect(() => { 17 | document.addEventListener("mousedown", handleClickOutside); 18 | return () => { 19 | document.removeEventListener("mousedown", handleClickOutside); 20 | }; 21 | }); 22 | }; 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/logging.ts: -------------------------------------------------------------------------------- 1 | export const applyLoggingSettings = () => {}; 2 | 3 | const disableConsoleMethods = () => {}; 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/store.ts: -------------------------------------------------------------------------------- 1 | import { createStore, compose, applyMiddleware } from "redux"; 2 | import { createBrowserHistory } from "history"; 3 | import { routerMiddleware } from "connected-react-router"; 4 | import { createLogger } from "redux-logger"; 5 | import thunk from "redux-thunk"; 6 | import reducers from "../reducers"; 7 | 8 | export const history = createBrowserHistory(); 9 | 10 | const middlewares = [routerMiddleware(history), thunk]; 11 | 12 | if (process.env.NODE_ENV === "development") { 13 | middlewares.push( 14 | createLogger({ 15 | collapsed: true 16 | }) 17 | ); 18 | } 19 | 20 | export default createStore( 21 | reducers(history), 22 | compose(applyMiddleware(...middlewares)) 23 | ); 24 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/timeUtils.ts: -------------------------------------------------------------------------------- 1 | import moment from "moment"; 2 | 3 | const formatTime = (time: any, format: any) => moment(time).format(format); 4 | 5 | export const uiDateTime = (time: any) => formatTime(time, "LLLL"); 6 | 7 | export const uiDate = (time: any) => formatTime(time, "LL"); 8 | 9 | export const uiTime = (time: any) => formatTime(time, "LT"); 10 | 11 | export const debugDateTime = (time: any) => 12 | formatTime(time, "DD.MM.YYYY k:mm:ss (x)"); 13 | 14 | export const unixMillisecondTimestamp = (time: any) => formatTime(time, "x"); // task search timestamp 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Action.ts: -------------------------------------------------------------------------------- 1 | export type Action = { 2 | type: string; 3 | payload?: any; 4 | }; 5 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Attachment.ts: -------------------------------------------------------------------------------- 1 | export type Attachment = { 2 | // todo 3 | 4 | id: number; 5 | uuid: string; 6 | }; 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Card.ts: -------------------------------------------------------------------------------- 1 | export type Card = { 2 | id: number; // todo 3 | }; 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/ChatMessage.ts: -------------------------------------------------------------------------------- 1 | import { ChatSender } from "./ChatSender"; 2 | 3 | export type ChatMessage = { 4 | sender_id: ChatSender["id"]; 5 | timestamp: { iso8601: string; epoch_milli: number }; 6 | message: string; 7 | external_uuid: string; 8 | }; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/ChatSender.ts: -------------------------------------------------------------------------------- 1 | import { User } from "./User"; 2 | 3 | export type ChatSender = User; // todo 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Favorite.ts: -------------------------------------------------------------------------------- 1 | import { Project } from "./Project"; 2 | 3 | export type Favorite = { 4 | id: number; 5 | project: Project; 6 | can_create_task: boolean; 7 | }; 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Notification.ts: -------------------------------------------------------------------------------- 1 | import { NotificationType } from "../enums/NotificationType"; 2 | 3 | export type NotificationResponse = { 4 | timestamp: { iso8601: string; epoch_milli: number }; 5 | iso8601: string; 6 | epoch_milli: number; 7 | notification_type: NotificationType; 8 | json: string; 9 | }; 10 | 11 | export type NotificationLocal = { 12 | //todo 13 | }; 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Project.ts: -------------------------------------------------------------------------------- 1 | export type Project = { 2 | id: number; 3 | name: string; 4 | ui_id: string; 5 | }; 6 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/ProjectMember.ts: -------------------------------------------------------------------------------- 1 | export type ProjectMember = { 2 | id: number; // todo 3 | }; 4 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Road.ts: -------------------------------------------------------------------------------- 1 | import { Card } from "./Card"; 2 | 3 | export type Road = { 4 | id: number; // todo 5 | 6 | // local mutations 7 | cardsOrder: Card["id"][]; 8 | }; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Snackbar.ts: -------------------------------------------------------------------------------- 1 | import { SnackbarType } from "../enums/SnackbarType"; 2 | 3 | export type Snackbar = { 4 | message: string | null; 5 | type: SnackbarType; 6 | }; 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/Task.ts: -------------------------------------------------------------------------------- 1 | import { TaskType } from "../enums/TaskType"; 2 | import { TaskPriority } from "../enums/TaskPriority"; 3 | import { TaskStatus } from "../enums/TaskStatus"; 4 | 5 | export type Task = { 6 | id: number; 7 | number: number; 8 | summary: string; 9 | reporter: { id: number }; 10 | assignee: { id: number }; 11 | created_at: string; 12 | updated_at: string; 13 | task_type: { name_code: TaskType }; 14 | task_priority: { name_code: TaskPriority }; 15 | task_status: { name_code: TaskStatus }; 16 | }; 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/src/utils/types/User.ts: -------------------------------------------------------------------------------- 1 | export type User = { 2 | id: number; 3 | email: string; 4 | username: string; 5 | full_name: string; 6 | }; 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/front/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "noEmit": true, 20 | "jsx": "react" 21 | }, 22 | "include": [ 23 | "src" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-front/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | ROOT 6 | 7 | index.html 8 | 9 | 10 | 404 11 | /index.html 12 | 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/psql/_initial-1.sql: -------------------------------------------------------------------------------- 1 | -- do it using postgres user 2 | -- exec \q if you are already connected to clb database 3 | DROP DATABASE qirk; 4 | DROP USER hibernate; 5 | CREATE DATABASE qirk WITH TEMPLATE=template0 ENCODING='UTF8'; 6 | CREATE USER hibernate WITH ENCRYPTED PASSWORD '121212'; 7 | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hibernate; 8 | GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO hibernate; 9 | 10 | -- requires password of hibernate user 11 | -- \c clb hibernate 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/psql/auth/_initial-1.sql: -------------------------------------------------------------------------------- 1 | -- do it using postgres user 2 | -- exec \q if you are already connected to clb_auth database 3 | CREATE DATABASE qirk_auth WITH TEMPLATE=template0 ENCODING='UTF8'; 4 | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hibernate; 5 | GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO hibernate; 6 | 7 | -- requires password of hibernate user 8 | -- \c clb_auth hibernate 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/psql/auth/_initial-2.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE persistent_logins( 2 | username VARCHAR(256) NOT NULL, 3 | series VARCHAR(64) PRIMARY KEY, 4 | token VARCHAR(64) NOT NULL, 5 | last_used TIMESTAMP NOT NULL 6 | ); 7 | 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/psql/auth/alter-2.0.0-1.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE remember_me_token( 2 | id bigserial PRIMARY KEY, 3 | token VARCHAR(72) CONSTRAINT remember_me_token__token_uniq UNIQUE NOT NULL, 4 | user_id BIGINT NOT NULL, 5 | created_at TIMESTAMP WITH TIME ZONE NOT NULL, 6 | updated_at TIMESTAMP WITH TIME ZONE NOT NULL 7 | ); 8 | 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/BaseEntity.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | import javax.persistence.MappedSuperclass; 4 | 5 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 6 | 7 | 8 | @MappedSuperclass 9 | @JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) 10 | public abstract class BaseEntity { 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/BaseEntityMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | public abstract class BaseEntityMeta { 4 | 5 | private String tableAlias = ""; 6 | 7 | public BaseEntityMeta() { 8 | }; 9 | 10 | public BaseEntityMeta(String tableAlias) { 11 | this.tableAlias = tableAlias; 12 | }; 13 | 14 | public String getTableAlias() { 15 | return tableAlias; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/BaseIdEntityMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | public abstract class BaseIdEntityMeta extends BaseEntityMeta { 4 | 5 | public static final String id = "id"; 6 | 7 | public BaseIdEntityMeta() { 8 | super(); 9 | }; 10 | 11 | public BaseIdEntityMeta(String tableAlias) { 12 | super(tableAlias); 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/BaseVersionedEntityMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | public abstract class BaseVersionedEntityMeta extends BaseIdEntityMeta { 4 | 5 | public static final String recordVersion = "record_version"; 6 | 7 | public BaseVersionedEntityMeta() { 8 | super(); 9 | }; 10 | 11 | public BaseVersionedEntityMeta(String tableAlias) { 12 | super(tableAlias); 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/UiIdEntity.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | public interface UiIdEntity { 4 | 5 | public static final int UI_ID_LENGTH = 23; 6 | 7 | public String getUiId(); 8 | 9 | public void setUiId(String uiId); 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/VersionedIdEntity.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model; 2 | 3 | public interface VersionedIdEntity { 4 | 5 | public Long getId(); 6 | 7 | public void setId(Long id); 8 | 9 | public Long getRecordVersion(); 10 | 11 | public void setRecordVersion(Long recordVersion); 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/auth/RememberMeTokenMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.auth; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class RememberMeTokenMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "remember_me_token"; 8 | 9 | public static final String token = "token"; 10 | public static final String userId = "user_id"; 11 | public static final String createdAt = "created_at"; 12 | public static final String updatedAt = "updated_at"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/ApplicationStatusMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class ApplicationStatusMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "application_status"; 8 | 9 | public static final String nameCode = "name_code"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/GrantedPermissionsProjectInviteMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | public class GrantedPermissionsProjectInviteMeta extends ProjectInviteMeta { 4 | 5 | public static final String TABLE_NAME = "granted_permissions_project_invite"; 6 | 7 | public static final String writeAllowed = "write_allowed"; 8 | public static final String manager = "manager"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/InviteStatusMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class InviteStatusMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "invite_status"; 8 | 9 | public static final String nameCode = "name_code"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/IssueMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class IssueMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "issue"; 8 | 9 | public static final String summary = "summary"; 10 | public static final String description = "description"; 11 | public static final String projectId = "project_id"; 12 | public static final String reporterId = "user_id"; 13 | public static final String sourceExternalId = "source_external_id"; 14 | public static final String sourceURL = "source_url"; 15 | public static final String createdAt = "created_at"; 16 | public static final String taskId = "task_id"; 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/MemoMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class MemoMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "memo"; 8 | 9 | public static final String body = "body"; 10 | public static final String projectId = "project_id"; 11 | public static final String authorId = "author_project_member_id"; 12 | public static final String createdAt = "created_at"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/ProjectApplicationMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class ProjectApplicationMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "project_application"; 8 | 9 | public static final String userId = "user_id"; 10 | public static final String projectId = "project_id"; 11 | public static final String text = "text"; 12 | public static final String createdAt = "created_at"; 13 | public static final String updatedAt = "updated_at"; 14 | public static final String statusId = "status_id"; 15 | public static final String reported = "reported"; 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/ProjectInviteMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class ProjectInviteMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "project_invite"; 8 | 9 | public static final String senderId = "sender_user_id"; 10 | public static final String userId = "user_id"; 11 | public static final String projectId = "project_id"; 12 | public static final String text = "text"; 13 | public static final String createdAt = "created_at"; 14 | public static final String updatedAt = "updated_at"; 15 | public static final String statusId = "status_id"; 16 | public static final String reported = "reported"; 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/ProjectInviteTokenMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class ProjectInviteTokenMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "project_invite_token"; 8 | 9 | public static final String inviteId = "invite_id"; 10 | public static final String token = "token"; 11 | public static final String emailAddress = "email_address"; 12 | public static final String createdAt = "created_at"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/imprt/jira/ImportedJiraProjectMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.imprt.jira; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class ImportedJiraProjectMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "imported_jira_project"; 8 | 9 | public static final String projectId = "project_id"; 10 | public static final String uploadTimestamp = "upload_timestamp"; 11 | public static final String jiraProjectId = "jira_project_id"; 12 | public static final String jiraProjectKey = "jira_project_key"; 13 | public static final String jiraProjectName = "jira_project_name"; 14 | public static final String updatedAt = "updated_at"; 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/imprt/jira/ImportedJiraTaskMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.imprt.jira; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class ImportedJiraTaskMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "imported_jira_task"; 8 | 9 | public static final String projectId = "project_id"; 10 | public static final String taskId = "task_id"; 11 | public static final String jiraTaskId = "jira_task_id"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/imprt/jira/JiraUpload.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.imprt.jira; 2 | 3 | public class JiraUpload { 4 | 5 | private Long uploadTimestamp; 6 | private String archiveFilename; 7 | 8 | public Long getUploadTimestamp() { 9 | return uploadTimestamp; 10 | } 11 | 12 | public void setUploadTimestamp(Long uploadTimestamp) { 13 | this.uploadTimestamp = uploadTimestamp; 14 | } 15 | 16 | public String getArchiveFilename() { 17 | return archiveFilename; 18 | } 19 | 20 | public void setArchiveFilename(String archiveFilename) { 21 | this.archiveFilename = archiveFilename; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/imprt/jira/JiraUploadMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.imprt.jira; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class JiraUploadMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "jira_upload"; 8 | 9 | public static final String uploadTimestamp = "upload_timestamp"; 10 | public static final String archiveFilename = "archive_filename"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/roadmap/RoadMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.roadmap; 2 | 3 | import org.wrkr.clb.model.BaseVersionedEntityMeta; 4 | 5 | public class RoadMeta extends BaseVersionedEntityMeta { 6 | 7 | public static final String TABLE_NAME = "road"; 8 | 9 | public static final String projectId = "project_id"; 10 | public static final String name = "name"; 11 | public static final String previousId = "previous_id"; 12 | public static final String deleted = "deleted"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/roadmap/TaskCardMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.roadmap; 2 | 3 | import org.wrkr.clb.model.BaseVersionedEntityMeta; 4 | 5 | public class TaskCardMeta extends BaseVersionedEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_card"; 8 | 9 | public static final String projectId = "project_id"; 10 | public static final String roadId = "road_id"; 11 | public static final String name = "name"; 12 | public static final String status = "status"; 13 | public static final String active = "active"; 14 | public static final String previousId = "previous_id"; 15 | public static final String createdAt = "created_at"; 16 | public static final String archievedAt = "archieved_at"; 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/ProjectTaskNumberSequence.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import javax.persistence.Column; 4 | import javax.persistence.Entity; 5 | import javax.persistence.Table; 6 | 7 | import org.wrkr.clb.model.BaseIdEntity; 8 | 9 | 10 | @Entity 11 | @Table(name = ProjectTaskNumberSequenceMeta.TABLE_NAME) 12 | public class ProjectTaskNumberSequence extends BaseIdEntity { 13 | 14 | @Column(name = "next_task_number", nullable = false) 15 | private Long nextTaskNumber = 1L; 16 | 17 | public Long getNextTaskNumber() { 18 | return nextTaskNumber; 19 | } 20 | 21 | public void setNextTaskNumber(Long nextTaskNumber) { 22 | this.nextTaskNumber = nextTaskNumber; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/ProjectTaskNumberSequenceMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class ProjectTaskNumberSequenceMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "project_task_number_sequence"; 8 | 9 | public static final String nextTaskNumber = "next_task_number"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskHashtagMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class TaskHashtagMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_hashtag"; 8 | 9 | public static final String projectId = "project_id"; 10 | public static final String name = "name"; 11 | 12 | public static final TaskHashtagToTaskMeta tasks = new TaskHashtagToTaskMeta(); 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskHashtagToTaskMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | public class TaskHashtagToTaskMeta { 4 | 5 | public static final String TABLE_NAME = "task_hashtag__task"; 6 | 7 | public static final String taskId = "task_id"; 8 | public static final String taskHashtagId = "task_hashtag_id"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskLink.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseEntity; 4 | 5 | public class TaskLink extends BaseEntity { 6 | 7 | private Long task1Id; 8 | private Long task2Id; 9 | 10 | public Long getTask1Id() { 11 | return task1Id; 12 | } 13 | 14 | public void setTask1Id(Long task1Id) { 15 | this.task1Id = task1Id; 16 | } 17 | 18 | public Long getTask2Id() { 19 | return task2Id; 20 | } 21 | 22 | public void setTask2Id(Long task2Id) { 23 | this.task2Id = task2Id; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskLinkMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class TaskLinkMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_link"; 8 | 9 | public static final String task1Id = "task1_id"; 10 | public static final String task2Id = "task2_id"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskPriorityMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class TaskPriorityMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_priority"; 8 | 9 | public static final String nameCode = "name_code"; 10 | public static final String importance = "importance"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskStatusMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class TaskStatusMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_status"; 8 | 9 | public static final String nameCode = "name_code"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskSubscriber.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseEntity; 4 | 5 | public class TaskSubscriber extends BaseEntity { 6 | 7 | private long taskId; 8 | private long userId; 9 | 10 | public long getTaskId() { 11 | return taskId; 12 | } 13 | 14 | public void setTaskId(long taskId) { 15 | this.taskId = taskId; 16 | } 17 | 18 | public long getUserId() { 19 | return userId; 20 | } 21 | 22 | public void setUserId(long userId) { 23 | this.userId = userId; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskSubscriberMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class TaskSubscriberMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_subscriber"; 8 | 9 | public static final String taskId = "task_id"; 10 | public static final String userId = "user_id"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/TaskTypeMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class TaskTypeMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "task_type"; 8 | 9 | public static final String nameCode = "name_code"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/attachment/AttachmentMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task.attachment; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public abstract class AttachmentMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "attachment"; 8 | 9 | public static final String filename = "filename"; 10 | public static final String externalPath = "external_path"; 11 | public static final String taskId = "task_id"; 12 | public static final String deleted = "deleted"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/project/task/attachment/TemporaryAttachmentMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.project.task.attachment; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public abstract class TemporaryAttachmentMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "temporary_attachment"; 8 | 9 | public static final String uuid = "uuid"; 10 | public static final String filename = "filename"; 11 | public static final String path = "path"; 12 | public static final String projectId = "project_id"; 13 | public static final String createdAt = "created_at"; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/FailedLoginAttempt.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseEntity; 4 | 5 | public class FailedLoginAttempt extends BaseEntity { 6 | 7 | private long userId; 8 | 9 | private long failedAt; 10 | 11 | public long getUserId() { 12 | return userId; 13 | } 14 | 15 | public void setUserId(long userId) { 16 | this.userId = userId; 17 | } 18 | 19 | public long getFailedAt() { 20 | return failedAt; 21 | } 22 | 23 | public void setFailedAt(long failedAt) { 24 | this.failedAt = failedAt; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/FailedLoginAttemptMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class FailedLoginAttemptMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "failed_login_attempt"; 8 | 9 | public static final String userId = "user_id"; 10 | public static final String failedAt = "failed_at"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/LoginStatisticsMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class LoginStatisticsMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "login_statistics"; 8 | 9 | public static final String internetAddress = "internet_address"; 10 | public static final String userId = "user_id"; 11 | public static final String loginAt = "login_at"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/NotificationSettingsMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseEntityMeta; 4 | 5 | public class NotificationSettingsMeta extends BaseEntityMeta { 6 | 7 | public static final String TABLE_NAME = "notification_settings"; 8 | 9 | public static final String userId = "user_id"; 10 | public static final String taskCreated = "task_created"; 11 | public static final String taskUpdated = "task_updated"; 12 | public static final String taskCommented = "task_commented"; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/PasswordActivationTokenMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class PasswordActivationTokenMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "password_activation_token"; 8 | 9 | public static final String token = "token"; 10 | public static final String userId = "user_id"; 11 | public static final String createdAt = "created_at"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/UserFavoriteMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class UserFavoriteMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "user_favorite"; 8 | 9 | public static final String userId = "user_id"; 10 | public static final String projectId = "project_id"; 11 | public static final String previousId = "previous_id"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-model/src/main/java/org/wrkr/clb/model/user/UserMeta.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.model.user; 2 | 3 | import org.wrkr.clb.model.BaseIdEntityMeta; 4 | 5 | public class UserMeta extends BaseIdEntityMeta { 6 | 7 | public static final String TABLE_NAME = "user_profile"; 8 | 9 | public static final String username = "username"; 10 | public static final String emailAddress = "email_address"; 11 | public static final String passwordHash = "password_hash"; 12 | public static final String createdAt = "created_at"; 13 | public static final String manager = "manager"; 14 | public static final String fullName = "full_name"; 15 | 16 | public static final UserMeta DEFAULT = new UserMeta(TABLE_NAME); 17 | 18 | public UserMeta(String tableAlias) { 19 | super(tableAlias); 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/EnumEntityRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo; 2 | 3 | public interface EnumEntityRepo> { 4 | 5 | public T getByNameCode(E enumNameCode); 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/JDBCBaseMainRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jdbc.core.JdbcTemplate; 8 | import org.springframework.stereotype.Repository; 9 | import org.wrkr.clb.common.jdbc.BaseRepo; 10 | 11 | 12 | @Repository 13 | public abstract class JDBCBaseMainRepo extends BaseRepo { 14 | 15 | @Override 16 | @Autowired 17 | @Qualifier("dataSource") 18 | public void setDataSource(DataSource dataSource) { 19 | setJdbcTemplate(new JdbcTemplate(dataSource)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/MainDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo; 2 | 3 | import org.springframework.stereotype.Repository; 4 | 5 | @Repository 6 | public class MainDatabaseRepo extends JDBCBaseMainRepo { 7 | 8 | private static final String SELECT_1 = "SELECT 1;"; 9 | 10 | public void check() { 11 | getJdbcTemplate().queryForList(SELECT_1); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/auth/AuthDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.auth; 2 | 3 | import org.springframework.stereotype.Repository; 4 | 5 | @Repository 6 | public class AuthDatabaseRepo extends BaseAuthRepo { 7 | 8 | private static final String SELECT_1 = "SELECT 1;"; 9 | 10 | public void check() { 11 | getJdbcTemplate().queryForList(SELECT_1); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/auth/BaseAuthRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.auth; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jdbc.core.JdbcTemplate; 8 | import org.wrkr.clb.common.jdbc.BaseRepo; 9 | 10 | public abstract class BaseAuthRepo extends BaseRepo { 11 | 12 | @Override 13 | @Autowired 14 | @Qualifier("authDataSource") 15 | public void setDataSource(DataSource dataSource) { 16 | setJdbcTemplate(new JdbcTemplate(dataSource)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/mapper/BaseEntityMapper.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.mapper; 2 | 3 | import org.wrkr.clb.common.jdbc.BaseMapper; 4 | import org.wrkr.clb.model.BaseEntity; 5 | import org.wrkr.clb.model.BaseEntityMeta; 6 | 7 | public abstract class BaseEntityMapper extends BaseMapper { 8 | 9 | public BaseEntityMapper() { 10 | } 11 | 12 | @Deprecated 13 | public BaseEntityMapper(String tableName) { 14 | super(tableName); 15 | } 16 | 17 | public BaseEntityMapper(BaseEntityMeta entityMeta) { 18 | super(entityMeta.getTableAlias()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/mapper/security/SecurityIssueWithProjectAndMembershipMapper.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.mapper.security; 2 | 3 | import org.wrkr.clb.model.project.ProjectMemberMeta; 4 | import org.wrkr.clb.model.project.ProjectMeta; 5 | import org.wrkr.clb.model.user.UserMeta; 6 | 7 | public class SecurityIssueWithProjectAndMembershipMapper extends SecurityIssueWithProjectMapper { 8 | 9 | public SecurityIssueWithProjectAndMembershipMapper(String issueTableName, ProjectMeta projectMeta, 10 | ProjectMemberMeta projectMemberMeta, UserMeta userMeta) { 11 | super(issueTableName); 12 | this.projectMapper = new SecurityProjectWithMembershipMapper( 13 | projectMeta, projectMemberMeta, userMeta); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/mapper/security/SecurityMemoWithProjectAndMembershipMapper.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.mapper.security; 2 | 3 | import org.wrkr.clb.model.project.ProjectMemberMeta; 4 | import org.wrkr.clb.model.project.ProjectMeta; 5 | import org.wrkr.clb.model.user.UserMeta; 6 | 7 | public class SecurityMemoWithProjectAndMembershipMapper extends SecurityMemoWithProjectMapper { 8 | 9 | public SecurityMemoWithProjectAndMembershipMapper(String memoTableName, ProjectMeta projectMeta, 10 | ProjectMemberMeta projectMemberMeta, UserMeta userMeta) { 11 | super(memoTableName); 12 | this.projectMapper = new SecurityProjectWithMembershipMapper( 13 | projectMeta, projectMemberMeta, userMeta); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/mapper/security/SecurityTaskHashtagWithProjectAndMembershipMapper.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.mapper.security; 2 | 3 | import org.wrkr.clb.model.project.ProjectMemberMeta; 4 | import org.wrkr.clb.model.project.ProjectMeta; 5 | import org.wrkr.clb.model.user.UserMeta; 6 | 7 | public class SecurityTaskHashtagWithProjectAndMembershipMapper extends SecurityTaskHashtagWithProjectMapper { 8 | 9 | public SecurityTaskHashtagWithProjectAndMembershipMapper(String hashtagTableName, ProjectMeta projectMeta, 10 | ProjectMemberMeta projectMemberMeta, UserMeta userMeta) { 11 | super(hashtagTableName); 12 | this.projectMapper = new SecurityProjectWithMembershipMapper( 13 | projectMeta, projectMemberMeta, userMeta); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-repo/src/main/java/org/wrkr/clb/repo/mapper/security/SecurityTaskWithProjectAndMembershipMapper.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.repo.mapper.security; 2 | 3 | import org.wrkr.clb.model.project.ProjectMemberMeta; 4 | import org.wrkr.clb.model.project.ProjectMeta; 5 | import org.wrkr.clb.model.user.UserMeta; 6 | 7 | public class SecurityTaskWithProjectAndMembershipMapper extends SecurityTaskWithProjectMapper { 8 | 9 | public SecurityTaskWithProjectAndMembershipMapper(String taskTableName, ProjectMeta projectMeta, 10 | ProjectMemberMeta projectMemberMeta, UserMeta userMeta) { 11 | super(taskTableName); 12 | this.projectMapper = new SecurityProjectWithMembershipMapper( 13 | projectMeta, projectMemberMeta, userMeta); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/api/OAuthService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.api; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.springframework.validation.annotation.Validated; 6 | 7 | 8 | @Validated 9 | public interface OAuthService { 10 | 11 | public String getToken(@NotNull(message = "code must not be null") String code, 12 | @NotNull(message = "redirectURI must not be null") String redirectURI) throws Exception; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/api/elasticsearch/ElasticsearchTaskService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.api.elasticsearch; 2 | 3 | import java.io.IOException; 4 | 5 | import org.elasticsearch.search.SearchHits; 6 | import org.wrkr.clb.model.project.task.Task; 7 | import org.wrkr.clb.repo.context.TaskSearchContext; 8 | 9 | public interface ElasticsearchTaskService extends ElasticsearchService { 10 | 11 | public void updateForJira(Task task) throws IOException; 12 | 13 | public void updateCardAndHidden(Task task) throws Exception; 14 | 15 | public SearchHits search(Long projectId, TaskSearchContext searchContext, int size) throws Exception; 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/BaseEntityDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | public class BaseEntityDTO { 4 | } 5 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/ChatPermissionsDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import org.wrkr.clb.common.crypto.dto.TokenAndIvDTO; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class ChatPermissionsDTO { 8 | 9 | public String token; 10 | 11 | public String IV; 12 | 13 | @JsonProperty(value = "can_read") 14 | public boolean canRead; 15 | 16 | @JsonProperty(value = "can_write") 17 | public boolean canWrite; 18 | 19 | public ChatPermissionsDTO(TokenAndIvDTO tokenAndIV, boolean canRead, boolean canWrite) { 20 | this.token = tokenAndIV.token; 21 | this.IV = tokenAndIV.IV; 22 | this.canRead = canRead; 23 | this.canWrite = canWrite; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/ExistsDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | public class ExistsDTO extends BaseEntityDTO { 4 | 5 | public boolean exists; 6 | 7 | public ExistsDTO(boolean exists) { 8 | this.exists = exists; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/ExpiresAtDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class ExpiresAtDTO { 6 | 7 | @JsonProperty(value = "expires_at") 8 | public long expiresAt; 9 | 10 | public ExpiresAtDTO(long expiresAt) { 11 | this.expiresAt = expiresAt; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/MoveDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class MoveDTO extends IdDTO { 6 | 7 | @JsonProperty(value = "old_previous") 8 | public Long oldPreviousId; 9 | 10 | @JsonProperty(value = "old_next") 11 | public Long oldNextId; 12 | 13 | @JsonProperty(value = "previous") 14 | public Long previousId; 15 | 16 | @JsonProperty(value = "next") 17 | public Long nextId; 18 | } 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/NameCodeDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class NameCodeDTO { 6 | 7 | @JsonProperty(value = "name_code") 8 | public String nameCode; 9 | 10 | public NameCodeDTO(String nameCode) { 11 | this.nameCode = nameCode; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/OAuthCodeDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | public class OAuthCodeDTO extends VersionedEntityDTO { 6 | 7 | @NotNull(message = "code in OAuthCodeDTO must not be null") 8 | public String code; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/PaginatedListDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.wrkr.clb.services.dto.meta.PaginationMetaDTO; 7 | 8 | public class PaginatedListDTO { 9 | 10 | public List data; 11 | public PaginationMetaDTO meta; 12 | 13 | public PaginatedListDTO() { 14 | this.data = new ArrayList(); 15 | this.meta = new PaginationMetaDTO(); 16 | } 17 | 18 | public PaginatedListDTO(List data, long total) { 19 | this.data = data; 20 | this.meta = new PaginationMetaDTO(total); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/RejectDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | public class RejectDTO extends IdDTO { 6 | 7 | @NotNull(message = "reported in RejectDTO must not be null") 8 | public Boolean reported; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/RetryAfterDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class RetryAfterDTO { 6 | 7 | @JsonProperty(value = "retry_after") 8 | public long retryAfterSeconds; 9 | 10 | public RetryAfterDTO(long retryAfterSeconds) { 11 | this.retryAfterSeconds = retryAfterSeconds; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/TokenDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | public class TokenDTO { 6 | 7 | @NotNull(message = "token in TokenDTO must not be null") 8 | public String token; 9 | 10 | public TokenDTO() { 11 | } 12 | 13 | public TokenDTO(String token) { 14 | this.token = token; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/TokenRejectDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | public class TokenRejectDTO extends TokenDTO { 6 | 7 | @NotNull(message = "reported in TokenRejectDTO must not be null") 8 | public Boolean reported; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/UuidDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto; 2 | 3 | public class UuidDTO { 4 | 5 | public String uuid; 6 | 7 | public UuidDTO(String uuid) { 8 | this.uuid = uuid; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/elasticsearch/ElasticsearchEntityDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.elasticsearch; 2 | 3 | import org.wrkr.clb.common.util.strings.JSONifiable; 4 | 5 | public abstract class ElasticsearchEntityDTO implements JSONifiable { 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/meta/ExternalUuidDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.meta; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class ExternalUuidDTO { 6 | 7 | @JsonProperty(value = "external_uuid") 8 | public String externalUuid; 9 | 10 | @Deprecated 11 | @JsonProperty(value = "uuid") 12 | public String getUuid() { 13 | return externalUuid; 14 | } 15 | 16 | public ExternalUuidDTO(String uuid) { 17 | this.externalUuid = uuid; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/meta/PaginationMetaDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.meta; 2 | 3 | public class PaginationMetaDTO { 4 | 5 | public long total = 0L; 6 | 7 | public PaginationMetaDTO() { 8 | } 9 | 10 | public PaginationMetaDTO(long total) { 11 | this.total = total; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/MemoDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project; 2 | 3 | import javax.validation.Valid; 4 | import javax.validation.constraints.NotNull; 5 | 6 | import org.wrkr.clb.common.validation.groups.OnCreate; 7 | import org.wrkr.clb.services.dto.IdOrUiIdDTO; 8 | 9 | import com.fasterxml.jackson.annotation.JsonProperty; 10 | 11 | public class MemoDTO { 12 | 13 | @JsonProperty(value = "project") 14 | @NotNull(message = "project in MemoDTO must not be null", groups = OnCreate.class) 15 | @Valid 16 | public IdOrUiIdDTO project; 17 | 18 | @NotNull(message = "project in MemoDTO must not be null") 19 | public String body; 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/MoveToRoadDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project; 2 | 3 | import org.wrkr.clb.services.dto.MoveDTO; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class MoveToRoadDTO extends MoveDTO { 8 | 9 | @JsonProperty(value = "road") 10 | public Long roadId; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/ProjectApplicationDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | /** 8 | * @author Evgeny Poreykin 9 | * 10 | */ 11 | public class ProjectApplicationDTO { 12 | 13 | @JsonProperty(value = "project") 14 | @NotNull(message = "project in ProjectApplicationDTO must not be null") 15 | public Long projectId; 16 | 17 | @NotNull(message = "text in ProjectApplicationDTO must not be null") 18 | public String text; 19 | } 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/ProjectMemberListDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project; 2 | 3 | import java.util.List; 4 | 5 | import javax.validation.Valid; 6 | import javax.validation.constraints.NotEmpty; 7 | import javax.validation.constraints.NotNull; 8 | 9 | import com.fasterxml.jackson.annotation.JsonProperty; 10 | 11 | public class ProjectMemberListDTO { 12 | 13 | @NotEmpty(message = "members in ProjectMemberListDTO must not be empty") 14 | @Valid 15 | public List members; 16 | 17 | @JsonProperty(value = "project") 18 | @NotNull(message = "project in ProjectMemberListDTO must not be null") 19 | public Long projectId; 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/ProjectMemberPermissionsDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.wrkr.clb.services.dto.IdDTO; 6 | 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | 9 | public class ProjectMemberPermissionsDTO extends IdDTO { 10 | 11 | @JsonProperty(value = "write_allowed") 12 | @NotNull(message = "write_allowed in ProjectMemberPermissionsDTO must not be null") 13 | public Boolean writeAllowed; 14 | 15 | @NotNull(message = "manager in ProjectMemberPermissionsDTO must not be null") 16 | public Boolean manager; 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/task/AttachmentCreateDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project.task; 2 | 3 | import java.util.List; 4 | 5 | import javax.validation.constraints.NotEmpty; 6 | import javax.validation.constraints.NotNull; 7 | 8 | import com.fasterxml.jackson.annotation.JsonProperty; 9 | 10 | public class AttachmentCreateDTO { 11 | 12 | @JsonProperty(value = "task") 13 | @NotNull(message = "task in AttachmentCreateDTO must not be null") 14 | public Long taskId; 15 | 16 | @NotNull(message = "uuids in AttachmentCreateDTO must not be null") 17 | @NotEmpty(message = "uuids in AttachmentCreateDTO must not be empty") 18 | public List uuids; 19 | } 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/task/TaskCardIdDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project.task; 2 | 3 | import org.wrkr.clb.model.project.task.Task; 4 | import org.wrkr.clb.services.dto.VersionedEntityDTO; 5 | 6 | import com.fasterxml.jackson.annotation.JsonProperty; 7 | 8 | public class TaskCardIdDTO extends VersionedEntityDTO { 9 | 10 | @JsonProperty(value = "card") 11 | public Long cardId; 12 | 13 | public static TaskCardIdDTO fromEntity(Task task) { 14 | TaskCardIdDTO dto = new TaskCardIdDTO(); 15 | 16 | dto.id = task.getId(); 17 | dto.recordVersion = task.getRecordVersion(); 18 | dto.cardId = task.getCardId(); 19 | 20 | return dto; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/task/TaskIdDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project.task; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class TaskIdDTO { 6 | 7 | @JsonProperty(value = "task_id") 8 | public Long taskId; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/project/task/TaskLinkDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.project.task; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class TaskLinkDTO { 8 | 9 | @JsonProperty(value = "task1") 10 | @NotNull(message = "task1 in TaskLinkDTO must not be null") 11 | public Long task1Id; 12 | 13 | @JsonProperty(value = "task2") 14 | @NotNull(message = "task2 in TaskLinkDTO must not be null") 15 | public Long task2Id; 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/EmailAddressDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import javax.validation.constraints.Email; 4 | import javax.validation.constraints.NotEmpty; 5 | 6 | import com.fasterxml.jackson.annotation.JsonProperty; 7 | 8 | public class EmailAddressDTO { 9 | 10 | @JsonProperty(value = "email") 11 | @NotEmpty(message = "email in EmailDTO must not be empty") 12 | @Email(message = "email in EmailDTO must be valid") 13 | public String emailAddress; 14 | 15 | public static EmailAddressDTO fromEmail(String emailAddress) { 16 | EmailAddressDTO dto = new EmailAddressDTO(); 17 | dto.emailAddress = emailAddress; 18 | return dto; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/LoginDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class LoginDTO { 8 | 9 | @JsonProperty(value = "username") 10 | @NotNull(message = "username in LoginDTO must not be null") 11 | public String usernameOrEmailAdress; 12 | 13 | @NotNull(message = "password in LoginDTO must not be null") 14 | public String password; 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/PasswordChangeDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import javax.validation.constraints.NotBlank; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class PasswordChangeDTO { 8 | 9 | public String password; 10 | 11 | @JsonProperty(value = "new_password") 12 | @NotBlank(message = "new_password in PasswordChangeDTO must not be blank") 13 | public String newPassword; 14 | 15 | public String token; 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/RegisterDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import javax.validation.constraints.NotBlank; 4 | 5 | public class RegisterDTO extends EmailAddressDTO { 6 | 7 | @NotBlank(message = "password in RegisterDTO must not be blank") 8 | public String password; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/RegisteredDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | public class RegisteredDTO { 4 | 5 | public boolean registered; 6 | 7 | public RegisteredDTO(boolean registered) { 8 | this.registered = registered; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/TokenRegisterDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import org.wrkr.clb.services.dto.TokenDTO; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class TokenRegisterDTO extends TokenDTO { 8 | 9 | public String password; 10 | 11 | public String username; 12 | 13 | @JsonProperty(value = "full_name") 14 | public String fullName; 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/UserFavoriteDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class UserFavoriteDTO { 8 | 9 | @JsonProperty(value = "project") 10 | @NotNull(message = "project in UserFavoriteDTO must not be null") 11 | public Long projectId; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/dto/user/UserIdsDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.dto.user; 2 | 3 | import java.util.List; 4 | 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | 7 | public class UserIdsDTO { 8 | 9 | @JsonProperty(value = "users") 10 | public List userIds; 11 | 12 | public UserIdsDTO(List userIds) { 13 | this.userIds = userIds; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/file/YandexCloudFileService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.file; 2 | 3 | import org.springframework.validation.annotation.Validated; 4 | import org.wrkr.clb.model.project.task.Task; 5 | 6 | 7 | @Validated 8 | public interface YandexCloudFileService extends FileService { 9 | 10 | public String generatePathPrefix(Task task); 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/http/CookieService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.http; 2 | 3 | import javax.servlet.http.Cookie; 4 | import javax.servlet.http.HttpServletRequest; 5 | import javax.servlet.http.HttpServletResponse; 6 | 7 | public interface CookieService { 8 | 9 | public HttpServletResponse addCookie(HttpServletResponse response, String name, String value, Integer expiry, 10 | boolean httpOnly); 11 | 12 | public Cookie getCookie(HttpServletRequest request, String name); 13 | 14 | public String getCookieValue(HttpServletRequest request, String name); 15 | 16 | public HttpServletResponse removeCookie(HttpServletResponse response, Cookie cookie); 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/project/imprt/jira/ImportedJiraTaskRetryWrapperService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.project.imprt.jira; 2 | 3 | import org.wrkr.clb.model.project.task.Task; 4 | 5 | public interface ImportedJiraTaskRetryWrapperService { 6 | 7 | public void saveAndUpdateTaskNumberSequence(Task task, long jiraTaskId) throws Exception; 8 | } 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/project/imprt/jira/ImportedJiraTaskService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.project.imprt.jira; 2 | 3 | import org.wrkr.clb.model.project.task.Task; 4 | 5 | public interface ImportedJiraTaskService { 6 | 7 | public void save(Task task, long jiraTaskId); 8 | 9 | public void saveAndUpdateTaskNumberSequence(Task task, long jiraTaskId); 10 | 11 | public void update(Task task); 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/project/task/TaskRetryWrapperService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.project.task; 2 | 3 | import org.wrkr.clb.model.user.User; 4 | import org.wrkr.clb.services.dto.project.task.TaskDTO; 5 | import org.wrkr.clb.services.dto.project.task.TaskReadDTO; 6 | 7 | public interface TaskRetryWrapperService { 8 | 9 | public TaskReadDTO create(User currentUser, TaskDTO taskDTO) throws Exception; 10 | 11 | public TaskReadDTO update(User currentUser, TaskDTO taskDTO) throws Exception; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/project/task/attachment/AttachmentFileService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.project.task.attachment; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.springframework.validation.annotation.Validated; 6 | import org.wrkr.clb.model.user.User; 7 | 8 | @Validated 9 | public interface AttachmentFileService { 10 | 11 | public String getTemporaryLink(User currentUser, 12 | @NotNull(message = "id must not be null") Long id); 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/project/task/attachment/TemporaryAttachmentService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.project.task.attachment; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.springframework.validation.annotation.Validated; 6 | import org.wrkr.clb.model.project.Project; 7 | 8 | @Validated 9 | public interface TemporaryAttachmentService { 10 | 11 | public String create(@NotNull(message = "externalPath create must not be null") String externalPath, 12 | @NotNull(message = "task create must not be null") Project project); 13 | 14 | public void clearTemporaryAttachments(); 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/security/SecurityService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.security; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; 6 | import org.springframework.validation.annotation.Validated; 7 | import org.wrkr.clb.model.user.User; 8 | 9 | @Validated 10 | public interface SecurityService { 11 | 12 | public void isAuthenticated(User user) throws AuthenticationCredentialsNotFoundException; 13 | 14 | public void authzCanReadUserProfile(User currentUser, 15 | @NotNull(message = "userId must not be null") Long userId) throws SecurityException; 16 | } 17 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/EmailActivationTokenService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import org.wrkr.clb.model.user.EmailActivationToken; 4 | 5 | public interface EmailActivationTokenService { 6 | 7 | public String generatePassword(); 8 | 9 | public EmailActivationToken getOrCreate(String email); 10 | 11 | public EmailActivationToken getAndDelete(String token) throws Exception; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/LoginStatisticsService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.wrkr.clb.model.user.LoginStatistics; 6 | import org.wrkr.clb.model.user.User; 7 | 8 | public interface LoginStatisticsService { 9 | 10 | LoginStatistics create(@NotNull(message = "user must not be null") User user, 11 | String forwardedFor); 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/NotificationSettingsService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import javax.validation.Valid; 4 | 5 | import org.springframework.validation.annotation.Validated; 6 | import org.wrkr.clb.model.user.NotificationSettings; 7 | import org.wrkr.clb.services.dto.user.NotificationSettingsDTO; 8 | 9 | 10 | @Validated 11 | public interface NotificationSettingsService { 12 | 13 | public NotificationSettings updateByToken(@Valid NotificationSettingsDTO notifSettingsDTO) throws Exception; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/PasswordActivationTokenService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import javax.validation.constraints.NotNull; 4 | 5 | import org.springframework.validation.annotation.Validated; 6 | import org.wrkr.clb.model.user.PasswordActivationToken; 7 | import org.wrkr.clb.model.user.User; 8 | 9 | @Validated 10 | public interface PasswordActivationTokenService { 11 | 12 | public PasswordActivationToken create( 13 | @NotNull(message = "user must not be null") User user); 14 | 15 | public User getUserAndDeleteToken( 16 | @NotNull(message = "token must not be null") String token) 17 | throws Exception; 18 | } 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/ProfileRetryWrapperService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import javax.servlet.http.HttpSession; 4 | 5 | import org.wrkr.clb.model.user.User; 6 | import org.wrkr.clb.services.dto.user.ProfileDTO; 7 | import org.wrkr.clb.services.dto.user.PriofileUpdateDTO; 8 | 9 | public interface ProfileRetryWrapperService { 10 | 11 | public ProfileDTO updateProfile(HttpSession session, User currentUser, PriofileUpdateDTO profileDTO) 12 | throws Exception; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/RegistrationRetryWrapperService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import org.wrkr.clb.common.mail.EmailSentDTO; 4 | import org.wrkr.clb.model.user.User; 5 | import org.wrkr.clb.services.dto.user.ActivationDTO; 6 | import org.wrkr.clb.services.dto.user.EmailAddressDTO; 7 | 8 | public interface RegistrationRetryWrapperService { 9 | 10 | public EmailSentDTO register(EmailAddressDTO emailDTO) throws Exception; 11 | 12 | public User activate(ActivationDTO activationDTO) throws Exception; 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/user/RememberMeTokenService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.user; 2 | 3 | import java.time.OffsetDateTime; 4 | 5 | import org.wrkr.clb.model.auth.RememberMeToken; 6 | import org.wrkr.clb.model.user.User; 7 | 8 | public interface RememberMeTokenService { 9 | 10 | public RememberMeToken rememberMe(User user); 11 | 12 | public Long getUserIdByRememberMeToken(String token); 13 | 14 | public OffsetDateTime updateRememberMeToken(String token); 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/dom/DOMUtils.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.dom; 2 | 3 | import javax.xml.xpath.XPathConstants; 4 | import javax.xml.xpath.XPathExpression; 5 | import javax.xml.xpath.XPathExpressionException; 6 | import javax.xml.xpath.XPathFactory; 7 | 8 | import org.w3c.dom.Document; 9 | import org.w3c.dom.NodeList; 10 | 11 | public class DOMUtils { 12 | 13 | public static NodeList getNodes(Document document, String expression) throws XPathExpressionException { 14 | XPathExpression xPathExpression = XPathFactory.newInstance().newXPath().compile(expression); 15 | return (NodeList) xPathExpression.evaluate(document, XPathConstants.NODESET); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/exception/ConflictException.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.exception; 2 | 3 | import javax.servlet.http.HttpServletResponse; 4 | 5 | import org.wrkr.clb.services.util.http.JsonStatusCode; 6 | 7 | public class ConflictException extends ApplicationException { 8 | 9 | private static final long serialVersionUID = -7998228990025737759L; 10 | 11 | public ConflictException(String message) { 12 | super(HttpServletResponse.SC_CONFLICT, JsonStatusCode.CONFLICT, message); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/exception/NotFoundException.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.exception; 2 | 3 | import javax.servlet.http.HttpServletResponse; 4 | 5 | import org.wrkr.clb.services.util.http.JsonStatusCode; 6 | 7 | public class NotFoundException extends ApplicationException { 8 | 9 | private static final long serialVersionUID = -6105735510926330248L; 10 | 11 | private static String generateExceptionMessage(String entityName) { 12 | return entityName + " not found."; 13 | } 14 | 15 | public NotFoundException(String entityName) { 16 | super(HttpServletResponse.SC_NOT_FOUND, JsonStatusCode.NOT_FOUND, generateExceptionMessage(entityName)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/exception/PaymentRequiredException.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.exception; 2 | 3 | public class PaymentRequiredException extends SecurityException { 4 | 5 | private static final long serialVersionUID = -7786664583176514686L; 6 | 7 | public PaymentRequiredException(String message) { 8 | super(message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/exception/RequestEntityTooLargeException.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.exception; 2 | 3 | import javax.servlet.http.HttpServletResponse; 4 | 5 | public class RequestEntityTooLargeException extends ApplicationException { 6 | 7 | private static final long serialVersionUID = -7930557596498066979L; 8 | 9 | public RequestEntityTooLargeException(String code, String message) { 10 | super(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, code, message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/exception/TooManyLoginAttemptsException.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.exception; 2 | 3 | import org.springframework.security.core.AuthenticationException; 4 | 5 | public class TooManyLoginAttemptsException extends AuthenticationException { 6 | 7 | private static final long serialVersionUID = -4323912789490290302L; 8 | 9 | public static final int SC_TOO_MANY_REQUESTS = 429; 10 | 11 | private long retryAfterMillis; 12 | 13 | public TooManyLoginAttemptsException(long retryAfterMillis, String message) { 14 | super(message); 15 | this.retryAfterMillis = retryAfterMillis; 16 | } 17 | 18 | public long getRetryAfterMillis() { 19 | return retryAfterMillis; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/http/Cookies.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.http; 2 | 3 | public abstract class Cookies { 4 | 5 | public static final String CSRF = "qirk-csrf"; 6 | public static final String REMEMBER_ME = "qirk-remember-me"; 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services-api/src/main/java/org/wrkr/clb/services/util/http/SessionAttribute.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.util.http; 2 | 3 | public abstract class SessionAttribute { 4 | 5 | public static final String AUTHN_USER = "080220191747_AUTHN_USER_080220191747"; 6 | public static final String CSRF = "120720191713_CSRF_120720191713"; 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/main/java/org/wrkr/clb/services/impl/VersionedEntityService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.services.impl; 2 | 3 | import org.wrkr.clb.model.VersionedIdEntity; 4 | import org.wrkr.clb.services.util.exception.ConflictException; 5 | 6 | public abstract class VersionedEntityService { 7 | 8 | protected E checkRecordVersion(E entity, Long recordVersion) throws ConflictException { 9 | if (!entity.getRecordVersion().equals(recordVersion)) { 10 | throw new ConflictException("Concurrent modification occured."); 11 | } 12 | entity.setRecordVersion(entity.getRecordVersion() + 1); 13 | return entity; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/java/org/wrkr/clb/test/repo/JDBCTestRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.test.repo; 2 | 3 | import org.wrkr.clb.repo.JDBCBaseMainRepo; 4 | 5 | public class JDBCTestRepo extends JDBCBaseMainRepo { 6 | 7 | public static final String DELETE_FROM_PREFIX = "DELETE FROM "; 8 | 9 | public void clearTable(String tableName) { 10 | getJdbcTemplate().update(DELETE_FROM_PREFIX + tableName + ";"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/java/org/wrkr/clb/test/util/EasyMockFactoryBean.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.test.util; 2 | 3 | import org.easymock.EasyMock; 4 | import org.springframework.beans.factory.FactoryBean; 5 | 6 | public class EasyMockFactoryBean implements FactoryBean { 7 | 8 | private Class mockedClass; 9 | 10 | public void setMockedClass(Class mockedClass) { 11 | this.mockedClass = mockedClass; 12 | } 13 | 14 | @Override 15 | public T getObject() throws Exception { 16 | return EasyMock.createNiceMock(mockedClass); 17 | } 18 | 19 | @Override 20 | public Class getObjectType() { 21 | return mockedClass; 22 | } 23 | 24 | @Override 25 | public boolean isSingleton() { 26 | return true; 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/java/org/wrkr/clb/test/util/TestDatabasePopulator.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.test.util; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; 6 | 7 | public class TestDatabasePopulator { 8 | 9 | public TestDatabasePopulator(ResourceDatabasePopulator populator, DataSource dataSource) { 10 | populator.execute(dataSource); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/resources/qirk-services-test-root-ctx.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-services/src/test/resources/qirk.test.properties: -------------------------------------------------------------------------------- 1 | environment=test 2 | node.id=1 3 | selfcheck.rate.millis=120000 4 | 5 | front.host=http://127.0.0.1:8000 6 | 7 | crypto.secret.key=secret_key 8 | 9 | rememberme.token.lifetime.seconds=31622400 10 | max.failed.login.attempts=10 11 | 12 | email.host=smtp.gmail.com 13 | email.port=587 14 | email.host.user=a 15 | email.host.password=password 16 | email.from=a 17 | email.devops= 18 | 19 | file.upload.max.size=10485760 20 | attachment.tmp.clear.rate.millis=3600000 21 | attachment.tmp.lifetime.seconds=14400 22 | 23 | chat.token.notbefore.tolerance.seconds=60 24 | chat.token.lifetime.seconds=300 25 | notif.token.notbefore.tolerance.seconds=60 26 | notif.token.lifetime.seconds=300 27 | 28 | task.list.limit=42 29 | notif.list.limit=42 30 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-web/src/main/java/org/wrkr/clb/web/http/Header.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.web.http; 2 | 3 | public abstract class Header { 4 | 5 | public static final String X_CSRF_TOKEN = "X-CSRF-TOKEN"; 6 | public static final String X_FORWARDED_FOR = "X-Forwarded-For"; 7 | } 8 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-web/src/main/resources/qirk-web-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | file:${catalina.home}/conf/qirk.properties 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-main-parent/qirk-web/src/main/resources/qirk-web-root-ctx.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/cassandra/_initial.cql: -------------------------------------------------------------------------------- 1 | CREATE KEYSPACE clb_notif WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor' : 1} AND DURABLE_WRITES = true; 2 | 3 | USE clb_notif; 4 | 5 | 6 | CREATE TABLE notif( 7 | subscriber_id BIGINT, 8 | timestamp BIGINT, 9 | notification_type TEXT, 10 | json TEXT, 11 | PRIMARY KEY (subscriber_id, timestamp) 12 | ); 13 | 14 | CREATE TABLE notif_last_check( 15 | subscriber_id BIGINT, 16 | last_check_timestamp BIGINT, 17 | PRIMARY KEY (subscriber_id) 18 | ); 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/psql/_initial-1.sql: -------------------------------------------------------------------------------- 1 | -- do it using postgres user 2 | -- exec \q if you are already connected to clb_auth database 3 | CREATE DATABASE qirk_notif WITH TEMPLATE=template0 ENCODING='UTF8'; 4 | 5 | -- requires password of hibernate user 6 | \c clb_notif 7 | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hibernate; 8 | GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO hibernate; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/psql/_initial-2.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE notif( 2 | subscriber_id BIGINT NOT NULL, 3 | timestamp BIGINT NOT NULL, 4 | notification_type VARCHAR(63) NOT NULL, 5 | json TEXT NOT NULL, 6 | PRIMARY KEY (subscriber_id, timestamp) 7 | ); 8 | ALTER TABLE notif ADD CONSTRAINT notif__subscriber_id__timestamp_uniq UNIQUE (subscriber_id, timestamp); 9 | 10 | CREATE TABLE notif_last_check( 11 | subscriber_id BIGINT PRIMARY KEY, 12 | last_check_timestamp BIGINT NOT NULL 13 | ); 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/src/main/java/org/wrkr/clb/notification/model/NotificationLastCheck.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.model; 2 | 3 | public class NotificationLastCheck { 4 | 5 | private long subscriberId; 6 | private long lastCheckTimestamp; 7 | 8 | public long getSubscriberId() { 9 | return subscriberId; 10 | } 11 | 12 | public void setSubscriberId(long subscriberId) { 13 | this.subscriberId = subscriberId; 14 | } 15 | 16 | public long getLastCheckTimestamp() { 17 | return lastCheckTimestamp; 18 | } 19 | 20 | public void setLastCheckTimestamp(long lastCheckTimestamp) { 21 | this.lastCheckTimestamp = lastCheckTimestamp; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/src/main/java/org/wrkr/clb/notification/model/NotificationLastCheck_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.model; 2 | 3 | public class NotificationLastCheck_ { 4 | 5 | public static final String TABLE_NAME = "notif_last_check"; 6 | 7 | public static final String subscriberId = "subscriber_id"; 8 | public static final String lastCheckTimestamp = "last_check_timestamp"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-model/src/main/java/org/wrkr/clb/notification/model/Notification_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.model; 2 | 3 | public class Notification_ { 4 | 5 | public static final String TABLE_NAME = "notif"; 6 | 7 | public static final String subscriberId = "subscriber_id"; 8 | public static final String timestamp = "timestamp"; 9 | public static final String notificationType = "notification_type"; 10 | public static final String json = "json"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-repo/src/main/java/org/wrkr/clb/notification/repo/NotifDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.repo; 2 | 3 | public interface NotifDatabaseRepo { 4 | 5 | public void check(); 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-repo/src/main/java/org/wrkr/clb/notification/repo/NotificationLastCheckRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.repo; 2 | 3 | import org.wrkr.clb.notification.model.NotificationLastCheck; 4 | 5 | public interface NotificationLastCheckRepo { 6 | 7 | public boolean save(NotificationLastCheck lastCheck); 8 | 9 | public boolean exists(long subscriberId); 10 | 11 | public Long getLastCheckTimestampBySubscriberId(Long subscriberId); 12 | 13 | public boolean update(NotificationLastCheck lastCheck); 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-repo/src/main/java/org/wrkr/clb/notification/repo/NotificationRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.repo; 2 | 3 | import java.util.List; 4 | 5 | import org.wrkr.clb.notification.repo.dto.NotificationDTO; 6 | 7 | public interface NotificationRepo { 8 | 9 | public boolean save(long subscriberId, long timestamp, String notificationType, String json); 10 | 11 | public List listTopSinceTimestampBySubscriberId(long subscriberId, long timestamp, int limit); 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-repo/src/main/java/org/wrkr/clb/notification/repo/postgresql/BaseNotifRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.repo.postgresql; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.beans.factory.annotation.Qualifier; 7 | import org.springframework.jdbc.core.JdbcTemplate; 8 | import org.wrkr.clb.common.jdbc.BaseRepo; 9 | 10 | public abstract class BaseNotifRepo extends BaseRepo { 11 | 12 | @Override 13 | @Autowired 14 | @Qualifier("notifDataSource") 15 | public void setDataSource(DataSource dataSource) { 16 | setJdbcTemplate(new JdbcTemplate(dataSource)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-repo/src/main/java/org/wrkr/clb/notification/repo/postgresql/PostgresNotifDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.repo.postgresql; 2 | 3 | import org.springframework.stereotype.Repository; 4 | import org.wrkr.clb.notification.repo.NotifDatabaseRepo; 5 | 6 | @Repository 7 | public class PostgresNotifDatabaseRepo extends BaseNotifRepo implements NotifDatabaseRepo { 8 | 9 | private static final String SELECT_1 = "SELECT 1;"; 10 | 11 | @Override 12 | public void check() { 13 | getJdbcTemplate().queryForList(SELECT_1); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-services/src/main/java/org/wrkr/clb/notification/services/BaseNotificationMailService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.services; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | 5 | public abstract class BaseNotificationMailService implements NotificationMailService { 6 | 7 | @Autowired 8 | protected NotificationService dispatcherService; 9 | 10 | @Override 11 | public void afterPropertiesSet() throws Exception { 12 | dispatcherService.addService(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-services/src/main/java/org/wrkr/clb/notification/services/NotificationMailService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.services; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import org.springframework.beans.factory.InitializingBean; 7 | 8 | public interface NotificationMailService extends InitializingBean { 9 | 10 | public String getType(); 11 | 12 | public void sendEmail(List recipients, Map messageBody); 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-services/src/main/java/org/wrkr/clb/notification/services/dto/LastCheckDTO.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.services.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | public class LastCheckDTO { 6 | 7 | @JsonProperty(value = "last_check") 8 | public Long lastCheck; 9 | 10 | public LastCheckDTO(Long lastCheck) { 11 | this.lastCheck = lastCheck; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-services/src/main/java/org/wrkr/clb/notification/services/jms/MQDestination.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.services.jms; 2 | 3 | import java.util.Map; 4 | 5 | public interface MQDestination { 6 | 7 | public void sendMessageFromMQ(Map notification); 8 | 9 | public Long getSubscriberId(); 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-services/src/main/java/org/wrkr/clb/notification/services/json/JsonStatusCode.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.notification.services.json; 2 | 3 | public class JsonStatusCode { 4 | 5 | public static final String OK = "OK"; 6 | 7 | public static final String INVALID_REQUEST_TYPE = "INVALID_REQUEST_TYPE"; 8 | public static final String INVALID_TOKEN = "INVALID_TOKEN"; 9 | 10 | public static final String INTERNAL_SERVER_ERROR = "ERROR"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-web/api-docs/API.txt: -------------------------------------------------------------------------------- 1 | ws://localhost:8000/clb-notification-web/notification/ 2 | 3 | Request 4 | { 5 | "token":"aaa", "IV":"aaa", (only on first GET_HISTORY) 6 | "request_type":"" 7 | } 8 | 9 | "request_type":"PING" 10 | no response 11 | 12 | "request_type":"GET_HISTORY" 13 | { 14 | "response_type":"NOTIFICATIONS", 15 | "data":[{ 16 | "timestamp": 1, 17 | "notification_type":"", 18 | "json":"" (must parse) 19 | }], 20 | "meta": {"last_check": 1 (nullable)} 21 | } 22 | 23 | "request_type":"CHECK_ALL_NOTIFICATIONS" 24 | { 25 | "response_type":"CHECKED_ALL_NOTIFICATIONS", 26 | "meta": {"last_check": 1 (nullable)} 27 | } 28 | 29 | "request_type":"UNSUBSCRIBE" 30 | { 31 | "response_type":"UNSUBSCRIBED" 32 | } 33 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-web/api-docs/status_code.txt: -------------------------------------------------------------------------------- 1 | INVALID_TOKEN - token is missing or invalid 2 | ERROR - an internal server error occured 3 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-web/src/main/resources/qirk-notification-web-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | file:${catalina.home}/conf/qirk.properties 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-notification-parent/qirk-notification-web/src/main/resources/qirk-notification-web-root-ctx.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/psql/_initial-1.sql: -------------------------------------------------------------------------------- 1 | -- do it using postgres user 2 | -- exec \q if you are already connected to clb_auth database 3 | CREATE DATABASE qirk_stat WITH TEMPLATE=template0 ENCODING='UTF8'; 4 | 5 | -- requires password of hibernate user 6 | \c clb_stat 7 | GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO hibernate; 8 | GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO hibernate; 9 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/BaseStatRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.beans.factory.annotation.Qualifier; 9 | import org.springframework.jdbc.core.JdbcTemplate; 10 | import org.wrkr.clb.common.jdbc.BaseRepo; 11 | 12 | public class BaseStatRepo extends BaseRepo { 13 | 14 | protected final Logger LOG = LoggerFactory.getLogger(getClass()); 15 | 16 | @Override 17 | @Autowired 18 | @Qualifier("statDataSource") 19 | public void setDataSource(DataSource dataSource) { 20 | setJdbcTemplate(new JdbcTemplate(dataSource)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/StatDatabaseRepo.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo; 2 | 3 | import org.springframework.stereotype.Repository; 4 | 5 | @Repository 6 | public class StatDatabaseRepo extends BaseStatRepo { 7 | 8 | private static final String SELECT_1 = "SELECT 1;"; 9 | 10 | public void check() { 11 | getJdbcTemplate().queryForList(SELECT_1); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/chat/NewMessage_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.chat; 2 | 3 | public class NewMessage_ { 4 | 5 | public static final String TABLE_NAME = "new_message"; 6 | 7 | public static final String ownerType = "owner_type"; 8 | public static final String ownerId = "owner_id"; 9 | public static final String createdAt = "created_at"; 10 | } 11 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/NewMemo_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class NewMemo_ { 4 | 5 | public static final String TABLE_NAME = "new_memo"; 6 | 7 | public static final String authorUserId = "author_user_id"; 8 | public static final String createdAt = "created_at"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/NewTask_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class NewTask_ { 4 | 5 | public static final String TABLE_NAME = "new_task"; 6 | 7 | public static final String projectId = "project_id"; 8 | public static final String projectName = "project_name"; 9 | public static final String taskId = "task_id"; 10 | public static final String createdAt = "created_at"; 11 | public static final String type = "type"; 12 | public static final String priority = "priority"; 13 | public static final String status = "status"; 14 | } 15 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/ProjectDocUpdate_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class ProjectDocUpdate_ { 4 | 5 | public static final String TABLE_NAME = "project_doc_update"; 6 | 7 | public static final String updatedByUserId = "updated_by_user_id"; 8 | public static final String updatedAt = "updated_at"; 9 | } 10 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/TaskPriorityUpdate_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class TaskPriorityUpdate_ { 4 | 5 | public static final String TABLE_NAME = "task_priority_update"; 6 | 7 | public static final String projectId = "project_id"; 8 | public static final String projectName = "project_name"; 9 | public static final String taskId = "task_id"; 10 | public static final String updatedAt = "updated_at"; 11 | public static final String priority = "priority"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/TaskStatusUpdate_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class TaskStatusUpdate_ { 4 | 5 | public static final String TABLE_NAME = "task_status_update"; 6 | 7 | public static final String projectId = "project_id"; 8 | public static final String projectName = "project_name"; 9 | public static final String taskId = "task_id"; 10 | public static final String updatedAt = "updated_at"; 11 | public static final String status = "status"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/TaskTypeUpdate_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class TaskTypeUpdate_ { 4 | 5 | public static final String TABLE_NAME = "task_type_update"; 6 | 7 | public static final String projectId = "project_id"; 8 | public static final String projectName = "project_name"; 9 | public static final String taskId = "task_id"; 10 | public static final String updatedAt = "updated_at"; 11 | public static final String type = "type"; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-repo/src/main/java/org/wrkr/clb/statistics/repo/model/project/TaskUpdate_.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.repo.model.project; 2 | 3 | public class TaskUpdate_ { 4 | 5 | public static final String TABLE_NAME = "task_update"; 6 | 7 | public static final String projectId = "project_id"; 8 | public static final String projectName = "project_name"; 9 | public static final String taskId = "task_id"; 10 | public static final String updatedAt = "updated_at"; 11 | } 12 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-services/src/main/java/org/wrkr/clb/statistics/services/BaseEventService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.services; 2 | 3 | import org.springframework.beans.factory.InitializingBean; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | 6 | public abstract class BaseEventService implements InitializingBean, EventService { 7 | 8 | @Autowired 9 | protected EventDispatcherService dispatcherService; 10 | 11 | @Override 12 | public void afterPropertiesSet() throws Exception { 13 | dispatcherService.addService(this); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-services/src/main/java/org/wrkr/clb/statistics/services/EventService.java: -------------------------------------------------------------------------------- 1 | package org.wrkr.clb.statistics.services; 2 | 3 | import java.util.Map; 4 | 5 | import org.springframework.beans.factory.InitializingBean; 6 | 7 | public interface EventService extends InitializingBean { 8 | 9 | public String getCode(); 10 | 11 | public void onMessage(Map requestBody) throws Exception; 12 | } 13 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-web/docs/API.txt: -------------------------------------------------------------------------------- 1 | /event/ 2 | Accept: text/plain 3 | POST: { 4 | "code":"AAA", 5 | ... 6 | } 7 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-web/src/main/resources/qirk-statistics-web-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | file:${catalina.home}/conf/qirk.properties 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qirk-parent/qirk-statistics-parent/qirk-statistics-web/src/main/resources/qirk-statistics-web-root-ctx.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | --------------------------------------------------------------------------------