├── frontend ├── .env ├── src │ ├── pages │ │ ├── Home │ │ │ ├── index.ts │ │ │ └── TopTweetActions │ │ │ │ └── index.ts │ │ ├── Lists │ │ │ ├── index.ts │ │ │ ├── ListsItem │ │ │ │ ├── index.ts │ │ │ │ ├── ListsItemAvatar │ │ │ │ │ └── index.ts │ │ │ │ └── ListInfoDescription │ │ │ │ │ └── index.ts │ │ │ ├── UserLists │ │ │ │ ├── index.ts │ │ │ │ └── UserListsStyles.ts │ │ │ ├── ListsHeader │ │ │ │ ├── index.ts │ │ │ │ └── CreateListsModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CreateListsModalInput │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CreateListsModalInputStyles.tsx │ │ │ ├── PinnedLists │ │ │ │ ├── index.ts │ │ │ │ ├── PinnedListsItem │ │ │ │ │ └── index.ts │ │ │ │ └── PinnedListsStyles.ts │ │ │ ├── DiscoverLists │ │ │ │ └── index.ts │ │ │ ├── ListsMemberships │ │ │ │ └── index.ts │ │ │ └── PopperListWindow │ │ │ │ ├── index.ts │ │ │ │ ├── FollowListButton │ │ │ │ └── index.ts │ │ │ │ ├── PopperListWallpaper │ │ │ │ └── index.ts │ │ │ │ ├── UnfollowListButton │ │ │ │ └── index.ts │ │ │ │ ├── PopperListDescription │ │ │ │ └── index.ts │ │ │ │ └── PopperListInteractionCount │ │ │ │ ├── index.ts │ │ │ │ └── PopperListUserCount │ │ │ │ ├── index.ts │ │ │ │ └── PopperListUserCountStyles.ts │ │ ├── Login │ │ │ └── index.ts │ │ ├── Connect │ │ │ └── index.ts │ │ ├── Explore │ │ │ ├── index.ts │ │ │ ├── UsersList │ │ │ │ └── index.ts │ │ │ └── TweetsList │ │ │ │ └── index.ts │ │ ├── FullList │ │ │ ├── index.ts │ │ │ ├── EditListButton │ │ │ │ ├── index.ts │ │ │ │ ├── EditListModal │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── DeleteListModal │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── ManageMembersModal │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── ManageMembersInput │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── ManageMembersItem │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── MemberItemInfo │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── ManageMemberButton │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── MemberItemAvatar │ │ │ │ │ │ └── index.ts │ │ │ │ └── EditListButtonStyles.ts │ │ │ ├── FullListHeader │ │ │ │ └── index.ts │ │ │ ├── FullListTweets │ │ │ │ ├── index.ts │ │ │ │ └── MembersAndFollowersModal │ │ │ │ │ └── index.ts │ │ │ ├── FullListWallpaper │ │ │ │ └── index.ts │ │ │ ├── ShareActionsModal │ │ │ │ ├── index.ts │ │ │ │ ├── ShareActionsItem │ │ │ │ │ └── index.ts │ │ │ │ ├── TweetListAction │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TweetListModal │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TweetListModalStyles.ts │ │ │ │ └── CopyListLinkAction │ │ │ │ │ └── index.ts │ │ │ ├── FullListDescription │ │ │ │ └── index.ts │ │ │ ├── MembersAndFollowers │ │ │ │ ├── index.ts │ │ │ │ └── FullListUserCount │ │ │ │ │ ├── index.ts │ │ │ │ │ └── FullListUserCountStyles.ts │ │ │ └── TopTweetsActionsModal │ │ │ │ ├── index.ts │ │ │ │ └── TopTweetsItem │ │ │ │ └── index.ts │ │ ├── Messages │ │ │ ├── index.ts │ │ │ ├── ActionIcon │ │ │ │ └── index.ts │ │ │ ├── ChatMessages │ │ │ │ ├── index.ts │ │ │ │ ├── ChatFooter │ │ │ │ │ └── index.ts │ │ │ │ ├── ChatHeader │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ChatHeaderStyles.ts │ │ │ │ ├── ChatMessage │ │ │ │ │ └── index.ts │ │ │ │ ├── ChatUserBlocked │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ChatUserBlockedStyles.ts │ │ │ │ ├── EmptyChatMessages │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EmptyChatMessagesStyles.tsx │ │ │ │ └── ChatMessagesStyles.tsx │ │ │ ├── MessagesHeader │ │ │ │ └── MessagesHeaderStyles.ts │ │ │ ├── MessagesModal │ │ │ │ └── MessagesModalStyles.tsx │ │ │ ├── MessageSettings │ │ │ │ └── MessageSettingsStyles.ts │ │ │ ├── StartConversation │ │ │ │ └── StartConversationStyles.ts │ │ │ ├── ConversationInfo │ │ │ │ ├── ConversationHeader │ │ │ │ │ └── __tests__ │ │ │ │ │ │ └── ConversationHeader.test.tsx │ │ │ │ └── ReportUserComponent │ │ │ │ │ └── __tests__ │ │ │ │ │ └── ReportUserComponent.test.tsx │ │ │ └── MessagesStyles.tsx │ │ ├── Settings │ │ │ ├── index.ts │ │ │ ├── Account │ │ │ │ ├── index.ts │ │ │ │ ├── TweetDeckTeams │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TweetDeckTeamsStyles.tsx │ │ │ │ ├── DeactivateAccount │ │ │ │ │ └── index.ts │ │ │ │ ├── AccountInformation │ │ │ │ │ ├── ChangeAge │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ChangeEmail │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ChangeEmailModal │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ChangeGender │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ChangeGenderStyles.tsx │ │ │ │ │ ├── ChangePhone │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── DeletePhoneNumberButton │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── DeletePhoneModal │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── UpdatePhoneNumberButton │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── ChangePhoneModal │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── ChangePhoneStyles.ts │ │ │ │ │ ├── ChangeCountry │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ChangeCountryStyles.tsx │ │ │ │ │ ├── ChangeLanguage │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ChangeLanguageStyles.tsx │ │ │ │ │ └── ChangeUsername │ │ │ │ │ │ └── index.ts │ │ │ │ └── ChangeYourPassword │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ChangeYourPasswordStyles.tsx │ │ │ ├── Notifications │ │ │ │ ├── index.ts │ │ │ │ ├── Filters │ │ │ │ │ └── index.ts │ │ │ │ ├── Preferences │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── EmailNotifications │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── PushNotifications │ │ │ │ │ │ └── index.ts │ │ │ │ ├── ContentPreferences │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ExploreModal │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ExploreModalInfo │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── RecommendationsModal │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── RecommendedLanguage │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── RecommendedLanguageStyles.ts │ │ │ │ │ └── ContentPreferencesStyles.tsx │ │ │ │ └── PersonalizationAndData │ │ │ │ │ ├── index.ts │ │ │ │ │ └── PersonalizationAndDataStyles.tsx │ │ │ ├── SettingsItem │ │ │ │ └── index.ts │ │ │ ├── PrivacyAndSafety │ │ │ │ ├── Spaces │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SpacesStyles.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── Location │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Places │ │ │ │ │ │ └── index.ts │ │ │ │ ├── YourTweets │ │ │ │ │ ├── index.ts │ │ │ │ │ └── LocationInformation │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── LocationInformationStyles.tsx │ │ │ │ ├── DataSharing │ │ │ │ │ └── index.ts │ │ │ │ ├── MuteAndBlock │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── MutedWords │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── MutedAccounts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── MutedAccountItem │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── MuteAccountInfo │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── MuteAccountAvatar │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── MuteAccountButton │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── BlockedAccounts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── BlockedAccountItem │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── BlockAccountButton │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── BlockedAccountInfo │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── BlockedAccountAvatar │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── MutedNotifications │ │ │ │ │ │ └── index.ts │ │ │ │ ├── AdsPreferences │ │ │ │ │ ├── index.ts │ │ │ │ │ └── YourAdvertiserList │ │ │ │ │ │ └── index.ts │ │ │ │ ├── ContentYouSee │ │ │ │ │ └── index.ts │ │ │ │ ├── DirectMessages │ │ │ │ │ └── index.ts │ │ │ │ ├── Discoverability │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ManageContacts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ManageContactsStyles.tsx │ │ │ │ ├── AudienceAndTagging │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── PhotoTagging │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── PhotoTaggingStyles.tsx │ │ │ │ │ └── AudienceAndTaggingStyles.tsx │ │ │ │ ├── OffTwitterActivity │ │ │ │ │ └── index.ts │ │ │ │ └── PrivacyAndSafetyStyles.tsx │ │ │ ├── SettingsHeader │ │ │ │ └── index.ts │ │ │ ├── AdditionalResources │ │ │ │ ├── index.ts │ │ │ │ └── AdditionalResourcesStyles.tsx │ │ │ ├── SecurityAndAccountAccess │ │ │ │ ├── Security │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TwoFactorAuthentication │ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── AppsAndSessions │ │ │ │ │ ├── Sessions │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CurrentSession │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ConnectedApps │ │ │ │ │ └── index.ts │ │ │ │ │ ├── LoggedDevices │ │ │ │ │ ├── index.ts │ │ │ │ │ └── LoggedDevicesStyles.tsx │ │ │ │ │ └── AccountAccessHistory │ │ │ │ │ └── index.ts │ │ │ └── AccessibilityDisplayLanguages │ │ │ │ ├── DataUsage │ │ │ │ ├── index.ts │ │ │ │ ├── Autoplay │ │ │ │ │ ├── index.ts │ │ │ │ │ └── AutoplayStyles.tsx │ │ │ │ └── DataUsageStyles.tsx │ │ │ │ ├── Languages │ │ │ │ ├── index.ts │ │ │ │ └── LanguagesStyles.tsx │ │ │ │ ├── Accessibility │ │ │ │ ├── index.ts │ │ │ │ └── AccessibilityStyles.tsx │ │ │ │ ├── index.ts │ │ │ │ └── Display │ │ │ │ └── index.ts │ │ ├── Topics │ │ │ ├── index.ts │ │ │ ├── Followed │ │ │ │ └── index.ts │ │ │ ├── Suggested │ │ │ │ ├── index.ts │ │ │ │ └── __tests__ │ │ │ │ │ └── SuggestedButton.test.tsx │ │ │ ├── TopicItem │ │ │ │ ├── index.ts │ │ │ │ ├── FollowTopicButton │ │ │ │ │ ├── index.ts │ │ │ │ │ └── FollowTopicButtonStyles.ts │ │ │ │ └── UnfollowTopicButton │ │ │ │ │ ├── index.ts │ │ │ │ │ └── UnfollowTopicButtonStyles.ts │ │ │ ├── TopicBlock │ │ │ │ ├── index.ts │ │ │ │ ├── TopicButton │ │ │ │ │ └── index.ts │ │ │ │ └── FollowedTopicButton │ │ │ │ │ └── index.ts │ │ │ ├── NotInterested │ │ │ │ └── index.ts │ │ │ └── TopicsCarousel │ │ │ │ └── index.ts │ │ ├── Trends │ │ │ ├── index.ts │ │ │ └── TrendsItem │ │ │ │ └── index.ts │ │ ├── UserPage │ │ │ ├── index.ts │ │ │ ├── UserInfo │ │ │ │ └── index.ts │ │ │ ├── UserAvatar │ │ │ │ └── index.ts │ │ │ ├── UserDetails │ │ │ │ └── index.ts │ │ │ ├── UserTweets │ │ │ │ ├── index.ts │ │ │ │ ├── EmptyLikesTab │ │ │ │ │ └── index.ts │ │ │ │ ├── EmptyMediaTab │ │ │ │ │ └── index.ts │ │ │ │ ├── EmptyRepliesTab │ │ │ │ │ └── index.ts │ │ │ │ ├── EmptyTweetsTab │ │ │ │ │ └── index.ts │ │ │ │ └── UserTweetsStyles.tsx │ │ │ ├── UserNotFound │ │ │ │ └── index.ts │ │ │ ├── UserWallpaper │ │ │ │ └── index.ts │ │ │ ├── BlockUserButton │ │ │ │ └── index.ts │ │ │ ├── CancelUserButton │ │ │ │ └── index.ts │ │ │ ├── FollowUserButton │ │ │ │ └── index.ts │ │ │ ├── UserImageModal │ │ │ │ └── index.ts │ │ │ ├── UserPageActions │ │ │ │ ├── index.ts │ │ │ │ ├── BlockUserButton │ │ │ │ │ └── index.ts │ │ │ │ ├── MuteUserButton │ │ │ │ │ └── index.ts │ │ │ │ ├── UserItemAction │ │ │ │ │ └── index.ts │ │ │ │ ├── AddUserToListsButton │ │ │ │ │ └── index.ts │ │ │ │ ├── ViewUserListsButton │ │ │ │ │ └── index.ts │ │ │ │ ├── ViewUserTopicsButton │ │ │ │ │ └── index.ts │ │ │ │ └── CopyProfileLinkButton │ │ │ │ │ └── index.ts │ │ │ ├── UserPageHeader │ │ │ │ └── index.ts │ │ │ ├── EditProfileButton │ │ │ │ ├── index.ts │ │ │ │ ├── EditProfileModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EditBirthDate │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── BirthDateSelect │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── EditBirthDateModal │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── EditBirthDateModalStyles.tsx │ │ │ │ └── SetupProfileModal │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ProfileModal │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ProfileHeaderModal │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ProfilePictureModal │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ProfileUpdatedModal │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ProfileDescriptionModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ProfileDescriptionInput │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── SetupProfileModalStyles.tsx │ │ │ ├── NotificationButton │ │ │ │ └── index.ts │ │ │ ├── UnfollowUserButton │ │ │ │ └── index.ts │ │ │ ├── UserBlockedMessage │ │ │ │ └── index.ts │ │ │ ├── UserFollowerGroup │ │ │ │ └── index.ts │ │ │ ├── UserUnmuteMessage │ │ │ │ └── index.ts │ │ │ ├── AddUserToChatButton │ │ │ │ └── index.ts │ │ │ ├── UserInteractionCount │ │ │ │ ├── index.ts │ │ │ │ ├── UserFollowersCount │ │ │ │ │ └── index.ts │ │ │ │ └── UserFollowingCount │ │ │ │ │ └── index.ts │ │ │ └── UserPrivateProfileMessage │ │ │ │ └── index.ts │ │ ├── Bookmarks │ │ │ ├── index.ts │ │ │ └── BookmarksHeader │ │ │ │ └── index.ts │ │ ├── FullTweet │ │ │ ├── index.ts │ │ │ ├── TweetGif │ │ │ │ ├── index.ts │ │ │ │ └── TweetGif.tsx │ │ │ ├── TweetImage │ │ │ │ └── index.ts │ │ │ ├── TweetList │ │ │ │ └── index.ts │ │ │ ├── TweetMedia │ │ │ │ └── index.ts │ │ │ ├── TweetPoll │ │ │ │ └── index.ts │ │ │ ├── TweetQuote │ │ │ │ └── index.ts │ │ │ ├── TweetActions │ │ │ │ └── index.ts │ │ │ ├── TweetDateTime │ │ │ │ └── index.ts │ │ │ ├── TweetHeader │ │ │ │ └── index.ts │ │ │ ├── AddReplyToTweet │ │ │ │ └── index.ts │ │ │ ├── LikeIconButton │ │ │ │ └── index.ts │ │ │ ├── ReplyIconButton │ │ │ │ ├── index.ts │ │ │ │ └── ReplyIconButtonStyles.ts │ │ │ ├── TweetErrorPage │ │ │ │ ├── index.ts │ │ │ │ └── TweetErrorPageStyles.tsx │ │ │ ├── TweetReplyInfo │ │ │ │ └── index.ts │ │ │ ├── RetweetIconButton │ │ │ │ └── index.ts │ │ │ └── TweetInteractionCount │ │ │ │ ├── LikesCount │ │ │ │ └── index.ts │ │ │ │ ├── QuotesCount │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── RetweetsCount │ │ │ │ └── index.ts │ │ ├── Notifications │ │ │ ├── index.ts │ │ │ ├── MentionsTab │ │ │ │ └── index.ts │ │ │ ├── NotificationsTab │ │ │ │ ├── index.ts │ │ │ │ ├── NotificationInfo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── NotificationInfoHeader │ │ │ │ │ │ └── index.ts │ │ │ │ ├── NotificationItem │ │ │ │ │ └── index.ts │ │ │ │ ├── NotificationAuthorItem │ │ │ │ │ ├── index.ts │ │ │ │ │ └── NotificationAuthorItemStyles.tsx │ │ │ │ └── NotificationsTimeline │ │ │ │ │ └── index.ts │ │ │ └── EmptyNotifications │ │ │ │ ├── index.ts │ │ │ │ └── EmptyNotificationsStyles.tsx │ │ ├── QuoteTweets │ │ │ └── index.ts │ │ ├── Authentication │ │ │ ├── index.ts │ │ │ ├── DialogWrapper │ │ │ │ └── index.ts │ │ │ ├── CustomizeModal │ │ │ │ └── index.ts │ │ │ ├── CreateAccountModal │ │ │ │ └── index.ts │ │ │ ├── RegistrationInput │ │ │ │ └── index.ts │ │ │ ├── RegistrationModal │ │ │ │ └── index.ts │ │ │ ├── SetPasswordModal │ │ │ │ ├── index.ts │ │ │ │ └── SetPasswordModalStyles.tsx │ │ │ └── EmailVerificationModal │ │ │ │ ├── index.ts │ │ │ │ └── EmailVerificationModalStyles.tsx │ │ ├── ForgotPassword │ │ │ ├── index.ts │ │ │ ├── FindEmail │ │ │ │ └── index.ts │ │ │ ├── ResetPassword │ │ │ │ └── index.ts │ │ │ ├── CheckEmailCode │ │ │ │ └── index.ts │ │ │ ├── ForgotPasswordTextField │ │ │ │ └── index.ts │ │ │ ├── ResetPasswordOption │ │ │ │ └── index.ts │ │ │ └── ResetPasswordSuccess │ │ │ │ ├── index.ts │ │ │ │ └── ResetPasswordSuccessStyles.tsx │ │ ├── FollowersYouKnow │ │ │ └── index.ts │ │ └── FollowingFollowers │ │ │ ├── index.ts │ │ │ ├── EmptyFollowersDescription │ │ │ ├── index.ts │ │ │ └── EmptyFollowersDescriptionStyles.tsx │ │ │ └── FollowingFollowersHeader │ │ │ └── index.ts │ ├── react-app-env.d.ts │ ├── components │ │ ├── TweetInput │ │ │ └── index.ts │ │ ├── ActionIconButton │ │ │ └── ActionIconButtonStyles.ts │ │ ├── CloseButton │ │ │ └── CloseButtonStyles.tsx │ │ ├── SideSearch │ │ │ └── RemoveSearchResultButton │ │ │ │ └── RemoveSearchResultButtonStyles.ts │ │ ├── AddTweetForm │ │ │ ├── UnsentTweetsModal │ │ │ │ └── UnsentTweetItem │ │ │ │ │ └── UnsentTweetsHeader │ │ │ │ │ └── UnsentTweetsHeaderStyles.ts │ │ │ ├── Poll │ │ │ │ └── PollInput │ │ │ │ │ └── PollInputField.tsx │ │ │ ├── ScheduleDateInfo │ │ │ │ └── ScheduleDateInfoStyles.ts │ │ │ ├── GifIconButton │ │ │ │ └── GifModalWindow │ │ │ │ │ └── GifModalWindowStyles.ts │ │ │ ├── PollIconButton │ │ │ │ └── PollIconButtonStyles.ts │ │ │ └── AddTweetImage │ │ │ │ └── AddDescription │ │ │ │ └── AddDescriptionModal │ │ │ │ └── AddDescriptionModalStyles.ts │ │ ├── Buttons │ │ │ ├── FullWidthButton │ │ │ │ └── FullWidthButtonStyles.ts │ │ │ ├── PendingButton │ │ │ │ └── PendingButtonStyles.ts │ │ │ ├── FollowButton │ │ │ │ └── FollowButtonStyles.ts │ │ │ ├── UnfollowButton │ │ │ │ └── UnfollowButtonStyles.ts │ │ │ └── BlockButton │ │ │ │ └── BlockButtonStyles.ts │ │ ├── LockIcon │ │ │ ├── LockIconStyles.ts │ │ │ ├── LockIcon.tsx │ │ │ └── __tests__ │ │ │ │ └── LockIcon.test.tsx │ │ ├── SideMenu │ │ │ ├── SideMenuMoreItem │ │ │ │ └── FollowerRequestsModal │ │ │ │ │ └── FollowerRequestsModalSyles.tsx │ │ │ └── SideMenuHomeItem │ │ │ │ └── SideMenuHomeItemStyles.ts │ │ ├── BackButton │ │ │ └── BackButtonStyles.tsx │ │ ├── UsersItem │ │ │ ├── PendingButton │ │ │ │ └── PendingButtonStyles.ts │ │ │ ├── FollowButton │ │ │ │ └── FollowButtonStyles.ts │ │ │ ├── UnfollowButton │ │ │ │ └── UnfollowButtonStyles.ts │ │ │ └── BlockButton │ │ │ │ └── BlockButtonStyles.ts │ │ ├── AddTweetModal │ │ │ └── AddTweetModalStyles.tsx │ │ ├── TweetComponent │ │ │ ├── TweetHeader │ │ │ │ └── TweetHeaderStyles.ts │ │ │ ├── TweetText │ │ │ │ └── __tests__ │ │ │ │ │ └── TweetText.test.tsx │ │ │ ├── AnalyticsIconButton │ │ │ │ └── AnalyticsIconButtonStyles.ts │ │ │ └── TweetImage │ │ │ │ └── TweetImageStyles.ts │ │ ├── TweetImageModal │ │ │ ├── TweetInteractionCount │ │ │ │ ├── InteractionCount │ │ │ │ │ └── InteractionCountStyles.ts │ │ │ │ └── TweetInteractionCountStyles.ts │ │ │ ├── ImageCloseButton │ │ │ │ └── ImageCloseButtonStyles.ts │ │ │ ├── AddReplyToTweet │ │ │ │ └── AddReplyToTweetStyles.ts │ │ │ └── TweetText │ │ │ │ └── TweetTextStyles.ts │ │ ├── QuoteIconButton │ │ │ └── QuoteTweetModal │ │ │ │ └── QuoteTweetModalStyles.tsx │ │ ├── PopperUserWindow │ │ │ └── PopperHeader │ │ │ │ └── PopperHeaderStyles.ts │ │ ├── PageWrapper │ │ │ └── PageWrapperStyles.ts │ │ ├── DialogTitleComponent │ │ │ └── DialogTitleComponentStyles.ts │ │ ├── ConnectToUsers │ │ │ └── ConnectToUsersStyles.tsx │ │ ├── FollowListButton │ │ │ └── FollowListButtonStyles.ts │ │ ├── TaggedImageUsers │ │ │ └── TaggedImageUsersStyles.ts │ │ ├── Welcome │ │ │ └── WelcomeStyles.tsx │ │ └── TweetDeleted │ │ │ └── TweetDeletedStyles.tsx │ ├── types │ │ └── tag.ts │ ├── store │ │ └── ducks │ │ │ ├── actionSnackbar │ │ │ ├── contracts │ │ │ │ └── state.ts │ │ │ ├── selector.ts │ │ │ └── actionCreators.ts │ │ │ ├── chat │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── unsentTweets │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── followerRequests │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── tweetAdditionalInfo │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── tags │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── chats │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── userDetail │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── listDetail │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── localization │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ ├── chatMessages │ │ │ └── contracts │ │ │ │ └── state.ts │ │ │ └── userProfile │ │ │ └── contracts │ │ │ └── state.ts │ ├── types.d.ts │ ├── core │ │ └── axios.ts │ ├── hoc │ │ └── withDocumentTitle.tsx │ ├── hook │ │ ├── useFocus.ts │ │ ├── useDebounce.ts │ │ └── useClickAway.ts │ ├── index.tsx │ ├── services │ │ └── api │ │ │ ├── tweet-service │ │ │ └── externalApi.ts │ │ │ └── localization-service │ │ │ ├── gifImageApi.ts │ │ │ ├── languageApi.ts │ │ │ ├── wallpaperApi.ts │ │ │ └── countryCodeApi.ts │ ├── util │ │ └── upload-image-helper.ts │ └── setupTests.js ├── public │ └── twitter.2.ico ├── babel.config.js ├── .prettierrc └── .gitignore ├── dashboard └── grafana │ └── Dockerfile ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── commons └── src │ └── main │ ├── resources │ ├── sql-test │ │ ├── clear-tag-db.sql │ │ ├── clear-notification-db.sql │ │ ├── clear-scheduler-db.sql │ │ ├── clear-localization-db.sql │ │ ├── clear-user-db.sql │ │ ├── clear-topic-db.sql │ │ ├── clear-lists-db.sql │ │ ├── clear-chat-db.sql │ │ └── populate-tag-db.sql │ └── application.yml │ └── java │ └── com │ └── gmail │ └── merikbest2015 │ └── commons │ ├── enums │ ├── ReplyType.java │ ├── TweetType.java │ ├── LinkCoverSize.java │ ├── BackgroundColorType.java │ ├── ColorSchemeType.java │ ├── NotificationType.java │ └── TopicCategory.java │ ├── constants │ ├── BatchJobConstants.java │ ├── HeaderConstants.java │ └── ErrorMessage.java │ ├── dto │ ├── response │ │ ├── user │ │ │ ├── TaggedUserResponse.java │ │ │ ├── UserPrincipalResponse.java │ │ │ └── CommonUserResponse.java │ │ └── notification │ │ │ ├── NotificationListResponse.java │ │ │ ├── NotificationTweetResponse.java │ │ │ └── NotificationUserResponse.java │ ├── request │ │ ├── IdsRequest.java │ │ └── EmailRequest.java │ ├── ImageResponse.java │ └── HeaderResponse.java │ ├── event │ ├── PinTweetEvent.java │ ├── UserEvent.java │ ├── UpdateTweetCountEvent.java │ ├── TweetTagEvent.java │ ├── UpdateListsEvent.java │ ├── ListsNotificationDto.java │ ├── UpdateTweetEvent.java │ ├── UserNotificationDto.java │ ├── SendEmailEvent.java │ └── ListsNotificationEvent.java │ └── exception │ └── ApiRequestException.java ├── user-service ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── gmail │ │ │ └── merikbest2015 │ │ │ ├── model │ │ │ └── UserRole.java │ │ │ ├── constants │ │ │ └── Regexp.java │ │ │ ├── dto │ │ │ ├── response │ │ │ │ ├── LanguagesResponse.java │ │ │ │ ├── AuthenticationResponse.java │ │ │ │ ├── SameFollowerResponse.java │ │ │ │ ├── UserPhoneResponse.java │ │ │ │ ├── UserPintTweetResponse.java │ │ │ │ ├── FollowerUserResponse.java │ │ │ │ └── SearchResultResponse.java │ │ │ └── request │ │ │ │ ├── SearchTermsRequest.java │ │ │ │ ├── UserRequest.java │ │ │ │ └── ProcessEmailRequest.java │ │ │ ├── repository │ │ │ └── projection │ │ │ │ ├── UserPrincipalProjection.java │ │ │ │ ├── NotificationUserProjection.java │ │ │ │ ├── SameFollower.java │ │ │ │ ├── FollowerUserProjection.java │ │ │ │ ├── CommonUserProjection.java │ │ │ │ ├── UserCommonProjection.java │ │ │ │ ├── MutedUserProjection.java │ │ │ │ └── BlockedUserProjection.java │ │ │ ├── service │ │ │ ├── MuteUserService.java │ │ │ ├── BlockUserService.java │ │ │ └── UserUpdateTweetCountService.java │ │ │ └── UserServiceApplication.java │ │ └── resources │ │ └── bootstrap.yml └── Dockerfile ├── lombok.config ├── notification-service ├── src │ └── main │ │ ├── resources │ │ ├── db │ │ │ └── migration │ │ │ │ ├── V3__Create_lists_table.sql │ │ │ │ ├── V1__Create_users_table.sql │ │ │ │ ├── V2__Create_tweets_table.sql │ │ │ │ └── V4__Create_notifications_table.sql │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── constants │ │ └── NotificationErrorMessage.java │ │ ├── repository │ │ ├── UserRepository.java │ │ ├── ListsRepository.java │ │ └── TweetRepository.java │ │ ├── service │ │ ├── UserHandlerService.java │ │ ├── ListsHandlerService.java │ │ └── TweetHandlerService.java │ │ └── NotificationServiceApplication.java └── Dockerfile ├── tag-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── constants │ │ └── TagErrorMessage.java │ │ ├── service │ │ ├── TagClientService.java │ │ └── TagHandlerService.java │ │ ├── dto │ │ └── TagResponse.java │ │ └── TagServiceApplication.java └── Dockerfile ├── api-gateway ├── Dockerfile └── src │ └── main │ └── resources │ └── bootstrap.yml ├── chat-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── dto │ │ ├── request │ │ │ ├── ChatMessageRequest.java │ │ │ └── MessageWithTweetRequest.java │ │ └── response │ │ │ └── UserChatResponse.java │ │ ├── constants │ │ └── ChatSuccessMessage.java │ │ ├── service │ │ └── ChatService.java │ │ ├── repository │ │ └── projection │ │ │ └── ChatProjection.java │ │ └── ChatServiceApplication.java └── Dockerfile ├── email-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ └── service │ │ └── EmailService.java └── Dockerfile ├── image-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ └── service │ │ └── ImageService.java └── Dockerfile ├── lists-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── service │ │ └── ListsClientService.java │ │ ├── constants │ │ ├── ListsSuccessMessage.java │ │ └── ListsErrorMessage.java │ │ ├── repository │ │ └── projection │ │ │ ├── SimpleListProjection.java │ │ │ └── PinnedListProjection.java │ │ ├── dto │ │ ├── request │ │ │ └── ListsRequest.java │ │ └── response │ │ │ ├── PinnedListResponse.java │ │ │ └── SimpleListResponse.java │ │ └── ListsServiceApplication.java └── Dockerfile ├── topic-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── constants │ │ └── TopicErrorMessage.java │ │ ├── dto │ │ └── request │ │ │ ├── SuggestedTopicsRequest.java │ │ │ └── TopicsCategoriesRequest.java │ │ ├── service │ │ └── UserService.java │ │ ├── repository │ │ └── projection │ │ │ ├── FollowedTopicProjection.java │ │ │ └── NotInterestedTopicProjection.java │ │ └── TopicServiceApplication.java └── Dockerfile ├── tweet-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── repository │ │ ├── projection │ │ │ ├── VotedUserProjection.java │ │ │ ├── TweetImageProjection.java │ │ │ ├── TaggedUserProjection.java │ │ │ ├── ProfileTweetImageProjection.java │ │ │ ├── BookmarkProjection.java │ │ │ ├── RetweetProjection.java │ │ │ └── LikeTweetProjection.java │ │ ├── PollChoiceRepository.java │ │ └── TweetImageRepository.java │ │ ├── dto │ │ ├── response │ │ │ ├── TweetImageResponse.java │ │ │ ├── ProfileTweetImageResponse.java │ │ │ ├── TweetUserResponse.java │ │ │ └── NotificationReplyResponse.java │ │ └── request │ │ │ ├── TweetDeleteRequest.java │ │ │ └── VoteRequest.java │ │ ├── constants │ │ └── TweetSuccessMessage.java │ │ ├── service │ │ └── BookmarkService.java │ │ └── TweetServiceApplication.java └── Dockerfile ├── config-server └── Dockerfile ├── eureka-server ├── Dockerfile └── src │ └── main │ ├── resources │ └── application.yml │ └── java │ └── com │ └── gmail │ └── merikbest2015 │ └── EurekaServerApplication.java ├── scheduler-service ├── src │ └── main │ │ ├── resources │ │ └── bootstrap.yml │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── constants │ │ └── SchedulerSuccessMessage.java │ │ ├── dto │ │ └── response │ │ │ ├── TriggerResponse.java │ │ │ └── JobDetailResponse.java │ │ └── SchedulerServiceApplication.java └── Dockerfile ├── websocket-service ├── src │ └── main │ │ └── resources │ │ └── bootstrap.yml └── Dockerfile ├── localization-service ├── src │ └── main │ │ ├── resources │ │ ├── bootstrap.yml │ │ └── db │ │ │ └── migration │ │ │ ├── V3__Create_wallpapers_table.sql │ │ │ ├── V2__Create_languages_table.sql │ │ │ ├── V4__Create_gif_images_table.sql │ │ │ └── V1__Create_country_codes_table.sql │ │ └── java │ │ └── com │ │ └── gmail │ │ └── merikbest2015 │ │ ├── model │ │ └── LanguageCode.java │ │ ├── constants │ │ └── LocalizationSuccessMessage.java │ │ ├── dto │ │ └── response │ │ │ ├── WallpaperResponse.java │ │ │ ├── LanguagesResponse.java │ │ │ ├── GifImageResponse.java │ │ │ ├── CountryCodeResponse.java │ │ │ ├── TranslationResponse.java │ │ │ └── TranslationValueResponse.java │ │ ├── service │ │ ├── GifImageService.java │ │ ├── LanguageService.java │ │ ├── WallpaperService.java │ │ └── CountryCodeService.java │ │ ├── repository │ │ ├── GifImageRepository.java │ │ └── LanguageRepository.java │ │ └── LocalizationServiceApplication.java └── Dockerfile └── .gitignore /frontend/.env: -------------------------------------------------------------------------------- 1 | SKIP_PREFLIGHT_CHECK=true 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Home/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Home"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Lists"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Login/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Login"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Connect/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Connect"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Explore/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Explore"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullList"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Messages"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Settings"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Topics"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Trends/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Trends"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserPage"; 2 | -------------------------------------------------------------------------------- /frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Bookmarks/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Bookmarks"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullTweet"; 2 | -------------------------------------------------------------------------------- /frontend/src/components/TweetInput/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetInput"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Explore/UsersList/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UsersList"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetGif/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetGif"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ListsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/UserLists/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserLists"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Notifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/QuoteTweets/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./QuoteTweets"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Account"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/Followed/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Followed"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/Suggested/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Suggested"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopicItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Authentication"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Explore/TweetsList/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetsList"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ForgotPassword"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetImage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetImage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetList/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetList"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetMedia/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetMedia"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetPoll/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetPoll"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetQuote/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetQuote"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ListsHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PinnedLists/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PinnedLists"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ActionIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ActionIcon"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicBlock/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopicBlock"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Trends/TrendsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TrendsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserAvatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserAvatar"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserDetails/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserDetails"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserTweets"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FollowersYouKnow/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowersYouKnow"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FollowingFollowers/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowingFollowers"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/FindEmail/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FindEmail"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetActions/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetActions"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetDateTime/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetDateTime"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Home/TopTweetActions/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopTweetActions"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/DiscoverLists/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DiscoverLists"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChatMessages"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/MentionsTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MentionsTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Notifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SettingsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./SettingsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/NotInterested/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotInterested"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicsCarousel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopicsCarousel"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserNotFound/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserNotFound"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserWallpaper/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserWallpaper"; 2 | -------------------------------------------------------------------------------- /dashboard/grafana/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM grafana/grafana 2 | ADD ./provisioning /etc/grafana/provisioning 3 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/DialogWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DialogWrapper"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Bookmarks/BookmarksHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BookmarksHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/ResetPassword/index.ts: -------------------------------------------------------------------------------- 1 | export {default } from "./ResetPassword"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditListButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/FullListHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullListHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/FullListTweets/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullListTweets"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/AddReplyToTweet/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AddReplyToTweet"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/LikeIconButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./LikeIconButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/ReplyIconButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ReplyIconButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetErrorPage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetErrorPage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetReplyInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetReplyInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsMemberships/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ListsMemberships"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PopperListWindow"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/Filters/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Filters"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Spaces/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Spaces"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PrivacyAndSafety"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SettingsHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./SettingsHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicBlock/TopicButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopicButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/BlockUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/CancelUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CancelUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/FollowUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserImageModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserImageModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserPageActions"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserPageHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/CustomizeModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CustomizeModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/CheckEmailCode/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CheckEmailCode"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/FullListWallpaper/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullListWallpaper"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ShareActionsModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/RetweetIconButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RetweetIconButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsItem/ListsItemAvatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ListsItemAvatar"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatFooter/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChatFooter"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChatHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatMessage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChatMessage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationsTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/TweetDeckTeams/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetDeckTeams"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/Preferences/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Preferences"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Location/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Location"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/YourTweets/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./YourTweets"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditProfileButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/NotificationButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UnfollowUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UnfollowUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserBlockedMessage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserBlockedMessage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserFollowerGroup/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserFollowerGroup"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/EmptyLikesTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyLikesTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/EmptyMediaTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyMediaTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserUnmuteMessage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserUnmuteMessage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/CreateAccountModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CreateAccountModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/RegistrationInput/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RegistrationInput"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/RegistrationModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RegistrationModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/SetPasswordModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./SetPasswordModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/ForgotPasswordTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ForgotPasswordTextField"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditListModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/FullListDescription/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullListDescription"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/MembersAndFollowers/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MembersAndFollowers"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/TopTweetsActionsModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopTweetsActionsModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsHeader/CreateListsModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CreateListsModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PinnedLists/PinnedListsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PinnedListsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/EmptyNotifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyNotifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/DeactivateAccount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DeactivateAccount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AdditionalResources/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AdditionalResources"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/DataSharing/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DataSharing"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Location/Places/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Places"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MuteAndBlock"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/Security/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Security"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicItem/FollowTopicButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowTopicButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/AddUserToChatButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AddUserToChatButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserInteractionCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserInteractionCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/EmptyRepliesTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyRepliesTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/EmptyTweetsTab/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyTweetsTab"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/ResetPasswordOption/index.ts: -------------------------------------------------------------------------------- 1 | export {default } from "./ResetPasswordOption"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/ResetPasswordSuccess/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ResetPasswordSuccess"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetInteractionCount/LikesCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./LikesCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetInteractionCount/QuotesCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./QuotesCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetInteractionCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetInteractionCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsItem/ListInfoDescription/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ListInfoDescription"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/FollowListButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowListButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatUserBlocked/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChatUserBlocked"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/EmptyChatMessages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyChatMesseges"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeAge/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeAge"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AccountInformation"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/ChangeYourPassword/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeYourPassword"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AdsPreferences/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AdsPreferences"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/ContentYouSee/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ContentYouSee"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/DirectMessages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DirectMessages"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Discoverability/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Discoverability"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicBlock/FollowedTopicButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowedTopicButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicItem/UnfollowTopicButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UnfollowTopicButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/BlockUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/MuteUserButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MuteUserButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/UserItemAction/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserItemAction"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/EmailVerificationModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmailVerificationModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/ShareActionsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ShareActionsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/TweetListAction/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetListAction"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/TopTweetsActionsModal/TopTweetsItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TopTweetsItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetInteractionCount/RetweetsCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RetweetsCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/PopperListWallpaper/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PopperListWallpaper"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/UnfollowListButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UnfollowListButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/DataUsage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DataUsage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/Languages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Languages"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeEmail/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeEmail"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeGender/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeGender"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangePhone"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ContentPreferences"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedWords/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MutedWords"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./SecurityAndAccountAccess"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/EditProfileModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditProfileModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./SetupProfileModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPrivateProfileMessage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserPrivateProfileMessage"; 2 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/merikbest/twitter-spring-reactjs/HEAD/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /frontend/public/twitter.2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/merikbest/twitter-spring-reactjs/HEAD/frontend/public/twitter.2.ico -------------------------------------------------------------------------------- /frontend/src/pages/FullList/MembersAndFollowers/FullListUserCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FullListUserCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/CopyListLinkAction/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CopyListLinkAction"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/PopperListDescription/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PopperListDescription"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/Accessibility/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Accessibility"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/DataUsage/Autoplay/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Autoplay"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeCountry/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeCountry"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeLanguage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeLanguage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeUsername/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeUsername"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/ExploreModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ExploreModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AudienceAndTagging/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AudienceAndTagging"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedAccounts/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MutedAccounts"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/OffTwitterActivity/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./OffTwitterActivity"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/Sessions/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Sessions"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AppsAndSessions"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserInteractionCount/UserFollowersCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserFollowersCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserInteractionCount/UserFollowingCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UserFollowingCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/AddUserToListsButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AddUserToListsButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/ViewUserListsButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ViewUserListsButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/ViewUserTopicsButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ViewUserTopicsButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FollowingFollowers/EmptyFollowersDescription/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmptyFollowersDescription"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FollowingFollowers/FollowingFollowersHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./FollowingFollowersHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/DeleteListModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DeleteListModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/TweetListAction/TweetListModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TweetListModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AccessibilityDisplayLanguages"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/PersonalizationAndData/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PersonalizationAndData"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/Preferences/EmailNotifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EmailNotifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/Preferences/PushNotifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PushNotifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AudienceAndTagging/PhotoTagging/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PhotoTagging"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Discoverability/ManageContacts/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ManageContacts"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/BlockedAccounts/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockedAccounts"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/EditProfileModal/EditBirthDate/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditBirthDate"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfileModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfileModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserPageActions/CopyProfileLinkButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CopyProfileLinkButton"; 2 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-tag-db.sql: -------------------------------------------------------------------------------- 1 | delete from "tag-test".public.tweet_tags; 2 | delete from "tag-test".public.tags; 3 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ManageMembersModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/FullListTweets/MembersAndFollowersModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MembersAndFollowersModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/PopperListInteractionCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PopperListInteractionCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationAuthorItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationAuthorItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationsTimeline/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationsTimeline"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedNotifications/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MutedNotifications"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/YourTweets/LocationInformation/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./LocationInformation"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/ConnectedApps/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ConnectedApps"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/LoggedDevices/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./LoggedDevices"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsHeader/CreateListsModal/CreateListsModalInput/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CreateListsModalInput"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeEmail/ChangeEmailModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangeEmailModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AdsPreferences/YourAdvertiserList/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./YourAdvertiserList"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfileHeaderModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfileHeaderModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/types/tag.ts: -------------------------------------------------------------------------------- 1 | export interface TagResponse { 2 | id: number; 3 | tagName: string; 4 | tweetsQuantity: number; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/ManageMembersInput/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ManageMembersInput"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/RecommendationsModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RecommendationsModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedAccounts/MutedAccountItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MutedAccountItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfilePictureModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfilePictureModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfileUpdatedModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfileUpdatedModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/ManageMembersItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ManageMembersItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/PopperListInteractionCount/PopperListUserCount/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./PopperListUserCount"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/ExploreModal/ExploreModalInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ExploreModalInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/BlockedAccounts/BlockedAccountItem/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockedAccountItem"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/AccountAccessHistory/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./AccountAccessHistory"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/Sessions/CurrentSession/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./CurrentSession"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/Security/TwoFactorAuthentication/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./TwoFactorAuthentication"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/EditProfileModal/EditBirthDate/BirthDateSelect/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BirthDateSelect"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfileDescriptionModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfileDescriptionModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationInfo/NotificationInfoHeader/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./NotificationInfoHeader"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/DeletePhoneNumberButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DeletePhoneNumberButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/UpdatePhoneNumberButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./UpdatePhoneNumberButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/EditProfileModal/EditBirthDate/EditBirthDateModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./EditBirthDateModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/RecommendationsModal/RecommendedLanguage/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./RecommendedLanguage"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedAccounts/MutedAccountItem/MuteAccountInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MuteAccountInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/ManageMembersItem/MemberItemInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MemberItemInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/Display/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./Display"; 2 | export type { DisplayProps } from "./Display"; 3 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/DeletePhoneNumberButton/DeletePhoneModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./DeletePhoneModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/UpdatePhoneNumberButton/ChangePhoneModal/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ChangePhoneModal"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedAccounts/MutedAccountItem/MuteAccountAvatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MuteAccountAvatar"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/MutedAccounts/MutedAccountItem/MuteAccountButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MuteAccountButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/ManageMembersItem/ManageMemberButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ManageMemberButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListModal/ManageMembersModal/ManageMembersItem/MemberItemAvatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./MemberItemAvatar"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/BlockedAccounts/BlockedAccountItem/BlockAccountButton/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockAccountButton"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/BlockedAccounts/BlockedAccountItem/BlockedAccountInfo/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockedAccountInfo"; 2 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/actionSnackbar/contracts/state.ts: -------------------------------------------------------------------------------- 1 | export interface ActionSnackbarState { 2 | snackBarMessage: string; 3 | openSnackBar: boolean; 4 | } 5 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/model/UserRole.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.model; 2 | 3 | public enum UserRole { 4 | USER, ADMIN 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/MuteAndBlock/BlockedAccounts/BlockedAccountItem/BlockedAccountAvatar/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./BlockedAccountAvatar"; 2 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/ProfileDescriptionModal/ProfileDescriptionInput/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from "./ProfileDescriptionInput"; 2 | -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier 2 | lombok.copyableAnnotations += org.springframework.context.annotation.Lazy 3 | -------------------------------------------------------------------------------- /frontend/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | ['@babel/preset-env', {targets: {node: 'current'}}], 4 | '@babel/preset-typescript', 5 | ], 6 | }; -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/ReplyType.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum ReplyType { 4 | EVERYONE, FOLLOW, MENTION 5 | } 6 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/TweetType.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum TweetType { 4 | TWEET, RETWEET, REPLY 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/types.d.ts: -------------------------------------------------------------------------------- 1 | import { compose } from "redux"; 2 | 3 | declare global { 4 | interface Window { 5 | __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/LinkCoverSize.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum LinkCoverSize { 4 | SMALL, MEDIUM, LARGE 5 | } 6 | -------------------------------------------------------------------------------- /notification-service/src/main/resources/db/migration/V3__Create_lists_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE lists 2 | ( 3 | id INT8 NOT NULL, 4 | list_name VARCHAR(255) NOT NULL 5 | ); 6 | -------------------------------------------------------------------------------- /tag-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: tag-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /api-gateway/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/api-gateway-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "api-gateway-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /chat-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: chat-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /email-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: email-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /image-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: image-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /lists-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: lists-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /tag-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/tag-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "tag-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /topic-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: topic-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /tweet-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: tweet-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /user-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: user-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /chat-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/chat-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "chat-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/BackgroundColorType.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum BackgroundColorType { 4 | DEFAULT, DIM, LIGHTS_OUT 5 | } 6 | -------------------------------------------------------------------------------- /config-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/config-server-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "config-server-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /email-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/email-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "email-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /eureka-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/eureka-server-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "eureka-server-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /image-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/image-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "image-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /lists-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/lists-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "lists-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /topic-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/topic-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "topic-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /tweet-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/tweet-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "tweet-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /user-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/user-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "user-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-notification-db.sql: -------------------------------------------------------------------------------- 1 | delete from "notification-test".public.notifications; 2 | delete from "notification-test".public.tweets; 3 | delete from "notification-test".public.users; 4 | -------------------------------------------------------------------------------- /scheduler-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: scheduler-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /websocket-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: websocket-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /commons/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | jwt: 2 | header: Authorization 3 | secret: ANMGN10M0EI76QJPOOCAKRD1RJ98C6AACBIM8YYCJKMH43VTD52IRJE8N0DEOB70 4 | expiration: 6048000 5 | hostname: http://localhost:3000 6 | -------------------------------------------------------------------------------- /localization-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: localization-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /notification-service/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: notification-service 4 | cloud: 5 | config: 6 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 7 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/constants/Regexp.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class Regexp { 4 | public static final String USER_EMAIL_REGEXP = ".+@.+\\..+"; 5 | } 6 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/ColorSchemeType.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum ColorSchemeType { 4 | BLUE, YELLOW, CRIMSON, VIOLET, ORANGE, GREEN 5 | } 6 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-scheduler-db.sql: -------------------------------------------------------------------------------- 1 | delete from "scheduler-test".public.qrtz_cron_triggers; 2 | delete from "scheduler-test".public.qrtz_triggers; 3 | delete from "scheduler-test".public.qrtz_job_details; 4 | -------------------------------------------------------------------------------- /scheduler-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/scheduler-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "scheduler-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/VotedUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface VotedUserProjection { 4 | Long getId(); 5 | } 6 | -------------------------------------------------------------------------------- /websocket-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/websocket-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "websocket-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/NotificationType.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum NotificationType { 4 | TWEET, RETWEET, REPLY, LIKE, FOLLOW, LISTS, MENTION 5 | } 6 | -------------------------------------------------------------------------------- /localization-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/localization-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "localization-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/model/LanguageCode.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.model; 2 | 3 | public enum LanguageCode { 4 | EN, ES, DE, FR, IT; 5 | 6 | public static final int SIZE = 5; 7 | } 8 | -------------------------------------------------------------------------------- /notification-service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | MAINTAINER Miroslav Khotinskiy 3 | COPY target/notification-service-0.0.1-SNAPSHOT.jar ./ 4 | CMD ["java", "-jar", "notification-service-0.0.1-SNAPSHOT.jar"] 5 | -------------------------------------------------------------------------------- /tag-service/src/main/java/com/gmail/merikbest2015/constants/TagErrorMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class TagErrorMessage { 4 | public static final String TAG_NOT_FOUND = "Tag not found"; 5 | } 6 | -------------------------------------------------------------------------------- /notification-service/src/main/resources/db/migration/V1__Create_users_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE users 2 | ( 3 | id INT8 NOT NULL, 4 | username VARCHAR(255) NOT NULL, 5 | avatar VARCHAR(255), 6 | PRIMARY KEY (id) 7 | ); 8 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/constants/TopicErrorMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class TopicErrorMessage { 4 | public static final String TOPIC_NOT_FOUND = "Topic not found"; 5 | } 6 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/constants/BatchJobConstants.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.constants; 2 | 3 | public class BatchJobConstants { 4 | public static final String IMPORT_USER_JOB = "importUserJob"; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/ActionIconButton/ActionIconButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useActionIconButtonStyles = makeStyles(() => ({ 4 | icon: { 5 | display: "inline-block" 6 | } 7 | })); 8 | -------------------------------------------------------------------------------- /scheduler-service/src/main/java/com/gmail/merikbest2015/constants/SchedulerSuccessMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class SchedulerSuccessMessage { 4 | public static final String JOB_DELETED = "Job deleted"; 5 | } 6 | -------------------------------------------------------------------------------- /tag-service/src/main/java/com/gmail/merikbest2015/service/TagClientService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import java.util.List; 4 | 5 | public interface TagClientService { 6 | 7 | List getTagsByText(String text); 8 | } 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/TweetImageProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface TweetImageProjection { 4 | Long getId(); 5 | String getSrc(); 6 | } 7 | -------------------------------------------------------------------------------- /api-gateway/src/main/resources/bootstrap.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | main: 3 | web-application-type: reactive 4 | application: 5 | name: api-gateway 6 | cloud: 7 | config: 8 | uri: http://${CONFIG_SERVER_HOST:localhost}:8888/ 9 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/PrivacyAndSafetyStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePrivacyAndSafetyStyles = makeStyles(() => ({ 4 | listWrapper: { 5 | paddingBottom: 64 6 | } 7 | })); 8 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/TaggedUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface TaggedUserProjection { 4 | Long getId(); 5 | String getFullName(); 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/ChangeYourPassword/ChangeYourPasswordStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChangeYourPasswordStyles = makeStyles(() => ({ 4 | buttonWrapper: { 5 | float: "right" 6 | } 7 | })); 8 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AdditionalResources/AdditionalResourcesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAdditionalResourcesStyles = makeStyles(() => ({ 4 | listWrapper: { 5 | paddingBottom: 64 6 | } 7 | })); 8 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Spaces/SpacesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useSpacesStyles = makeStyles(() => ({ 4 | title: { 5 | paddingBottom: 4, 6 | fontWeight: 700 7 | } 8 | })); 9 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-localization-db.sql: -------------------------------------------------------------------------------- 1 | delete from "localization-test".public.country_codes; 2 | delete from "localization-test".public.languages; 3 | delete from "localization-test".public.wallpapers; 4 | delete from "localization-test".public.gif_images; 5 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/chat/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { ChatResponse } from "../../../../types/chat"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface ChatState { 5 | item?: ChatResponse; 6 | loadingState: LoadingStatus; 7 | } 8 | -------------------------------------------------------------------------------- /localization-service/src/main/resources/db/migration/V3__Create_wallpapers_table.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE wallpapers_seq START 1000 INCREMENT 1; 2 | 3 | CREATE TABLE wallpapers 4 | ( 5 | id INT8 NOT NULL, 6 | src VARCHAR(255) NOT NULL, 7 | PRIMARY KEY (id) 8 | ); 9 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/constants/NotificationErrorMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class NotificationErrorMessage { 4 | public static final String NOTIFICATION_NOT_FOUND = "Notification not found"; 5 | } 6 | -------------------------------------------------------------------------------- /tag-service/src/main/java/com/gmail/merikbest2015/service/TagHandlerService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | public interface TagHandlerService { 4 | 5 | void parseHashtag(Long tweetId, String tweetText); 6 | 7 | void deleteTag(Long tweetId); 8 | } 9 | -------------------------------------------------------------------------------- /email-service/src/main/java/com/gmail/merikbest2015/service/EmailService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.event.SendEmailEvent; 4 | 5 | public interface EmailService { 6 | void sendEmail(SendEmailEvent emailEvent); 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/UserLists/UserListsStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUserListsStyles = makeStyles(() => ({ 4 | myLists: { 5 | height: 316, 6 | border: 0, 7 | borderRadius: 0 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/constants/LocalizationSuccessMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class LocalizationSuccessMessage { 4 | public static final String TRANSLATION_KEY_DELETED = "Translation key deleted"; 5 | } 6 | -------------------------------------------------------------------------------- /localization-service/src/main/resources/db/migration/V2__Create_languages_table.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE languages_seq START 1000 INCREMENT 1; 2 | 3 | CREATE TABLE languages 4 | ( 5 | id INT8 NOT NULL, 6 | language VARCHAR(255) NOT NULL, 7 | PRIMARY KEY (id) 8 | ); 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/response/TweetImageResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class TweetImageResponse { 7 | private Long id; 8 | private String src; 9 | } 10 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/LanguagesResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class LanguagesResponse { 7 | private Long id; 8 | private String language; 9 | } 10 | -------------------------------------------------------------------------------- /image-service/src/main/java/com/gmail/merikbest2015/service/ImageService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | public interface ImageService { 6 | 7 | String uploadImage(MultipartFile multipartFile); 8 | } 9 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/WallpaperResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class WallpaperResponse { 7 | private Long id; 8 | private String src; 9 | } 10 | -------------------------------------------------------------------------------- /tag-service/src/main/java/com/gmail/merikbest2015/dto/TagResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class TagResponse { 7 | private Long id; 8 | private String tagName; 9 | private Long tweetsQuantity; 10 | } 11 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/LanguagesResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class LanguagesResponse { 7 | private Long id; 8 | private String language; 9 | } 10 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/request/SearchTermsRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class SearchTermsRequest { 9 | private List users; 10 | } 11 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/UserPrincipalProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface UserPrincipalProjection { 4 | Long getId(); 5 | String getEmail(); 6 | String getActivationCode(); 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/components/CloseButton/CloseButtonStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useCloseButtonStyles = makeStyles(() => ({ 4 | close: { 5 | "& .MuiIconButton-root": { 6 | marginRight: 15 7 | } 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatUserBlocked/ChatUserBlockedStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChatUserBlockedStyles = makeStyles(() => ({ 4 | blockedInfoText: { 5 | textAlign: "center", 6 | height: 30 7 | } 8 | })); 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/request/TweetDeleteRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class TweetDeleteRequest { 9 | private List tweetsIds; 10 | } 11 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/ProfileTweetImageProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface ProfileTweetImageProjection { 4 | Long getTweetId(); 5 | Long getImageId(); 6 | String getSrc(); 7 | } 8 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/NotificationUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface NotificationUserProjection { 4 | Long getId(); 5 | String getUsername(); 6 | String getAvatar(); 7 | } 8 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/SameFollower.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface SameFollower { 4 | Long getId(); 5 | String getFullName(); 6 | String getUsername(); 7 | String getAvatar(); 8 | } 9 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/DataUsage/DataUsageStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useDataUsageStyles = makeStyles(() => ({ 4 | accessibilityInfo: { 5 | display: "inline-block", 6 | width: 200 7 | } 8 | })); 9 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/dto/request/SuggestedTopicsRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class SuggestedTopicsRequest { 9 | private List topicsIds; 10 | } 11 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/AuthenticationResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class AuthenticationResponse { 7 | private AuthUserResponse user; 8 | private String token; 9 | } 10 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/user/TaggedUserResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.user; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class TaggedUserResponse { 7 | private Long id; 8 | private String fullName; 9 | } 10 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.model.User; 4 | 5 | public interface UserService { 6 | 7 | User getAuthUser(); 8 | 9 | void validateUserProfile(Long userId); 10 | } 11 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/request/VoteRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class VoteRequest { 7 | private Long tweetId; 8 | private Long pollId; 9 | private Long pollChoiceId; 10 | } 11 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/GifImageResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class GifImageResponse { 7 | private Long id; 8 | private String title; 9 | private String src; 10 | } 11 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/service/GifImageService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.model.GifImage; 4 | 5 | import java.util.List; 6 | 7 | public interface GifImageService { 8 | List getGifImages(); 9 | } 10 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/service/LanguageService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.model.Language; 4 | 5 | import java.util.List; 6 | 7 | public interface LanguageService { 8 | List getLanguages(); 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/SideSearch/RemoveSearchResultButton/RemoveSearchResultButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useRemoveSearchResultButtonStyles = makeStyles(() => ({ 4 | closeIconButton: { 5 | marginLeft: "auto", 6 | float: "right" 7 | } 8 | })); 9 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/TweetDeckTeams/TweetDeckTeamsStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetDeckTeamsStyles = makeStyles(() => ({ 4 | title: { 5 | paddingBottom: 4 6 | }, 7 | switch: { 8 | float: "right" 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/RecommendationsModal/RecommendedLanguage/RecommendedLanguageStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useRecommendedLanguageStyles = makeStyles(() => ({ 4 | checkboxWrapper: { 5 | marginTop: 12 6 | } 7 | })); 8 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/unsentTweets/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { TweetResponse } from "../../../../types/tweet"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface UnsentTweetsState { 5 | items: TweetResponse[]; 6 | pagesCount: number; 7 | loadingState: LoadingStatus; 8 | } 9 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/service/ListsClientService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.dto.response.tweet.TweetListResponse; 4 | 5 | public interface ListsClientService { 6 | 7 | TweetListResponse getTweetList(Long listId); 8 | } 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/BookmarkProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | public interface BookmarkProjection { 6 | LocalDateTime getBookmarkDate(); 7 | TweetProjection getTweet(); 8 | } 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/RetweetProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | public interface RetweetProjection { 6 | LocalDateTime getRetweetDate(); 7 | TweetUserProjection getTweet(); 8 | } 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/projection/LikeTweetProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | public interface LikeTweetProjection { 6 | LocalDateTime getLikeTweetDate(); 7 | TweetProjection getTweet(); 8 | } 9 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/constants/HeaderConstants.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.constants; 2 | 3 | public class HeaderConstants { 4 | public static final String AUTH_USER_ID_HEADER = "X-auth-user-id"; 5 | public static final String PAGE_TOTAL_COUNT = "page-total-count"; 6 | } 7 | -------------------------------------------------------------------------------- /localization-service/src/main/resources/db/migration/V4__Create_gif_images_table.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE gif_images_seq START 1000 INCREMENT 1; 2 | 3 | CREATE TABLE gif_images 4 | ( 5 | id INT8 NOT NULL, 6 | title VARCHAR(255) NOT NULL, 7 | src VARCHAR(255) NOT NULL, 8 | PRIMARY KEY (id) 9 | ); 10 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/notification/NotificationListResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.notification; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class NotificationListResponse { 7 | private Long id; 8 | private String listName; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/UnsentTweetsModal/UnsentTweetItem/UnsentTweetsHeader/UnsentTweetsHeaderStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUnsentTweetsHeaderStyles = makeStyles(() => ({ 4 | outlinedButton: { 5 | height: 24, 6 | padding: "0px 12px" 7 | } 8 | })); 9 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/response/ProfileTweetImageResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ProfileTweetImageResponse { 7 | private Long tweetId; 8 | private Long imageId; 9 | private String src; 10 | } 11 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/constants/ListsSuccessMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class ListsSuccessMessage { 4 | public static final String LIST_DELETED = "List id:%s deleted."; 5 | public static final String USER_ADDED_TO_LISTS = "User added to lists success."; 6 | } 7 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-user-db.sql: -------------------------------------------------------------------------------- 1 | delete from "user-test".public.user_blocked; 2 | delete from "user-test".public.subscribers; 3 | delete from "user-test".public.user_muted; 4 | delete from "user-test".public.user_follower_requests; 5 | delete from "user-test".public.user_subscriptions; 6 | delete from "user-test".public.users; 7 | -------------------------------------------------------------------------------- /frontend/src/components/Buttons/FullWidthButton/FullWidthButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFullWidthButtonStyles = makeStyles(() => ({ 4 | button: { 5 | position: "absolute", 6 | bottom: 0, 7 | width: 530, 8 | marginBottom: 30 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/components/LockIcon/LockIconStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useLockIconStyles = makeStyles(() => ({ 4 | lockIcon: { 5 | "& svg": { 6 | marginLeft: 3, 7 | marginBottom: -3, 8 | height: "1.2em" 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/ForgotPassword/ResetPasswordSuccess/ResetPasswordSuccessStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useResetPasswordSuccessStyles = makeStyles(() => ({ 4 | infoWrapper: { 5 | margin: "7px 0px" 6 | }, 7 | footer: { 8 | paddingTop: 36 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/EditListButton/EditListButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEditListButtonStyles = makeStyles((theme) => ({ 4 | listOutlinedButton: { 5 | "&:hover": { 6 | backgroundColor: theme.palette.secondary.light 7 | } 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/MessagesHeader/MessagesHeaderStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useMessagesHeaderStyles = makeStyles(() => ({ 4 | header: { 5 | width: 416 6 | }, 7 | iconGroup: { 8 | marginLeft: "auto", 9 | marginRight: 10 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AudienceAndTagging/PhotoTagging/PhotoTaggingStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePhotoTaggingStyles = makeStyles(() => ({ 4 | title: { 5 | paddingBottom: 4 6 | }, 7 | switch: { 8 | float: "right" 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/followerRequests/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { FollowerUserResponse } from "../../../../types/user"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface FollowerRequestsState { 5 | items: FollowerUserResponse[]; 6 | pagesCount: number; 7 | loadingState: LoadingStatus; 8 | } 9 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/dto/request/ChatMessageRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ChatMessageRequest { 9 | private Long chatId; 10 | private String text; 11 | } 12 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/user/UserPrincipalResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.user; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserPrincipalResponse { 7 | private Long id; 8 | private String email; 9 | private String activationCode; 10 | } 11 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-topic-db.sql: -------------------------------------------------------------------------------- 1 | delete from "topic-test".public.user_blocked; 2 | delete from "topic-test".public.user_subscriptions; 3 | delete from "topic-test".public.topic_not_interested; 4 | delete from "topic-test".public.topic_followers; 5 | delete from "topic-test".public.users; 6 | delete from "topic-test".public.topics; 7 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/EmailVerificationModal/EmailVerificationModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEmailVerificationModalStyles = makeStyles(() => ({ 4 | emailLinkWrapper: { 5 | display: "block", 6 | marginLeft: 10, 7 | marginTop: 2 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/MessagesModal/MessagesModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useMessagesModalStyles = makeStyles((theme) => ({ 4 | content: { 5 | "& .MuiListItem-root.Mui-selected": { 6 | backgroundColor: theme.palette.secondary.main 7 | } 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/constants/TweetSuccessMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class TweetSuccessMessage { 4 | public static final String SCHEDULED_TWEETS_DELETED = "Scheduled tweets deleted."; 5 | public static final String YOUR_TWEET_WAS_DELETED = "Your Tweet was deleted"; 6 | } 7 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/SameFollowerResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class SameFollowerResponse { 7 | private Long id; 8 | private String fullName; 9 | private String username; 10 | private String avatar; 11 | } 12 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/FollowerUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface FollowerUserProjection { 4 | Long getId(); 5 | String getFullName(); 6 | String getUsername(); 7 | String getAbout(); 8 | String getAvatar(); 9 | } 10 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/constants/ChatSuccessMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class ChatSuccessMessage { 4 | public static final String CHAT_SUCCESSFULLY_DELETED = "Chat successfully deleted"; 5 | public static final String SUCCESSFULLY_LEFT_THE_CHAT = "Successfully left the chat"; 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/components/SideMenu/SideMenuMoreItem/FollowerRequestsModal/FollowerRequestsModalSyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFollowerRequestsModalStyles = makeStyles(() => ({ 4 | dialog: { 5 | "& .MuiDialogTitle-root": { 6 | borderBottom: "none" 7 | } 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/SecurityAndAccountAccess/AppsAndSessions/LoggedDevices/LoggedDevicesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useLoggedDevicesStyles = makeStyles(() => ({ 4 | infoItemWrapper: { 5 | "& .MuiTypography-h6": { 6 | fontWeight: 700 7 | } 8 | } 9 | })); 10 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/service/WallpaperService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.model.Wallpaper; 4 | 5 | import java.util.List; 6 | 7 | public interface WallpaperService { 8 | List getWallpapers(); 9 | 10 | Wallpaper getWallpaper(); 11 | } 12 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/UserPhoneResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class UserPhoneResponse { 9 | private String phoneCode; 10 | private Long phoneNumber; 11 | } 12 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/CommonUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface CommonUserProjection { 4 | Long getId(); 5 | String getFullName(); 6 | String getUsername(); 7 | String getAvatar(); 8 | boolean isPrivateProfile(); 9 | } 10 | -------------------------------------------------------------------------------- /frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": false, 3 | "printWidth": 120, 4 | "editor.formatOnSave": true, 5 | "proseWrap": "always", 6 | "tabWidth": 4, 7 | "requireConfig": false, 8 | "useTabs": false, 9 | "trailingComma": "none", 10 | "bracketSpacing": true, 11 | "jsxBracketSameLine": false, 12 | "semi": true 13 | } -------------------------------------------------------------------------------- /frontend/src/components/Buttons/PendingButton/PendingButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePendingButtonStyles = makeStyles((theme) => ({ 4 | outlinedButton: { 5 | width: 79, 6 | "&:hover": { 7 | backgroundColor: theme.palette.secondary.light 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/EmptyNotifications/EmptyNotificationsStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEmptyNotificationsStyles = makeStyles(() => ({ 4 | infoWindow: { 5 | textAlign: "center", 6 | "& .MuiTypography-h4": { 7 | marginTop: 30 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/repository/projection/SimpleListProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface SimpleListProjection { 4 | Long getId(); 5 | String getListName(); 6 | String getAltWallpaper(); 7 | String getWallpaper(); 8 | boolean getIsPrivate(); 9 | } 10 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/UserPintTweetResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class UserPintTweetResponse { 9 | private Long userId; 10 | private Long pinnedTweetId; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/components/BackButton/BackButtonStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useBackButtonStyles = makeStyles(() => ({ 4 | container: { 5 | display: "inline-block", 6 | "& .MuiIconButton-root": { 7 | marginRight: 20, 8 | marginLeft: 10 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/components/UsersItem/PendingButton/PendingButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePendingButtonStyles = makeStyles((theme) => ({ 4 | outlinedButton: { 5 | width: 79, 6 | "&:hover": { 7 | backgroundColor: theme.palette.secondary.light 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/CountryCodeResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CountryCodeResponse { 7 | private Long id; 8 | private String countryCode; 9 | private String phoneCode; 10 | private String country; 11 | } 12 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/UserCommonProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | public interface UserCommonProjection { 4 | Long getId(); 5 | String getEmail(); 6 | String getFullName(); 7 | String getActivationCode(); 8 | String getPasswordResetCode(); 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/MessageSettings/MessageSettingsStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useMessageSettingsStyles = makeStyles(() => ({ 4 | chatContainer: { 5 | minWidth: 600, 6 | padding: 0, 7 | borderLeft: 0 8 | }, 9 | chatHeader: { 10 | width: 598 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetModal/AddTweetModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAddTweetModalStyles = makeStyles(() => ({ 4 | content: { 5 | top: "-20%" 6 | }, 7 | dialogContent: { 8 | width: 598, 9 | minHeight: 288, 10 | padding: "10px 20px 10px 20px" 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/tweetAdditionalInfo/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { TweetAdditionalInfoResponse } from "../../../../types/tweet"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface TweetAdditionalInfoState { 5 | tweetAdditionalInfo?: TweetAdditionalInfoResponse; 6 | isTweetBookmarked: boolean; 7 | loadingState: LoadingStatus; 8 | } 9 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/dto/request/TopicsCategoriesRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import com.gmail.merikbest2015.commons.enums.TopicCategory; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | public class TopicsCategoriesRequest { 10 | private List categories; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/components/TweetComponent/TweetHeader/TweetHeaderStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetHeaderStyles = makeStyles(() => ({ 4 | lockIcon: { 5 | "& svg": { 6 | marginLeft: 3, 7 | marginBottom: -3, 8 | width: 16, 9 | height: 16 10 | } 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/pages/Authentication/SetPasswordModal/SetPasswordModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useSetPasswordModalStyles = makeStyles(() => ({ 4 | title: { 5 | marginTop: 20 6 | }, 7 | subtitle: { 8 | marginTop: 15 9 | }, 10 | controllerWrapper: { 11 | marginTop: 10 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeGender/ChangeGenderStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChangeGenderStyles = makeStyles(() => ({ 4 | textFieldWrapper: { 5 | paddingTop: "24px" 6 | }, 7 | buttonWrapper: { 8 | padding: "12px 16px", 9 | float: "right" 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/tags/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { TagResponse } from "../../../../types/tag"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface TagsState { 5 | tags: TagResponse[]; 6 | loadingTagsState: LoadingStatus; 7 | trends: TagResponse[]; 8 | pagesCount: number; 9 | loadingTrendsState: LoadingStatus; 10 | } 11 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/service/CountryCodeService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.model.CountryCode; 4 | 5 | import java.util.List; 6 | 7 | public interface CountryCodeService { 8 | List getCountryCodes(); 9 | 10 | boolean isPhoneCodeExists(String phoneCode); 11 | } 12 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/FollowerUserResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class FollowerUserResponse { 7 | private Long id; 8 | private String fullName; 9 | private String username; 10 | private String about; 11 | private String avatar; 12 | } 13 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-lists-db.sql: -------------------------------------------------------------------------------- 1 | delete from "lists-test".public.user_blocked; 2 | delete from "lists-test".public.user_subscriptions; 3 | delete from "lists-test".public.pinned_lists; 4 | delete from "lists-test".public.lists_followers; 5 | delete from "lists-test".public.lists_members; 6 | delete from "lists-test".public.lists; 7 | delete from "lists-test".public.users; 8 | -------------------------------------------------------------------------------- /frontend/src/components/Buttons/FollowButton/FollowButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFollowButtonStyles = makeStyles((theme) => ({ 4 | outlinedButton: { 5 | float: "right", 6 | width: 79, 7 | "&:hover": { 8 | backgroundColor: theme.palette.secondary.light 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/components/Buttons/UnfollowButton/UnfollowButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUnfollowButtonStyles = makeStyles((theme) => ({ 4 | containedButton: { 5 | float: "right", 6 | width: 101, 7 | "&:hover": { 8 | backgroundColor: theme.palette.error.dark 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/components/TweetImageModal/TweetInteractionCount/InteractionCount/InteractionCountStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useInteractionCountStyles = makeStyles(() => ({ 4 | interactionCount: { 5 | "&:hover": { 6 | textDecoration: "underline", 7 | cursor: "pointer" 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/components/UsersItem/FollowButton/FollowButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFollowButtonStyles = makeStyles((theme) => ({ 4 | outlinedButton: { 5 | float: "right", 6 | width: 79, 7 | "&:hover": { 8 | backgroundColor: theme.palette.secondary.light 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/clear-chat-db.sql: -------------------------------------------------------------------------------- 1 | delete from "chat-test".public.user_blocked; 2 | delete from "chat-test".public.user_subscriptions; 3 | delete from "chat-test".public.user_follower_requests; 4 | delete from "chat-test".public.chats_participants; 5 | delete from "chat-test".public.chat_messages; 6 | delete from "chat-test".public.chats; 7 | delete from "chat-test".public.users; 8 | -------------------------------------------------------------------------------- /frontend/src/components/QuoteIconButton/QuoteTweetModal/QuoteTweetModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useQuoteTweetModalStyles = makeStyles(() => ({ 4 | content: { 5 | top: "-20%" 6 | }, 7 | dialogContent: { 8 | width: 598, 9 | minHeight: 230, 10 | padding: "10px 20px 15px 20px" 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/components/UsersItem/UnfollowButton/UnfollowButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUnfollowButtonStyles = makeStyles((theme) => ({ 4 | containedButton: { 5 | float: "right", 6 | width: 101, 7 | "&:hover": { 8 | backgroundColor: theme.palette.error.dark 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/components/TweetImageModal/ImageCloseButton/ImageCloseButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useImageCloseButtonStyles = makeStyles((theme) => ({ 4 | imageModalClose: { 5 | margin: 10, 6 | "& svg": { 7 | height: "0.9em", 8 | color: theme.palette.common.white 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/DataUsage/Autoplay/AutoplayStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAutoplayStyles = makeStyles(() => ({ 4 | infoItemWrapper: { 5 | padding: "12px 16px", 6 | "& .MuiTypography-h6, .MuiTypography-subtitle2": { 7 | marginBottom: 4 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangePhone/ChangePhoneStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChangePhoneStyles = makeStyles((theme) => ({ 4 | textFieldWrapper: { 5 | padding: "12px 16px", 6 | "& .MuiFormLabel-root.Mui-disabled": { 7 | color: theme.palette.grey[500] 8 | } 9 | } 10 | })); 11 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/PersonalizationAndData/PersonalizationAndDataStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePersonalizationAndDataStyles = makeStyles(() => ({ 4 | switch: { 5 | float: "right" 6 | }, 7 | subText: { 8 | marginTop: 12 9 | }, 10 | content: { 11 | paddingBottom: 64 12 | } 13 | })); -------------------------------------------------------------------------------- /frontend/src/store/ducks/chats/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { ChatResponse } from "../../../../types/chat"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface ChatsState { 5 | items: ChatResponse[]; 6 | loadingState: LoadingStatus; 7 | } 8 | 9 | export interface LeaveConversationRequest { 10 | participantId: number; 11 | chatId: number; 12 | } 13 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/TranslationResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class TranslationResponse { 9 | private Long id; 10 | private String translationKey; 11 | private List translationValues; 12 | } 13 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/dto/response/TranslationValueResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.gmail.merikbest2015.model.LanguageCode; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class TranslationValueResponse { 8 | private Long id; 9 | private LanguageCode languageCode; 10 | private String value; 11 | } 12 | -------------------------------------------------------------------------------- /localization-service/src/main/resources/db/migration/V1__Create_country_codes_table.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE country_codes_seq START 1000 INCREMENT 1; 2 | 3 | CREATE TABLE country_codes 4 | ( 5 | id INT8 NOT NULL, 6 | country_code VARCHAR(255) NOT NULL, 7 | phone_code VARCHAR(255) NOT NULL, 8 | country VARCHAR(255) NOT NULL, 9 | PRIMARY KEY (id) 10 | ); 11 | -------------------------------------------------------------------------------- /frontend/src/core/axios.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { TOKEN } from "../constants/common-constants"; 3 | 4 | axios.interceptors.request.use((config) => { 5 | if (localStorage.getItem(TOKEN)) { 6 | config.headers["Authorization"] = localStorage.getItem(TOKEN); 7 | return config; 8 | } else { 9 | return config; 10 | } 11 | }); 12 | 13 | export { axios }; 14 | -------------------------------------------------------------------------------- /frontend/src/hoc/withDocumentTitle.tsx: -------------------------------------------------------------------------------- 1 | import React, { ComponentType, useEffect } from "react"; 2 | 3 | export const withDocumentTitle = (Component: ComponentType) => (title?: string) => (props: T) => { 4 | 5 | useEffect(() => { 6 | document.title = title ? `${title} / Twitter` : "Twitter"; 7 | }, []); 8 | 9 | return ; 10 | }; 11 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/MembersAndFollowers/FullListUserCount/FullListUserCountStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFullListUserCountStyles = makeStyles(() => ({ 4 | listMembers: { 5 | marginLeft: 20, 6 | "&:hover": { 7 | cursor: "pointer", 8 | textDecoration: "underline" 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicItem/FollowTopicButton/FollowTopicButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFollowTopicButtonStyles = makeStyles((theme) => ({ 4 | outlinedButton: { 5 | float: "right", 6 | width: 79, 7 | "&:hover": { 8 | backgroundColor: theme.palette.secondary.light 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.User; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface UserRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /notification-service/src/main/resources/db/migration/V2__Create_tweets_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE tweets 2 | ( 3 | id INT8 NOT NULL, 4 | tweet_text VARCHAR(255) NOT NULL, 5 | tweet_type VARCHAR(255) NOT NULL DEFAULT 'TWEET', 6 | author_id INT8 NOT NULL REFERENCES users, 7 | PRIMARY KEY (id) 8 | ); 9 | CREATE INDEX tweets_author_id_idx ON tweets (author_id); 10 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/request/UserRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class UserRequest { 7 | private String fullName; 8 | private String about; 9 | private String location; 10 | private String website; 11 | private String avatar; 12 | private String wallpaper; 13 | } 14 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/request/IdsRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.request; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @NoArgsConstructor 11 | @AllArgsConstructor 12 | public class IdsRequest { 13 | private List ids; 14 | } 15 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/PinTweetEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class PinTweetEvent { 13 | private Long tweetId; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/TweetImageModal/AddReplyToTweet/AddReplyToTweetStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAddReplyToTweetStyles = makeStyles((theme) => ({ 4 | replyWrapper: { 5 | margin: "16px 68px", 6 | "& a": { 7 | textDecoration: "none", 8 | color: theme.palette.primary.main 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/TopicItem/UnfollowTopicButton/UnfollowTopicButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUnfollowTopicButtonStyles = makeStyles((theme) => ({ 4 | containedButton: { 5 | float: "right", 6 | width: 101, 7 | "&:hover": { 8 | backgroundColor: theme.palette.error.dark 9 | } 10 | } 11 | })); 12 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/repository/ListsRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.Lists; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface ListsRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/repository/TweetRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.Tweet; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface TweetRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/UserEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | public interface UserEvent { 4 | Long getId(); 5 | String getFullName(); 6 | String getUsername(); 7 | String getAbout(); 8 | String getAvatar(); 9 | boolean isPrivateProfile(); 10 | boolean isMutedDirectMessages(); 11 | boolean isActive(); 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/components/LockIcon/LockIcon.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactElement } from "react"; 2 | import { LockIcon as Icon } from "../../icons"; 3 | 4 | import { useLockIconStyles } from "./LockIconStyles"; 5 | 6 | const LockIcon = (): ReactElement => { 7 | const classes = useLockIconStyles(); 8 | 9 | return {Icon}; 10 | }; 11 | 12 | export default LockIcon; 13 | -------------------------------------------------------------------------------- /frontend/src/components/PopperUserWindow/PopperHeader/PopperHeaderStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePopperHeaderStyles = makeStyles(() => ({ 4 | headerWrapper: { 5 | display: "flex", 6 | justifyContent: "space-between" 7 | }, 8 | avatar: { 9 | width: "60px !important", 10 | height: "60px !important" 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/constants/ListsErrorMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.constants; 2 | 3 | public class ListsErrorMessage { 4 | public static final String LIST_NOT_FOUND = "List not found"; 5 | public static final String INCORRECT_LIST_NAME_LENGTH = "Incorrect list name length"; 6 | public static final String USER_ID_BLOCKED = "User with ID:%s is blocked"; 7 | } 8 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/dto/request/ListsRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ListsRequest { 7 | private Long id; 8 | private String listName; 9 | private String description; 10 | private Boolean isPrivate; 11 | private String altWallpaper; 12 | private String wallpaper; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/PageWrapper/PageWrapperStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePageWrapperStyles = makeStyles(() => ({ 4 | header: { 5 | justifyContent: "space-between", 6 | "& .MuiTypography-h5": { 7 | marginLeft: 16, 8 | display: "inline-block", 9 | verticalAlign: "middle" 10 | } 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/dto/request/MessageWithTweetRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class MessageWithTweetRequest { 11 | private String text; 12 | private Long tweetId; 13 | private List usersIds; 14 | } 15 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/notification/NotificationTweetResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.notification; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class NotificationTweetResponse { 7 | private Long id; 8 | private String text; 9 | private NotificationUserResponse author; 10 | private boolean notificationCondition; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/AudienceAndTagging/AudienceAndTaggingStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAudienceAndTaggingStyles = makeStyles(() => ({ 4 | photoTaggingLink: { 5 | "& svg": { 6 | marginTop: 8 7 | } 8 | }, 9 | photoTagInfo: { 10 | display: "inline-block", 11 | width: 200 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/repository/GifImageRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.GifImage; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface GifImageRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/repository/LanguageRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.Language; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface LanguageRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/PollChoiceRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.PollChoice; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface PollChoiceRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/repository/TweetImageRepository.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository; 2 | 3 | import com.gmail.merikbest2015.model.TweetImage; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.stereotype.Repository; 6 | 7 | @Repository 8 | public interface TweetImageRepository extends JpaRepository { 9 | } 10 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/ImageResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class ImageResponse { 13 | private Long id; 14 | private String src; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/EmptyChatMessages/EmptyChatMessagesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEmptyChatMessagesStyles = makeStyles(() => ({ 4 | chatInfoWrapper: { 5 | width: 320, 6 | margin: "0px auto", 7 | paddingTop: 300 8 | }, 9 | chatInfoButton: { 10 | marginTop: 27, 11 | height: 52 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/Accessibility/AccessibilityStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAccessibilityStyles = makeStyles(() => ({ 4 | accessibilityLink: { 5 | "& svg": { 6 | marginTop: 8 7 | } 8 | }, 9 | accessibilityInfo: { 10 | display: "inline-block", 11 | width: 200 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeCountry/ChangeCountryStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChangeCountryStyles = makeStyles(() => ({ 4 | selectWrapper: { 5 | "& .MuiFormControl-root": { 6 | width: "100%" 7 | }, 8 | "& .MuiTypography-subtitle2": { 9 | paddingTop: 2 10 | } 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/service/ChatService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.repository.projection.ChatProjection; 4 | 5 | import java.util.List; 6 | 7 | public interface ChatService { 8 | 9 | ChatProjection getChatById(Long chatId); 10 | 11 | List getUserChats(); 12 | 13 | ChatProjection createChat(Long userId); 14 | } 15 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/UpdateTweetCountEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class UpdateTweetCountEvent { 13 | private boolean updateTweetsCount; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/.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 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Notifications/ContentPreferences/ContentPreferencesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useContentPreferencesStyles = makeStyles(() => ({ 4 | personalizationLink: { 5 | "& svg": { 6 | marginTop: 8 7 | } 8 | }, 9 | personalizationInfo: { 10 | display: "inline-block", 11 | width: 200 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/UserTweets/UserTweetsStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useUserTweetsStyles = makeStyles((theme) => ({ 4 | textWrapper: { 5 | margin: "40px 20px", 6 | textAlign: "center", 7 | "& .MuiTypography-subtitle1": { 8 | marginTop: 12 9 | } 10 | }, 11 | button: { 12 | marginTop: 15 13 | } 14 | })); 15 | -------------------------------------------------------------------------------- /frontend/src/components/LockIcon/__tests__/LockIcon.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { mountWithStore } from "../../../util/test-utils/test-helper"; 4 | import LockIcon from "../LockIcon"; 5 | 6 | describe("LockIcon", () => { 7 | it("should render correctly", () => { 8 | const wrapper = mountWithStore(); 9 | expect(wrapper.find("#lockIcon").exists()).toBe(true); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/src/components/TweetImageModal/TweetInteractionCount/TweetInteractionCountStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetInteractionCountStyles = makeStyles(() => ({ 4 | content: { 5 | display: "flex", 6 | alignItems: "center", 7 | margin: "16px 0", 8 | "& .MuiTypography-subtitle1": { 9 | marginLeft: 5 10 | } 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/components/TweetImageModal/TweetText/TweetTextStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetTextStyles = makeStyles((theme) => ({ 4 | text: { 5 | fontWeight: 400, 6 | marginTop: 16, 7 | marginBottom: 16, 8 | wordBreak: "break-word", 9 | "& #hashtag": { 10 | color: theme.palette.primary.main 11 | } 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/TweetTagEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class TweetTagEvent { 13 | private Long tweetId; 14 | private String tweetText; 15 | } 16 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/UpdateListsEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class UpdateListsEvent { 13 | private Long id; 14 | private String listName; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/Buttons/BlockButton/BlockButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useBlockButtonStyles = makeStyles((theme) => ({ 4 | containedButton: { 5 | width: 105, 6 | "&:hover": { 7 | backgroundColor: theme.palette.error.dark 8 | } 9 | }, 10 | blockButton: { 11 | backgroundColor: theme.palette.error.main 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/components/UsersItem/BlockButton/BlockButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useBlockButtonStyles = makeStyles((theme) => ({ 4 | containedButton: { 5 | width: 105, 6 | "&:hover": { 7 | backgroundColor: theme.palette.error.dark 8 | } 9 | }, 10 | blockButton: { 11 | backgroundColor: theme.palette.error.main 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatMessagesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChatMessagesStyles = makeStyles(() => ({ 4 | chatContainer: { 5 | minWidth: 600, 6 | padding: 0, 7 | borderLeft: 0 8 | }, 9 | chat: { 10 | padding: "53px 15px", 11 | height: 900, 12 | overflowY: "auto", 13 | border: 0 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/response/TweetUserResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.gmail.merikbest2015.commons.dto.response.tweet.TweetResponse; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | public class TweetUserResponse extends TweetResponse { 12 | private List retweetsUserIds; 13 | } 14 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/enums/TopicCategory.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.enums; 2 | 3 | public enum TopicCategory { 4 | FASHION_AND_BEAUTY, 5 | OUTDOORS, 6 | ARTS_AND_CULTURE, 7 | ANIMATION_AND_COMICS, 8 | BUSINESS_AND_FINANCE, 9 | FOOD, 10 | TRAVEL, 11 | ENTERTAINMENT, 12 | MUSIC, 13 | GAMING, 14 | CAREERS, 15 | SPORTS, 16 | ONLY_ON_TWITTER 17 | } 18 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/ListsNotificationDto.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class ListsNotificationDto { 13 | private Long id; 14 | private String listName; 15 | } 16 | -------------------------------------------------------------------------------- /commons/src/main/resources/sql-test/populate-tag-db.sql: -------------------------------------------------------------------------------- 1 | -- tags 2 | INSERT INTO "tag-test".public.tags (id, tag_name, tweets_quantity) VALUES (2, '#JetBrains', 2); 3 | INSERT INTO "tag-test".public.tags (id, tag_name, tweets_quantity) VALUES (3, '#test', 1); 4 | 5 | -- tweet_tags 6 | INSERT INTO "tag-test".public.tweet_tags (id, tag_id, tweet_id) VALUES (1, 2, 43); 7 | INSERT INTO "tag-test".public.tweet_tags (id, tag_id, tweet_id) VALUES (2, 3, 40); 8 | -------------------------------------------------------------------------------- /frontend/src/pages/FullList/ShareActionsModal/TweetListAction/TweetListModal/TweetListModalStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetListModalStyles = makeStyles(() => ({ 4 | content: { 5 | top: "-20%" 6 | }, 7 | dialogContent: { 8 | width: 598, 9 | minHeight: "auto", 10 | overflow: "hidden", 11 | padding: "10px 20px 15px 20px" 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/Poll/PollInput/PollInputField.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePollInputStyles = makeStyles(() => ({ 4 | container: { 5 | marginBottom: 11, 6 | position: "relative" 7 | }, 8 | content: { 9 | position: "absolute", 10 | right: 10, 11 | display: "flex", 12 | zIndex: 3, 13 | marginTop: 8 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/SetupProfileModal/SetupProfileModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useSetupProfileModalStyles = makeStyles(() => ({ 4 | container: { 5 | "& .MuiDialog-root": { 6 | height: 666, 7 | marginTop: 92 8 | }, 9 | "& .MuiDialog-container": { 10 | padding: "0 32px" 11 | } 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /scheduler-service/src/main/java/com/gmail/merikbest2015/dto/response/TriggerResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | @Data 7 | @Builder 8 | public class TriggerResponse { 9 | private String triggerName; 10 | private String groupName; 11 | private String cronExpression; 12 | private String nextFireTime; 13 | private String previousFireTime; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/pages/FollowingFollowers/EmptyFollowersDescription/EmptyFollowersDescriptionStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEmptyFollowersDescriptionStyles = makeStyles(() => ({ 4 | content: { 5 | margin: "40px 20px", 6 | textAlign: "center", 7 | "& .MuiTypography-subtitle1": { 8 | marginTop: 12, 9 | marginBottom: 16 10 | } 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/StartConversation/StartConversationStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useStartConversationStyles = makeStyles(() => ({ 4 | messagesTitle: { 5 | paddingTop: 83, 6 | margin: "0px 30px" 7 | }, 8 | messagesText: { 9 | margin: "8px 30px 27px 30px" 10 | }, 11 | messagesButton: { 12 | marginLeft: 30, 13 | height: 52 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/UpdateTweetEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class UpdateTweetEvent { 13 | private Long id; 14 | private String text; 15 | // private User author; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/ReplyIconButton/ReplyIconButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useReplyIconButtonStyles = makeStyles((theme) => ({ 4 | infoIcon: { 5 | "& .MuiIconButton-root": { 6 | "& svg": { 7 | color: theme.palette.text.secondary, 8 | width: "1.406rem", 9 | height: "1.406rem" 10 | } 11 | } 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/AccessibilityDisplayLanguages/Languages/LanguagesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useLanguagesStyles = makeStyles(() => ({ 4 | accessibilityWrapper: { 5 | "& svg": { 6 | marginTop: 10 7 | } 8 | }, 9 | accessibilityInfo: { 10 | display: "inline-block", 11 | "& svg": { 12 | marginTop: 10 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/ScheduleDateInfo/ScheduleDateInfoStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useScheduleDateInfoStyles = makeStyles((theme) => ({ 4 | infoWrapper: { 5 | marginBottom: 10, 6 | "& svg": { 7 | verticalAlign: "bottom", 8 | marginRight: 12, 9 | fill: theme.palette.text.secondary, 10 | height: "1.30em" 11 | } 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/components/DialogTitleComponent/DialogTitleComponentStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles, Theme } from "@material-ui/core"; 2 | 3 | interface DialogTitleComponentProps { 4 | borderBottom?: boolean; 5 | } 6 | 7 | export const useDialogTitleComponentStyles = makeStyles(() => ({ 8 | dialogTitle: (props) => (props.borderBottom ? { borderBottom: 0 } : {}), 9 | button: { 10 | marginLeft: "auto" 11 | } 12 | })); 13 | -------------------------------------------------------------------------------- /frontend/src/hook/useFocus.ts: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | 3 | interface UseFocusProps { 4 | onBlur: () => void; 5 | focused: boolean; 6 | onFocus: () => void; 7 | } 8 | 9 | export const useFocus = (): UseFocusProps => { 10 | const [focused, setFocused] = useState(false); 11 | 12 | const onFocus = () => setFocused(true); 13 | const onBlur = () => setFocused(false); 14 | 15 | return { focused, onFocus, onBlur }; 16 | }; 17 | -------------------------------------------------------------------------------- /frontend/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import { Provider } from "react-redux"; 4 | import { BrowserRouter as Router } from "react-router-dom"; 5 | 6 | import App from "./App"; 7 | import { store } from "./store/store"; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | 13 | 14 | 15 | , document.getElementById("root") 16 | ); 17 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/userDetail/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { CancelTokenSource } from "axios"; 2 | import { UserDetailResponse } from "../../../../types/user"; 3 | import { LoadingStatus } from "../../../../types/common"; 4 | 5 | export interface UserDetailState { 6 | item?: UserDetailResponse; 7 | loadingState: LoadingStatus; 8 | } 9 | 10 | export interface UserDetailsRequest { 11 | userId: number, 12 | cancelTokenSource: CancelTokenSource 13 | } 14 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/UserNotificationDto.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class UserNotificationDto { 13 | private Long id; 14 | private String username; 15 | private String avatar; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/components/SideMenu/SideMenuHomeItem/SideMenuHomeItemStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useSideMenuHomeItemStyles = makeStyles((theme) => ({ 4 | homeNotification: { 5 | position: "absolute", 6 | marginLeft: 20, 7 | marginBottom: 25, 8 | width: 6, 9 | height: 6, 10 | borderRadius: "50%", 11 | backgroundColor: theme.palette.primary.main 12 | } 13 | })); 14 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/listDetail/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { CancelTokenSource } from "axios"; 2 | import { BaseListResponse } from "../../../../types/lists"; 3 | import { LoadingStatus } from "../../../../types/common"; 4 | 5 | export interface ListDetailState { 6 | item?: BaseListResponse; 7 | loadingState: LoadingStatus; 8 | } 9 | 10 | 11 | export interface ListDetailsRequest { 12 | listId: number, 13 | cancelTokenSource: CancelTokenSource 14 | } 15 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/service/MuteUserService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.repository.projection.MutedUserProjection; 4 | import org.springframework.data.domain.Page; 5 | import org.springframework.data.domain.Pageable; 6 | 7 | public interface MuteUserService { 8 | 9 | Page getMutedList(Pageable pageable); 10 | 11 | Boolean processMutedList(Long userId); 12 | } 13 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/constants/ErrorMessage.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.constants; 2 | 3 | public class ErrorMessage { 4 | public static final String JWT_TOKEN_EXPIRED = "JWT token is expired or invalid"; 5 | public static final String USER_NOT_FOUND = "User not found"; 6 | public static final String USER_PROFILE_BLOCKED = "User profile blocked"; 7 | public static final String USER_ID_NOT_FOUND = "User (id:%s) not found"; 8 | } 9 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/HeaderResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.http.HttpHeaders; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @NoArgsConstructor 12 | @AllArgsConstructor 13 | public class HeaderResponse { 14 | private List items; 15 | private HttpHeaders headers; 16 | } 17 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/response/SearchResultResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.gmail.merikbest2015.commons.dto.response.user.CommonUserResponse; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | public class SearchResultResponse { 10 | private String text; 11 | private Long tweetCount; 12 | private List tags; 13 | private List users; 14 | } 15 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/service/BlockUserService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.repository.projection.BlockedUserProjection; 4 | import org.springframework.data.domain.Page; 5 | import org.springframework.data.domain.Pageable; 6 | 7 | public interface BlockUserService { 8 | 9 | Page getBlockList(Pageable pageable); 10 | 11 | Boolean processBlockList(Long userId); 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ChatMessages/ChatHeader/ChatHeaderStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChatHeaderStyles = makeStyles((theme) => ({ 4 | chatHeader: { 5 | width: 598 6 | }, 7 | chatAvatar: { 8 | width: theme.spacing(4), 9 | height: theme.spacing(4), 10 | margin: "0px 15px" 11 | }, 12 | iconGroup: { 13 | marginLeft: "auto", 14 | marginRight: 10 15 | } 16 | })); 17 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/notification/NotificationUserResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.notification; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class NotificationUserResponse { 8 | private Long id; 9 | private String username; 10 | private String avatar; 11 | 12 | @JsonProperty("isFollower") 13 | private boolean isFollower; 14 | } 15 | -------------------------------------------------------------------------------- /eureka-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8761 3 | 4 | spring: 5 | application: 6 | name: eureka-server 7 | zipkin: 8 | base-url: http://${ZIPKIN_HOST:localhost}:9411 9 | 10 | eureka: 11 | client: 12 | service-url: 13 | defaultZone: http://${EUREKA_HOST:localhost}:8761/eureka 14 | fetch-registry: false 15 | register-with-eureka: false 16 | instance: 17 | hostname: ${EUREKA_HOST:localhost} 18 | -------------------------------------------------------------------------------- /frontend/src/components/TweetComponent/TweetText/__tests__/TweetText.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { mountWithStore } from "../../../../util/test-utils/test-helper"; 4 | import TweetText from "../TweetText"; 5 | 6 | describe("TweetText", () => { 7 | it("should render correctly", () => { 8 | const wrapper = mountWithStore(); 9 | expect(wrapper.text().includes("test_text")).toBe(true); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/src/services/api/tweet-service/externalApi.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from "axios"; 2 | 3 | import { GiphyDataProps } from "../../../types/tweet"; 4 | import { axios } from "../../../core/axios"; 5 | import { GIPHY_API_URL } from "../../../constants/url-constants"; 6 | 7 | export const ExternalApi = { 8 | async searchGif(text: string): Promise> { 9 | return await axios.get(`${GIPHY_API_URL}${text}`); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/actionSnackbar/selector.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from "../../store"; 2 | import { ActionSnackbarState } from "./contracts/state"; 3 | 4 | export const selectActionSnackbarState = (state: RootState): ActionSnackbarState => state.actionSnackbar; 5 | export const selectSnackBarMessage = (state: RootState): string => selectActionSnackbarState(state).snackBarMessage; 6 | export const selectOpenSnackBar = (state: RootState): boolean => selectActionSnackbarState(state).openSnackBar; 7 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/exception/ApiRequestException.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.exception; 2 | 3 | import lombok.Getter; 4 | import org.springframework.http.HttpStatus; 5 | 6 | @Getter 7 | public class ApiRequestException extends RuntimeException { 8 | private final HttpStatus status; 9 | 10 | public ApiRequestException(String message, HttpStatus status) { 11 | super(message); 12 | this.status = status; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/ConnectToUsers/ConnectToUsersStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useConnectToUsersStyles = makeStyles(() => ({ 4 | header: { 5 | display: "flex", 6 | alignItems: "center", 7 | flex: 1, 8 | borderTop: 0, 9 | borderLeft: 0, 10 | borderRight: 0, 11 | borderRadius: 0, 12 | "& .MuiTypography-h5": { 13 | margin: "10px 20px" 14 | } 15 | } 16 | })); 17 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/service/UserHandlerService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.event.UpdateUserEvent; 4 | import com.gmail.merikbest2015.commons.event.UserNotificationDto; 5 | import com.gmail.merikbest2015.model.User; 6 | 7 | public interface UserHandlerService { 8 | 9 | User handleNewOrUpdateUser(UpdateUserEvent userEvent); 10 | 11 | User getOrCreateUser(UserNotificationDto user); 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/components/FollowListButton/FollowListButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useFollowListButtonStyles = makeStyles((theme) => ({ 4 | listPrimaryButton: { 5 | width: 105, 6 | "&:hover": { 7 | backgroundColor: theme.palette.error.dark 8 | } 9 | }, 10 | listOutlinedButton: { 11 | "&:hover": { 12 | backgroundColor: theme.palette.secondary.light 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/ListsHeader/CreateListsModal/CreateListsModalInput/CreateListsModalInputStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useCreateListsModalInputStyles = makeStyles(() => ({ 4 | container: { 5 | padding: "12px 16px", 6 | position: "relative" 7 | }, 8 | content: { 9 | position: "absolute", 10 | right: 25, 11 | display: "flex", 12 | zIndex: 3, 13 | marginTop: 8 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/service/ListsHandlerService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.event.ListsNotificationDto; 4 | import com.gmail.merikbest2015.commons.event.UpdateListsEvent; 5 | import com.gmail.merikbest2015.model.Lists; 6 | 7 | public interface ListsHandlerService { 8 | 9 | void handleUpdateList(UpdateListsEvent listsEvent); 10 | 11 | Lists getOrCreateList(ListsNotificationDto lists); 12 | } 13 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/dto/response/UserChatResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import com.gmail.merikbest2015.commons.dto.response.user.UserResponse; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | public class UserChatResponse extends UserResponse { 11 | @JsonProperty("isUserChatParticipant") 12 | private boolean isUserChatParticipant; 13 | } 14 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/service/TweetHandlerService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.event.TweetNotificationDto; 4 | import com.gmail.merikbest2015.commons.event.UpdateTweetEvent; 5 | import com.gmail.merikbest2015.model.Tweet; 6 | 7 | public interface TweetHandlerService { 8 | 9 | void handleUpdateTweet(UpdateTweetEvent tweetEvent); 10 | 11 | Tweet getOrCreateTweet(TweetNotificationDto tweet); 12 | } 13 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/response/user/CommonUserResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.response.user; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class CommonUserResponse { 8 | private Long id; 9 | private String fullName; 10 | private String username; 11 | private String avatar; 12 | 13 | @JsonProperty("isPrivateProfile") 14 | private boolean privateProfile; 15 | } 16 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/repository/projection/FollowedTopicProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import com.gmail.merikbest2015.commons.enums.TopicCategory; 4 | import org.springframework.beans.factory.annotation.Value; 5 | 6 | public interface FollowedTopicProjection { 7 | Long getId(); 8 | String getTopicName(); 9 | TopicCategory getTopicCategory(); 10 | 11 | @Value("#{true}") 12 | boolean getIsTopicFollowed(); 13 | } 14 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/dto/request/ProcessEmailRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.request; 2 | 3 | import com.gmail.merikbest2015.constants.Regexp; 4 | import com.gmail.merikbest2015.constants.UserErrorMessage; 5 | import lombok.Data; 6 | 7 | import jakarta.validation.constraints.Email; 8 | 9 | @Data 10 | public class ProcessEmailRequest { 11 | @Email(regexp = Regexp.USER_EMAIL_REGEXP, message = UserErrorMessage.EMAIL_NOT_VALID) 12 | private String email; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetErrorPage/TweetErrorPageStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetErrorPageStyles = makeStyles(() => ({ 4 | error: { 5 | width: 350, 6 | margin: "0 auto", 7 | paddingTop: 200, 8 | paddingBottom: 20, 9 | fontWeight: 700, 10 | textAlign: "center" 11 | }, 12 | searchButton: { 13 | display: "block", 14 | width: 76, 15 | margin: "0 auto" 16 | } 17 | })); 18 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PopperListWindow/PopperListInteractionCount/PopperListUserCount/PopperListUserCountStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePopperListUserCountStyles = makeStyles(() => ({ 4 | popperListMembers: { 5 | marginLeft: 20, 6 | "& .MuiTypography-h6": { 7 | fontWeight: 700 8 | }, 9 | "&:hover": { 10 | cursor: "pointer", 11 | textDecoration: "underline" 12 | } 13 | } 14 | })); 15 | -------------------------------------------------------------------------------- /frontend/src/util/upload-image-helper.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { UI_V1_IMAGE_UPLOAD } from "../constants/endpoint-constants"; 3 | 4 | export const uploadImage = async (image: File): Promise => { 5 | const formData = new FormData(); 6 | formData.append("file", image); 7 | 8 | const { data } = await axios.post(UI_V1_IMAGE_UPLOAD, formData, { 9 | headers: { 10 | "Content-Type": "multipart/form-data" 11 | } 12 | }); 13 | 14 | return data; 15 | }; 16 | -------------------------------------------------------------------------------- /scheduler-service/src/main/java/com/gmail/merikbest2015/dto/response/JobDetailResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class JobDetailResponse { 13 | private String name; 14 | private String group; 15 | private String description; 16 | private String jobClass; 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/setupTests.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Adapter from "enzyme-adapter-react-16"; 3 | import { configure } from "enzyme"; 4 | 5 | configure({ adapter: new Adapter() }); 6 | 7 | window.matchMedia = (query) => ({ 8 | matches: false, 9 | media: query, 10 | onchange: null, 11 | addListener: jest.fn(), // Deprecated 12 | removeListener: jest.fn(), // Deprecated 13 | addEventListener: jest.fn(), 14 | removeEventListener: jest.fn(), 15 | dispatchEvent: jest.fn() 16 | }); 17 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/GifIconButton/GifModalWindow/GifModalWindowStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useGifModalWindowStyles = makeStyles(() => ({ 4 | imageListItem: { 5 | "& .MuiImageListItemBar-root": { 6 | backgroundColor: "transparent" 7 | }, 8 | "& .MuiTypography-root": { 9 | color: "rgb(255, 255, 255)" 10 | }, 11 | "&:hover": { 12 | cursor: "pointer" 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /frontend/src/components/TaggedImageUsers/TaggedImageUsersStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTaggedImageUsersStyles = makeStyles(() => ({ 4 | taggedImageUsers: { 5 | display: "flex", 6 | alignItems: "center", 7 | "&:hover": { 8 | textDecoration: "underline", 9 | cursor: "pointer" 10 | }, 11 | "& svg": { 12 | verticalAlign: "bottom", 13 | height: "1.25em" 14 | } 15 | } 16 | })); 17 | -------------------------------------------------------------------------------- /frontend/src/components/Welcome/WelcomeStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useWelcomeStyles = makeStyles(() => ({ 4 | info: { 5 | padding: "40px 20px", 6 | textAlign: "center", 7 | "& .MuiTypography-subtitle1": { 8 | marginTop: 12, 9 | marginBottom: 20 10 | } 11 | }, 12 | infoButtonContainer: { 13 | display: "flex", 14 | justifyContent: "center", 15 | alignItems: "center" 16 | } 17 | })); 18 | -------------------------------------------------------------------------------- /frontend/src/hook/useDebounce.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | export const useDebounce = (value: string, delay: number): string => { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | }; 18 | -------------------------------------------------------------------------------- /frontend/src/pages/Topics/Suggested/__tests__/SuggestedButton.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { createMockRootState, mountWithStore } from "../../../../util/test-utils/test-helper"; 4 | import SuggestedButton from "../SuggestedButton"; 5 | 6 | describe("SuggestedButton", () => { 7 | it("should render correctly", () => { 8 | const wrapper = mountWithStore(, createMockRootState()); 9 | expect(wrapper.text().includes("test")).toBe(true); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/src/services/api/localization-service/gifImageApi.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from "axios"; 2 | 3 | import { GifImageResponse } from "../../../types/localization"; 4 | import { axios } from "../../../core/axios"; 5 | import { UI_V1_LOCALIZATION_GIF_IMAGES } from "../../../constants/endpoint-constants"; 6 | 7 | export const GifImageApi = { 8 | async getGifImages(): Promise> { 9 | return await axios.get(UI_V1_LOCALIZATION_GIF_IMAGES); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /frontend/src/services/api/localization-service/languageApi.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from "axios"; 2 | 3 | import { LanguagesResponse } from "../../../types/localization"; 4 | import { axios } from "../../../core/axios"; 5 | import { UI_V1_LOCALIZATION_LANGUAGES } from "../../../constants/endpoint-constants"; 6 | 7 | export const LanguageApi = { 8 | async getLanguages(): Promise> { 9 | return await axios.get(UI_V1_LOCALIZATION_LANGUAGES); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/repository/projection/NotInterestedTopicProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import com.gmail.merikbest2015.commons.enums.TopicCategory; 4 | import org.springframework.beans.factory.annotation.Value; 5 | 6 | public interface NotInterestedTopicProjection { 7 | Long getId(); 8 | String getTopicName(); 9 | TopicCategory getTopicCategory(); 10 | 11 | @Value("#{true}") 12 | boolean getIsTopicNotInterested(); 13 | } 14 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/repository/projection/ChatProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import java.time.LocalDateTime; 4 | import java.util.List; 5 | 6 | public interface ChatProjection { 7 | Long getId(); 8 | LocalDateTime getCreatedAt(); 9 | List getParticipants(); 10 | 11 | interface ChatParticipantProjection { 12 | ChatUserParticipantProjection getUser(); 13 | boolean getLeftChat(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/TweetDeleted/TweetDeletedStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetDeletedStyles = makeStyles((theme) => ({ 4 | container: { 5 | padding: "12px 16px", 6 | marginTop: 16, 7 | backgroundColor: theme.palette.secondary.main, 8 | color: theme.palette.text.secondary, 9 | borderRadius: 16, 10 | fontSize: 15, 11 | lineHeight: "20px", 12 | border: `1px solid ${theme.palette.grey[200]}` 13 | } 14 | })); 15 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ConversationInfo/ConversationHeader/__tests__/ConversationHeader.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { mountWithStore } from "../../../../../util/test-utils/test-helper"; 4 | import ConversationHeader from "../ConversationHeader"; 5 | 6 | describe("ConversationHeader", () => { 7 | it("should render correctly", () => { 8 | const wrapper = mountWithStore(); 9 | expect(wrapper.text().includes("Conversation info")).toBe(true); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/Account/AccountInformation/ChangeLanguage/ChangeLanguageStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useChangeLanguageStyles = makeStyles(() => ({ 4 | selectWrapper: { 5 | padding: "12px 16px", 6 | "& .MuiFormControl-root": { 7 | width: "100%" 8 | } 9 | }, 10 | languageInfo: { 11 | paddingTop: 2 12 | }, 13 | buttonWrapper: { 14 | padding: "12px 16px", 15 | float: "right" 16 | } 17 | })); 18 | -------------------------------------------------------------------------------- /frontend/src/services/api/localization-service/wallpaperApi.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from "axios"; 2 | 3 | import { WallpaperResponse } from "../../../types/localization"; 4 | import { axios } from "../../../core/axios"; 5 | import { UI_V1_LOCALIZATION_WALLPAPERS } from "../../../constants/endpoint-constants"; 6 | 7 | export const WallpaperApi = { 8 | async getWallpapers(): Promise> { 9 | return await axios.get(UI_V1_LOCALIZATION_WALLPAPERS); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/actionSnackbar/actionCreators.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ActionSnackbarTypes, 3 | SetCloseSnackBarActionInterface, 4 | SetOpenSnackBarActionInterface 5 | } from "./contracts/actionTypes"; 6 | 7 | export const setOpenSnackBar = (payload: string): SetOpenSnackBarActionInterface => ({ 8 | type: ActionSnackbarTypes.SET_OPEN_SNACKBAR, 9 | payload 10 | }); 11 | 12 | export const setCloseSnackBar = (): SetCloseSnackBarActionInterface => ({ 13 | type: ActionSnackbarTypes.SET_CLOSE_SNACKBAR 14 | }); 15 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/repository/projection/PinnedListProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | 5 | public interface PinnedListProjection { 6 | Long getId(); 7 | String getListName(); 8 | String getAltWallpaper(); 9 | String getWallpaper(); 10 | boolean getIsPrivate(); 11 | 12 | @Value("#{@listsServiceHelper.isListPinned(target.id)}") 13 | boolean getIsListPinned(); 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/pages/Lists/PinnedLists/PinnedListsStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const usePinnedListsStyles = makeStyles(() => ({ 4 | pinnedLists: { 5 | paddingTop: 52, 6 | minHeight: 220, 7 | borderTop: 0, 8 | borderLeft: 0, 9 | borderRight: 0, 10 | borderRadius: 0 11 | }, 12 | pinnedListsWrapper: { 13 | padding: 4 14 | }, 15 | pinnedListsText: { 16 | marginTop: 32, 17 | marginLeft: 32 18 | } 19 | })); 20 | -------------------------------------------------------------------------------- /frontend/src/pages/Notifications/NotificationsTab/NotificationAuthorItem/NotificationAuthorItemStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useNotificationAuthorItemStyles = makeStyles((theme) => ({ 4 | notificationAvatarWrapper: { 5 | display: "inline-block" 6 | }, 7 | notificationAvatar: { 8 | display: "inline-block", 9 | marginRight: 8, 10 | width: theme.spacing(4), 11 | height: theme.spacing(4), 12 | marginBottom: 11 13 | } 14 | })); 15 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/localization/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { LoadingStatus } from "../../../../types/common"; 2 | import { 3 | CountryCodeResponse, 4 | GifImageResponse, 5 | LanguagesResponse, 6 | WallpaperResponse 7 | } from "../../../../types/localization"; 8 | 9 | export interface LocalizationState { 10 | countryCodes: CountryCodeResponse[]; 11 | gifImages: GifImageResponse[]; 12 | languages: LanguagesResponse[]; 13 | wallpapers: WallpaperResponse[]; 14 | loadingState: LoadingStatus; 15 | } 16 | -------------------------------------------------------------------------------- /chat-service/src/main/java/com/gmail/merikbest2015/ChatServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class ChatServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(ChatServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/TweetComponent/AnalyticsIconButton/AnalyticsIconButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAnalyticsIconButtonStyles = makeStyles((theme) => ({ 4 | replyIcon: { 5 | "& .MuiIconButton-root": { 6 | "& svg": { 7 | color: theme.palette.text.secondary 8 | } 9 | }, 10 | "& span": { 11 | verticalAlign: "middle", 12 | color: theme.palette.text.secondary 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /tag-service/src/main/java/com/gmail/merikbest2015/TagServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class TagServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(TagServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/service/BookmarkService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.repository.projection.BookmarkProjection; 4 | import org.springframework.data.domain.Page; 5 | import org.springframework.data.domain.Pageable; 6 | 7 | public interface BookmarkService { 8 | 9 | Page getUserBookmarks(Pageable pageable); 10 | 11 | Boolean processUserBookmarks(Long tweetId); 12 | 13 | Boolean getIsTweetBookmarked(Long tweetId); 14 | } 15 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/UserServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class UserServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(UserServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/chatMessages/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { ChatMessageResponse } from "../../../../types/chat"; 2 | import { LoadingStatus } from "../../../../types/common"; 3 | 4 | export interface ChatMessageState { 5 | items: ChatMessageResponse[]; 6 | loadingState: LoadingStatus; 7 | } 8 | 9 | export interface ChatMessageRequest { 10 | chatId: number; 11 | text: string; 12 | } 13 | 14 | export interface ChatMessageWithTweetRequest { 15 | text: string; 16 | tweetId: number; 17 | usersIds: number[]; 18 | } 19 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/ListsServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class ListsServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(ListsServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /topic-service/src/main/java/com/gmail/merikbest2015/TopicServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class TopicServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(TopicServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/TweetServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class TweetServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(TweetServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/SendEmailEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.Map; 9 | 10 | @Data 11 | @Builder 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | public class SendEmailEvent { 15 | private String toEmail; 16 | private String subject; 17 | private String template; 18 | private Map attributes; 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/services/api/localization-service/countryCodeApi.ts: -------------------------------------------------------------------------------- 1 | import { AxiosResponse } from "axios"; 2 | 3 | import { CountryCodeResponse } from "../../../types/localization"; 4 | import { axios } from "../../../core/axios"; 5 | import { UI_V1_LOCALIZATION_COUNTRY_CODES } from "../../../constants/endpoint-constants"; 6 | 7 | export const CountryCodeApi = { 8 | async getCountryCodes(): Promise> { 9 | return await axios.get(UI_V1_LOCALIZATION_COUNTRY_CODES); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/dto/request/EmailRequest.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.dto.request; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.Map; 9 | 10 | @Data 11 | @Builder 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | public class EmailRequest { 15 | private String to; 16 | private String subject; 17 | private String template; 18 | private Map attributes; 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/Discoverability/ManageContacts/ManageContactsStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useManageContactsStyles = makeStyles((theme) => ({ 4 | removeContacts: { 5 | textAlign: "center", 6 | padding: 16, 7 | cursor: "pointer", 8 | "& .MuiTypography-body1": { 9 | color: theme.palette.error.main 10 | }, 11 | "&:hover": { 12 | backgroundColor: "rgba(244, 33, 46, 0.1)" 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /notification-service/src/main/resources/db/migration/V4__Create_notifications_table.sql: -------------------------------------------------------------------------------- 1 | CREATE SEQUENCE notifications_seq START 100 INCREMENT 1; 2 | 3 | CREATE TABLE notifications 4 | ( 5 | id INT8 NOT NULL, 6 | created_at TIMESTAMP NOT NULL, 7 | notification_type VARCHAR(255) NOT NULL, 8 | list_id INT8, 9 | notified_user_id INT8 NOT NULL, 10 | tweet_id INT8, 11 | user_id INT8 NOT NULL, 12 | user_to_follow_id INT8, 13 | PRIMARY KEY (id) 14 | ); 15 | -------------------------------------------------------------------------------- /eureka-server/src/main/java/com/gmail/merikbest2015/EurekaServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; 6 | 7 | @EnableEurekaServer 8 | @SpringBootApplication 9 | public class EurekaServerApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(EurekaServerApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/PollIconButton/PollIconButtonStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles, Theme } from "@material-ui/core"; 2 | 3 | interface UsePollIconButtonProps { 4 | disabled?: boolean; 5 | } 6 | 7 | export const usePollIconButtonStyles = makeStyles((theme) => ({ 8 | quoteImage: { 9 | "& .MuiIconButton-root": { 10 | "& svg": { 11 | color: props => props.disabled ? theme.palette.primary.light : theme.palette.primary.main 12 | } 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /scheduler-service/src/main/java/com/gmail/merikbest2015/SchedulerServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class SchedulerServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(SchedulerServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tweet-service/src/main/java/com/gmail/merikbest2015/dto/response/NotificationReplyResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.gmail.merikbest2015.commons.dto.response.tweet.TweetResponse; 4 | import com.gmail.merikbest2015.commons.enums.NotificationType; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class NotificationReplyResponse { 11 | private Long tweetId; 12 | private NotificationType notificationType; 13 | private TweetResponse tweet; 14 | } 15 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/MutedUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | 5 | public interface MutedUserProjection { 6 | Long getId(); 7 | String getFullName(); 8 | String getUsername(); 9 | String getAbout(); 10 | String getAvatar(); 11 | boolean getPrivateProfile(); 12 | 13 | @Value("#{@userServiceHelper.isUserMutedByMyProfile(target.id)}") 14 | boolean getIsUserMuted(); 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/AddTweetForm/AddTweetImage/AddDescription/AddDescriptionModal/AddDescriptionModalStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useAddDescriptionModalStyles = makeStyles(() => ({ 4 | contentImage: { 5 | display: "flex", 6 | justifyContent: "center", 7 | "& img": { 8 | height: 500 9 | } 10 | }, 11 | inputWrapper: { 12 | width: 560, 13 | height: 22, 14 | display: "flex", 15 | justifyContent: "space-between" 16 | } 17 | })); 18 | -------------------------------------------------------------------------------- /frontend/src/hook/useClickAway.ts: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | interface UseClickAway { 4 | onClickOpen: () => void; 5 | onClickClose: () => void; 6 | open: boolean; 7 | } 8 | 9 | export const useClickAway = (): UseClickAway => { 10 | const [open, setOpen] = React.useState(false); 11 | 12 | const onClickOpen = (): void => { 13 | setOpen((prev) => !prev); 14 | }; 15 | 16 | const onClickClose = (): void => { 17 | setOpen(false); 18 | }; 19 | 20 | return { open, onClickOpen, onClickClose }; 21 | }; 22 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/ConversationInfo/ReportUserComponent/__tests__/ReportUserComponent.test.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { mountWithStore } from "../../../../../util/test-utils/test-helper"; 4 | import ReportUserComponent from "../ReportUserComponent"; 5 | 6 | describe("ReportUserComponent", () => { 7 | it("should render correctly", () => { 8 | const wrapper = mountWithStore(); 9 | expect(wrapper.text().includes("Report @test_username")).toBe(true); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/dto/response/PinnedListResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class PinnedListResponse { 8 | private Long id; 9 | private String listName; 10 | private String altWallpaper; 11 | private String wallpaper; 12 | 13 | @JsonProperty("isPrivate") 14 | private boolean isPrivate; 15 | 16 | @JsonProperty("isListPinned") 17 | private boolean isListPinned; 18 | } 19 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/service/UserUpdateTweetCountService.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.service; 2 | 3 | import com.gmail.merikbest2015.commons.event.UpdateTweetCountEvent; 4 | 5 | public interface UserUpdateTweetCountService { 6 | 7 | void handleUpdateTweetCount(UpdateTweetCountEvent tweetCountEvent, String authId); 8 | 9 | void handleUpdateLikeTweetCount(UpdateTweetCountEvent tweetCountEvent, String authId); 10 | 11 | void handleUpdateMediaTweetCount(UpdateTweetCountEvent tweetCountEvent, String authId); 12 | } 13 | -------------------------------------------------------------------------------- /commons/src/main/java/com/gmail/merikbest2015/commons/event/ListsNotificationEvent.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.commons.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class ListsNotificationEvent { 13 | private boolean notificationCondition; 14 | private UserNotificationDto notifiedUser; 15 | private UserNotificationDto user; 16 | private ListsNotificationDto lists; 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/pages/Messages/MessagesStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useMessagesStyles = makeStyles((theme) => ({ 4 | grid: { 5 | padding: "12px 0px 0px 0px !important" 6 | }, 7 | list: { 8 | "& .Mui-selected": { 9 | borderRight: `2px solid ${theme.palette.primary.main}`, 10 | backgroundColor: theme.palette.secondary.dark, 11 | "&:hover": { 12 | backgroundColor: theme.palette.secondary.dark 13 | } 14 | } 15 | } 16 | })); 17 | -------------------------------------------------------------------------------- /frontend/src/store/ducks/userProfile/contracts/state.ts: -------------------------------------------------------------------------------- 1 | import { UserProfileResponse } from "../../../../types/user"; 2 | import { TweetImageResponse } from "../../../../types/tweet"; 3 | import { LoadingStatus } from "../../../../types/common"; 4 | 5 | export interface UserProfileState { 6 | user: UserProfileResponse | undefined; 7 | images: TweetImageResponse[]; 8 | imagesLoadingState: LoadingStatus; 9 | loadingState: LoadingStatus; 10 | } 11 | 12 | export interface ChatParticipantRequest { 13 | participantId: number; 14 | chatId: number; 15 | } 16 | -------------------------------------------------------------------------------- /lists-service/src/main/java/com/gmail/merikbest2015/dto/response/SimpleListResponse.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.dto.response; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class SimpleListResponse { 8 | private Long id; 9 | private String listName; 10 | private String altWallpaper; 11 | private String wallpaper; 12 | 13 | @JsonProperty("isMemberInList") 14 | private boolean isMemberInList; 15 | 16 | @JsonProperty("isPrivate") 17 | private boolean isPrivate; 18 | } 19 | -------------------------------------------------------------------------------- /user-service/src/main/java/com/gmail/merikbest2015/repository/projection/BlockedUserProjection.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015.repository.projection; 2 | 3 | import org.springframework.beans.factory.annotation.Value; 4 | 5 | public interface BlockedUserProjection { 6 | Long getId(); 7 | String getFullName(); 8 | String getUsername(); 9 | String getAbout(); 10 | String getAvatar(); 11 | boolean getPrivateProfile(); 12 | 13 | @Value("#{@userServiceHelper.isUserBlockedByMyProfile(target.id)}") 14 | boolean getIsUserBlocked(); 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/TweetComponent/TweetImage/TweetImageStyles.ts: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useTweetImageStyles = makeStyles((theme) => ({ 4 | image: { 5 | position: "relative", 6 | "& img": { 7 | objectFit: "cover", 8 | marginTop: 10, 9 | width: 504, 10 | height: 252, 11 | borderRadius: 20, 12 | borderColor: theme.palette.info.light 13 | }, 14 | "& .small": { 15 | width: 260 16 | } 17 | } 18 | })); 19 | -------------------------------------------------------------------------------- /frontend/src/pages/FullTweet/TweetGif/TweetGif.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC, ReactElement } from "react"; 2 | import { useSelector } from "react-redux"; 3 | 4 | import { selectTweetGifImage } from "../../../store/ducks/tweet/selectors"; 5 | import GifImage from "../../../components/GifImage/GifImage"; 6 | 7 | const TweetGif: FC = (): ReactElement | null => { 8 | const gifImage = useSelector(selectTweetGifImage); 9 | 10 | if (!gifImage) { 11 | return null; 12 | } 13 | 14 | return ; 15 | }; 16 | 17 | export default TweetGif; 18 | -------------------------------------------------------------------------------- /frontend/src/pages/Settings/PrivacyAndSafety/YourTweets/LocationInformation/LocationInformationStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useLocationInformationStyles = makeStyles((theme) => ({ 4 | deleteLocationInformation: { 5 | textAlign: "center", 6 | padding: 16, 7 | cursor: "pointer", 8 | "& .MuiTypography-body1": { 9 | color: theme.palette.error.main 10 | }, 11 | "&:hover": { 12 | backgroundColor: "rgba(244, 33, 46, 0.1)" 13 | } 14 | } 15 | })); 16 | -------------------------------------------------------------------------------- /frontend/src/pages/UserPage/EditProfileButton/EditProfileModal/EditBirthDate/EditBirthDateModal/EditBirthDateModalStyles.tsx: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@material-ui/core"; 2 | 3 | export const useEditBirthDateModalStyles = makeStyles((theme) => ({ 4 | dialog: { 5 | "& .MuiDialogContent-root": { 6 | padding: 32, 7 | width: 320 8 | }, 9 | textAlign: "center" 10 | }, 11 | text: { 12 | marginTop: 8, 13 | marginBottom: 24 14 | }, 15 | editButton: { 16 | marginBottom: 12 17 | } 18 | })); 19 | -------------------------------------------------------------------------------- /localization-service/src/main/java/com/gmail/merikbest2015/LocalizationServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class LocalizationServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(LocalizationServiceApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /notification-service/src/main/java/com/gmail/merikbest2015/NotificationServiceApplication.java: -------------------------------------------------------------------------------- 1 | package com.gmail.merikbest2015; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.openfeign.EnableFeignClients; 6 | 7 | @EnableFeignClients 8 | @SpringBootApplication 9 | public class NotificationServiceApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(NotificationServiceApplication.class, args); 12 | } 13 | } 14 | --------------------------------------------------------------------------------