Merge commit 'fac734b6a8' into kb_migration

This commit is contained in:
KMY 2023-04-13 18:57:03 +09:00
commit 5a661415e2
22 changed files with 121 additions and 14 deletions

View file

@ -58,7 +58,9 @@ class Api::V1::StatusesController < Api::BaseController
media_ids: status_params[:media_ids], media_ids: status_params[:media_ids],
sensitive: status_params[:sensitive], sensitive: status_params[:sensitive],
spoiler_text: status_params[:spoiler_text], spoiler_text: status_params[:spoiler_text],
markdown: status_params[:markdown],
visibility: status_params[:visibility], visibility: status_params[:visibility],
force_visibility: status_params[:force_visibility],
searchability: status_params[:searchability], searchability: status_params[:searchability],
language: status_params[:language], language: status_params[:language],
scheduled_at: status_params[:scheduled_at], scheduled_at: status_params[:scheduled_at],
@ -91,6 +93,7 @@ class Api::V1::StatusesController < Api::BaseController
sensitive: status_params[:sensitive], sensitive: status_params[:sensitive],
language: status_params[:language], language: status_params[:language],
spoiler_text: status_params[:spoiler_text], spoiler_text: status_params[:spoiler_text],
markdown: status_params[:markdown],
poll: status_params[:poll] poll: status_params[:poll]
) )
@ -134,8 +137,10 @@ class Api::V1::StatusesController < Api::BaseController
:sensitive, :sensitive,
:spoiler_text, :spoiler_text,
:visibility, :visibility,
:force_visibility,
:searchability, :searchability,
:language, :language,
:markdown,
:scheduled_at, :scheduled_at,
allowed_mentions: [], allowed_mentions: [],
media_ids: [], media_ids: [],

View file

@ -15,11 +15,11 @@ module FormattingHelper
module_function :extract_status_plain_text module_function :extract_status_plain_text
def status_content_format(status) def status_content_format(status)
html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : [])) html_aware_format(status.text, status.local?, markdown: status.markdown, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []))
end end
def emoji_name_format(emoji_reaction, status) def emoji_name_format(emoji_reaction, status)
html_aware_format(emoji_reaction['url'].present? ? ":#{emoji_reaction['name']}:" : emoji_reaction['name'], status.local?) html_aware_format(emoji_reaction['url'].present? ? ":#{emoji_reaction['name']}:" : emoji_reaction['name'], status.local?, markdown: status.markdown)
end end
def rss_status_content_format(status) def rss_status_content_format(status)
@ -54,10 +54,10 @@ module FormattingHelper
end end
def account_bio_format(account) def account_bio_format(account)
html_aware_format(account.note, account.local?) html_aware_format(account.note, account.local?, markdown: true)
end end
def account_field_value_format(field, with_rel_me: true) def account_field_value_format(field, with_rel_me: true)
html_aware_format(field.value, field.account.local?, with_rel_me: with_rel_me, with_domains: true, multiline: false) html_aware_format(field.value, field.account.local?, markdown: true, with_rel_me: with_rel_me, with_domains: true, multiline: false)
end end
end end

View file

