├── .commitlintrc.js ├── .credo.exs ├── .dialyzer_ignore.exs ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .iex.exs ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── Makefile.include.mk ├── README.md ├── README.zh-CN.md ├── config ├── ci.exs ├── config.exs ├── dev.exs ├── mock.exs ├── prod.exs └── test.exs ├── cover └── excoveralls.json ├── deploy ├── dev │ ├── Dockerfile │ ├── api_server.tar.gz │ ├── index.html │ ├── loader.sh │ └── packer.sh └── production │ ├── Dockerfile │ ├── api_server.tar.gz │ ├── index.html │ ├── loader.sh │ └── packer.sh ├── docs ├── FAQ.md ├── README.md ├── analysis │ ├── apollo-engine.md │ ├── apollo-engine.zh-CN.md │ ├── error-tracking.md │ └── error-tracking.zh-CN.md ├── architecture │ ├── graphql.md │ ├── graphql.zh-CN.md │ ├── intro.md │ └── intro.zh-CN.md ├── ci │ ├── commit-msg-lint.md │ ├── commit-msg-lint.zh-CN.md │ ├── doc-coverage.md │ ├── intro.md │ ├── intro.zh-CN.md │ ├── schema-check.md │ ├── schema-check.zh-CN.md │ ├── test-coverage.md │ └── test-coverage.zh-CN.md ├── contributing.md ├── contributing.zh-CN.md ├── deployment │ ├── intro.md │ ├── intro.zh-CN.md │ ├── release.md │ └── release.zh-CN.md ├── development │ ├── console.md │ ├── console.zh-CN.md │ ├── generator.md │ ├── generator.zh-CN.md │ ├── intro.md │ ├── intro.zh-CN.md │ ├── linter.md │ ├── linter.zh-CN.md │ ├── setup.md │ └── setup.zh-CN.md ├── roadmap.md ├── snapshots │ ├── apollo-explorer.png │ ├── apollo-metrics.png │ ├── cps_logo_md.png │ └── deployment.png ├── testing │ ├── graphql-testing.md │ ├── graphql-testing.zh-CN.md │ ├── unit-testing.md │ └── unit-testing.zh-CN.md ├── tips.md └── troubleshooting.md ├── lib ├── groupher_server.ex ├── groupher_server │ ├── accounts │ │ ├── accounts.ex │ │ ├── delegates │ │ │ ├── achievements.ex │ │ │ ├── collect_folder.ex │ │ │ ├── customization.ex │ │ │ ├── fans.ex │ │ │ ├── hooks │ │ │ │ └── notify.ex │ │ │ ├── mailbox.ex │ │ │ ├── profile.ex │ │ │ ├── publish.ex │ │ │ ├── search.ex │ │ │ ├── upvoted_articles.ex │ │ │ └── utils.ex │ │ ├── helper │ │ │ └── loader.ex │ │ └── models │ │ │ ├── achievement.ex │ │ │ ├── collect_folder.ex │ │ │ ├── customization.ex │ │ │ ├── education_background.ex │ │ │ ├── embeds │ │ │ ├── collect_folder_meta.ex │ │ │ ├── user_contribute.ex │ │ │ ├── user_contribute_record.ex │ │ │ ├── user_mailbox.ex │ │ │ └── user_meta.ex │ │ │ ├── github_user.ex │ │ │ ├── purchase.ex │ │ │ ├── social.ex │ │ │ ├── source_contribute.ex │ │ │ ├── user.ex │ │ │ ├── user_follower.ex │ │ │ ├── user_following.ex │ │ │ └── work_background.ex │ ├── application.ex │ ├── billing │ │ ├── billing.ex │ │ ├── delegates │ │ │ ├── actions.ex │ │ │ └── curd.ex │ │ └── models │ │ │ └── bill_record.ex │ ├── cms │ │ ├── cms.ex │ │ ├── constant.ex │ │ ├── delegates │ │ │ ├── Seeds │ │ │ │ ├── categories.ex │ │ │ │ ├── communities.ex │ │ │ │ ├── domain.ex │ │ │ │ ├── helper.ex │ │ │ │ ├── prod │ │ │ │ │ └── turning.ex │ │ │ │ ├── seeds.ex │ │ │ │ ├── seeds_config.ex │ │ │ │ ├── tags.ex │ │ │ │ └── threads.ex │ │ │ ├── abuse_report.ex │ │ │ ├── article_collect.ex │ │ │ ├── article_community.ex │ │ │ ├── article_curd.ex │ │ │ ├── article_emotion.ex │ │ │ ├── article_tag.ex │ │ │ ├── article_upvote.ex │ │ │ ├── blog_curd.ex │ │ │ ├── cited_artiment.ex │ │ │ ├── comment_action.ex │ │ │ ├── comment_curd.ex │ │ │ ├── comment_emotion.ex │ │ │ ├── community_curd.ex │ │ │ ├── community_operation.ex │ │ │ ├── community_sync.ex │ │ │ ├── document.ex │ │ │ ├── helper.ex │ │ │ ├── hooks │ │ │ │ ├── audition.ex │ │ │ │ ├── cite.ex │ │ │ │ ├── helper.ex │ │ │ │ ├── mention.ex │ │ │ │ └── notify.ex │ │ │ ├── passport_curd.ex │ │ │ ├── search.ex │ │ │ └── works_curd.ex │ │ ├── helper │ │ │ ├── loader.ex │ │ │ ├── macros.ex │ │ │ ├── matcher.ex │ │ │ ├── matcher_macros.ex │ │ │ └── utils.ex │ │ └── models │ │ │ ├── abuse_report.ex │ │ │ ├── article_collect.ex │ │ │ ├── article_document.ex │ │ │ ├── article_tag.ex │ │ │ ├── article_upvote.ex │ │ │ ├── article_user_emotion.ex │ │ │ ├── author.ex │ │ │ ├── blog.ex │ │ │ ├── blog_document.ex │ │ │ ├── blog_rss.ex │ │ │ ├── category.ex │ │ │ ├── cited_artiment.ex │ │ │ ├── city.ex │ │ │ ├── comment.ex │ │ │ ├── comment_reply.ex │ │ │ ├── comment_upvote.ex │ │ │ ├── comment_user_emotion.ex │ │ │ ├── community.ex │ │ │ ├── community_category.ex │ │ │ ├── community_cheatsheet.ex │ │ │ ├── community_editor.ex │ │ │ ├── community_subscriber.ex │ │ │ ├── community_thread.ex │ │ │ ├── community_wiki.ex │ │ │ ├── drink.ex │ │ │ ├── drink_document.ex │ │ │ ├── embeds │ │ │ ├── abuse_report_case.ex │ │ │ ├── app_store.ex │ │ │ ├── article_emotion.ex │ │ │ ├── article_meta.ex │ │ │ ├── block_task_runner.ex │ │ │ ├── blog_author.ex │ │ │ ├── blog_history_feed.ex │ │ │ ├── comment_emotion.ex │ │ │ ├── comment_meta.ex │ │ │ ├── community_meta.ex │ │ │ ├── reference_task.ex │ │ │ ├── social_info.ex │ │ │ └── user.ex │ │ │ ├── github_contributor.ex │ │ │ ├── guide.ex │ │ │ ├── guide_document.ex │ │ │ ├── job.ex │ │ │ ├── job_document.ex │ │ │ ├── meetup.ex │ │ │ ├── meetup_document.ex │ │ │ ├── passport.ex │ │ │ ├── pinned_article.ex │ │ │ ├── pinned_comment.ex │ │ │ ├── post.ex │ │ │ ├── post_comment.ex │ │ │ ├── post_document.ex │ │ │ ├── radar.ex │ │ │ ├── radar_document.ex │ │ │ ├── repo.ex │ │ │ ├── repo_contributor.ex │ │ │ ├── repo_document.ex │ │ │ ├── repo_lang.ex │ │ │ ├── techstack.ex │ │ │ ├── thread.ex │ │ │ ├── works.ex │ │ │ └── works_document.ex │ ├── delivery │ │ ├── delegates │ │ │ ├── mention.ex │ │ │ ├── notification.ex │ │ │ └── postman.ex │ │ ├── delivery.ex │ │ └── models │ │ │ ├── mention.ex │ │ │ └── notification.ex │ ├── logs │ │ ├── logs.ex │ │ └── user_activity.ex │ ├── mailer │ │ ├── email.ex │ │ ├── mailer.ex │ │ └── templates │ │ │ ├── admin_new_register.ex │ │ │ ├── mention_author.ex │ │ │ ├── nofity_admin_register.ex │ │ │ ├── notify_admin_on_content_created.ex │ │ │ ├── notify_admin_payment.ex │ │ │ ├── thanks_donation.ex │ │ │ └── welcome.ex │ ├── repo.ex │ └── statistics │ │ ├── delegates │ │ ├── contribute.ex │ │ ├── geo.ex │ │ ├── status.ex │ │ └── throttle.ex │ │ ├── models │ │ ├── community_contribute.ex │ │ ├── publish_throttle.ex │ │ ├── user_contribute.ex │ │ └── user_geo_info.ex │ │ └── statistics.ex ├── groupher_server_web.ex ├── groupher_server_web │ ├── channels │ │ └── user_socket.ex │ ├── context.ex │ ├── controller │ │ └── og_controller.ex │ ├── endpoint.ex │ ├── gettext.ex │ ├── middleware │ │ ├── README.md │ │ ├── achievement_proof.ex │ │ ├── authorize.ex │ │ ├── changeset_errors.ex │ │ ├── count_length.ex │ │ ├── covert_to_int.ex │ │ ├── cut_participators.ex │ │ ├── debug.ex │ │ ├── force_loader.ex │ │ ├── general_error.ex │ │ ├── github_user.ex │ │ ├── pagesize_proof.ex │ │ ├── passport.ex │ │ ├── passport_loader.ex │ │ ├── publish_throttle.ex │ │ ├── put_current_user.ex │ │ ├── put_root_source.ex │ │ ├── see_me.ex │ │ ├── statistics │ │ │ └── make_contribute.ex │ │ └── viewer_did_convert.ex │ ├── resolvers │ │ ├── accounts_resolver.ex │ │ ├── billing_resolver.ex │ │ ├── cms_resolver.ex │ │ └── statistics_resolver.ex │ ├── router.ex │ ├── schema.ex │ └── schema │ │ ├── Helper │ │ ├── fields.ex │ │ ├── imports.ex │ │ ├── metrics.ex │ │ ├── mutations.ex │ │ ├── objects.ex │ │ └── queries.ex │ │ ├── account │ │ ├── account_metrics.ex │ │ ├── account_mutations.ex │ │ ├── account_queries.ex │ │ └── account_types.ex │ │ ├── billing │ │ ├── billing_mutations.ex │ │ ├── billing_queries.ex │ │ └── billing_types.ex │ │ ├── cms │ │ ├── cms_metrics.ex │ │ ├── cms_queries.ex │ │ ├── cms_types.ex │ │ └── mutations │ │ │ ├── blog.ex │ │ │ ├── comment.ex │ │ │ ├── community.ex │ │ │ ├── drink.ex │ │ │ ├── guide.ex │ │ │ ├── job.ex │ │ │ ├── meetup.ex │ │ │ ├── operation.ex │ │ │ ├── post.ex │ │ │ ├── radar.ex │ │ │ ├── repo.ex │ │ │ └── works.ex │ │ └── statistics │ │ ├── statistics_mutations.ex │ │ ├── statistics_queries.ex │ │ └── statistics_types.ex └── helper │ ├── RSS.ex │ ├── audit_bot.ex │ ├── cache.ex │ ├── certification.ex │ ├── converter │ ├── article.ex │ ├── assets │ │ └── delimiter_icons.ex │ ├── chinese_convention.ex │ ├── editor_to_html │ │ ├── class.ex │ │ ├── frags │ │ │ ├── header.ex │ │ │ ├── image.ex │ │ │ ├── list.ex │ │ │ ├── people.ex │ │ │ ├── quote.ex │ │ │ └── table.ex │ │ ├── frontend_test │ │ │ ├── index.html │ │ │ ├── script.js │ │ │ └── styles.css │ │ ├── index.ex │ │ └── validator │ │ │ ├── editor_schema.ex │ │ │ └── index.ex │ ├── editor_to_md.ex │ ├── html_sanitizer.ex │ ├── md_to_editor.ex │ └── mention_parser.ex │ ├── error_code.ex │ ├── error_handler.ex │ ├── geo_pool.ex │ ├── gql_schema_suite.ex │ ├── guardian.ex │ ├── html.ex │ ├── ip_2_city.ex │ ├── later.ex │ ├── nested_filter.ex │ ├── oauth2 │ └── github.ex │ ├── orm.ex │ ├── parse_remote_ip.ex │ ├── patchs │ └── accounts_social_migrater.exs │ ├── plausible.ex │ ├── public_ip_plug.ex │ ├── query_builder.ex │ ├── scheduler.ex │ ├── types.ex │ ├── utils │ ├── map.ex │ ├── string.ex │ └── utils.ex │ └── validator │ ├── guards.ex │ ├── schema.ex │ └── schema_matchers.ex ├── mix.exs ├── mix.lock ├── package-lock.json ├── package.json ├── priv ├── gettext │ ├── en │ │ └── LC_MESSAGES │ │ │ └── errors.po │ ├── errors.pot │ └── zh_CN │ │ └── LC_MESSAGES │ │ ├── 404.po │ │ ├── errors.po │ │ └── fields.po ├── mock │ ├── articles.exs │ ├── cms_community_seeds.exs │ ├── cms_root_seeds.exs │ ├── community_patch_seeds.exs │ ├── cps_seeds.exs │ ├── debug_seeds.exs │ ├── geo_seeds.exs │ ├── populator │ │ ├── cms_comment.ex │ │ ├── cms_post.ex │ │ └── user.ex │ ├── post_comments_seeds.exs │ ├── prod_category.exs │ ├── prod_tmp_tuning.exs │ ├── tag_patch_seeds.exs │ └── user_contributes_seeds.exs └── repo │ └── migrations │ ├── 20171217042549_create_users.exs │ ├── 20171217131428_add_users_info.exs │ ├── 20171223101554_create_cms_posts.exs │ ├── 20171223110631_create_cms_authors.exs │ ├── 20171223111152_add_cms_author_id_to_posts.exs │ ├── 20180115075252_recreate_posts_comments.exs │ ├── 20180116060746_add_views_to_cms_posts.exs │ ├── 20180122062720_create_common_tag.exs │ ├── 20180122084610_create_posts_tags_join_table.exs │ ├── 20180122235911_create_community.exs │ ├── 20180123000925_create_communities_posts.exs │ ├── 20180123002525_add_communities_timestamp.exs │ ├── 20180123011214_alter_communities_author.exs │ ├── 20180123031129_alter_tag_community.exs │ ├── 20180203053909_add_linkaddr_to_posts.exs │ ├── 20180203064057_add_digest_length_to_posts.exs │ ├── 20180203091520_create_posts_stars.exs │ ├── 20180203091848_create_posts_favorites.exs │ ├── 20180324130829_create_github_users.exs │ ├── 20180325091016_update_users_info.exs │ ├── 20180327150232_add_extra_info_to_github_users.exs │ ├── 20180403012915_create_user_contributes.exs │ ├── 20180404040216_create_cms_passports.exs │ ├── 20180404091422_rename_cmspassport_roles.exs │ ├── 20180410075032_create_community_contribute.exs │ ├── 20180411032348_create_communities_subscribers.exs │ ├── 20180412125329_create_community_editors.exs │ ├── 20180416115537_create_community_thread.exs │ ├── 20180416121000_create_communites_threads.exs │ ├── 20180416122540_add_category_to_community.exs │ ├── 20180416135419_add_unique_to_thread.exs │ ├── 20180417073924_add_info_to_community.exs │ ├── 20180417080555_add_raw_to_thread.exs │ ├── 20180417085106_rename_community_threads_to_threads.exs │ ├── 20180417131427_remove_old_community_threads_unique_index.exs │ ├── 20180423061803_add_more_attrs_to_user.exs │ ├── 20180424143036_replace_user_sex_with_default_value.exs │ ├── 20180427115725_add_replyto_to_postcomments.exs │ ├── 20180427125929_create_posts_comments_reply.exs │ ├── 20180428034143_remove_posts_comments_replies.exs │ ├── 20180428034521_recreate_posts_comments_replies.exs │ ├── 20180428132739_create_likes_to_post_comment.exs │ ├── 20180429092654_create_dislike_to_post_comment.exs │ ├── 20180505014411_add_floor_to_comments.exs │ ├── 20180505032006_drop_unique_index_comments_floor.exs │ ├── 20180522013006_create_categories.exs │ ├── 20180522014431_create_communites_categories.exs │ ├── 20180522015232_remove_community_category_column.exs │ ├── 20180522043027_replace_category_user_by_author.exs │ ├── 20180522080514_replace_tag_user_by_author.exs │ ├── 20180523013618_create_cms_jobs.exs │ ├── 20180523022132_create_communities_jobs.exs │ ├── 20180524030533_create_jobs_users.exs │ ├── 20180524032915_create_jobs_favorites.exs │ ├── 20180524034625_create_jobs_tags_join_table.exs │ ├── 20180524062103_create_jobs_comments.exs │ ├── 20180524063128_create_jobs_comments_replies.exs │ ├── 20180524070826_add_replyid_to_job_comments.exs │ ├── 20180609033255_rename_tag_part_to_thread.exs │ ├── 20180609034229_add_unique_index_to_tags.exs │ ├── 20180609035726_drop_tags_old_unique_index.exs │ ├── 20180610014507_modify_posts_join_tags.exs │ ├── 20180610024432_modify_posts_join_tags2.exs │ ├── 20180621085257_add_raw_to_category.exs │ ├── 20180630050542_create_publish_throttle.exs │ ├── 20180630061546_add_timestamp_to_publish_throttle.exs │ ├── 20180630075133_add_unique_index_to_publish_throttle.exs │ ├── 20180701020456_add_index_to_threads.exs │ ├── 20180701092106_create_mentions.exs │ ├── 20180702095103_create_mention_mails.exs │ ├── 20180703020018_create_delivery_records.exs │ ├── 20180703101615_add_read_to_delivery_mentions.exs │ ├── 20180704083236_create_delivery_notifications.exs │ ├── 20180704084815_create_account_notification_mails.exs │ ├── 20180704095905_add_notification_record.exs │ ├── 20180705031115_create_bills_for_accounts.exs │ ├── 20180705032455_create_purchase_for_account.exs │ ├── 20180705034105_create_customizations_for_account.exs │ ├── 20180705054701_create_users_join_bills.exs │ ├── 20180705055436_add_pay_infos_to_users.exs │ ├── 20180705090111_add_option_to_user_custom.exs │ ├── 20180706025137_create_sys_notifications.exs │ ├── 20180706030516_add_sys_record_to_delivery_records.exs │ ├── 20180706032235_create_account_sys_notification_mail.exs │ ├── 20180706054326_add_user_to_accunt_sys_notification.exs │ ├── 20180706114458_create_user_activity_logs.exs │ ├── 20180711075041_add_on_top_to_posts.exs │ ├── 20180711140519_add_trash_flag_to_post.exs │ ├── 20180711145040_create_cms_videos.exs │ ├── 20180711151703_create_communities_videos.exs │ ├── 20180711152817_create_videos_tags_join_table.exs │ ├── 20180712072621_create_cms_repos.exs │ ├── 20180712091240_create_repo_user.exs │ ├── 20180712094921_alter_repo_attrs.exs │ ├── 20180712100020_alter_repo_user.exs │ ├── 20180712100410_renamer_repo_user.exs │ ├── 20180712100738_repos_builders_join_table.exs │ ├── 20180712101400_create_communities_repos_join_table.exs │ ├── 20180712102348_create_repos_tags_join_table.exs │ ├── 20180713064720_alter_video_repo_desc_to_text.exs │ ├── 20180717020041_create_users_followers.exs │ ├── 20180717091927_create_user_following.exs │ ├── 20180718024913_create_user_achievements.exs │ ├── 20180822093044_create_favorites_categories.exs │ ├── 20180822111739_remove_post_id_favorites_categories.exs │ ├── 20180822112055_add_category_to_posts_favorites.exs │ ├── 20180824050226_add_privete_to_favorites_category.exs │ ├── 20180824060333_add_desc_to_favorites_category.exs │ ├── 20180824235029_replace_category_id_to_posts_favorites.exs │ ├── 20180825024247_remove_category_title_in_post_favrotes.exs │ ├── 20180825043644_create_education_backgrounds.exs │ ├── 20180825060140_add_education_backgrounds_to_users.exs │ ├── 20180825094837_add_work_backgrounds_to_users.exs │ ├── 20180825231845_remove_education_company_in_users.exs │ ├── 20180826082635_add_more_social_info_to_users.exs │ ├── 20180830034134_add_more_social_to_users.exs │ ├── 20180911034258_add_pin_state_to_post.exs │ ├── 20180911092436_create_flags_fix.exs │ ├── 20180911092437_create_posts_communities_flags.exs │ ├── 20180912094948_remove_flags.exs │ ├── 20180912152235_remove_pin_from_posts.exs │ ├── 20180913014941_remove_trash_from_posts.exs │ ├── 20180913035118_create_jobs_communities_flags.exs │ ├── 20180913050800_create_repos_communities_flags.exs │ ├── 20180913052723_create_videos_communities_flags.exs │ ├── 20180921132944_add_thumbnil_to__videos.exs │ ├── 20180925231814_create_geo_info.exs │ ├── 20180926065313_add_geo_info_to_community.exs │ ├── 20180926070915_add_geo_city_to_users.exs │ ├── 20180928135647_alter_repos.exs │ ├── 20180928141144_rename_repos_fiels.exs │ ├── 20180929044158_add_star_language_info_to_repos.exs │ ├── 20180930005859_replace_string_to_text_in_post_comments.exs │ ├── 20180930010331_replace_string_to_text_in_job_comments.exs │ ├── 20180930011202_create_video_comments.exs │ ├── 20180930012820_create_video_comments_reply.exs │ ├── 20180930014611_add_floor_to_video_comment.exs │ ├── 20180930021237_add_reply_to_video_comment.exs │ ├── 20180930021707_drop_videos_comments_replies.exs │ ├── 20180930021722_recreate_videos_comments_replies.exs │ ├── 20180930023126_create_likes_to_video_comment.exs │ ├── 20180930023322_create_dislikes_to_video_comment.exs │ ├── 20180930030608_create_repo_comment.exs │ ├── 20180930031135_create_repo_comment_reply.exs │ ├── 20180930041418_create_repo_comment_likes.exs │ ├── 20180930041550_create_repo_comment_dislikes.exs │ ├── 20180930054149_create_community_wiki.exs │ ├── 20180930131449_add_views_to_community_wiki.exs │ ├── 20180930151113_create__community_cheatsheets.exs │ ├── 20181007124749_create_videos_favorites.exs │ ├── 20181007125858_create_videos_stars.exs │ ├── 20181008062314_add_likes_to_job_comments.exs │ ├── 20181008062922_add_dislikes_to_job_comments.exs │ ├── 20181011131417_add_category_id_to_jobs.exs │ ├── 20181011133216_add_category_id_to_videos.exs │ ├── 20181011133312_add_category_index_to_posts_favoritess.exs │ ├── 20181011152513_add_contribute_to_user_achievement.exs │ ├── 20181012014834_add_last_updated_to_favorite_categories.exs │ ├── 20181020014210_add_repo_favorites.exs │ ├── 20181022060833_rename_repo_last_fetch.exs │ ├── 20181023004300_add_views_to_user.exs │ ├── 20181023112702_add_copyright_to_posts.exs │ ├── 20181023142819_create_posts_viewers.exs │ ├── 20181023153633_create_jobs_viewers.exs │ ├── 20181023154929_create_videos_viewers.exs │ ├── 20181023160033_create_repos_viewers.exs │ ├── 20181024075229_add_company_link_to_jobs.exs │ ├── 20181025060156_alter_job_fields.exs │ ├── 20181025064950_add_fields_for_jobs.exs │ ├── 20181025130936_cleaup_for_jobs.exs │ ├── 20181025131259_copy_right_default_for_jobs.exs │ ├── 20181028010610_create_topic_for_contents.exs │ ├── 20181028015325_create_topic_post_join.exs │ ├── 20181028050903_add_topic_to_tags.exs │ ├── 20181102103138_add_flag_index_to_cms_contents.exs │ ├── 20181102103942_create_pined_posts.exs │ ├── 20181102152301_create_pined_jobs.exs │ ├── 20181102164008_create_pined_videos.exs │ ├── 20181102165813_create_pined_repos.exs │ ├── 20181102174534_remove_pin_in_community_flags.exs │ ├── 20181103023157_add_more_customization.exs │ ├── 20181103031609_alter_customization_theme.exs │ ├── 20181114065157_add_remote_ip_for_user.exs │ ├── 20181116145709_add_index_to_categories.exs │ ├── 20181122122402_tmp_drop_videos_comments_floor_index.exs │ ├── 20181203051334_add_default_index_to_community.exs │ ├── 20181203055656_add_communities_index_to_c11n.exs │ ├── 20181206072233_create_bill_records.exs │ ├── 20181206085502_add_note_bill_records.exs │ ├── 20181208035936_add_member_to_achievements.exs │ ├── 20181212020415_add_login_to_user.exs │ ├── 20181212024133_add_index_to_user_login.exs │ ├── 20190106064921_add_aka_to_community.exs │ ├── 20190107055357_add_floor_to_mentions.exs │ ├── 20190107065846_add_floor_to_mention_mails.exs │ ├── 20190116145140_alter_c11n_theme.exs │ ├── 20190118035531_add_link_icon_to_posts.exs │ ├── 20190121044712_add_hover_to_c11n.exs │ ├── 20190123134729_add_community_in_mentions.exs │ ├── 20190123135704_add_community_in_mention_mails.exs │ ├── 20190210053420_add_orignal_community_to_post.exs │ ├── 20190210065806_add_orignal_community_to_job.exs │ ├── 20190210070234_add_orignal_community_to_repo.exs │ ├── 20190210070555_add_orignal_community_to_video.exs │ ├── 20190303102430_add_user_socials.exs │ ├── 20190322233442_remove_social_fields_in_user.exs │ ├── 20190322234236_remove_qq_in_user.exs │ ├── 20190710090445_create_background_jobs.exs │ ├── 20210324064013_add_meta_to_posts.exs │ ├── 20210407015331_rm_cms_videos.exs │ ├── 20210407043645_creaet_article_comments.exs │ ├── 20210408020142_create_upvotes_for_article_comments.exs │ ├── 20210409043049_create_article_comment_participator.exs │ ├── 20210412023051_create_article_comment_replies.exs │ ├── 20210412032707_add_reply_to_id_to_article_comment.exs │ ├── 20210412070456_add_embeds_replies_to_artcile_comments.exs │ ├── 20210413040429_add_replies_count_to_artcile_comments.exs │ ├── 20210413062841_add_emotions_artcile_comments.exs │ ├── 20210413234215_create_comments_users_emotions.exs │ ├── 20210415010056_add_fold_to_article_comments.exs │ ├── 20210415022102_add_reported_to_article_comments.exs │ ├── 20210415025445_add_floor_to_article_comments.exs │ ├── 20210415042324_add_delete_flag_to_article_comments.exs │ ├── 20210415053021_add_article_author_id_to_article_comments.exs │ ├── 20210415060232_add_upvote_count_to_article_comments.exs │ ├── 20210415062503_rm_old_job_comments.exs │ ├── 20210415063508_rm_old_repo_comments.exs │ ├── 20210415084353_rm_old_post_comments_dislike.exs │ ├── 20210415085842_add_meta_to_article_comment.exs │ ├── 20210415091518_add_general_reports.exs │ ├── 20210418041849_add_meta_to_article_content.exs │ ├── 20210419020056_add_pin_to_article_comments.exs │ ├── 20210422010836_add_article_comment_count.exs │ ├── 20210422033146_rename_comment_participators.exs │ ├── 20210422034830_add_article_comment_count_to_job.exs │ ├── 20210422045815_add_article_comments_participators_count.exs │ ├── 20210426082529_remove_topic_tables.exs │ ├── 20210429014800_create_pined_article.exs │ ├── 20210429065645_adjust_pin_field_on_articles.exs │ ├── 20210429083236_remove_old_pined_tables.exs │ ├── 20210430021726_create_common_article_upvote.exs │ ├── 20210430041030_add_upvotes_count_to_articles.exs │ ├── 20210430070102_create_collect_for_article.exs │ ├── 20210430095524_add_collects_count_to_articles.exs │ ├── 20210501070920_add_thread_to_article_upvote.exs │ ├── 20210501143223_create_collect_folder.exs │ ├── 20210502100107_rename_achievement_fields.exs │ ├── 20210502132427_add_meta_to_collect_folder.exs │ ├── 20210503080631_add_collect_folder_to_article_collect_record.exs │ ├── 20210504042708_remove_old_favorites_staff.exs │ ├── 20210507051338_remove_viewer_tables.exs │ ├── 20210507063145_add_popcorn_emotion_to_comment.exs │ ├── 20210508072209_add_article_comments_participators_to_job.exs │ ├── 20210510005623_add_emotions_to_post.exs │ ├── 20210510020858_create_article_user_emotion.exs │ ├── 20210510060205_add_emotions_to_cms_jobs.exs │ ├── 20210510090556_add_emotions_to_repo.exs │ ├── 20210511052156_move_is_reported_to_article.exs │ ├── 20210511134719_add_repo_to_report.exs │ ├── 20210512041939_add_repo_to_article_comment.exs │ ├── 20210512072528_add_report_meta_to_user.exs │ ├── 20210512110812_rename_is_close_to_is_confirm_in_reports.exs │ ├── 20210514092312_rename_origial_community.exs │ ├── 20210515011230_rename_community_flag_conecpt.exs │ ├── 20210515014737_add_mark_delete_for_articles.exs │ ├── 20210516033634_add_repo_in_pinned_artilce_comments.exs │ ├── 20210516052616_add_comment_support_for_repo.exs │ ├── 20210516055842_rename_articles_pined_comments.exs │ ├── 20210516144011_add_repo_support_in_emotion.exs │ ├── 20210517131838_create_article_tags.exs │ ├── 20210517134611_create_articles_join_tags.exs │ ├── 20210519055419_add_group_to_article_tag.exs │ ├── 20210519094205_rename_communiites_article_join_table.exs │ ├── 20210519142252_add_meta_to_community.exs │ ├── 20210520084350_add_views_to_community.exs │ ├── 20210520090847_add_xxx_count_to_community.exs │ ├── 20210523230813_add_article_tags_count.exs │ ├── 20210525031630_add_contributes_digest_field_to_community.exs │ ├── 20210525044015_add_contributes_to_user.exs │ ├── 20210529032442_move_follow_count_to_users.exs │ ├── 20210529093621_add_subscribe_count_to_users.exs │ ├── 20210530060122_add_thread_to_article_comment.exs │ ├── 20210531024825_remove_domain_fields_on_jobs.exs │ ├── 20210531072723_add_active_at_to_articles.exs │ ├── 20210602090617_add_qustion_mark_to_post.exs │ ├── 20210602111315_add_qustion_mark_to_article_comment.exs │ ├── 20210602135346_add_solution_digest_to_post.exs │ ├── 20210602144450_add_solution_digest_to_comment.exs │ ├── 20210603085958_remove_link_icon_in_posts.exs │ ├── 20210607020645_create_blogs.exs │ ├── 20210607021558_create_communities_join_blog.exs │ ├── 20210607022840_add_blog_to_article_tags.exs │ ├── 20210607023900_add_blog_reactions.exs │ ├── 20210607042800_missing_timestamp_to_blogs.exs │ ├── 20210607065610_missing_body_to_blog.exs │ ├── 20210607071205_add_body_to_repo.exs │ ├── 20210609043242_add_body_html_to_artilces.exs │ ├── 20210609050608_adjust_body_to_artilce_comments.exs │ ├── 20210613092643_rename_participators.exs │ ├── 20210613143500_rename_article_comment_to_comment.exs │ ├── 20210613151714_re_create_comment_replies.exs │ ├── 20210613151943_re_create_comemnt_user_emotions.exs │ ├── 20210613153539_re_create_pinned_comments.exs │ ├── 20210613154831_re_create_cited_contents.exs │ ├── 20210613155102_remove_article_comment_in_reports.exs │ ├── 20210613160342_add_comment_id_to_reports.exs │ ├── 20210614000006_missong_popcorn_emotion.exs │ ├── 20210614003035_remove_article_prefix_in_artilces.exs │ ├── 20210614010611_create_comment_upvotes_if_not_exsit.exs │ ├── 20210614145939_missing_timestamp_for_cite_contents.exs │ ├── 20210616112945_back_old_mention_and_notifications.exs │ ├── 20210617014552_create_new_mention.exs │ ├── 20210618160827_rename_cited_contents_to_cited_artiments.exs │ ├── 20210619021543_create_new_notifications.exs │ ├── 20210620091612_rename_notifications_type_to_thread.exs │ ├── 20210620131328_rename_mentions_type_to_thread.exs │ ├── 20210621041646_add_mailbox_to_user.exs │ ├── 20210621100858_remove_old_delivery_tables.exs │ ├── 20210621101125_remove_old_delivery_records.exs │ ├── 20210622042857_remove_old_account_mails.exs │ ├── 20210623054015_add_from_users_count_to_notification.exs │ ├── 20210623093412_creaet_article_documents.exs │ ├── 20210623094741_creaet_domain_article_documents.exs │ ├── 20210623123527_remove_body_html_in_articles.exs │ ├── 20210625095226_create_works_table.exs │ ├── 20210625100126_create_works_document.exs │ ├── 20210625100519_create_communities_join_works.exs │ ├── 20210625101018_add_works_to_tags_join_table.exs │ ├── 20210625101144_add_works_to_other_join_tables.exs │ ├── 20210625134335_add_works_to_cited_artiments.exs │ ├── 20210626021053_create_radar.exs │ ├── 20210626021921_create_radar_document.exs │ ├── 20210626022215_create_communities_join_radars.exs │ ├── 20210626022430_add_radar_id_to_others.exs │ ├── 20210626054252_create_guide.exs │ ├── 20210626054616_create_guide_document.exs │ ├── 20210626054717_create_communities_join_guides.exs │ ├── 20210626054903_add_guide_id_to_others.exs │ ├── 20210626081546_create_meetup.exs │ ├── 20210626081857_create_meetup_document.exs │ ├── 20210626082045_create_communities_join_meetups.exs │ ├── 20210626082257_add_meetup_to_others.exs │ ├── 20210626100316_create_drink.exs │ ├── 20210626101523_create_communities_join_drinks.exs │ ├── 20210626101620_add_drink_to_others.exs │ ├── 20210626124149_add_drink_community_join_table.exs │ ├── 20210814103656_add_archive_fields_to_articles.exs │ ├── 20210815040915_add_archive_fields_to_comments.exs │ ├── 20210816040543_add_extra_to_tags.exs │ ├── 20210819055512_add_icon_to_tags.exs │ ├── 20210826042959_add_raw_to_tags.exs │ ├── 20210829061837_add_link_to_radar.exs │ ├── 20210901075602_add_link_to_meetup.exs │ ├── 20210901075922_add_link_to_drink.exs │ ├── 20210901080438_add_link_to_guides.exs │ ├── 20210901080751_add_link_to_works.exs │ ├── 20210907084024_add_link_to_repos.exs │ ├── 20210924023609_create_blog_rss.exs │ ├── 20210926015205_add_feed_fields_to_blog.exs │ ├── 20210930071135_add_more_fields_to_works.exs │ ├── 20210930083012_create_works_techstack.exs │ ├── 20211001022903_create_works_join_techstack.exs │ ├── 20211001111732_add_cities.exs │ ├── 20211001112647_create_works_join_cityies.exs │ ├── 20211001115257_remove_city_info_in_works.exs │ ├── 20211007062947_add_missing_uniq_index_for_aritlce_upvotes.exs │ ├── 20211023062941_add_rss_to_blog.exs │ ├── 20211027134153_add_raw_to_techstack.exs │ ├── 20211029133301_add_desc_to_works.exs │ ├── 20211101033116_add_raw_to_city.exs │ ├── 20211105054243_add_shortbio_to_user.exs │ ├── 20211105055009_add_more_platform_to_users_social.exs │ ├── 20211109034133_add_cover_to_works.exs │ ├── 20211109080329_works_join_teammates.exs │ ├── 20211109144210_add_pending_to_articles.exs │ ├── 20211110153325_add_pending_to_comments.exs │ ├── 20211111093518_add_pending_to_repo.exs │ ├── 20211114024657_adjust_community_uniq_field.exs │ └── 20211114085157_add_pending_to_community.exs ├── test ├── groupher_server │ ├── accounts │ │ ├── accounts_test.exs │ │ ├── achievement_test.exs │ │ ├── collect_folder_test.exs │ │ ├── customization_test.exs │ │ ├── fans_test.exs │ │ ├── hooks │ │ │ └── notify_test.exs │ │ ├── mailbx_test.exs │ │ ├── published │ │ │ ├── published_blogs_test.exs │ │ │ ├── published_drink_test.exs │ │ │ ├── published_guide_test.exs │ │ │ ├── published_jobs_test.exs │ │ │ ├── published_meetup_test.exs │ │ │ ├── published_posts_test.exs │ │ │ ├── published_radar_test.exs │ │ │ ├── published_repos_test.exs │ │ │ └── published_work_test.exs │ │ ├── reacted_articles_test.exs │ │ └── utils_test.exs │ ├── billing │ │ └── billing_test.exs │ ├── cms │ │ ├── abuse_reports │ │ │ ├── account_report_test.exs │ │ │ ├── blog_report_test.exs │ │ │ ├── comment_report_test.exs │ │ │ ├── drink_report_test.exs │ │ │ ├── guide_report_test.exs │ │ │ ├── job_report_test.exs │ │ │ ├── meetup_report_test.exs │ │ │ ├── post_report_test.exs │ │ │ ├── radar_report_test.exs │ │ │ ├── repo_report_test.exs │ │ │ └── works_report_test.exs │ │ ├── article_collect_test.exs │ │ ├── article_community │ │ │ ├── blog_test.exs │ │ │ ├── drink_test.exs │ │ │ ├── guide_test.exs │ │ │ ├── job_test.exs │ │ │ ├── meetup_test.exs │ │ │ ├── post_test.exs │ │ │ ├── radar_test.exs │ │ │ ├── repo_test.exs │ │ │ └── works_test.exs │ │ ├── article_tags │ │ │ ├── blog_tag_test.exs │ │ │ ├── drink_tag_test.exs │ │ │ ├── guide_tag_test.exs │ │ │ ├── job_tag_test.exs │ │ │ ├── meetup_tag_test.exs │ │ │ ├── post_tag_test.exs │ │ │ ├── radar_tag_test.exs │ │ │ ├── repo_tag_test.exs │ │ │ └── works_tag_test.exs │ │ ├── articles │ │ │ ├── blog_archive_test.exs │ │ │ ├── blog_pin_test.exs │ │ │ ├── blog_test.exs │ │ │ ├── drink_pin_test.exs │ │ │ ├── drink_test.exs │ │ │ ├── guide_pin_test.exs │ │ │ ├── guide_test.exs │ │ │ ├── job_archive_test.exs │ │ │ ├── job_pin_test.exs │ │ │ ├── job_test.exs │ │ │ ├── meetup_archive_test.exs │ │ │ ├── meetup_pin_test.exs │ │ │ ├── meetup_test.exs │ │ │ ├── pending_flag_test.exs │ │ │ ├── post_archive_test.exs │ │ │ ├── post_meta_test.exs │ │ │ ├── post_pin_test.exs │ │ │ ├── post_test.exs │ │ │ ├── radar_archive_test.exs │ │ │ ├── radar_pin_test.exs │ │ │ ├── radar_test.exs │ │ │ ├── repo_pin_test.exs │ │ │ ├── repo_test.exs │ │ │ ├── works_archive_test.exs │ │ │ ├── works_pin_test.exs │ │ │ └── works_test.exs │ │ ├── cheatsheet_test.exs │ │ ├── cms_passport_test.exs │ │ ├── cms_test.exs │ │ ├── comments │ │ │ ├── archive_test.exs │ │ │ ├── blog_comment_emotions_test.exs │ │ │ ├── blog_comment_replies_test.exs │ │ │ ├── blog_comment_test.exs │ │ │ ├── blog_pending_test.exs │ │ │ ├── drink_comment_emotions_test.exs │ │ │ ├── drink_comment_replies_test.exs │ │ │ ├── drink_comment_test.exs │ │ │ ├── drink_pending_test.exs │ │ │ ├── guide_comment_emotions_test.exs │ │ │ ├── guide_comment_replies_test.exs │ │ │ ├── guide_comment_test.exs │ │ │ ├── guide_pending_test.exs │ │ │ ├── job_comment_emotions_test.exs │ │ │ ├── job_comment_replies_test.exs │ │ │ ├── job_comment_test.exs │ │ │ ├── job_pending_test.exs │ │ │ ├── meetup_comment_emotions_test.exs │ │ │ ├── meetup_comment_replies_test.exs │ │ │ ├── meetup_comment_test.exs │ │ │ ├── meetup_pending_test.exs │ │ │ ├── pending_test.exs │ │ │ ├── post_comment_emotions_test.exs │ │ │ ├── post_comment_replies_test.exs │ │ │ ├── post_comment_test.exs │ │ │ ├── post_pending_test.exs │ │ │ ├── radar_comment_emotions_test.exs │ │ │ ├── radar_comment_replies_test.exs │ │ │ ├── radar_comment_test.exs │ │ │ ├── radar_pending_test.exs │ │ │ ├── repo_comment_emotions_test.exs │ │ │ ├── repo_comment_replies_test.exs │ │ │ ├── repo_comment_test.exs │ │ │ ├── works_comment_emotions_test.exs │ │ │ ├── works_comment_replies_test.exs │ │ │ ├── works_comment_test.exs │ │ │ └── works_pending_test.exs │ │ ├── community │ │ │ ├── community_meta_test.exs │ │ │ └── community_test.exs │ │ ├── emotions │ │ │ ├── blog_emotions_test.exs │ │ │ ├── drink_emotions_test.exs │ │ │ ├── guide_emotions_test.exs │ │ │ ├── job_emotions_test.exs │ │ │ ├── meetup_emotions_test.exs │ │ │ ├── post_emotions_test.exs │ │ │ ├── radar_emotions_test.exs │ │ │ ├── repo_emotions_test.exs │ │ │ └── works_emotions_test.exs │ │ ├── hooks │ │ │ ├── audit_post_comment_test.exs │ │ │ ├── audit_post_test.exs │ │ │ ├── cite_blog_test.exs │ │ │ ├── cite_drink_test.exs │ │ │ ├── cite_guide_test.exs │ │ │ ├── cite_job_test.exs │ │ │ ├── cite_meetup_test.exs │ │ │ ├── cite_post_test.exs │ │ │ ├── cite_radar_test.exs │ │ │ ├── cite_works_test.exs │ │ │ ├── mention_in_blog_test.exs │ │ │ ├── mention_in_drink_test.exs │ │ │ ├── mention_in_guide_test.exs │ │ │ ├── mention_in_job_test.exs │ │ │ ├── mention_in_meetup_test.exs │ │ │ ├── mention_in_post_test.exs │ │ │ ├── mention_in_radar_test.exs │ │ │ ├── mention_in_works_test.exs │ │ │ ├── notify_blog_test.exs │ │ │ ├── notify_drink_test.exs │ │ │ ├── notify_guide_test.exs │ │ │ ├── notify_job_test.exs │ │ │ ├── notify_meetup_test.exs │ │ │ ├── notify_post_test.exs │ │ │ ├── notify_radar_test.exs │ │ │ └── notify_works_test.exs │ │ ├── search_test.exs │ │ ├── upvotes │ │ │ ├── blog_upvote_test.exs │ │ │ ├── drink_upvote_test.exs │ │ │ ├── guide_upvote_test.exs │ │ │ ├── job_upvote_test.exs │ │ │ ├── meetup_upvote_test.exs │ │ │ ├── post_upvote_test.exs │ │ │ ├── radar_upvote_test.exs │ │ │ └── works_upvote_test.exs │ │ └── wiki_test.exs │ ├── delivery │ │ ├── mention_test.exs │ │ └── notification_test.exs │ ├── logs │ │ └── logs_test.exs │ ├── mailer │ │ └── email_test.exs │ ├── seeds │ │ ├── articles_seed_test.exs │ │ ├── clean_up_test.exs │ │ └── community_seed_test.exs │ └── statistics │ │ ├── geo_test.exs │ │ ├── publish_throttle_test.exs │ │ ├── statistics_test.exs │ │ └── status_test.exs ├── groupher_server_web │ ├── controller │ │ └── og_test.exs │ ├── mutation │ │ ├── accounts │ │ │ ├── account_test.exs │ │ │ ├── collect_folder_test.exs │ │ │ ├── customization_test.exs │ │ │ ├── fans_test.exs │ │ │ └── mailbox_test.exs │ │ ├── billing │ │ │ └── billing_test.exs │ │ ├── cms │ │ │ ├── abuse_reports │ │ │ │ ├── blog_report_test.exs │ │ │ │ ├── drink_report_test.exs │ │ │ │ ├── guide_report_test.exs │ │ │ │ ├── job_report_test.exs │ │ │ │ ├── meetup_report_test.exs │ │ │ │ ├── post_report_test.exs │ │ │ │ ├── radar_report_test.exs │ │ │ │ ├── repo_report_test.exs │ │ │ │ └── works_report_test.exs │ │ │ ├── article_community │ │ │ │ ├── blog_test.exs │ │ │ │ ├── drink_test.exs │ │ │ │ ├── guide_test.exs │ │ │ │ ├── job_test.exs │ │ │ │ ├── meetup_test.exs │ │ │ │ ├── post_test.exs │ │ │ │ ├── radar_test.exs │ │ │ │ ├── repo_test.exs │ │ │ │ └── works_test.exs │ │ │ ├── article_tags │ │ │ │ ├── blog_tag_test.exs │ │ │ │ ├── curd_test.exs │ │ │ │ ├── drink_tag_test.exs │ │ │ │ ├── guide_tag_test.exs │ │ │ │ ├── job_tag_test.exs │ │ │ │ ├── meetup_tag_test.exs │ │ │ │ ├── post_tag_test.exs │ │ │ │ ├── radar_tag_test.exs │ │ │ │ ├── repo_tag_test.exs │ │ │ │ └── works_tag_test.exs │ │ │ ├── articles │ │ │ │ ├── blog_emotion_test.exs │ │ │ │ ├── blog_test.exs │ │ │ │ ├── drink_emotion_test.exs │ │ │ │ ├── drink_test.exs │ │ │ │ ├── guide_emotion_test.exs │ │ │ │ ├── guide_test.exs │ │ │ │ ├── job_emotion_test.exs │ │ │ │ ├── job_test.exs │ │ │ │ ├── meetup_emotion_test.exs │ │ │ │ ├── meetup_test.exs │ │ │ │ ├── post_emotion_test.exs │ │ │ │ ├── post_test.exs │ │ │ │ ├── radar_emotion_test.exs │ │ │ │ ├── radar_test.exs │ │ │ │ ├── repo_test.exs │ │ │ │ ├── works_emotion_test.exs │ │ │ │ └── works_test.exs │ │ │ ├── cheatsheet_test.exs │ │ │ ├── cms_manager_test.exs │ │ │ ├── cms_test.exs │ │ │ ├── comments │ │ │ │ ├── blog_comment_test.exs │ │ │ │ ├── drink_comment_test.exs │ │ │ │ ├── guide_comment_test.exs │ │ │ │ ├── job_comment_test.exs │ │ │ │ ├── meetup_comment_test.exs │ │ │ │ ├── post_comment_test.exs │ │ │ │ ├── radar_comment_test.exs │ │ │ │ ├── repo_comment_test.exs │ │ │ │ └── works_comment_test.exs │ │ │ ├── flags │ │ │ │ ├── blog_flag_test.exs │ │ │ │ ├── drink_flag_test.exs │ │ │ │ ├── guide_flag_test.exs │ │ │ │ ├── job_flag_test.exs │ │ │ │ ├── meetup_flag_test.exs │ │ │ │ ├── post_flag_test.exs │ │ │ │ ├── radar_flag_test.exs │ │ │ │ ├── repo_flag_test.exs │ │ │ │ └── works_flag_test.exs │ │ │ ├── publish_throttle_test.exs │ │ │ ├── sink │ │ │ │ ├── blog_sink_test.exs │ │ │ │ ├── drink_sink_test.exs │ │ │ │ ├── guide_sink_test.exs │ │ │ │ ├── job_sink_test.exs │ │ │ │ ├── meetup_sink_test.exs │ │ │ │ ├── post_sink_test.exs │ │ │ │ ├── radar_sink_test.exs │ │ │ │ ├── repo_sink_test.exs │ │ │ │ └── works_sink_test.exs │ │ │ ├── upvotes │ │ │ │ ├── blog_upvote_test.exs │ │ │ │ ├── drink_upvote_test.exs │ │ │ │ ├── guide_upvote_test.exs │ │ │ │ ├── job_upvote_test.exs │ │ │ │ ├── meetup_upvote_test.exs │ │ │ │ ├── post_upvote_test.exs │ │ │ │ ├── radar_upvote_test.exs │ │ │ │ └── works_upvote_test.exs │ │ │ └── wiki_test.exs │ │ └── statistics │ │ │ └── statistics_test.exs │ └── query │ │ ├── accounts │ │ ├── account_test.exs │ │ ├── achievement_test.exs │ │ ├── colleced_articles_test.exs │ │ ├── customization_test.exs │ │ ├── fans_test.exs │ │ ├── mailbox_test.exs │ │ ├── published │ │ │ ├── published_blogs_test.exs │ │ │ ├── published_drinks_test.exs │ │ │ ├── published_guides_test.exs │ │ │ ├── published_jobs_test.exs │ │ │ ├── published_meetups_test.exs │ │ │ ├── published_posts_test.exs │ │ │ ├── published_radars_test.exs │ │ │ ├── published_repos_test.exs │ │ │ └── published_works_test.exs │ │ ├── search_test.exs │ │ └── upvoteed_articles_test.exs │ │ ├── billing │ │ └── billing_test.exs │ │ ├── cms │ │ ├── abuse_reports │ │ │ ├── account_report_test.exs │ │ │ ├── job_report_test.exs │ │ │ ├── post_report_test.exs │ │ │ └── repo_report_test.exs │ │ ├── article_tags_test.exs │ │ ├── articles │ │ │ ├── job_test.exs │ │ │ ├── post_test.exs │ │ │ ├── repo_test.exs │ │ │ └── works_test.exs │ │ ├── blog_rss_test.exs │ │ ├── cheatsheet_test.exs │ │ ├── cms_geo_test.exs │ │ ├── cms_test.exs │ │ ├── collects │ │ │ ├── job_collect_test.exs │ │ │ └── post_collect_test.exs │ │ ├── comments │ │ │ ├── blog_comment_test.exs │ │ │ ├── drink_comment_test.exs │ │ │ ├── guide_comment_test.exs │ │ │ ├── job_comment_test.exs │ │ │ ├── meetup_comment_test.exs │ │ │ ├── post_comment_test.exs │ │ │ ├── radar_comment_test.exs │ │ │ ├── repo_comment_test.exs │ │ │ └── works_comment_test.exs │ │ ├── community_meta_test.exs │ │ ├── flags │ │ │ ├── jobs_flags_test.exs │ │ │ ├── posts_flags_test.exs │ │ │ └── repos_flags_test.exs │ │ ├── hooks │ │ │ ├── cite_blog_test.exs │ │ │ ├── cite_job_test.exs │ │ │ └── cite_post_test.exs │ │ ├── paged_articles │ │ │ ├── paged_blogs_test.exs │ │ │ ├── paged_drinks_test.exs │ │ │ ├── paged_guides_test.exs │ │ │ ├── paged_jobs_test.exs │ │ │ ├── paged_meetups_test.exs │ │ │ ├── paged_posts_test.exs │ │ │ ├── paged_radars_test.exs │ │ │ ├── paged_repos_test.exs │ │ │ └── paged_works_test.exs │ │ ├── search_test.exs │ │ ├── upvotes │ │ │ └── post_upvote_test.exs │ │ └── wiki_test.exs │ │ └── statistics │ │ └── statistics_test.exs ├── helper │ ├── audit_bot_test.exs │ ├── cache_test.exs │ ├── converter │ │ ├── article_test.exs │ │ ├── editor_to_html_test │ │ │ ├── header_test.exs │ │ │ ├── image_test.exs │ │ │ ├── index_test.exs │ │ │ ├── list_test.exs │ │ │ ├── paragraph_test.exs │ │ │ ├── people_test.exs │ │ │ ├── quote_test.exs │ │ │ └── table_test.exs │ │ ├── html_sanitizer_test.exs │ │ ├── md_to_editor_test.exs │ │ └── mention_parser_test.exs │ ├── orm_test.exs │ ├── rss_test.exs │ ├── utils_test.exs │ └── validator │ │ └── schema_test.exs ├── support │ ├── assert_helper.ex │ ├── channel_case.ex │ ├── conn_case.ex │ ├── conn_simulator.ex │ ├── data_case.ex │ ├── factory.ex │ ├── geo_data.ex │ └── test_tools.ex └── test_helper.exs └── yarn.lock /.credo.exs: -------------------------------------------------------------------------------- 1 | %{ 2 | configs: [ 3 | %{ 4 | name: "default", 5 | color: true, 6 | struct: true, 7 | files: %{ 8 | included: ["lib/", "test/"], 9 | excluded: [] 10 | }, 11 | checks: [ 12 | # alias nested modules in resolvers not work 13 | {Credo.Check.Design.AliasUsage, false}, 14 | # For others you can also set parameters 15 | {Credo.Check.Readability.MaxLineLength, priority: :low, max_length: 100}, 16 | # ... several checks omitted for readability ... 17 | ] 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.dialyzer_ignore.exs: -------------------------------------------------------------------------------- 1 | # .dialyzer_ignore.exs 2 | # about no_return see: https://github.com/jeremyjh/dialyxir/issues/210 3 | [ 4 | # {short_description} 5 | {":0:unknown_type Unknown type: Result.Object.t/0."}, 6 | # {file, warning_type} 7 | {"lib/groupher_server/cms/utils/loader.ex", :no_return}, 8 | # {file, warning_type} 9 | {"lib/groupher_server_web/schema.ex", :no_return}, 10 | # {file, warning_type} 11 | {"lib/groupher_server_web/schema.ex", :no_return} 12 | ] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # App artifacts 2 | /_build 3 | /db 4 | /deps 5 | /*.ez 6 | 7 | # Generated on crash by the VM 8 | erl_crash.dump 9 | 10 | # Files matching config/*.secret.exs pattern contain sensitive 11 | # data and you should not commit them into version control. 12 | # 13 | # Alternatively, you may comment the line below and commit the 14 | # secrets files as long as you replace their contents by environment 15 | # variables. 16 | /config/*.secret.exs 17 | _tuts/ 18 | .agignore 19 | docs/draft.ex 20 | cover/excoveralls.html 21 | node_modules/ 22 | .elixir_ls/ 23 | -------------------------------------------------------------------------------- /.iex.exs: -------------------------------------------------------------------------------- 1 | # see: https://github.com/blackode/elixir-tips#loading-project-module-aliases-iexexs 2 | alias Helper.Converter.EditorToHTML 3 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | 4 | ## [0.1.1](https://github.com/coderplanets/coderplanets_server/compare/v1.2.1...v0.1.1) (2018-08-04) 5 | -------------------------------------------------------------------------------- /deploy/dev/api_server.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/deploy/dev/api_server.tar.gz -------------------------------------------------------------------------------- /deploy/dev/index.html: -------------------------------------------------------------------------------- 1 | fake groupher site 2 | -------------------------------------------------------------------------------- /deploy/dev/loader.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /root/api_server/ 4 | MIX_ENV=dev mix phx.server & 5 | 6 | while true 7 | do 8 | sleep 100 9 | done 10 | -------------------------------------------------------------------------------- /deploy/production/api_server.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/deploy/production/api_server.tar.gz -------------------------------------------------------------------------------- /deploy/production/index.html: -------------------------------------------------------------------------------- 1 | i am coderplnets-production 2 | -------------------------------------------------------------------------------- /deploy/production/loader.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /root/api_server/ 4 | 5 | MIX_ENV=prod mix phx.server & 6 | 7 | while true 8 | do 9 | sleep 100 10 | done 11 | -------------------------------------------------------------------------------- /docs/FAQ.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/FAQ.md -------------------------------------------------------------------------------- /docs/analysis/apollo-engine.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/analysis/error-tracking.md: -------------------------------------------------------------------------------- 1 | 2 | [错误报告](https://sentry.io/welcome/) 3 | [sentry-elixir](https://github.com/getsentry/sentry-elixir) 4 | -------------------------------------------------------------------------------- /docs/analysis/error-tracking.zh-CN.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/analysis/error-tracking.zh-CN.md -------------------------------------------------------------------------------- /docs/architecture/graphql.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/architecture/graphql.md -------------------------------------------------------------------------------- /docs/architecture/graphql.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/ci/commit-msg-lint.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/ci/commit-msg-lint.md -------------------------------------------------------------------------------- /docs/ci/commit-msg-lint.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/ci/doc-coverage.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/ci/doc-coverage.md -------------------------------------------------------------------------------- /docs/ci/intro.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | 本项目使用 [Travis CI](https://travis-ci.org/) 作为 CI 服务, 3 | 当前的 [build 状态](https://travis-ci.org/coderplanets/coderplanets_server) 在 4 | README 中由 [![Build 5 | Status](https://travis-ci.org/coderplanets/coderplanets_server.svg?branch=dev)](https://travis-ci.org/coderplanets/coderplanets_server) 6 | 表示, 并随着每一次 `commit push` 或 `PR` 代码合并触发并更新。 7 | 8 | CI 不仅仅是运行测试,它还会触发以下任务: 9 | 10 | - [x] 确保所有的测试运行并通过 11 | - [x] 确保测试覆盖率更新 12 | - [x] 发布 GraphQL-Schema 到 apollo-engine 13 | - [x] 确保 GraphQL-Schema 可用 14 | - [x] 确保 commit messages 符合规定 15 | - [x] 如果 build 失败发送邮件给相关开发者 16 | -------------------------------------------------------------------------------- /docs/ci/schema-check.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/ci/schema-check.md -------------------------------------------------------------------------------- /docs/ci/schema-check.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/ci/test-coverage.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/ci/test-coverage.md -------------------------------------------------------------------------------- /docs/ci/test-coverage.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/contributing.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/deployment/intro.md: -------------------------------------------------------------------------------- 1 | 2 | ## Deployment 3 | 4 | coderplanets deploys on aliyun, the basic deploy architechture as follows: 5 | 6 | ![deploy structure](https://github.com/mydearxym/groupher_server/blob/dev/docs/snapshots/deployment.png) 7 | 8 | -------------------------------------------------------------------------------- /docs/deployment/intro.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/deployment/release.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | #### 中文文档出于时间关系尚未完善,欢迎 PR 3 | -------------------------------------------------------------------------------- /docs/development/console.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/development/console.md -------------------------------------------------------------------------------- /docs/development/linter.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/development/linter.md -------------------------------------------------------------------------------- /docs/development/linter.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | ### 关于提交 git commit 3 | 4 | 5 | 6 | todo 7 | -------------------------------------------------------------------------------- /docs/development/setup.md: -------------------------------------------------------------------------------- 1 | 2 | ### setup 3 | 4 | use `make setup.help` or `make setup` for help。 make sure you know what you are 5 | doing, then run `make setup.run`。 6 | 7 | ```text 8 | 9 | [valid setup commands] 10 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | setup.run : setup the basic env for you, include 3-step 12 | | 1. mix ecto.setup # create/migrate tables in db 13 | | 2. mix deps.get # for insall deps 14 | | 3. npm install # for commit-msg linter 15 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | 17 | ``` 18 | 19 | 20 | > NOTE: this cmd will not install Elixir/Erlang for you。 make sure you have thoese tools before setup 21 | 22 | -------------------------------------------------------------------------------- /docs/development/setup.zh-CN.md: -------------------------------------------------------------------------------- 1 | 2 | ### 初始化 3 | 4 | 使用 `make setup.help` 或 `make setup` 查看项目初始化命令。 在确保你知道用法后运 5 | 行 `make setup.run`, 该命令将自动帮你创建/迁移数据库表,安装依赖包等等。 6 | 7 | ```text 8 | 9 | [valid setup commands] 10 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | setup.run : setup the basic env for you, include 3-step 12 | | 1. mix ecto.setup # create/migrate tables in db 13 | | 2. mix deps.get # for insall deps 14 | | 3. npm install # for commit-msg linter 15 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 | 17 | ``` 18 | 19 | 20 | > 注意: 该命令不会帮你安装 Elixir/Erlang 环境。 请确保你的机器上有上述开发环境。 21 | -------------------------------------------------------------------------------- /docs/roadmap.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/roadmap.md -------------------------------------------------------------------------------- /docs/snapshots/apollo-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/snapshots/apollo-explorer.png -------------------------------------------------------------------------------- /docs/snapshots/apollo-metrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/snapshots/apollo-metrics.png -------------------------------------------------------------------------------- /docs/snapshots/cps_logo_md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/snapshots/cps_logo_md.png -------------------------------------------------------------------------------- /docs/snapshots/deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/snapshots/deployment.png -------------------------------------------------------------------------------- /docs/testing/unit-testing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/testing/unit-testing.md -------------------------------------------------------------------------------- /docs/troubleshooting.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderplanets/coderplanets_server/002023114fff49e1f6b8c9f1883aecc7a4c34749/docs/troubleshooting.md -------------------------------------------------------------------------------- /lib/groupher_server.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer do 2 | @moduledoc """ 3 | GroupherServer keeps the contexts that define your domain 4 | and business logic. 5 | 6 | Contexts are also responsible for managing your data, regardless 7 | if it comes from the database, an external API or others. 8 | """ 9 | end 10 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/delegates/search.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Delegate.Search do 2 | @moduledoc """ 3 | search for users 4 | """ 5 | 6 | import Helper.Utils, only: [done: 1] 7 | import Ecto.Query, warn: false 8 | 9 | alias GroupherServer.Accounts.Model.User 10 | alias Helper.ORM 11 | 12 | @search_items_count 15 13 | 14 | @doc """ 15 | search community by title 16 | """ 17 | def search_users(%{name: name} = _args) do 18 | User 19 | |> where([c], ilike(c.nickname, ^"%#{name}%")) 20 | |> ORM.paginator(page: 1, size: @search_items_count) 21 | |> done() 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/helper/loader.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Helper.Loader do 2 | @moduledoc """ 3 | dataloader for accounts 4 | """ 5 | import Ecto.Query, warn: false 6 | 7 | alias Helper.QueryBuilder 8 | alias GroupherServer.{CMS, Repo} 9 | 10 | alias CMS.Model.{CommunitySubscriber} 11 | 12 | def data, do: Dataloader.Ecto.new(Repo, query: &query/2) 13 | 14 | def query({"communities_subscribers", CommunitySubscriber}, %{filter: filter}) do 15 | CommunitySubscriber 16 | |> QueryBuilder.filter_pack(filter) 17 | |> join(:inner, [u], c in assoc(u, :community)) 18 | |> select([u, c], c) 19 | end 20 | 21 | def query(queryable, _args), do: queryable 22 | end 23 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/models/education_background.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Model.EducationBackground do 2 | @moduledoc false 3 | alias __MODULE__ 4 | 5 | use Ecto.Schema 6 | import Ecto.Changeset 7 | 8 | @required_fields ~w(school)a 9 | @optional_fields ~w(major)a 10 | 11 | @type t :: %EducationBackground{} 12 | embedded_schema do 13 | field(:school, :string) 14 | field(:major, :string) 15 | end 16 | 17 | @doc false 18 | def changeset(%EducationBackground{} = education_background, attrs) do 19 | education_background 20 | |> cast(attrs, @optional_fields ++ @required_fields) 21 | |> validate_required(@required_fields) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/models/embeds/user_contribute_record.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Model.Embeds.UserContributeRecord do 2 | @moduledoc """ 3 | user contribute 4 | """ 5 | use Ecto.Schema 6 | use Accessible 7 | import Ecto.Changeset 8 | 9 | @optional_fields ~w(count date)a 10 | 11 | embedded_schema do 12 | field(:count, :integer) 13 | field(:date, :date) 14 | end 15 | 16 | def changeset(struct, params) do 17 | struct |> cast(params, @optional_fields) 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/models/source_contribute.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Model.SourceContribute do 2 | @moduledoc false 3 | alias __MODULE__ 4 | 5 | use Ecto.Schema 6 | import Ecto.Changeset 7 | 8 | @optional_fields ~w(web server mobile we_app h5)a 9 | 10 | @type t :: %SourceContribute{} 11 | embedded_schema do 12 | field(:web, :boolean) 13 | field(:server, :boolean) 14 | field(:mobile, :boolean) 15 | field(:we_app, :boolean) 16 | field(:h5, :boolean) 17 | end 18 | 19 | @doc false 20 | def changeset(%SourceContribute{} = source_contribute, attrs) do 21 | source_contribute 22 | |> cast(attrs, @optional_fields) 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /lib/groupher_server/accounts/models/work_background.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Accounts.Model.WorkBackground do 2 | @moduledoc false 3 | alias __MODULE__ 4 | 5 | use Ecto.Schema 6 | import Ecto.Changeset 7 | 8 | @required_fields ~w(company)a 9 | @optional_fields ~w(title)a 10 | 11 | @type t :: %WorkBackground{} 12 | embedded_schema do 13 | field(:company, :string) 14 | field(:title, :string) 15 | end 16 | 17 | @doc false 18 | def changeset(%WorkBackground{} = work_background, attrs) do 19 | work_background 20 | |> cast(attrs, @optional_fields ++ @required_fields) 21 | |> validate_required(@required_fields) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/billing/billing.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Billing do 2 | @moduledoc false 3 | 4 | alias GroupherServer.Billing.Delegate.CURD 5 | 6 | defdelegate create_record(user, attrs), to: CURD 7 | defdelegate paged_records(user, filter), to: CURD 8 | defdelegate update_record_state(record_id, state), to: CURD 9 | end 10 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/embeds/app_store.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.Embeds.AppStore do 2 | @moduledoc """ 3 | general community meta 4 | """ 5 | use Ecto.Schema 6 | use Accessible 7 | 8 | import Ecto.Changeset 9 | 10 | @required_fields ~w(platform)a 11 | @optional_fields ~w(link)a 12 | 13 | embedded_schema do 14 | field(:platform, :string) 15 | field(:link, :string) 16 | end 17 | 18 | def changeset(struct, attrs) do 19 | struct 20 | |> cast(attrs, @optional_fields ++ @required_fields) 21 | |> validate_required(@required_fields) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/embeds/blog_author.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.Embeds.BlogAuthor do 2 | @moduledoc """ 3 | general community meta 4 | """ 5 | use Ecto.Schema 6 | use Accessible 7 | 8 | import Ecto.Changeset 9 | 10 | @required_fields ~w(name)a 11 | @optional_fields ~w(link intro github twitter)a 12 | 13 | embedded_schema do 14 | field(:name, :string) 15 | field(:link, :string) 16 | field(:intro, :string) 17 | field(:github, :string) 18 | field(:twitter, :string) 19 | end 20 | 21 | def changeset(struct, attrs) do 22 | struct 23 | |> cast(attrs, @optional_fields ++ @required_fields) 24 | |> validate_required(@required_fields) 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/embeds/blog_history_feed.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.Embeds.BlogHistoryFeed do 2 | @moduledoc """ 3 | general community meta 4 | """ 5 | use Ecto.Schema 6 | use Accessible 7 | 8 | import Ecto.Changeset 9 | 10 | @optional_fields ~w(title digest link_addr content published_at)a 11 | 12 | embedded_schema do 13 | field(:title, :string) 14 | field(:digest, :string) 15 | field(:link_addr, :string) 16 | field(:content, :string) 17 | field(:published, :string) 18 | field(:updated, :string) 19 | end 20 | 21 | def changeset(struct, params) do 22 | struct 23 | |> cast(params, @optional_fields) 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/embeds/social_info.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.Embeds.SocialInfo do 2 | @moduledoc """ 3 | general community meta 4 | """ 5 | use Ecto.Schema 6 | use Accessible 7 | 8 | import Ecto.Changeset 9 | 10 | @required_fields ~w(platform)a 11 | @optional_fields ~w(link)a 12 | 13 | embedded_schema do 14 | field(:platform, :string) 15 | field(:link, :string) 16 | end 17 | 18 | def changeset(struct, attrs) do 19 | struct 20 | |> cast(attrs, @optional_fields ++ @required_fields) 21 | |> validate_required(@required_fields) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/embeds/user.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.Embeds.User do 2 | @moduledoc """ 3 | only used for embeds_many situation 4 | """ 5 | 6 | use Ecto.Schema 7 | import Ecto.Changeset 8 | 9 | embedded_schema do 10 | field(:user_id, :integer) 11 | field(:login, :string) 12 | field(:avatar, :string) 13 | field(:nickname, :string) 14 | end 15 | 16 | def changeset(struct, params) do 17 | struct 18 | |> cast(params, [:login, :nickname, :user_id, :avatar]) 19 | |> validate_required([:login, :nickname]) 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/repo_contributor.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.RepoContributor do 2 | @moduledoc false 3 | alias __MODULE__ 4 | 5 | use Ecto.Schema 6 | import Ecto.Changeset 7 | 8 | @required_fields ~w(avatar nickname html_url)a 9 | 10 | @type t :: %RepoContributor{} 11 | embedded_schema do 12 | field(:avatar, :string) 13 | field(:nickname, :string) 14 | field(:html_url, :string) 15 | end 16 | 17 | @doc false 18 | def changeset(%RepoContributor{} = repo_contributor, attrs) do 19 | repo_contributor 20 | |> cast(attrs, @required_fields) 21 | |> validate_required(@required_fields) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server/cms/models/repo_lang.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.CMS.Model.RepoLang do 2 | @moduledoc false 3 | alias __MODULE__ 4 | 5 | use Ecto.Schema 6 | import Ecto.Changeset 7 | 8 | @required_fields ~w(name color)a 9 | 10 | @type t :: %RepoLang{} 11 | embedded_schema do 12 | field(:name, :string) 13 | field(:color, :string) 14 | end 15 | 16 | @doc false 17 | def changeset(%RepoLang{} = repo_lang, attrs) do 18 | repo_lang 19 | |> cast(attrs, @required_fields) 20 | |> validate_required(@required_fields) 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /lib/groupher_server/delivery/delivery.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Delivery do 2 | @moduledoc """ 3 | The Delivery context. 4 | """ 5 | 6 | alias GroupherServer.Delivery 7 | alias Delivery.Delegate.Postman 8 | 9 | defdelegate send(service, artiment, mentions, from_user), to: Postman 10 | defdelegate send(service, attrs, from_user), to: Postman 11 | defdelegate revoke(service, attrs, from_user), to: Postman 12 | defdelegate fetch(service, user, filter), to: Postman 13 | defdelegate unread_count(service, user), to: Postman 14 | 15 | defdelegate mark_read(service, ids, user), to: Postman 16 | defdelegate mark_read_all(service, user), to: Postman 17 | end 18 | -------------------------------------------------------------------------------- /lib/groupher_server/logs/logs.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Logs do 2 | @moduledoc """ 3 | The Logs context. 4 | """ 5 | 6 | # import Ecto.Query, warn: false 7 | # alias GroupherServer.Repo 8 | 9 | # alias GroupherServer.Logs.UserActivity 10 | end 11 | -------------------------------------------------------------------------------- /lib/groupher_server/mailer/mailer.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Mailer do 2 | @moduledoc """ 3 | the email staff for Groupher 4 | """ 5 | use Bamboo.Mailer, otp_app: :groupher_server 6 | end 7 | -------------------------------------------------------------------------------- /lib/groupher_server/repo.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo do 2 | import Helper.Utils, only: [get_config: 2] 3 | 4 | use Ecto.Repo, otp_app: :groupher_server, adapter: Ecto.Adapters.Postgres 5 | use Scrivener, page_size: get_config(:general, :page_size) 6 | 7 | @dialyzer {:nowarn_function, rollback: 1} 8 | 9 | @doc """ 10 | Dynamically loads the repository url from the 11 | DATABASE_URL environment variable. 12 | """ 13 | def init(_, opts) do 14 | {:ok, Keyword.put(opts, :url, System.get_env("DATABASE_URL"))} 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /lib/groupher_server/statistics/delegates/geo.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Statistics.Delegate.Geo do 2 | @moduledoc """ 3 | geo info settings 4 | """ 5 | import Ecto.Query, warn: false 6 | import Helper.Utils 7 | import ShortMaps 8 | 9 | alias GroupherServer.Statistics.Model.UserGeoInfo 10 | alias Helper.ORM 11 | 12 | def inc_count(city) do 13 | with {:ok, geo_info} <- UserGeoInfo |> ORM.find_by(~m(city)a) do 14 | geo_info |> ORM.update(%{value: geo_info.value + 1}) 15 | end 16 | end 17 | 18 | def list_cities_info do 19 | UserGeoInfo 20 | |> where([g], g.value > 0) 21 | |> ORM.paginator(page: 1, size: 300) 22 | |> done() 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 中间件是贯穿的,。。。 4 | 5 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/authorize.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # --- 4 | defmodule GroupherServerWeb.Middleware.Authorize do 5 | @moduledoc """ 6 | authorize gateway, mainly for login check 7 | """ 8 | 9 | @behaviour Absinthe.Middleware 10 | 11 | import Helper.Utils, only: [handle_absinthe_error: 3] 12 | import Helper.ErrorCode 13 | 14 | def call(%{context: %{cur_user: _}} = resolution, _info), do: resolution 15 | 16 | def call(resolution, _) do 17 | resolution 18 | |> handle_absinthe_error("Authorize: need login", ecode(:account_login)) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/count_length.ex: -------------------------------------------------------------------------------- 1 | # Absinthe.Middleware behaviour 2 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 3 | # --- 4 | defmodule GroupherServerWeb.Middleware.CountLength do 5 | @behaviour Absinthe.Middleware 6 | # google: must appear in the GROUP BY clause or be used in an aggregate function 7 | 8 | def call(%{errors: errors} = resolution, _) when length(errors) > 0, do: resolution 9 | 10 | def call(%{value: []} = resolution, _) do 11 | %{resolution | value: 0} 12 | end 13 | 14 | def call(%{value: value} = resolution, _) when is_list(value) do 15 | %{resolution | value: length(value)} 16 | end 17 | 18 | def call(resolution, _), do: resolution 19 | end 20 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/covert_to_int.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 4 | # --- 5 | defmodule GroupherServerWeb.Middleware.ConvertToInt do 6 | @behaviour Absinthe.Middleware 7 | # google: must appear in the GROUP BY clause or be used in an aggregate function 8 | 9 | def call(%{errors: errors} = resolution, _) when length(errors) > 0, do: resolution 10 | 11 | def call(%{value: [value]} = resolution, _) do 12 | %{resolution | value: value} 13 | end 14 | 15 | def call(%{value: []} = resolution, _) do 16 | %{resolution | value: 0} 17 | end 18 | 19 | def call(resolution, _), do: resolution 20 | end 21 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/debug.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # --- 4 | defmodule GroupherServerWeb.Middleware.Debug do 5 | @moduledoc """ 6 | authorize gateway, mainly for login check 7 | """ 8 | 9 | @behaviour Absinthe.Middleware 10 | 11 | import Helper.Utils, only: [handle_absinthe_error: 3] 12 | import Helper.ErrorCode 13 | 14 | def call(%{context: %{cur_user: _}} = resolution, _info) do 15 | IO.inspect(resolution.value.original_community.viewer_has_subscribed, label: "## resolution") 16 | resolution 17 | end 18 | 19 | def call(resolution, _) do 20 | resolution 21 | |> handle_absinthe_error("Authorize: need login", ecode(:account_login)) 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/general_error.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 4 | # --- 5 | defmodule GroupherServerWeb.Middleware.GeneralError do 6 | @behaviour Absinthe.Middleware 7 | 8 | def call(%{errors: [List = errors]} = resolution, _) do 9 | message = [%{message: errors}] 10 | 11 | %{resolution | value: [], errors: message} 12 | end 13 | 14 | def call(resolution, _), do: resolution 15 | end 16 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/github_user.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServerWeb.Middleware.GithubUser do 2 | @moduledoc """ 3 | handle github oauth login 4 | """ 5 | @behaviour Absinthe.Middleware 6 | 7 | import Helper.Utils, only: [handle_absinthe_error: 2] 8 | alias Helper.OAuth2.Github 9 | 10 | def call(%{arguments: %{code: code}} = resolution, _) do 11 | case Github.user_profile(code) do 12 | {:ok, user} -> 13 | arguments = resolution.arguments |> Map.merge(%{github_user: user}) 14 | %{resolution | arguments: arguments} 15 | 16 | {:error, err_msg} -> 17 | resolution 18 | |> handle_absinthe_error(err_msg) 19 | end 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/put_current_user.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 4 | # --- 5 | defmodule GroupherServerWeb.Middleware.PutCurrentUser do 6 | @behaviour Absinthe.Middleware 7 | 8 | def call(%{context: %{cur_user: cur_user}} = resolution, _) do 9 | arguments = resolution.arguments |> Map.merge(%{cur_user: cur_user}) 10 | 11 | %{resolution | arguments: arguments} 12 | end 13 | 14 | def call(%{errors: errors} = resolution, _) when length(errors) > 0, do: resolution 15 | 16 | def call(resolution, _) do 17 | resolution 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/see_me.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 4 | # --- 5 | defmodule GroupherServerWeb.Middleware.SeeMe do 6 | @behaviour Absinthe.Middleware 7 | 8 | def call(resolution, _) do 9 | # IO.inspect("see me") 10 | # IO.inspect resolution.arguments, label: "see me" 11 | resolution 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /lib/groupher_server_web/middleware/viewer_did_convert.ex: -------------------------------------------------------------------------------- 1 | # --- 2 | # Absinthe.Middleware behaviour 3 | # see https://hexdocs.pm/absinthe/Absinthe.Middleware.html#content 4 | # --- 5 | 6 | defmodule GroupherServerWeb.Middleware.ViewerDidConvert do 7 | @behaviour Absinthe.Middleware 8 | 9 | def call(%{value: nil} = resolution, _) do 10 | %{resolution | value: false} 11 | end 12 | 13 | def call(%{value: []} = resolution, _) do 14 | %{resolution | value: false} 15 | end 16 | 17 | def call(%{value: [_]} = resolution, _) do 18 | %{resolution | value: true} 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /lib/groupher_server_web/resolvers/billing_resolver.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServerWeb.Resolvers.Billing do 2 | @moduledoc """ 3 | accounts resolvers 4 | """ 5 | 6 | # import ShortMaps 7 | # import Helper.ErrorCode 8 | 9 | alias GroupherServer.Billing 10 | 11 | def paged_bill_records(_root, %{filter: filter}, %{context: %{cur_user: cur_user}}) do 12 | Billing.paged_records(cur_user, filter) 13 | end 14 | 15 | def create_bill(_root, args, %{context: %{cur_user: cur_user}}) do 16 | Billing.create_record(cur_user, args) 17 | end 18 | 19 | def update_bill_state(_root, %{id: id, state: state}, %{context: %{cur_user: _cur_user}}) do 20 | Billing.update_record_state(id, state) 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /lib/groupher_server_web/schema/billing/billing_queries.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServerWeb.Schema.Billing.Queries do 2 | @moduledoc """ 3 | billing GraphQL queries 4 | """ 5 | use Helper.GqlSchemaSuite 6 | 7 | object :billing_queries do 8 | @desc "get all bills" 9 | field :paged_bill_records, non_null(:paged_bills) do 10 | arg(:filter, non_null(:paged_filter)) 11 | 12 | middleware(M.Authorize, :login) 13 | middleware(M.PageSizeProof) 14 | 15 | resolve(&R.Billing.paged_bill_records/3) 16 | end 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /lib/groupher_server_web/schema/statistics/statistics_mutations.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServerWeb.Schema.Statistics.Mutations do 2 | @moduledoc """ 3 | Statistics mutations 4 | """ 5 | use Helper.GqlSchemaSuite 6 | 7 | object :statistics_mutations do 8 | field :make_contrubute, :user_contribute do 9 | arg(:user_id, non_null(:id)) 10 | 11 | resolve(&R.Statistics.make_contrubute/3) 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /lib/helper/converter/editor_to_html/frontend_test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | The HTML5 Herald 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /lib/helper/converter/editor_to_md.ex: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/helper/gql_schema_suite.ex: -------------------------------------------------------------------------------- 1 | defmodule Helper.GqlSchemaSuite do 2 | @moduledoc """ 3 | helper for reduce boilerplate import/use/alias in absinthe schema 4 | """ 5 | 6 | defmacro __using__(_opts) do 7 | quote do 8 | use Absinthe.Schema.Notation 9 | 10 | alias GroupherServerWeb.Resolvers, as: R 11 | alias GroupherServerWeb.Middleware, as: M 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /lib/helper/later.ex: -------------------------------------------------------------------------------- 1 | defmodule Helper.Later do 2 | @moduledoc """ 3 | background jobs support, currently using https://github.com/samphilipd/rihanna 4 | """ 5 | 6 | @doc """ 7 | ## Example 8 | iex> Later.run({__MODULE__, :get_contributes_then_cache, [%Community{id: id}]}) 9 | {:ok, _} 10 | """ 11 | def run({mod, func, args}) do 12 | Rihanna.enqueue({mod, func, args}) 13 | # weather enqueue success or not, just return {:ok, :pass}, or Multi.Job will be rollback 14 | {:ok, :pass} 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /lib/helper/validator/guards.ex: -------------------------------------------------------------------------------- 1 | defmodule Helper.Validator.Guards do 2 | @moduledoc """ 3 | general guards 4 | """ 5 | defguard g_pos_int(value) when is_integer(value) and value >= 0 6 | defguard g_not_nil(value) when not is_nil(value) 7 | 8 | defguard g_none_empty_str(value) when is_binary(value) and byte_size(value) > 0 9 | 10 | defguard g_is_id(value) when is_binary(value) or is_integer(value) 11 | end 12 | -------------------------------------------------------------------------------- /priv/gettext/zh_CN/LC_MESSAGES/404.po: -------------------------------------------------------------------------------- 1 | msgid "Community(%{name}) not found" 2 | msgstr "社区(%{name})未找到" 3 | 4 | msgid "Community(%{id}) not found" 5 | msgstr "社区(id: %{id})未找到" 6 | 7 | msgid "User(%{name}) not found" 8 | msgstr "用户(%{name})未找到" 9 | 10 | msgid "Post(%{name}) not found" 11 | msgstr "帖子(%{name})未找到" 12 | 13 | msgid "Post(%{id}) not found" 14 | msgstr "帖子(id: %{id})未找到" -------------------------------------------------------------------------------- /priv/gettext/zh_CN/LC_MESSAGES/fields.po: -------------------------------------------------------------------------------- 1 | msgid "nickname" 2 | msgstr "昵称" 3 | 4 | msgid "email" 5 | msgstr "邮箱" 6 | 7 | msgid "user_id" 8 | msgstr "用户" -------------------------------------------------------------------------------- /priv/mock/community_patch_seeds.exs: -------------------------------------------------------------------------------- 1 | alias GroupherServer.CMS 2 | 3 | # 1. place add community to GroupherServer.CMS.Delegate.SeedsConfig first 4 | # 2. need manulay set cate in categorify_communities 5 | 6 | # CMS.seed_communities(:pl_patch) 7 | CMS.seed_communities(:framework_patch) 8 | -------------------------------------------------------------------------------- /priv/mock/debug_seeds.exs: -------------------------------------------------------------------------------- 1 | alias GroupherServer.CMS 2 | # alias Helper.ORM 3 | 4 | # ORM.delete_all(CMS.Model.Thread, :if_exist) 5 | 6 | CMS.clean_up_community(:home) 7 | {:ok, community} = CMS.seed_community(:home) 8 | 9 | # hello = ORM.find(CMS.Model.Community, community.id) 10 | # IO.inspect(hello, label: "hello -> ") 11 | 12 | CMS.seed_articles(community, :post, 5) 13 | CMS.seed_articles(community, :job, 5) 14 | CMS.seed_articles(community, :blog, 5) 15 | CMS.seed_articles(community, :radar, 5) 16 | CMS.seed_articles(community, :meetup, 5) 17 | CMS.seed_articles(community, :works, 10) 18 | -------------------------------------------------------------------------------- /priv/mock/geo_seeds.exs: -------------------------------------------------------------------------------- 1 | alias Helper.GeoPool 2 | 3 | GeoPool.insert_geo_data() 4 | -------------------------------------------------------------------------------- /priv/mock/populator/cms_comment.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Mock.CMS.Comment do 2 | # alias GroupherServer.Repo 3 | # alias GroupherServer.CMS 4 | 5 | # CMS.comment_post(post_id, body) 6 | 7 | # def random_attrs do 8 | # %{ 9 | # title: Faker.Name.first_name() <> " " <> Faker.Name.last_name(), 10 | # body: Faker.Lorem.paragraph(%Range{first: 1, last: 2}) 11 | # } 12 | # end 13 | 14 | def random(count \\ 1) do 15 | for _u <- 1..count do 16 | # CMS.create_comment(:post, :comment, 21, 39, "fake comment") 17 | end 18 | end 19 | 20 | # defp insert_multi do 21 | # Post.changeset(%Post{}, random_attrs()) 22 | # |> Repo.insert!() 23 | # end 24 | end 25 | -------------------------------------------------------------------------------- /priv/mock/populator/cms_post.ex: -------------------------------------------------------------------------------- 1 | # for mock CMS posts 2 | 3 | defmodule GroupherServer.Mock.CMS.Post do 4 | alias GroupherServer.Repo 5 | alias GroupherServer.CMS.Model.Post 6 | 7 | def random_attrs do 8 | %{ 9 | title: Faker.Name.first_name() <> " " <> Faker.Name.last_name(), 10 | body: Faker.Lorem.sentence(20) 11 | } 12 | end 13 | 14 | def random(count \\ 1) do 15 | for _u <- 1..count do 16 | insert_multi() 17 | end 18 | end 19 | 20 | # def insert(user) do 21 | # User.changeset(%User{}, user) 22 | # |> Repo.insert! 23 | # end 24 | 25 | defp insert_multi do 26 | Post.changeset(%Post{}, random_attrs()) 27 | |> Repo.insert!() 28 | end 29 | end 30 | -------------------------------------------------------------------------------- /priv/mock/post_comments_seeds.exs: -------------------------------------------------------------------------------- 1 | import GroupherServer.Support.Factory 2 | 3 | alias GroupherServer.{CMS, Accounts} 4 | alias Accounts.Model.User 5 | 6 | {:ok, user} = db_insert(:user) 7 | {:ok, post} = db_insert(:post) 8 | 9 | Enum.reduce(1..15, [], fn _, acc -> 10 | unique_num = System.unique_integer([:positive, :monotonic]) 11 | 12 | # {:ok, value} = 13 | # CMS.create_comment( 14 | # :post, 15 | # :comment, 16 | # post.id, 17 | # %User{id: user.id}, 18 | # "#{Faker.Lorem.Shakespeare.king_richard_iii()} - #{unique_num}" 19 | # ) 20 | 21 | # acc ++ [value] 22 | end) 23 | -------------------------------------------------------------------------------- /priv/mock/user_contributes_seeds.exs: -------------------------------------------------------------------------------- 1 | # use /test/support/populater 2 | 3 | import GroupherServer.Support.Factory 4 | 5 | default_user = %{ 6 | username: "mydearxym", 7 | nickname: "simon", 8 | bio: "i am from seed", 9 | company: "infomedia" 10 | } 11 | 12 | db_insert(:user, default_user) 13 | # db_insert_multi!(:user) 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20171217042549_create_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:users) do 6 | add(:username, :string) 7 | 8 | timestamps() 9 | end 10 | 11 | create(unique_index(:users, [:username])) 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20171217131428_add_users_info.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUsersInfo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:nickname, :string) 7 | add(:bio, :string) 8 | add(:company, :string) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20171223101554_create_cms_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCmsPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_posts) do 6 | add(:title, :string) 7 | add(:desc, :text) 8 | add(:body, :text) 9 | 10 | timestamps() 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20171223110631_create_cms_authors.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCmsAuthors do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_authors) do 6 | add(:role, :string) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:cms_authors, [:user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20171223111152_add_cms_author_id_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCmsAuthorIdToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:author_id, references(:cms_authors, on_delete: :delete_all), null: false) 7 | end 8 | 9 | create(index(:cms_posts, [:author_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180115075252_recreate_posts_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RecreatePostsComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_comments) do 6 | add(:body, :string) 7 | add(:author_id, references(:users, on_delete: :delete_all), null: false) 8 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:posts_comments, [:author_id])) 14 | create(index(:posts_comments, [:post_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180116060746_add_views_to_cms_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddViewsToCmsPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:views, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180122062720_create_common_tag.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommonTag do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:tags) do 6 | add(:community, :string) 7 | add(:part, :string) 8 | add(:title, :string) 9 | add(:color, :string) 10 | add(:user_id, references(:users)) 11 | 12 | timestamps() 13 | end 14 | 15 | create(unique_index(:tags, [:community, :part, :title])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180122084610_create_posts_tags_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsTagsJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_tags) do 6 | add(:tag_id, references(:tags, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:posts_tags, [:tag_id, :post_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180122235911_create_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities) do 6 | add(:title, :string) 7 | add(:desc, :string) 8 | add(:author, references(:users)) 9 | end 10 | 11 | create(unique_index(:communities, [:title])) 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180123000925_create_communities_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_posts) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_posts, [:community_id, :post_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180123002525_add_communities_timestamp.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommunitiesTimestamp do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180123011214_alter_communities_author.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterCommunitiesAuthor do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | remove(:author) 7 | add(:user_id, references(:users), null: false) 8 | end 9 | 10 | create(index(:communities, [:user_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180123031129_alter_tag_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterTagCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:tags, [:community, :part, :title])) 6 | 7 | alter table(:tags) do 8 | remove(:community) 9 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 10 | end 11 | 12 | create(unique_index(:tags, [:community_id, :part, :title])) 13 | create(index(:tags, [:community_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180203053909_add_linkaddr_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkaddrToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180203064057_add_digest_length_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDigestLengthToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:digest, :string) 7 | add(:length, :integer) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180203091520_create_posts_stars.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsStars do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_stars) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:posts_stars, [:user_id, :post_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180203091848_create_posts_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_favorites) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:posts_favorites, [:user_id, :post_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180325091016_update_users_info.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.UpdateUsersInfo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | remove(:company) 7 | remove(:username) 8 | add(:avatar, :string) 9 | add(:sex, :string) 10 | add(:from_github, :boolean, default: false) 11 | add(:from_weixin, :boolean, default: false) 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180327150232_add_extra_info_to_github_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddExtraInfoToGithubUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:github_users) do 6 | add(:access_token, :string) 7 | add(:node_id, :string) 8 | end 9 | 10 | create(unique_index(:github_users, [:node_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180403012915_create_user_contributes.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUserContribute do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:user_contributes) do 6 | add(:date, :date) 7 | add(:count, :integer) 8 | add(:user_id, references(:users, on_delete: :delete_all)) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:user_contributes, [:user_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180404040216_create_cms_passports.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCmsPassports do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_passports) do 6 | add(:roles, :map) 7 | add(:user_id, references(:users, on_delete: :nothing)) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:cms_passports, [:user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180404091422_rename_cmspassport_roles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameCmspassportRoles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_passports), :roles, to: :rules) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180410075032_create_community_contribute.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunityContribute do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:community_contributes) do 6 | add(:date, :date) 7 | add(:count, :integer) 8 | add(:community_id, references(:communities, on_delete: :delete_all, null: false)) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:community_contributes, [:community_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180411032348_create_communities_subscribers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesSubscribers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_subscribers) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:communities_subscribers, [:user_id, :community_id])) 13 | create(index(:communities_subscribers, [:community_id])) 14 | create(index(:communities_subscribers, [:user_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180416115537_create_community_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunityThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:community_threads) do 6 | add(:title, :string) 7 | 8 | timestamps() 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180416121000_create_communites_threads.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitesThreads do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_threads) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:thread_id, references(:community_threads, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:communities_threads, [:community_id, :thread_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180416122540_add_category_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCategoryToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:category, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180416135419_add_unique_to_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUniqueToThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(unique_index(:community_threads, [:title])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180417073924_add_info_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddInfoToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:raw, :string) 7 | add(:label, :string) 8 | add(:logo, :text) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180417080555_add_raw_to_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRawToThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:community_threads) do 6 | add(:raw, :string) 7 | add(:logo, :text) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180417085106_rename_community_threads_to_threads.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameCommunityThreadsToThreads do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table("community_threads"), to: table("threads")) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180417131427_remove_old_community_threads_unique_index.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveOldCommunityThreadsUniqueIndex do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:community_threads, [:title])) 6 | create(unique_index(:threads, [:title])) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180423061803_add_more_attrs_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMoreAttrsToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:location, :string) 7 | add(:email, :string) 8 | add(:company, :string) 9 | add(:education, :string) 10 | add(:qq, :string) 11 | add(:weichat, :string) 12 | add(:weibo, :string) 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180424143036_replace_user_sex_with_default_value.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceUserSexWithDefaultValue do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | remove(:sex) 7 | add(:sex, :string, default: "dude") 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180427115725_add_replyto_to_postcomments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReplytoToPostcomments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_comments) do 6 | # add(:author_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:posts_comments, on_delete: :delete_all)) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180427125929_create_posts_comments_reply.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsCommentsReply do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_comments_replies) do 6 | add(:comment_id, references(:posts_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:posts_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:posts_comments_replies, [:comment_id])) 13 | create(index(:posts_comments_replies, [:reply_id])) 14 | # create(unique_index(:posts_comments_replies, [:comment_id, :reply_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180428034143_remove_posts_comments_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemovePostsCommentsReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_comments_replies)) 6 | 7 | # drop(index(:posts_comments_replies, [:comment_id])) 8 | # drop(index(:posts_comments_replies, [:reply_id])) 9 | # create(unique_index(:posts_comments_replies, [:comment_id, :reply_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180428034521_recreate_posts_comments_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RecreatePostsCommentsReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_comments_replies) do 6 | add(:post_comment_id, references(:posts_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:posts_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:posts_comments_replies, [:post_comment_id])) 13 | create(index(:posts_comments_replies, [:reply_id])) 14 | # create(unique_index(:posts_comments_replies, [:comment_id, :reply_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180428132739_create_likes_to_post_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateLikesToPostComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_comments_likes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:post_comment_id, references(:posts_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:posts_comments_likes, [:user_id, :post_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180429092654_create_dislike_to_post_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateDislikeToPostComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_comments_dislikes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:post_comment_id, references(:posts_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:posts_comments_dislikes, [:user_id, :post_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180505014411_add_floor_to_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFloorToComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_comments) do 6 | add(:floor, :integer, default: 0) 7 | end 8 | 9 | create(index(:posts_comments, [:floor])) 10 | create(unique_index(:posts_comments, [:post_id, :author_id, :floor])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180505032006_drop_unique_index_comments_floor.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.DropUniqueIndexCommentsFloor do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:posts_comments, [:post_id, :author_id, :floor])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180522013006_create_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:categories) do 6 | add(:title, :string) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:categories, [:title])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180522014431_create_communites_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitesCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_categories) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:category_id, references(:categories, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:communities_categories, [:community_id, :category_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180522015232_remove_community_category_column.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveCommunityCategoryColumn do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | remove(:category) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180522043027_replace_category_user_by_author.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceCategoryUserByAuthor do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:categories) do 6 | remove(:user_id) 7 | add(:author_id, references(:cms_authors, on_delete: :delete_all), null: false) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180522080514_replace_tag_user_by_author.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceTagUserByAuthor do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:tags) do 6 | remove(:user_id) 7 | add(:author_id, references(:cms_authors, on_delete: :delete_all), null: false) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180523022132_create_communities_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_jobs) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_jobs, [:community_id, :job_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524030533_create_jobs_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_stars) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:jobs_stars, [:user_id, :job_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524032915_create_jobs_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_favorites) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:jobs_favorites, [:user_id, :job_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524034625_create_jobs_tags_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsTagsJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_tags) do 6 | add(:tag_id, references(:tags, on_delete: :delete_all), null: false) 7 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:jobs_tags, [:tag_id, :job_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524062103_create_jobs_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_comments) do 6 | add(:body, :string) 7 | add(:author_id, references(:users, on_delete: :delete_all), null: false) 8 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 9 | add(:floor, :integer, default: 0) 10 | 11 | timestamps() 12 | end 13 | 14 | create(index(:jobs_comments, [:author_id])) 15 | create(index(:jobs_comments, [:job_id])) 16 | create(index(:jobs_comments, [:floor])) 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524063128_create_jobs_comments_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsCommentsReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_comments_replies) do 6 | add(:job_comment_id, references(:jobs_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:jobs_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:jobs_comments_replies, [:job_comment_id])) 13 | create(index(:jobs_comments_replies, [:reply_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180524070826_add_replyid_to_job_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReplyidToJobComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:jobs_comments) do 6 | add(:reply_id, references(:jobs_comments, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180609033255_rename_tag_part_to_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameTagPartToThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:tags), :part, to: :thread) 6 | 7 | # drop(unique_index(:tags, [:community, :part, :title])) 8 | # create(unique_index(:tags, [:community, :thread, :title])) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180609034229_add_unique_index_to_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUniqueIndexToTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(unique_index(:tags, [:community_id, :thread, :title])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180609035726_drop_tags_old_unique_index.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.DropTagsOldUniqueIndex do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:tags, [:community_id, :part, :title])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180610014507_modify_posts_join_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ModifyPostsJoinTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_tags)) 6 | 7 | create table(:posts_tags) do 8 | add(:tag_id, references(:tags), null: false) 9 | add(:post_id, references(:cms_posts), null: false) 10 | end 11 | 12 | create(unique_index(:posts_tags, [:tag_id, :post_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180610024432_modify_posts_join_tags2.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ModifyPostsJoinTags2 do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_tags)) 6 | 7 | create table(:posts_tags) do 8 | add(:tag_id, references(:tags, on_delete: :delete_all), null: false) 9 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 10 | end 11 | 12 | create(unique_index(:posts_tags, [:tag_id, :post_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180621085257_add_raw_to_category.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRawToCategory do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:categories) do 6 | add(:raw, :string) 7 | end 8 | 9 | create(unique_index(:categories, [:raw])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180630050542_create_publish_throttle.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePublishThrottle do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:publish_throttles) do 6 | add(:user_id, references(:users, on_delete: :delete_all, null: false)) 7 | add(:publish_hour, :utc_datetime) 8 | add(:publish_date, :date) 9 | add(:hour_count, :integer) 10 | add(:date_count, :integer) 11 | 12 | add(:last_publish_time, :utc_datetime) 13 | end 14 | 15 | create(index(:publish_throttles, [:user_id])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180630061546_add_timestamp_to_publish_throttle.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddTimestampToPublishThrottle do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:publish_throttles) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180630075133_add_unique_index_to_publish_throttle.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUniqueIndexToPublishThrottle do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(index(:publish_throttles, [:user_id])) 6 | create(unique_index(:publish_throttles, [:user_id])) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180701020456_add_index_to_threads.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddIndexToThreads do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:threads) do 6 | add(:index, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180703020018_create_delivery_records.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateDeliveryRecords do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:delivery_records) do 6 | add(:mentions_record, :map) 7 | add(:user_id, references(:users, on_delete: :nothing), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:delivery_records, [:user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180703101615_add_read_to_delivery_mentions.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReadToDeliveryMentions do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:mentions) do 6 | add(:read, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180704095905_add_notification_record.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddNotificationRecord do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:delivery_records) do 6 | add(:notifications_record, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705031115_create_bills_for_accounts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateBillsForAccounts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:bills) do 6 | add(:from_user_id, references(:users, on_delete: :nothing), null: false) 7 | add(:to_user_id, references(:users, on_delete: :nothing), null: false) 8 | 9 | add(:source_type, :string) 10 | add(:source_id, :string) 11 | add(:source_title, :string) 12 | add(:price, :integer) 13 | 14 | timestamps() 15 | end 16 | 17 | create(index(:bills, [:from_user_id])) 18 | create(index(:bills, [:to_user_id])) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705032455_create_purchase_for_account.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePurchaseForAccount do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:purchases) do 6 | add(:user_id, references(:users, on_delete: :nothing), null: false) 7 | 8 | add(:theme, :boolean) 9 | add(:community_chart, :boolean) 10 | add(:brainwash_free, :boolean) 11 | 12 | timestamps() 13 | end 14 | 15 | create(unique_index(:purchases, [:user_id])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705034105_create_customizations_for_account.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCustomizationsForAccount do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:customizations) do 6 | add(:user_id, references(:users, on_delete: :nothing), null: false) 7 | 8 | add(:theme, :boolean) 9 | add(:community_chart, :boolean) 10 | add(:brainwash_free, :boolean) 11 | 12 | timestamps() 13 | end 14 | 15 | create(unique_index(:customizations, [:user_id])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705054701_create_users_join_bills.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUsersJoinBills do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:users_bills) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:bill_id, references(:bills, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:users_bills, [:user_id])) 13 | create(index(:users_bills, [:bill_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705055436_add_pay_infos_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPayInfosToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:sponsor_member, :boolean, default: false) 7 | add(:paid_member, :boolean, default: false) 8 | add(:platinum_member, :boolean, default: false) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180705090111_add_option_to_user_custom.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOptionToUserCustom do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | add(:sidebar_layout, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180706025137_create_sys_notifications.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateSysNotifications do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:sys_notifications) do 6 | add(:source_id, :string) 7 | add(:source_type, :string) 8 | add(:source_title, :string) 9 | add(:source_preview, :string) 10 | 11 | timestamps() 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180706030516_add_sys_record_to_delivery_records.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddSysRecordToDeliveryRecords do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:delivery_records) do 6 | add(:sys_notifications_record, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180706032235_create_account_sys_notification_mail.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateAccountSysNotificationMail do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:sys_notification_mails) do 6 | add(:source_type, :string) 7 | add(:source_id, :string) 8 | add(:source_title, :string) 9 | add(:source_preview, :string) 10 | 11 | add(:read, :boolean, default: false) 12 | 13 | timestamps() 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180706054326_add_user_to_accunt_sys_notification.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUserToAccuntSysNotification do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:sys_notification_mails) do 6 | add(:user_id, references(:users, on_delete: :nothing), null: false) 7 | end 8 | 9 | create(index(:sys_notification_mails, [:user_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180706114458_create_user_activity_logs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUserActivityLogs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:user_activity_logs) do 6 | add(:source_id, :string) 7 | add(:source_title, :string) 8 | add(:source_type, :string) 9 | add(:user_id, references(:users, on_delete: :nothing), null: false) 10 | 11 | timestamps() 12 | end 13 | 14 | create(index(:user_activity_logs, [:user_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180711075041_add_on_top_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOnTopToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:pin, :boolean, default: false) 7 | end 8 | 9 | create(index(:cms_posts, [:pin])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180711140519_add_trash_flag_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddTrashFlagToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:trash, :boolean, default: false) 7 | end 8 | 9 | create(index(:cms_posts, [:trash])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180711151703_create_communities_videos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesVideos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_videos) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_videos, [:community_id, :video_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180711152817_create_videos_tags_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideosTagsJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_tags) do 6 | add(:tag_id, references(:tags, on_delete: :delete_all), null: false) 7 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:videos_tags, [:tag_id, :video_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712091240_create_repo_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateRepoUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_repo_users) do 6 | add(:nickname, :string) 7 | add(:bio, :string) 8 | add(:avatar, :string) 9 | add(:link, :string) 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712094921_alter_repo_attrs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterRepoAttrs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_repos), :title, to: :repo_name) 6 | 7 | alter table(:cms_repos) do 8 | remove(:repo_author) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712100020_alter_repo_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterRepoUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repo_users) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712100410_renamer_repo_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenamerRepoUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table("cms_repo_users"), to: table("cms_repo_builders")) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712100738_repos_builders_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReposBuildersJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_builders) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 7 | add(:builder_id, references(:cms_repo_builders, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(index(:repos_builders, [:repo_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712101400_create_communities_repos_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesReposJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_repos) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_repos, [:community_id, :repo_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180712102348_create_repos_tags_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateReposTagsJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_tags) do 6 | add(:tag_id, references(:tags, on_delete: :delete_all), null: false) 7 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:repos_tags, [:tag_id, :repo_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180713064720_alter_video_repo_desc_to_text.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterVideoRepoDescToText do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_videos) do 6 | remove(:desc) 7 | add(:desc, :text) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180717020041_create_users_followers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUsersFollowers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:users_followers) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:follower_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:users_followers, [:user_id, :follower_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180717091927_create_user_following.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUserFollowing do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:users_followings) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:following_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:users_followings, [:user_id, :following_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180718024913_create_user_achievements.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUserAchievements do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:user_achievements) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:contents_stared_count, :integer, default: 0) 8 | add(:contents_favorited_count, :integer, default: 0) 9 | add(:contents_watched_count, :integer, default: 0) 10 | add(:followers_count, :integer, default: 0) 11 | add(:reputation, :integer, default: 0) 12 | 13 | timestamps() 14 | end 15 | 16 | create(index(:user_achievements, [:user_id])) 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180822093044_create_favorites_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateFavoritesCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:favorite_categories) do 6 | add(:user_id, references(:users, on_delete: :delete_all, null: false)) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all)) 8 | # add(:job_id, references(:cms_posts, on_delete: :delete_all), null: false) 9 | 10 | add(:title, :string) 11 | add(:total_count, :integer, default: 0) 12 | add(:index, :integer) 13 | 14 | timestamps() 15 | end 16 | 17 | create(unique_index(:favorite_categories, [:user_id, :title])) 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180822111739_remove_post_id_favorites_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemovePostIdFavoritesCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:favorite_categories) do 6 | remove(:post_id) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180822112055_add_category_to_posts_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCategoryToPostsFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_favorites) do 6 | add(:category_title, :string, default: "all") 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180824050226_add_privete_to_favorites_category.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPriveteToFavoritesCategory do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:favorite_categories) do 6 | add(:private, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180824060333_add_desc_to_favorites_category.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDescToFavoritesCategory do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:favorite_categories) do 6 | add(:desc, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180824235029_replace_category_id_to_posts_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceCategoryIdToPostsFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_favorites) do 6 | add(:category_id, references(:favorite_categories, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180825024247_remove_category_title_in_post_favrotes.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveCategoryTitleInPostFavrotes do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_favorites) do 6 | remove(:category_title) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180825043644_create_education_backgrounds.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateEducationBackgrounds do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:education_backgrounds) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:school, :string) 8 | add(:major, :string) 9 | end 10 | 11 | create(unique_index(:education_backgrounds, [:user_id])) 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180825060140_add_education_backgrounds_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEducationBackgroundsToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:education_backgrounds, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180825094837_add_work_backgrounds_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddWorkBackgroundsToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:work_backgrounds, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180825231845_remove_education_company_in_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveEducationCompanyInUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | remove(:company) 7 | remove(:education) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180826082635_add_more_social_info_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMoreSocialInfoToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:github, :string) 7 | add(:twitter, :string) 8 | add(:facebook, :string) 9 | add(:zhihu, :string) 10 | add(:dribble, :string) 11 | add(:huaban, :string) 12 | add(:douban, :string) 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180830034134_add_more_social_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMoreSocialToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:pinterest, :string) 7 | add(:instagram, :string) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180911034258_add_pin_state_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPinStateToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:pin_states, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180911092436_create_flags_fix.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create_if_not_exists table(:flags) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180911092437_create_posts_communities_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsCommunitiesFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_communities_flags) do 6 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | add(:pin, :boolean, default: false) 9 | add(:trash, :boolean, default: false) 10 | add(:refined, :boolean, default: false) 11 | 12 | timestamps() 13 | end 14 | 15 | create(unique_index(:posts_communities_flags, [:post_id, :community_id])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180912094948_remove_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:flags)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180912152235_remove_pin_from_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemovePinFromPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | remove(:pin_states) 7 | remove(:pin) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180913014941_remove_trash_from_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveTrashFromPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | remove(:trash) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180913035118_create_jobs_communities_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsCommunitiesFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_communities_flags) do 6 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | add(:pin, :boolean, default: false) 9 | add(:trash, :boolean, default: false) 10 | 11 | timestamps() 12 | end 13 | 14 | create(unique_index(:jobs_communities_flags, [:job_id, :community_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180913050800_create_repos_communities_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateReposCommunitiesFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_communities_flags) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | add(:pin, :boolean, default: false) 9 | add(:trash, :boolean, default: false) 10 | 11 | timestamps() 12 | end 13 | 14 | create(unique_index(:repos_communities_flags, [:repo_id, :community_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180913052723_create_videos_communities_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideosCommunitiesFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_communities_flags) do 6 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | add(:pin, :boolean, default: false) 9 | add(:trash, :boolean, default: false) 10 | 11 | timestamps() 12 | end 13 | 14 | create(unique_index(:videos_communities_flags, [:video_id, :community_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180921132944_add_thumbnil_to__videos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddThumbnilToVideos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_videos) do 6 | add(:thumbnil, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180925231814_create_geo_info.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateGeoInfo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:geos) do 6 | add(:city, :string) 7 | add(:long, :float) 8 | add(:lant, :float) 9 | add(:value, :integer, default: 0) 10 | 11 | timestamps() 12 | end 13 | 14 | create(unique_index(:geos, [:city])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180926065313_add_geo_info_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddGeoInfoToCommunity do 2 | use Ecto.Migration 3 | alias Helper.GeoPool 4 | 5 | def change do 6 | alter table(:communities) do 7 | add(:geo_info, :map, default: %{data: GeoPool.all()}) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180926070915_add_geo_city_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddGeoCityToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:geo_city, :string) 7 | end 8 | 9 | create(index(:users, [:geo_city])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180928141144_rename_repos_fiels.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameReposFiels do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_repos), :issuesCount, to: :issues_count) 6 | rename(table(:cms_repos), :prsCount, to: :prs_count) 7 | rename(table(:cms_repos), :forkCount, to: :fork_count) 8 | rename(table(:cms_repos), :watchCount, to: :watch_count) 9 | 10 | rename(table(:cms_repos), :releaseTag, to: :release_tag) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180929044158_add_star_language_info_to_repos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddStarLanguageInfoToRepos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repos) do 6 | add(:star_count, :integer) 7 | remove(:primary_language) 8 | add(:primary_language, :map) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930005859_replace_string_to_text_in_post_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceStringToTextInPostComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_comments) do 6 | remove(:body) 7 | add(:body, :text) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930010331_replace_string_to_text_in_job_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReplaceStringToTextInJobComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:jobs_comments) do 6 | remove(:body) 7 | add(:body, :text) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930011202_create_video_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideoComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_comments) do 6 | add(:body, :text) 7 | add(:author_id, references(:users, on_delete: :delete_all), null: false) 8 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:videos_comments, [:author_id])) 14 | create(index(:videos_comments, [:video_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930012820_create_video_comments_reply.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideoCommentsReply do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_comments_replies) do 6 | add(:comment_id, references(:videos_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:videos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:videos_comments_replies, [:comment_id])) 13 | create(index(:videos_comments_replies, [:reply_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930014611_add_floor_to_video_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFloorToVideoComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:videos_comments) do 6 | add(:floor, :integer, default: 0) 7 | end 8 | 9 | create(index(:videos_comments, [:floor])) 10 | create(unique_index(:videos_comments, [:video_id, :author_id, :floor])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930021237_add_reply_to_video_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReplyToVideoComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:videos_comments) do 6 | # add(:author_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:videos_comments, on_delete: :delete_all)) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930021707_drop_videos_comments_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.DropVideosCommentsReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:videos_comments_replies)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930021722_recreate_videos_comments_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RecreateVideosCommentsReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_comments_replies) do 6 | add(:video_comment_id, references(:videos_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:videos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:videos_comments_replies, [:video_comment_id])) 13 | create(index(:videos_comments_replies, [:reply_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930023126_create_likes_to_video_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateLikesToVideoComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_comments_likes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:video_comment_id, references(:videos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:videos_comments_likes, [:user_id, :video_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930023322_create_dislikes_to_video_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateDislikesToVideoComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_comments_dislikes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:video_comment_id, references(:videos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:videos_comments_dislikes, [:user_id, :video_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930031135_create_repo_comment_reply.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateRepoCommentReply do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_comments_replies) do 6 | add(:repo_comment_id, references(:repos_comments, on_delete: :delete_all), null: false) 7 | add(:reply_id, references(:repos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(index(:repos_comments_replies, [:repo_comment_id])) 13 | create(index(:repos_comments_replies, [:reply_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930041418_create_repo_comment_likes.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateRepoCommentLikes do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_comments_likes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:repo_comment_id, references(:repos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:repos_comments_likes, [:user_id, :repo_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930041550_create_repo_comment_dislikes.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateRepoCommentDislikes do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_comments_dislikes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:repo_comment_id, references(:repos_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:repos_comments_dislikes, [:user_id, :repo_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930054149_create_community_wiki.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunityWiki do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:community_wikis) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:readme, :text) 8 | # this should be a embed schema 9 | add(:contributors, :map) 10 | add(:last_sync, :utc_datetime) 11 | 12 | timestamps() 13 | end 14 | 15 | create(index(:community_wikis, [:community_id])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930131449_add_views_to_community_wiki.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddViewsToCommunityWiki do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:community_wikis) do 6 | add(:views, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20180930151113_create__community_cheatsheets.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunityCheatsheets do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:community_cheatsheets) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:readme, :text) 8 | # this should be a embed schema 9 | add(:contributors, :map) 10 | add(:last_sync, :utc_datetime) 11 | add(:views, :integer, default: 0) 12 | 13 | timestamps() 14 | end 15 | 16 | create(index(:community_cheatsheets, [:community_id])) 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181007124749_create_videos_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideosFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_favorites) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:videos_favorites, [:user_id, :video_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181007125858_create_videos_stars.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideosStars do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_stars) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:videos_stars, [:user_id, :video_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181008062314_add_likes_to_job_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLikesToJobComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_comments_likes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:job_comment_id, references(:jobs_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:jobs_comments_likes, [:user_id, :job_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181008062922_add_dislikes_to_job_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDislikesToJobComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_comments_dislikes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:job_comment_id, references(:jobs_comments, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:jobs_comments_dislikes, [:user_id, :job_comment_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181011131417_add_category_id_to_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCategoryIdToJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:jobs_favorites) do 6 | add(:category_id, references(:favorite_categories, on_delete: :delete_all)) 7 | end 8 | 9 | create(index(:jobs_favorites, [:category_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181011133216_add_category_id_to_videos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCategoryIdToVideos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:videos_favorites) do 6 | add(:category_id, references(:favorite_categories, on_delete: :delete_all)) 7 | end 8 | 9 | create(index(:videos_favorites, [:category_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181011133312_add_category_index_to_posts_favoritess.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCategoryIndexToPostsFavoritess do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(index(:posts_favorites, [:category_id])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181011152513_add_contribute_to_user_achievement.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddContributeToUserAchievement do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:user_achievements) do 6 | add( 7 | :source_contribute, 8 | :map, 9 | default: %{web: false, server: false, mobile: false, we_app: false, h5: false} 10 | ) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181012014834_add_last_updated_to_favorite_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLastUpdatedToFavoriteCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:favorite_categories) do 6 | add(:last_updated, :utc_datetime) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181020014210_add_repo_favorites.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepoFavorites do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_favorites) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 8 | add(:category_id, references(:favorite_categories, on_delete: :delete_all)) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:repos_favorites, [:category_id])) 14 | create(unique_index(:repos_favorites, [:user_id, :repo_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181022060833_rename_repo_last_fetch.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameRepoLastFetch do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_repos), :last_fetch_time, to: :last_sync) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023004300_add_views_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddViewsToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:views, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023112702_add_copyright_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCopyrightToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:copy_right, :string, default: "original") 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023142819_create_posts_viewers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePostsViewers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_viewers) do 6 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:posts_viewers, [:post_id, :user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023153633_create_jobs_viewers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateJobsViewers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:jobs_viewers) do 6 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:jobs_viewers, [:job_id, :user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023154929_create_videos_viewers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateVideosViewers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:videos_viewers) do 6 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:videos_viewers, [:video_id, :user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181023160033_create_repos_viewers.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateReposViewers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:repos_viewers) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:repos_viewers, [:repo_id, :user_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181024075229_add_company_link_to_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCompanyLinkToJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:company_link, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181025060156_alter_job_fields.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterJobFields do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | remove(:min_salary) 7 | remove(:max_salary) 8 | remove(:min_experience) 9 | remove(:max_experience) 10 | remove(:min_education) 11 | remove(:link_source) 12 | remove(:bonus) 13 | 14 | add(:salary, :string) 15 | add(:exp, :string) 16 | add(:education, :string) 17 | add(:field, :string) 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181025064950_add_fields_for_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFieldsForJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:finance, :string) 7 | add(:scale, :string) 8 | add(:copy_right, :string) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181025130936_cleaup_for_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CleaupForJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | remove(:location) 7 | remove(:copy_right) 8 | 9 | add(:copy_right, :string, default_value: "original") 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181025131259_copy_right_default_for_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CopyRightDefaultForJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | remove(:copy_right) 7 | 8 | add(:copy_right, :string, default: "original") 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181028010610_create_topic_for_contents.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateTopicForContents do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:topics) do 6 | # add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | # add(:user_id, references(:users)) 8 | add(:thread, :string) 9 | add(:title, :string, default: "index") 10 | add(:raw, :string, default: "index") 11 | 12 | timestamps() 13 | end 14 | 15 | # create(unique_index(:topics, [:community, :part, :title])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181028015325_create_topic_post_join.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateTopicPostJoin do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:posts_topics) do 6 | add(:topic_id, references(:topics, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:posts_topics, [:topic_id, :post_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181028050903_add_topic_to_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddTopicToTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:tags, [:community_id, :thread, :title])) 6 | 7 | alter table(:tags) do 8 | add(:topic_id, references(:topics, on_delete: :delete_all)) 9 | end 10 | 11 | create(unique_index(:tags, [:community_id, :thread, :topic_id, :title])) 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102103138_add_flag_index_to_cms_contents.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFlagIndexToCmsContents do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(index(:posts_communities_flags, [:trash])) 6 | create(index(:jobs_communities_flags, [:trash])) 7 | create(index(:repos_communities_flags, [:trash])) 8 | create(index(:videos_communities_flags, [:trash])) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102103942_create_pined_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePinedPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:pined_posts) do 6 | add(:post_id, references(:cms_posts, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | add(:topic_id, references(:topics, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(unique_index(:pined_posts, [:post_id, :community_id, :topic_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102152301_create_pined_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePinedJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:pined_jobs) do 6 | add(:job_id, references(:cms_jobs, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:pined_jobs, [:job_id, :community_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102164008_create_pined_videos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePinedVideos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:pined_videos) do 6 | add(:video_id, references(:cms_videos, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:pined_videos, [:video_id, :community_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102165813_create_pined_repos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreatePinedRepos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:pined_repos) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all), null: false) 7 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 8 | 9 | timestamps() 10 | end 11 | 12 | create(unique_index(:pined_repos, [:repo_id, :community_id])) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181102174534_remove_pin_in_community_flags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemovePinInCommunityFlags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:posts_communities_flags) do 6 | remove(:pin) 7 | remove(:refined) 8 | end 9 | 10 | alter table(:jobs_communities_flags) do 11 | remove(:pin) 12 | end 13 | 14 | alter table(:videos_communities_flags) do 15 | remove(:pin) 16 | end 17 | 18 | alter table(:repos_communities_flags) do 19 | remove(:pin) 20 | end 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181103023157_add_more_customization.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMoreCustomization do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | add(:banner_layout, :string) 7 | add(:contents_layout, :string) 8 | add(:content_divider, :boolean) 9 | add(:mark_viewed, :boolean) 10 | add(:display_density, :string) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181103031609_alter_customization_theme.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterCustomizationTheme do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | remove(:theme) 7 | add(:theme, :string) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181114065157_add_remote_ip_for_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRemoteIpForUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:remote_ip, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181116145709_add_index_to_categories.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddIndexToCategories do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:categories) do 6 | add(:index, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181122122402_tmp_drop_videos_comments_floor_index.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.TmpDropVideosCommentsFloorIndex do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:videos_comments, [:video_id, :author_id, :floor])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181203051334_add_default_index_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDefaultIndexToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:index, :integer, default: 100_000) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181203055656_add_communities_index_to_c11n.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommunitiesIndexToC11n do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | add(:sidebar_communities_index, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181206072233_create_bill_records.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateBillRecords do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:bill_records) do 6 | add(:user_id, references(:users, on_delete: :nothing), null: false) 7 | add(:hash_id, :string) 8 | add(:state, :string) 9 | 10 | add(:amount, :float) 11 | add(:payment_usage, :string) 12 | add(:payment_method, :string) 13 | 14 | timestamps() 15 | end 16 | 17 | create(index(:bill_records, [:user_id])) 18 | create(index(:bill_records, [:hash_id])) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181206085502_add_note_bill_records.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddNoteBillRecords do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:bill_records) do 6 | add(:note, :text) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181208035936_add_member_to_achievements.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMemberToAchievements do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:user_achievements) do 6 | add(:donate_member, :boolean, default: false) 7 | add(:senior_member, :boolean, default: false) 8 | add(:sponsor_member, :boolean, default: false) 9 | end 10 | 11 | create(index(:user_achievements, [:donate_member])) 12 | create(index(:user_achievements, [:senior_member])) 13 | create(index(:user_achievements, [:sponsor_member])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181212020415_add_login_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLoginToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:login, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20181212024133_add_index_to_user_login.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddIndexToUserLogin do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(unique_index(:users, [:login])) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190106064921_add_aka_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddAkaToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:aka, :string) 7 | end 8 | 9 | create(unique_index(:communities, [:aka])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190107055357_add_floor_to_mentions.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFloorToMentions do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:mentions) do 6 | add(:floor, :integer) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190107065846_add_floor_to_mention_mails.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFloorToMentionMails do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:mention_mails) do 6 | add(:floor, :integer) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190116145140_alter_c11n_theme.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AlterC11nTheme do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | remove(:theme) 7 | add(:theme, :string) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190118035531_add_link_icon_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkIconToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:link_icon, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190121044712_add_hover_to_c11n.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddHoverToC11n do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:customizations) do 6 | add(:content_hover, :boolean) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190123134729_add_community_in_mentions.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommunityInMentions do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:mentions) do 6 | add(:community, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190123135704_add_community_in_mention_mails.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommunityInMentionMails do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:mention_mails) do 6 | add(:community, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190210053420_add_orignal_community_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOrignalCommunityToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:origial_community_id, references(:communities, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190210065806_add_orignal_community_to_job.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOrignalCommunityToJob do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:origial_community_id, references(:communities, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190210070234_add_orignal_community_to_repo.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOrignalCommunityToRepo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repos) do 6 | add(:origial_community_id, references(:communities, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190210070555_add_orignal_community_to_video.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddOrignalCommunityToVideo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_videos) do 6 | add(:origial_community_id, references(:communities, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190322233442_remove_social_fields_in_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveSocialFieldsInUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | remove(:github) 7 | remove(:twitter) 8 | remove(:facebook) 9 | remove(:zhihu) 10 | remove(:dribble) 11 | remove(:huaban) 12 | remove(:douban) 13 | remove(:pinterest) 14 | remove(:instagram) 15 | remove(:weichat) 16 | remove(:weibo) 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190322234236_remove_qq_in_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveQqInUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | remove(:qq) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20190710090445_create_background_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateBackgroundJobs do 2 | use Rihanna.Migration 3 | end 4 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210324064013_add_meta_to_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMetaToPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:meta, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210407015331_rm_cms_videos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RmCmsVideos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:pined_videos)) 6 | drop(table(:videos_viewers)) 7 | drop(table(:videos_favorites)) 8 | drop(table(:videos_stars)) 9 | drop(table(:communities_videos)) 10 | drop(table(:videos_tags)) 11 | 12 | drop(table(:videos_communities_flags)) 13 | drop(table(:videos_comments_replies)) 14 | drop(table(:videos_comments_likes)) 15 | drop(table(:videos_comments_dislikes)) 16 | 17 | drop(table(:videos_comments)) 18 | 19 | drop(table(:cms_videos)) 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210408020142_create_upvotes_for_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateUpvotesForArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:articles_comments_upvotes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | 8 | add(:article_comment_id, references(:articles_comments, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(unique_index(:articles_comments_upvotes, [:user_id, :article_comment_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210409043049_create_article_comment_participator.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateArticleCommentParticipator do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:comment_participators, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210412023051_create_article_comment_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateArticleCommentReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:articles_comments_replies) do 6 | add(:article_comment_id, references(:articles_comments, on_delete: :delete_all), null: false) 7 | 8 | add(:reply_to_id, references(:articles_comments, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:articles_comments_replies, [:article_comment_id])) 14 | create(index(:articles_comments_replies, [:reply_to_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210412032707_add_reply_to_id_to_article_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReplyToIdToArticleComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:reply_to_id, references(:articles_comments, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210412070456_add_embeds_replies_to_artcile_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEmbedsRepliesToArtcileComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:replies, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210413040429_add_replies_count_to_artcile_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepliesCountToArtcileComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:replies_count, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210413062841_add_emotions_artcile_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEmotionsArtcileComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:emotions, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415010056_add_fold_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFoldToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_folded, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415022102_add_reported_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReportedToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_reported, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415025445_add_floor_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFloorToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:floor, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415042324_add_delete_flag_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDeleteFlagToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_deleted, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415053021_add_article_author_id_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleAuthorIdToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_article_author, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415060232_add_upvote_count_to_article_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUpvoteCountToArticleComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:upvotes_count, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415062503_rm_old_job_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RmOldJobComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:jobs_comments_replies)) 6 | drop(table(:jobs_comments_likes)) 7 | drop(table(:jobs_comments_dislikes)) 8 | drop(table(:jobs_comments)) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415063508_rm_old_repo_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RmOldRepoComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:repos_comments_replies)) 6 | drop(table(:repos_comments_likes)) 7 | drop(table(:repos_comments_dislikes)) 8 | drop(table(:repos_comments)) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415084353_rm_old_post_comments_dislike.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RmOldPostCommentsDislike do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_comments_dislikes)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210415085842_add_meta_to_article_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMetaToArticleComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:meta, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210418041849_add_meta_to_article_content.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMetaToArticleContent do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:meta, :map) 7 | end 8 | 9 | alter table(:cms_repos) do 10 | add(:meta, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210422010836_add_article_comment_count.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleCommentCount do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:article_comments_count, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210422033146_rename_comment_participators.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameCommentParticipators do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_posts), :comment_participators, to: :article_comments_participators) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210422034830_add_article_comment_count_to_job.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleCommentCountToJob do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:article_comments_count, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210422045815_add_article_comments_participators_count.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleCommentsParticipatorsCount do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:article_comments_participators_count, :integer, default: 0) 7 | end 8 | 9 | alter table(:cms_jobs) do 10 | add(:article_comments_participators_count, :integer, default: 0) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210426082529_remove_topic_tables.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveTopicTables do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:tags) do 6 | remove(:topic_id) 7 | end 8 | 9 | drop(unique_index(:pined_posts, [:post_id, :community_id, :topic_id])) 10 | 11 | alter table(:pined_posts) do 12 | remove(:topic_id) 13 | end 14 | 15 | create(unique_index(:pined_posts, [:post_id, :community_id])) 16 | 17 | drop(table(:posts_topics)) 18 | drop(table(:topics)) 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210429065645_adjust_pin_field_on_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AdjustPinFieldOnArticles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:is_pinned, :boolean, default: false) 7 | end 8 | 9 | alter table(:cms_jobs) do 10 | add(:is_pinned, :boolean, default: false) 11 | end 12 | 13 | alter table(:cms_repos) do 14 | add(:is_pinned, :boolean, default: false) 15 | end 16 | 17 | rename(table(:articles_comments), :is_pined, to: :is_pinned) 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210430041030_add_upvotes_count_to_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddUpvotesCountToArticles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:upvotes_count, :integer, default: 0) 7 | end 8 | 9 | alter table(:cms_jobs) do 10 | add(:upvotes_count, :integer, default: 0) 11 | end 12 | 13 | alter table(:cms_repos) do 14 | add(:upvotes_count, :integer, default: 0) 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210430095524_add_collects_count_to_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCollectsCountToArticles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:collects_count, :integer, default: 0) 7 | end 8 | 9 | alter table(:cms_jobs) do 10 | add(:collects_count, :integer, default: 0) 11 | end 12 | 13 | alter table(:cms_repos) do 14 | add(:collects_count, :integer, default: 0) 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210501070920_add_thread_to_article_upvote.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddThreadToArticleUpvote do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_upvotes) do 6 | add(:thread, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210501143223_create_collect_folder.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCollectFolder do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:collect_folders) do 6 | add(:user_id, references(:users, on_delete: :delete_all, null: false)) 7 | 8 | add(:title, :string) 9 | add(:desc, :string) 10 | add(:total_count, :integer, default: 0) 11 | add(:index, :integer) 12 | add(:private, :boolean, default: false) 13 | 14 | add(:collects, :map) 15 | add(:last_updated, :utc_datetime) 16 | 17 | timestamps() 18 | end 19 | 20 | create(unique_index(:collect_folders, [:user_id, :title])) 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210502100107_rename_achievement_fields.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameAchievementFields do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:user_achievements), :contents_stared_count, to: :articles_upvotes_count) 6 | rename(table(:user_achievements), :contents_favorited_count, to: :articles_collects_count) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210502132427_add_meta_to_collect_folder.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMetaToCollectFolder do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:collect_folders) do 6 | add(:meta, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210503080631_add_collect_folder_to_article_collect_record.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCollectFolderToArticleCollectRecord do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_collects) do 6 | add(:collect_folders, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210504042708_remove_old_favorites_staff.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveOldFavoritesStaff do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_favorites)) 6 | drop(table(:jobs_favorites)) 7 | drop(table(:repos_favorites)) 8 | 9 | drop(table(:posts_stars)) 10 | drop(table(:jobs_stars)) 11 | 12 | drop(table(:favorite_categories)) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210507051338_remove_viewer_tables.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveViewerTables do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_viewers)) 6 | drop(table(:jobs_viewers)) 7 | drop(table(:repos_viewers)) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210507063145_add_popcorn_emotion_to_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPopcornEmotionToComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments_users_emotions) do 6 | add(:popcorn, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210508072209_add_article_comments_participators_to_job.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleCommentsParticipatorsToJob do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:article_comments_participators, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210510005623_add_emotions_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEmotionsToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:emotions, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210510060205_add_emotions_to_cms_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEmotionsToCmsJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_jobs) do 6 | add(:emotions, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210510090556_add_emotions_to_repo.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddEmotionsToRepo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repos) do 6 | add(:emotions, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210511052156_move_is_reported_to_article.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MoveIsReportedToArticle do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_posts), do: add(:is_reported, :boolean, default: false)) 6 | alter(table(:cms_jobs), do: add(:is_reported, :boolean, default: false)) 7 | alter(table(:cms_repos), do: add(:is_reported, :boolean, default: false)) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210511134719_add_repo_to_report.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepoToReport do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:abuse_reports) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210512041939_add_repo_to_article_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepoToArticleComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all)) 7 | end 8 | 9 | create(index(:articles_comments, [:repo_id])) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210512072528_add_report_meta_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddReportMetaToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:is_reported, :boolean, default: false) 7 | add(:meta, :map) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210512110812_rename_is_close_to_is_confirm_in_reports.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameIsCloseToIsConfirmInReports do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:abuse_reports), do: remove(:is_closed)) 6 | alter(table(:cms_posts), do: remove(:is_reported)) 7 | alter(table(:cms_jobs), do: remove(:is_reported)) 8 | alter(table(:cms_repos), do: remove(:is_reported)) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210514092312_rename_origial_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameOrigialCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_posts), :origial_community_id, to: :original_community_id) 6 | rename(table(:cms_jobs), :origial_community_id, to: :original_community_id) 7 | rename(table(:cms_repos), :origial_community_id, to: :original_community_id) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210515011230_rename_community_flag_conecpt.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameCommunityFlagConecpt do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:posts_communities_flags)) 6 | drop(table(:jobs_communities_flags)) 7 | drop(table(:repos_communities_flags)) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210515014737_add_mark_delete_for_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMarkDeleteForArticles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:mark_delete, :boolean, default: false) 7 | end 8 | 9 | alter table(:cms_jobs) do 10 | add(:mark_delete, :boolean, default: false) 11 | end 12 | 13 | alter table(:cms_repos) do 14 | add(:mark_delete, :boolean, default: false) 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210516033634_add_repo_in_pinned_artilce_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepoInPinnedArtilceComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_pined_comments) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all)) 7 | end 8 | 9 | create(index(:articles_pined_comments, [:repo_id])) 10 | 11 | create( 12 | unique_index(:articles_pined_comments, [:post_id, :job_id, :repo_id, :article_comment_id]) 13 | ) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210516052616_add_comment_support_for_repo.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommentSupportForRepo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repos) do 6 | add(:article_comments_participators_count, :integer, default: 0) 7 | add(:article_comments_count, :integer, default: 0) 8 | add(:article_comments_participators, :map) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210516055842_rename_articles_pined_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameArticlesPinedComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table("articles_pined_comments"), to: table("articles_pinned_comments")) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210516144011_add_repo_support_in_emotion.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRepoSupportInEmotion do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_users_emotions) do 6 | add(:repo_id, references(:cms_repos, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210517131838_create_article_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateArticleTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:article_tags) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:thread, :string) 8 | add(:title, :string) 9 | add(:color, :string) 10 | add(:author_id, references(:cms_authors, on_delete: :delete_all), null: false) 11 | 12 | timestamps() 13 | end 14 | 15 | # create(unique_index(:tags, [:community, :part, :title])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210517134611_create_articles_join_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateArticlesJoinTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:articles_join_tags) do 6 | add(:article_tag_id, references(:article_tags, on_delete: :delete_all), null: false) 7 | add(:post_id, references(:cms_posts, on_delete: :delete_all)) 8 | add(:job_id, references(:cms_jobs, on_delete: :delete_all)) 9 | add(:repo_id, references(:cms_repos, on_delete: :delete_all)) 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210519055419_add_group_to_article_tag.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddGroupToArticleTag do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_tags) do 6 | add(:group, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210519142252_add_meta_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMetaToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:meta, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210520084350_add_views_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddViewsToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:views, :integer, default: 0) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210520090847_add_xxx_count_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddXxxCountToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:articles_count, :integer, default: 0) 7 | add(:editors_count, :integer, default: 0) 8 | add(:subscribers_count, :integer, default: 0) 9 | end 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210523230813_add_article_tags_count.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArticleTagsCount do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:article_tags_count, :integer, default: 0) 7 | add(:threads_count, :integer, default: 0) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210525031630_add_contributes_digest_field_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddContributesDigestFieldToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:communities) do 6 | add(:contributes_digest, {:array, :integer}, default: []) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210525044015_add_contributes_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddContributesToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:contributes, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210529032442_move_follow_count_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MoveFollowCountToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:followings_count, :integer) 7 | add(:followers_count, :integer) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210529093621_add_subscribe_count_to_users.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddSubscribeCountToUsers do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:subscribed_communities_count, :integer) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210530060122_add_thread_to_article_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddThreadToArticleComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:thread, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210531024825_remove_domain_fields_on_jobs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveDomainFieldsOnJobs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_jobs), do: remove(:salary)) 6 | alter(table(:cms_jobs), do: remove(:exp)) 7 | alter(table(:cms_jobs), do: remove(:education)) 8 | alter(table(:cms_jobs), do: remove(:field)) 9 | alter(table(:cms_jobs), do: remove(:finance)) 10 | alter(table(:cms_jobs), do: remove(:scale)) 11 | 12 | alter(table(:cms_jobs), do: remove(:company_logo)) 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210531072723_add_active_at_to_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddActiveAtToArticles do 2 | use Ecto.Migration 3 | 4 | # see https://elixirforum.com/t/ecto-datetime-and-utc-naive-datetime-in-migration/21213 5 | 6 | def change do 7 | alter(table(:cms_posts), do: add(:active_at, :utc_datetime)) 8 | alter(table(:cms_jobs), do: add(:active_at, :utc_datetime)) 9 | alter(table(:cms_repos), do: add(:active_at, :utc_datetime)) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210602090617_add_qustion_mark_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddQustionMarkToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:is_question, :boolean, default: false) 7 | add(:is_solved, :boolean, default: false) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210602111315_add_qustion_mark_to_article_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddQustionMarkToArticleComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_for_question, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210602135346_add_solution_digest_to_post.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddSolutionDigestToPost do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | add(:solution_digest, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210602144450_add_solution_digest_to_comment.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddSolutionDigestToComment do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | add(:is_solution, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210603085958_remove_link_icon_in_posts.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveLinkIconInPosts do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_posts) do 6 | remove(:link_icon) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210607021558_create_communities_join_blog.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinBlog do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_blogs) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:blog_id, references(:cms_blogs, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_blogs, [:community_id, :blog_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210607022840_add_blog_to_article_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddBlogToArticleTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_join_tags) do 6 | add(:blog_id, references(:cms_blogs, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210607042800_missing_timestamp_to_blogs.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MissingTimestampToBlogs do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_blogs) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210607065610_missing_body_to_blog.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MissingBodyToBlog do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_blogs), do: add(:body, :string)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210607071205_add_body_to_repo.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddBodyToRepo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_repos), do: add(:body, :string)) 6 | alter(table(:cms_repos), do: add(:digest, :string)) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210609043242_add_body_html_to_artilces.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddBodyHtmlToArtilces do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_posts), do: modify(:body, :text)) 6 | alter(table(:cms_jobs), do: modify(:body, :text)) 7 | alter(table(:cms_repos), do: modify(:body, :text)) 8 | alter(table(:cms_blogs), do: modify(:body, :text)) 9 | 10 | alter(table(:cms_posts), do: add(:body_html, :text)) 11 | alter(table(:cms_jobs), do: add(:body_html, :text)) 12 | alter(table(:cms_repos), do: add(:body_html, :text)) 13 | alter(table(:cms_blogs), do: add(:body_html, :text)) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210609050608_adjust_body_to_artilce_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AdjustBodyToArtilceComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_comments) do 6 | modify(:body_html, :text) 7 | add(:body, :text) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210613151714_re_create_comment_replies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.ReCreateCommentReplies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:comments_replies) do 6 | add(:comment_id, references(:comments, on_delete: :delete_all), null: false) 7 | 8 | add(:reply_to_id, references(:comments, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create(index(:comments_replies, [:comment_id])) 14 | create(index(:comments_replies, [:reply_to_id])) 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210613155102_remove_article_comment_in_reports.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveArticleCommentInReports do 2 | use Ecto.Migration 3 | 4 | def up do 5 | alter(table(:abuse_reports), 6 | do: 7 | remove_if_exists( 8 | :article_comment_id, 9 | references(:articles_comments, on_delete: :delete_all) 10 | ) 11 | ) 12 | end 13 | 14 | def down do 15 | alter table(:abuse_reports) do 16 | add(:article_comment_id, references(:comments, on_delete: :delete_all)) 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210613160342_add_comment_id_to_reports.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCommentIdToReports do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:abuse_reports) do 6 | add(:comment_id, references(:comments, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210614000006_missong_popcorn_emotion.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MissongPopcornEmotion do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:comments_users_emotions) do 6 | add(:popcorn, :boolean, default: false) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210614010611_create_comment_upvotes_if_not_exsit.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommentUpvotesIfNotExsit do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create_if_not_exists table(:comments_upvotes) do 6 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 7 | 8 | add(:comment_id, references(:comments, on_delete: :delete_all), null: false) 9 | 10 | timestamps() 11 | end 12 | 13 | create_if_not_exists(unique_index(:comments_upvotes, [:user_id, :comment_id])) 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210614145939_missing_timestamp_for_cite_contents.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.MissingTimestampForCiteContents do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cited_contents) do 6 | timestamps() 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210616112945_back_old_mention_and_notifications.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.BackOldMentionAndNotifications do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(index(:mentions, [:from_user_id])) 6 | drop(index(:mentions, [:to_user_id])) 7 | 8 | rename(table("mentions"), to: table("old_mentions")) 9 | rename(table("notifications"), to: table("old_notifications")) 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210618160827_rename_cited_contents_to_cited_artiments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameCitedContentsToCitedArtiments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(index(:cited_contents, [:cited_by_type, :cited_by_id])) 6 | rename(table(:cited_contents), to: table(:cited_artiments)) 7 | create(index(:cited_artiments, [:cited_by_type, :cited_by_id])) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210619021543_create_new_notifications.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateNewNotifications do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:notifications) do 6 | add(:user_id, references(:users, on_delete: :nothing), null: false) 7 | # article or comment 8 | add(:type, :string) 9 | add(:article_id, :id) 10 | add(:title, :string) 11 | # optional comment id 12 | add(:comment_id, :id) 13 | # 14 | add(:action, :string) 15 | add(:from_users, :map) 16 | 17 | add(:read, :boolean, default: false) 18 | 19 | timestamps() 20 | end 21 | 22 | create(index(:notifications, [:user_id])) 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210620091612_rename_notifications_type_to_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameNotificationsTypeToThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:notifications), :type, to: :thread) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210620131328_rename_mentions_type_to_thread.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RenameMentionsTypeToThread do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:mentions), :type, to: :thread) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210621041646_add_mailbox_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMailboxToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:mailbox, :map) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210621100858_remove_old_delivery_tables.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveOldDeliveryTables do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:old_mentions)) 6 | drop(table(:old_notifications)) 7 | drop(table(:sys_notifications)) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210621101125_remove_old_delivery_records.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveOldDeliveryRecords do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:delivery_records)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210622042857_remove_old_account_mails.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveOldAccountMails do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(table(:mention_mails)) 6 | drop(table(:notification_mails)) 7 | drop(table(:sys_notification_mails)) 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210623054015_add_from_users_count_to_notification.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFromUsersCountToNotification do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:notifications) do 6 | add(:from_users_count, :integer) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210623093412_creaet_article_documents.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreaetArticleDocuments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:article_documents) do 6 | add(:thread, :string) 7 | add(:article_id, :id) 8 | add(:title, :string) 9 | add(:body, :text) 10 | add(:body_html, :text) 11 | 12 | timestamps() 13 | end 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210623123527_remove_body_html_in_articles.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveBodyHtmlInArticles do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_posts), do: remove(:body_html)) 6 | alter(table(:cms_jobs), do: remove(:body_html)) 7 | alter(table(:cms_blogs), do: remove(:body_html)) 8 | alter(table(:cms_repos), do: remove(:body_html)) 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210625100126_create_works_document.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateWorksDocument do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:works_documents) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all), null: false) 7 | add(:body, :text) 8 | add(:body_html, :text) 9 | add(:markdown, :text) 10 | add(:toc, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210625100519_create_communities_join_works.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinWorks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_works) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:works_id, references(:cms_works, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_works, [:community_id, :works_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210625101018_add_works_to_tags_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddWorksToTagsJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:articles_join_tags) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210625134335_add_works_to_cited_artiments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddWorksToCitedArtiments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cited_artiments) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all)) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626021921_create_radar_document.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateRadarDocument do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:radar_documents) do 6 | add(:radar_id, references(:cms_radars, on_delete: :delete_all), null: false) 7 | add(:body, :text) 8 | add(:body_html, :text) 9 | add(:markdown, :text) 10 | add(:toc, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626022215_create_communities_join_radars.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinRadars do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_radars) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:radar_id, references(:cms_radars, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_radars, [:community_id, :radar_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626054616_create_guide_document.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateGuideDocument do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:guide_documents) do 6 | add(:guide_id, references(:cms_guides, on_delete: :delete_all), null: false) 7 | add(:body, :text) 8 | add(:body_html, :text) 9 | add(:markdown, :text) 10 | add(:toc, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626054717_create_communities_join_guides.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinGuides do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_guides) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:guide_id, references(:cms_guides, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_guides, [:community_id, :guide_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626081857_create_meetup_document.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateMeetupDocument do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:meetup_documents) do 6 | add(:meetup_id, references(:cms_meetups, on_delete: :delete_all), null: false) 7 | add(:body, :text) 8 | add(:body_html, :text) 9 | add(:markdown, :text) 10 | add(:toc, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626082045_create_communities_join_meetups.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinMeetups do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_meetups) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:meetup_id, references(:cms_meetups, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_meetups, [:community_id, :meetup_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626101523_create_communities_join_drinks.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateCommunitiesJoinDrinks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:drink_documents) do 6 | add(:drink_id, references(:cms_drinks, on_delete: :delete_all), null: false) 7 | add(:body, :text) 8 | add(:body_html, :text) 9 | add(:markdown, :text) 10 | add(:toc, :map) 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210626124149_add_drink_community_join_table.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDrinkCommunityJoinTable do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:communities_join_drinks) do 6 | add(:community_id, references(:communities, on_delete: :delete_all), null: false) 7 | add(:drink_id, references(:cms_drinks, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:communities_join_drinks, [:community_id, :drink_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210815040915_add_archive_fields_to_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddArchiveFieldsToComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:comments) do 6 | add(:is_archived, :boolean, default: false) 7 | add(:archived_at, :utc_datetime) 8 | end 9 | end 10 | end 11 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210816040543_add_extra_to_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddExtraToTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_tags) do 6 | add(:extra, {:array, :string}) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210819055512_add_icon_to_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddIconToTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_tags) do 6 | add(:icon, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210826042959_add_raw_to_tags.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRawToTags do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:article_tags) do 6 | add(:raw, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210829061837_add_link_to_radar.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToRadar do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_radars) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210901075602_add_link_to_meetup.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToMeetup do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_meetups) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210901075922_add_link_to_drink.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToDrink do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_drinks) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210901080438_add_link_to_guides.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToGuides do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_guides) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210901080751_add_link_to_works.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToWorks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_works) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210907084024_add_link_to_repos.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddLinkToRepos do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_repos) do 6 | add(:link_addr, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210924023609_create_blog_rss.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateBlogRss do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_blog_rss) do 6 | add(:rss, :string) 7 | add(:link, :string) 8 | add(:title, :string) 9 | add(:subtitle, :string) 10 | add(:updated, :string) 11 | add(:history_feed, :map) 12 | add(:author, :map) 13 | end 14 | 15 | create(unique_index(:cms_blog_rss, [:rss, :link])) 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210926015205_add_feed_fields_to_blog.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddFeedFieldsToBlog do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_blogs) do 6 | add(:feed_digest, :string) 7 | add(:feed_content, :text) 8 | add(:published, :string) 9 | add(:blog_author, :map) 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20210930083012_create_works_techstack.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateWorksTechstack do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_techstacks) do 6 | add(:title, :string) 7 | add(:logo, :string) 8 | add(:desc, :string) 9 | add(:home_link, :string) 10 | add(:community_link, :string) 11 | add(:category, :string) 12 | 13 | timestamps() 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211001022903_create_works_join_techstack.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateWorksJoinTechstack do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:works_join_techstacks) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all), null: false) 7 | add(:techstack_id, references(:cms_techstacks, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:works_join_techstacks, [:works_id, :techstack_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211001111732_add_cities.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCities do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:cms_cities) do 6 | add(:title, :string) 7 | add(:logo, :string) 8 | add(:desc, :string) 9 | add(:link, :string) 10 | 11 | timestamps() 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211001112647_create_works_join_cityies.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.CreateWorksJoinCityies do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:works_join_cities) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all), null: false) 7 | add(:city_id, references(:cms_cities, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:works_join_cities, [:works_id, :city_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211001115257_remove_city_info_in_works.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.RemoveCityInfoInWorks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_works) do 6 | remove(:city_info) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211007062947_add_missing_uniq_index_for_aritlce_upvotes.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMissingUniqIndexForAritlceUpvotes do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create(unique_index(:article_upvotes, [:user_id, :meetup_id])) 6 | create(unique_index(:article_upvotes, [:user_id, :drink_id])) 7 | create(unique_index(:article_upvotes, [:user_id, :blog_id])) 8 | create(unique_index(:article_upvotes, [:user_id, :works_id])) 9 | create(unique_index(:article_upvotes, [:user_id, :radar_id])) 10 | create(unique_index(:article_upvotes, [:user_id, :guide_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211023062941_add_rss_to_blog.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRssToBlog do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_blogs) do 6 | add(:rss, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211027134153_add_raw_to_techstack.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRawToTechstack do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_techstacks) do 6 | add(:raw, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211029133301_add_desc_to_works.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddDescToWorks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_works) do 6 | add(:desc, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211101033116_add_raw_to_city.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddRawToCity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | rename(table(:cms_cities), :link, to: :raw) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211105054243_add_shortbio_to_user.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddShortbioToUser do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:users) do 6 | add(:shortbio, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211105055009_add_more_platform_to_users_social.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddMorePlatformToUsersSocial do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:user_socials) do 6 | add(:company, :string) 7 | add(:blog, :string) 8 | remove(:facebook, :string) 9 | 10 | remove(:instagram, :string) 11 | 12 | remove(:qq, :string) 13 | remove(:weichat, :string) 14 | remove(:weibo, :string) 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211109034133_add_cover_to_works.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddCoverToWorks do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter table(:cms_works) do 6 | add(:cover, :string) 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211109080329_works_join_teammates.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.WorksJoinTeammates do 2 | use Ecto.Migration 3 | 4 | def change do 5 | create table(:works_join_teammates) do 6 | add(:works_id, references(:cms_works, on_delete: :delete_all), null: false) 7 | add(:user_id, references(:users, on_delete: :delete_all), null: false) 8 | end 9 | 10 | create(unique_index(:works_join_teammates, [:works_id, :user_id])) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211110153325_add_pending_to_comments.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPendingToComments do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:comments), do: add(:pending, :integer, default: 0)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211111093518_add_pending_to_repo.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPendingToRepo do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:cms_repos), do: add(:pending, :integer, default: 0)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211114024657_adjust_community_uniq_field.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AdjustCommunityUniqField do 2 | use Ecto.Migration 3 | 4 | def change do 5 | drop(unique_index(:communities, [:title])) 6 | create(unique_index(:communities, [:raw])) 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /priv/repo/migrations/20211114085157_add_pending_to_community.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Repo.Migrations.AddPendingToCommunity do 2 | use Ecto.Migration 3 | 4 | def change do 5 | alter(table(:communities), do: add(:pending, :integer, default: 0)) 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /test/groupher_server/accounts/utils_test.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Test.Accounts.Utils do 2 | @moduledoc false 3 | use GroupherServer.TestTools 4 | 5 | alias GroupherServer.Accounts 6 | alias Helper.Cache 7 | 8 | @cache_pool :user_login 9 | 10 | describe "[get userid]" do 11 | test "get_userid_and_cache should work" do 12 | {:ok, user} = db_insert(:user) 13 | 14 | {:ok, user_id} = Accounts.get_userid_and_cache(user.login) 15 | assert user.id == user_id 16 | 17 | assert {:ok, user_id} = Cache.get(@cache_pool, user.login) 18 | assert user_id == user.id 19 | end 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /test/groupher_server/logs/logs_test.exs: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.Test.Logs do 2 | use GroupherServer.TestTools 3 | 4 | # alias GroupherServer.Logs 5 | 6 | describe "user_activity_logs" do 7 | # alias GroupherServer.Logs.UserActivity 8 | 9 | test "TODO " do 10 | true 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /test/support/test_tools.ex: -------------------------------------------------------------------------------- 1 | defmodule GroupherServer.TestTools do 2 | @moduledoc """ 3 | helper for reduce import mudules in test files 4 | """ 5 | use ExUnit.CaseTemplate 6 | 7 | using do 8 | quote do 9 | use GroupherServerWeb.ConnCase, async: true 10 | 11 | import GroupherServer.Support.Factory 12 | import GroupherServer.Test.ConnSimulator 13 | import GroupherServer.Test.AssertHelper 14 | import Ecto.Query, warn: false 15 | import Helper.ErrorCode 16 | import Helper.Utils, only: [camelize_map_key: 1, camelize_map_key: 2] 17 | 18 | import ShortMaps 19 | end 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /test/test_helper.exs: -------------------------------------------------------------------------------- 1 | ExUnit.configure(exclude: :later, trace: false, formatters: [ExUnit.CLIFormatter, ExUnitNotifier]) 2 | ExUnit.start() 3 | 4 | Ecto.Adapters.SQL.Sandbox.mode(GroupherServer.Repo, :manual) 5 | --------------------------------------------------------------------------------