@ -51,6 +51,7 @@ export const COMPOSE_UNMOUNT = 'COMPOSE_UNMOUNT';
export const COMPOSE_SENSITIVITY_CHANGE = 'COMPOSE_SENSITIVITY_CHANGE'; export const COMPOSE_SENSITIVITY_CHANGE = 'COMPOSE_SENSITIVITY_CHANGE';
export const COMPOSE_SPOILERNESS_CHANGE = 'COMPOSE_SPOILERNESS_CHANGE'; export const COMPOSE_SPOILERNESS_CHANGE = 'COMPOSE_SPOILERNESS_CHANGE';
export const COMPOSE_SPOILER_TEXT_CHANGE = 'COMPOSE_SPOILER_TEXT_CHANGE'; export const COMPOSE_SPOILER_TEXT_CHANGE = 'COMPOSE_SPOILER_TEXT_CHANGE';
export const COMPOSE_MARKDOWN_CHANGE = 'COMPOSE_MARKDOWN_CHANGE';
export const COMPOSE_VISIBILITY_CHANGE = 'COMPOSE_VISIBILITY_CHANGE'; export const COMPOSE_VISIBILITY_CHANGE = 'COMPOSE_VISIBILITY_CHANGE';
export const COMPOSE_SEARCHABILITY_CHANGE= 'COMPOSE_SEARCHABILITY_CHANGE'; export const COMPOSE_SEARCHABILITY_CHANGE= 'COMPOSE_SEARCHABILITY_CHANGE';
export const COMPOSE_COMPOSING_CHANGE = 'COMPOSE_COMPOSING_CHANGE'; export const COMPOSE_COMPOSING_CHANGE = 'COMPOSE_COMPOSING_CHANGE';
@ -191,6 +192,7 @@ export function submitCompose(routerHistory) {
media_attributes, media_attributes,
sensitive: getState().getIn(['compose', 'sensitive']), sensitive: getState().getIn(['compose', 'sensitive']),
spoiler_text: getState().getIn(['compose', 'spoiler']) ? getState().getIn(['compose', 'spoiler_text'], '') : '', spoiler_text: getState().getIn(['compose', 'spoiler']) ? getState().getIn(['compose', 'spoiler_text'], '') : '',
markdown: getState().getIn(['compose', 'markdown']),
visibility: getState().getIn(['compose', 'privacy']), visibility: getState().getIn(['compose', 'privacy']),
searchability: getState().getIn(['compose', 'searchability']), searchability: getState().getIn(['compose', 'searchability']),
poll: getState().getIn(['compose', 'poll'], null), poll: getState().getIn(['compose', 'poll'], null),
@ -724,6 +726,12 @@ export function changeComposeSpoilerText(text) {
}; };
} }
export function changeComposeMarkdown() {
return {
type: COMPOSE_MARKDOWN_CHANGE,
};
}
export function changeComposeVisibility(value) { export function changeComposeVisibility(value) {
return { return {
type: COMPOSE_VISIBILITY_CHANGE, type: COMPOSE_VISIBILITY_CHANGE,

View file

@ -18,6 +18,7 @@ import PollFormContainer from '../containers/poll_form_container';
import UploadFormContainer from '../containers/upload_form_container'; import UploadFormContainer from '../containers/upload_form_container';
import WarningContainer from '../containers/warning_container'; import WarningContainer from '../containers/warning_container';
import LanguageDropdown from '../containers/language_dropdown_container'; import LanguageDropdown from '../containers/language_dropdown_container';
import MarkdownButtonContainer from '../containers/markdown_button_container';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { length } from 'stringz'; import { length } from 'stringz';
import { countableText } from '../util/counter'; import { countableText } from '../util/counter';
@ -288,6 +289,7 @@ class ComposeForm extends ImmutablePureComponent {
<SearchabilityDropdownContainer disabled={this.props.isEditing} /> <SearchabilityDropdownContainer disabled={this.props.isEditing} />
<SpoilerButtonContainer /> <SpoilerButtonContainer />
<LanguageDropdown /> <LanguageDropdown />
<MarkdownButtonContainer />
</div> </div>
<div className='character-counter__wrapper'> <div className='character-counter__wrapper'>

View file

@ -17,6 +17,7 @@ const mapStateToProps = state => ({
suggestions: state.getIn(['compose', 'suggestions']), suggestions: state.getIn(['compose', 'suggestions']),
spoiler: state.getIn(['compose', 'spoiler']), spoiler: state.getIn(['compose', 'spoiler']),
spoilerText: state.getIn(['compose', 'spoiler_text']), spoilerText: state.getIn(['compose', 'spoiler_text']),
markdown: state.getIn(['compose', 'markdown']),
privacy: state.getIn(['compose', 'privacy']), privacy: state.getIn(['compose', 'privacy']),
focusDate: state.getIn(['compose', 'focusDate']), focusDate: state.getIn(['compose', 'focusDate']),
caretPosition: state.getIn(['compose', 'caretPosition']), caretPosition: state.getIn(['compose', 'caretPosition']),

View file

@ -0,0 +1,26 @@
import { connect } from 'react-redux';
import TextIconButton from '../components/text_icon_button';
import { changeComposeMarkdown } from '../../../actions/compose';
import { injectIntl, defineMessages } from 'react-intl';
const messages = defineMessages({
marked: { id: 'compose_form.markdown.marked', defaultMessage: 'Markdown is enabled' },
unmarked: { id: 'compose_form.markdown.unmarked', defaultMessage: 'Markdown is disabled' },
});
const mapStateToProps = (state, { intl }) => ({
label: 'MD',
title: intl.formatMessage(state.getIn(['compose', 'markdown']) ? messages.marked : messages.unmarked),
active: state.getIn(['compose', 'markdown']),
ariaControls: 'cw-markdown-input',
});
const mapDispatchToProps = dispatch => ({
onClick () {
dispatch(changeComposeMarkdown());
},
});
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(TextIconButton));

View file

@ -28,6 +28,7 @@ import {
COMPOSE_SENSITIVITY_CHANGE, COMPOSE_SENSITIVITY_CHANGE,
COMPOSE_SPOILERNESS_CHANGE, COMPOSE_SPOILERNESS_CHANGE,
COMPOSE_SPOILER_TEXT_CHANGE, COMPOSE_SPOILER_TEXT_CHANGE,
COMPOSE_MARKDOWN_CHANGE,
COMPOSE_VISIBILITY_CHANGE, COMPOSE_VISIBILITY_CHANGE,
COMPOSE_LANGUAGE_CHANGE, COMPOSE_LANGUAGE_CHANGE,
COMPOSE_COMPOSING_CHANGE, COMPOSE_COMPOSING_CHANGE,
@ -62,6 +63,7 @@ const initialState = ImmutableMap({
sensitive: false, sensitive: false,
spoiler: false, spoiler: false,
spoiler_text: '', spoiler_text: '',
markdown: false,
privacy: null, privacy: null,
searchability: null, searchability: null,
id: null, id: null,
@ -120,6 +122,7 @@ function clearAll(state) {
map.set('text', ''); map.set('text', '');
map.set('spoiler', false); map.set('spoiler', false);
map.set('spoiler_text', ''); map.set('spoiler_text', '');
map.set('markdown', false);
map.set('is_submitting', false); map.set('is_submitting', false);
map.set('is_changing_upload', false); map.set('is_changing_upload', false);
map.set('in_reply_to', null); map.set('in_reply_to', null);
@ -328,6 +331,11 @@ export default function compose(state = initialState, action) {
return state return state
.set('spoiler_text', action.text) .set('spoiler_text', action.text)
.set('idempotencyKey', uuid()); .set('idempotencyKey', uuid());
case COMPOSE_MARKDOWN_CHANGE:
return state.withMutations(map => {
map.set('markdown', !state.get('markdown'));
map.set('idempotencyKey', uuid());
});
case COMPOSE_VISIBILITY_CHANGE: case COMPOSE_VISIBILITY_CHANGE:
return state return state
.set('privacy', action.value) .set('privacy', action.value)
@ -488,6 +496,7 @@ export default function compose(state = initialState, action) {
map.set('idempotencyKey', uuid()); map.set('idempotencyKey', uuid());
map.set('sensitive', action.status.get('sensitive')); map.set('sensitive', action.status.get('sensitive'));
map.set('language', action.status.get('language')); map.set('language', action.status.get('language'));
map.set('markdown', action.status.get('markdown'));
map.set('id', null); map.set('id', null);
if (action.status.get('spoiler_text').length > 0) { if (action.status.get('spoiler_text').length > 0) {
@ -518,6 +527,7 @@ export default function compose(state = initialState, action) {
map.set('idempotencyKey', uuid()); map.set('idempotencyKey', uuid());
map.set('sensitive', action.status.get('sensitive')); map.set('sensitive', action.status.get('sensitive'));
map.set('language', action.status.get('language')); map.set('language', action.status.get('language'));
map.set('markdown', action.status.get('markdown'));
if (action.spoiler_text.length > 0) { if (action.spoiler_text.length > 0) {
map.set('spoiler', true); map.set('spoiler', true);

View file

@ -11,6 +11,7 @@ class TextFormatter
DEFAULT_OPTIONS = { DEFAULT_OPTIONS = {
multiline: true, multiline: true,
markdown: false,
}.freeze }.freeze
attr_reader :text, :options attr_reader :text, :options
@ -44,9 +45,9 @@ class TextFormatter
end end
# line first letter for blockquote # line first letter for blockquote
html = markdownify(html.gsub(/^&gt;/, '>')) html = markdownify(html.gsub(/^&gt;/, '>')) if markdown?
# html = simple_format(html, {}, sanitize: false).delete("\n") if multiline? html = simple_format(html, {}, sanitize: false).delete("\n") if !markdown? && multiline?
html = html.delete("\n") html = html.delete("\n")
html.html_safe # rubocop:disable Rails/OutputSafety html.html_safe # rubocop:disable Rails/OutputSafety
@ -152,6 +153,10 @@ class TextFormatter
options[:with_rel_me] options[:with_rel_me]
end end
def markdown?
options[:markdown]
end
def preloaded_accounts def preloaded_accounts
options[:preloaded_accounts] options[:preloaded_accounts]
end end

View file

@ -19,6 +19,7 @@ module StatusSnapshotConcern
status_id: id, status_id: id,
text: text, text: text,
spoiler_text: spoiler_text, spoiler_text: spoiler_text,
markdown: markdown,
sensitive: sensitive, sensitive: sensitive,
ordered_media_attachment_ids: ordered_media_attachment_ids&.dup || media_attachments.pluck(:id), ordered_media_attachment_ids: ordered_media_attachment_ids&.dup || media_attachments.pluck(:id),
media_descriptions: ordered_media_attachments.map(&:description), media_descriptions: ordered_media_attachments.map(&:description),

View file

@ -28,6 +28,7 @@
# trendable :boolean # trendable :boolean
# ordered_media_attachment_ids :bigint(8) is an Array # ordered_media_attachment_ids :bigint(8) is an Array
# searchability :integer # searchability :integer
# markdown :boolean default(FALSE)
# #
require 'ostruct' require 'ostruct'
@ -310,6 +311,10 @@ class Status < ApplicationRecord
status_stat&.favourites_count || 0 status_stat&.favourites_count || 0
end end
def emoji_reactions_count
status_stat&.emoji_reactions_count || 0
end
def increment_count!(key) def increment_count!(key)
update_status_stat!(key => public_send(key) + 1) update_status_stat!(key => public_send(key) + 1)
end end

View file

@ -15,6 +15,7 @@
# media_descriptions :text is an Array # media_descriptions :text is an Array
# poll_options :string is an Array # poll_options :string is an Array
# sensitive :boolean # sensitive :boolean
# markdown :boolean default(FALSE)
# #
class StatusEdit < ApplicationRecord class StatusEdit < ApplicationRecord

View file

@ -13,6 +13,7 @@
# updated_at :datetime not null # updated_at :datetime not null
# emoji_reactions :string # emoji_reactions :string
# emoji_reactions_count :integer default(0), not null # emoji_reactions_count :integer default(0), not null
# test :integer default(0), not null
# #
class StatusStat < ApplicationRecord class StatusStat < ApplicationRecord

View file

@ -97,10 +97,12 @@ class REST::InstanceSerializer < ActiveModel::Serializer
def fedibird_capabilities def fedibird_capabilities
capabilities = [ capabilities = [
:emoji_reaction, :emoji_reaction,
:visibility_public_unlisted, :kmyblue_extra_media_attachments,
:kmyblue_visibility_public_unlisted,
:enable_wide_emoji, :enable_wide_emoji,
:enable_wide_emoji_reaction, :enable_wide_emoji_reaction,
:searchability, :kmyblue_searchability,
:kmyblue_markdown,
] ]
capabilities << :profile_search unless Chewy.enabled? capabilities << :profile_search unless Chewy.enabled?

View file

@ -9,6 +9,8 @@ class REST::NotifyEmojiReactionSerializer < ActiveModel::Serializer
attribute :url, if: :custom_emoji? attribute :url, if: :custom_emoji?
attribute :static_url, if: :custom_emoji? attribute :static_url, if: :custom_emoji?
attribute :domain, if: :custom_emoji? attribute :domain, if: :custom_emoji?
attribute :width, if: :width?
attribute :height, if: :height?
def count? def count?
object.respond_to?(:count) object.respond_to?(:count)
@ -33,4 +35,20 @@ class REST::NotifyEmojiReactionSerializer < ActiveModel::Serializer
def domain def domain
object.custom_emoji.domain object.custom_emoji.domain
end end
def width?
custom_emoji? && (object.custom_emoji.respond_to?(:image_width) || object.custom_emoji.respond_to?(:width))
end
def height?
custom_emoji? && (object.custom_emoji.respond_to?(:image_height) || object.custom_emoji.respond_to?(:height))
end
def width
object.custom_emoji.respond_to?(:image_width) ? object.custom_emoji.image_width : object.custom_emoji.width
end
def height
object.custom_emoji.respond_to?(:image_height) ? object.custom_emoji.image_height : object.custom_emoji.height
end
end end

View file

@ -5,7 +5,7 @@ class REST::StatusEditSerializer < ActiveModel::Serializer
has_one :account, serializer: REST::AccountSerializer has_one :account, serializer: REST::AccountSerializer
attributes :content, :spoiler_text, :sensitive, :created_at attributes :content, :spoiler_text, :markdown, :sensitive, :created_at
has_many :ordered_media_attachments, key: :media_attachments, serializer: REST::MediaAttachmentSerializer has_many :ordered_media_attachments, key: :media_attachments, serializer: REST::MediaAttachmentSerializer
has_many :emojis, serializer: REST::CustomEmojiSerializer has_many :emojis, serializer: REST::CustomEmojiSerializer

View file

@ -5,8 +5,8 @@ class REST::StatusSerializer < ActiveModel::Serializer
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id, attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
:sensitive, :spoiler_text, :visibility, :visibility_ex, :language, :sensitive, :spoiler_text, :visibility, :visibility_ex, :language,
:uri, :url, :replies_count, :reblogs_count, :searchability, :uri, :url, :replies_count, :reblogs_count, :searchability, :markdown,
:favourites_count, :emoji_reactions, :edited_at :favourites_count, :emoji_reactions, :emoji_reactions_count, :edited_at
attribute :favourited, if: :current_user? attribute :favourited, if: :current_user?
attribute :reblogged, if: :current_user? attribute :reblogged, if: :current_user?

View file

@ -107,9 +107,12 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer
def fedibird_capabilities def fedibird_capabilities
capabilities = [ capabilities = [
:emoji_reaction, :emoji_reaction,
:visibility_public_unlisted, :kmyblue_extra_media_attachments,
:kmyblue_visibility_public_unlisted,
:enable_wide_emoji, :enable_wide_emoji,
:enable_wide_emoji_reaction, :enable_wide_emoji_reaction,
:kmyblue_searchability,
:kmyblue_markdown,
] ]
capabilities << :profile_search unless Chewy.enabled? capabilities << :profile_search unless Chewy.enabled?

View file

@ -22,8 +22,10 @@ class PostStatusService < BaseService
# @option [Status] :thread Optional status to reply to # @option [Status] :thread Optional status to reply to
# @option [Boolean] :sensitive # @option [Boolean] :sensitive
# @option [String] :visibility # @option [String] :visibility
# @option [Boolean] :force_visibility
# @option [String] :searchability # @option [String] :searchability
# @option [String] :spoiler_text # @option [String] :spoiler_text
# @option [Boolean] :markdown
# @option [String] :language # @option [String] :language
# @option [String] :scheduled_at # @option [String] :scheduled_at
# @option [Hash] :poll Optional poll to attach # @option [Hash] :poll Optional poll to attach
@ -67,8 +69,9 @@ class PostStatusService < BaseService
@text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present? @text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present?
@visibility = @options[:visibility] || @account.user&.setting_default_privacy @visibility = @options[:visibility] || @account.user&.setting_default_privacy
@visibility = :unlisted if (@visibility&.to_sym == :public || @visibility&.to_sym == :public_unlisted) && @account.silenced? @visibility = :unlisted if (@visibility&.to_sym == :public || @visibility&.to_sym == :public_unlisted) && @account.silenced?
@visibility = :public_unlisted if @visibility&.to_sym == :public && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted @visibility = :public_unlisted if @visibility&.to_sym == :public && !@options[:force_visibility] && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted
@searchability= searchability @searchability= searchability
@markdown = !!@options[:markdown]
@scheduled_at = @options[:scheduled_at]&.to_datetime @scheduled_at = @options[:scheduled_at]&.to_datetime
@scheduled_at = nil if scheduled_in_the_past? @scheduled_at = nil if scheduled_in_the_past?
rescue ArgumentError rescue ArgumentError
@ -214,6 +217,7 @@ class PostStatusService < BaseService
poll_attributes: poll_attributes, poll_attributes: poll_attributes,
sensitive: @sensitive, sensitive: @sensitive,
spoiler_text: @options[:spoiler_text] || '', spoiler_text: @options[:spoiler_text] || '',
markdown: @markdown,
visibility: @visibility, visibility: @visibility,
searchability: @searchability, searchability: @searchability,
language: valid_locale_cascade(@options[:language], @account.user&.preferred_posting_language, I18n.default_locale), language: valid_locale_cascade(@options[:language], @account.user&.preferred_posting_language, I18n.default_locale),

View file

@ -15,6 +15,7 @@ class UpdateStatusService < BaseService
# @option options [String] :text # @option options [String] :text
# @option options [String] :spoiler_text # @option options [String] :spoiler_text
# @option options [Boolean] :sensitive # @option options [Boolean] :sensitive
# @option options [Boolean] :markdown
# @option options [String] :language # @option options [String] :language
def call(status, account_id, options = {}) def call(status, account_id, options = {})
@status = status @status = status
@ -112,6 +113,7 @@ class UpdateStatusService < BaseService
def update_immediate_attributes! def update_immediate_attributes!
@status.text = @options[:text].presence || @options.delete(:spoiler_text) || '' if @options.key?(:text) @status.text = @options[:text].presence || @options.delete(:spoiler_text) || '' if @options.key?(:text)
@status.spoiler_text = @options[:spoiler_text] || '' if @options.key?(:spoiler_text) @status.spoiler_text = @options[:spoiler_text] || '' if @options.key?(:spoiler_text)
@status.markdown = !!@options[:markdown]
@status.sensitive = @options[:sensitive] || @options[:spoiler_text].present? if @options.key?(:sensitive) || @options.key?(:spoiler_text) @status.sensitive = @options[:sensitive] || @options[:spoiler_text].present? if @options.key?(:sensitive) || @options.key?(:spoiler_text)
@status.language = valid_locale_cascade(@options[:language], @status.language, @status.account.user&.preferred_posting_language, I18n.default_locale) @status.language = valid_locale_cascade(@options[:language], @status.language, @status.account.user&.preferred_posting_language, I18n.default_locale)

View file

@ -0,0 +1,5 @@
class AddMarkdownToStatuses < ActiveRecord::Migration[6.1]
def change
add_column :statuses, :markdown, :boolean, default: false
end
end

View file

@ -0,0 +1,5 @@
class AddMarkdownToStatusEdits < ActiveRecord::Migration[6.1]
def change
add_column :status_edits, :markdown, :boolean, default: false
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2023_04_10_004651) do ActiveRecord::Schema.define(version: 2023_04_12_073021) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -912,6 +912,7 @@ ActiveRecord::Schema.define(version: 2023_04_10_004651) do
t.text "media_descriptions", array: true t.text "media_descriptions", array: true
t.string "poll_options", array: true t.string "poll_options", array: true
t.boolean "sensitive" t.boolean "sensitive"
t.boolean "markdown", default: false
t.index ["account_id"], name: "index_status_edits_on_account_id" t.index ["account_id"], name: "index_status_edits_on_account_id"
t.index ["status_id"], name: "index_status_edits_on_status_id" t.index ["status_id"], name: "index_status_edits_on_status_id"
end end
@ -934,6 +935,7 @@ ActiveRecord::Schema.define(version: 2023_04_10_004651) do
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "emoji_reactions" t.string "emoji_reactions"
t.integer "emoji_reactions_count", default: 0, null: false t.integer "emoji_reactions_count", default: 0, null: false
t.integer "test", default: 0, null: false
t.index ["status_id"], name: "index_status_stats_on_status_id", unique: true t.index ["status_id"], name: "index_status_stats_on_status_id", unique: true
end end
@ -972,6 +974,7 @@ ActiveRecord::Schema.define(version: 2023_04_10_004651) do
t.boolean "trendable" t.boolean "trendable"
t.bigint "ordered_media_attachment_ids", array: true t.bigint "ordered_media_attachment_ids", array: true
t.integer "searchability" t.integer "searchability"
t.boolean "markdown", default: false
t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)" t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)"
t.index ["account_id"], name: "index_statuses_on_account_id" t.index ["account_id"], name: "index_statuses_on_account_id"
t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)" t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)"