refactor to put fav_id on FaUserPostFav
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# typed: strict
|
||||
class AddTypeToDomainUserPostFavs < ActiveRecord::Migration[7.2]
|
||||
extend T::Sig
|
||||
|
||||
sig { void }
|
||||
def change
|
||||
mirai_tablespace!
|
||||
|
||||
create_enum(
|
||||
"domain_user_post_fav_type",
|
||||
%w[Domain::UserPostFav Domain::UserPostFav::FaUserPostFav],
|
||||
)
|
||||
|
||||
change_table :domain_user_post_favs do |t|
|
||||
t.enum :type,
|
||||
null: false,
|
||||
enum_type: "domain_user_post_fav_type",
|
||||
default: "Domain::UserPostFav"
|
||||
|
||||
t.jsonb :json_attributes, default: {}
|
||||
end
|
||||
|
||||
[
|
||||
["fav_id", "integer", { unique: true }],
|
||||
%w[inferred_time integer],
|
||||
%w[explicit_time integer],
|
||||
].each do |column_name, column_type, options|
|
||||
add_json_index(
|
||||
"domain_user_post_favs",
|
||||
column_name,
|
||||
column_type,
|
||||
{ where: "type = 'Domain::UserPostFav::FaUserPostFav'" }.merge(
|
||||
options || {},
|
||||
),
|
||||
)
|
||||
end
|
||||
|
||||
up_only { execute <<-SQL }
|
||||
UPDATE domain_user_post_favs
|
||||
SET type = 'Domain::UserPostFav::FaUserPostFav'
|
||||
FROM domain_posts
|
||||
WHERE domain_posts.id = domain_user_post_favs.post_id
|
||||
AND domain_posts.type = 'Domain::Post::FaPost'
|
||||
SQL
|
||||
|
||||
# backfill values from domain_fa_fav_id_and_dates
|
||||
up_only { execute <<-SQL }
|
||||
UPDATE domain_user_post_favs
|
||||
SET json_attributes =
|
||||
domain_user_post_favs.json_attributes
|
||||
|| jsonb_build_object('fav_id', domain_fa_fav_id_and_dates.fav_fa_id)
|
||||
|| jsonb_build_object('explicit_time', EXTRACT(EPOCH FROM domain_fa_fav_id_and_dates.date)::integer)
|
||||
FROM domain_fa_fav_id_and_dates
|
||||
JOIN domain_posts ON (domain_posts.json_attributes->>'fa_id')::integer = domain_fa_fav_id_and_dates.post_fa_id
|
||||
WHERE domain_posts.type = 'Domain::Post::FaPost'
|
||||
AND domain_user_post_favs.post_id = domain_posts.id
|
||||
AND domain_fa_fav_id_and_dates.user_id = domain_user_post_favs.user_id
|
||||
AND domain_user_post_favs.type = 'Domain::UserPostFav::FaUserPostFav'
|
||||
SQL
|
||||
end
|
||||
end
|
||||
@@ -152,6 +152,16 @@ CREATE TYPE public.domain_post_type AS ENUM (
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: domain_user_post_fav_type; Type: TYPE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TYPE public.domain_user_post_fav_type AS ENUM (
|
||||
'Domain::UserPostFav',
|
||||
'Domain::UserPostFav::FaUserPostFav'
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: domain_user_type; Type: TYPE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -3154,7 +3164,9 @@ CREATE TABLE public.domain_user_post_fav_user_factors (
|
||||
CREATE TABLE public.domain_user_post_favs (
|
||||
user_id bigint NOT NULL,
|
||||
post_id bigint NOT NULL,
|
||||
removed boolean DEFAULT false NOT NULL
|
||||
removed boolean DEFAULT false NOT NULL,
|
||||
type public.domain_user_post_fav_type DEFAULT 'Domain::UserPostFav'::public.domain_user_post_fav_type NOT NULL,
|
||||
json_attributes jsonb DEFAULT '{}'::jsonb
|
||||
);
|
||||
|
||||
|
||||
@@ -5963,6 +5975,27 @@ CREATE UNIQUE INDEX idx_domain_post_groups_on_sofurry_id ON public.domain_post_g
|
||||
CREATE UNIQUE INDEX idx_domain_posts_on_sofurry_id ON public.domain_posts USING btree ((((json_attributes ->> 'sofurry_id'::text))::integer)) WHERE (type = 'Domain::Post::SofurryPost'::public.domain_post_type);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_domain_user_post_favs_on_explicit_time; Type: INDEX; Schema: public; Owner: -; Tablespace: mirai
|
||||
--
|
||||
|
||||
CREATE INDEX idx_domain_user_post_favs_on_explicit_time ON public.domain_user_post_favs USING btree ((((json_attributes ->> 'explicit_time'::text))::integer)) WHERE (type = 'Domain::UserPostFav::FaUserPostFav'::public.domain_user_post_fav_type);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_domain_user_post_favs_on_fav_id; Type: INDEX; Schema: public; Owner: -; Tablespace: mirai
|
||||
--
|
||||
|
||||
CREATE UNIQUE INDEX idx_domain_user_post_favs_on_fav_id ON public.domain_user_post_favs USING btree ((((json_attributes ->> 'fav_id'::text))::integer)) WHERE (type = 'Domain::UserPostFav::FaUserPostFav'::public.domain_user_post_fav_type);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_domain_user_post_favs_on_inferred_time; Type: INDEX; Schema: public; Owner: -; Tablespace: mirai
|
||||
--
|
||||
|
||||
CREATE INDEX idx_domain_user_post_favs_on_inferred_time ON public.domain_user_post_favs USING btree ((((json_attributes ->> 'inferred_time'::text))::integer)) WHERE (type = 'Domain::UserPostFav::FaUserPostFav'::public.domain_user_post_fav_type);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_domain_users_e621_on_name_lower; Type: INDEX; Schema: public; Owner: -; Tablespace: mirai
|
||||
--
|
||||
@@ -9240,6 +9273,7 @@ ALTER TABLE ONLY public.domain_twitter_tweets
|
||||
SET search_path TO "$user", public;
|
||||
|
||||
INSERT INTO "schema_migrations" (version) VALUES
|
||||
('20250711014944'),
|
||||
('20250710204708'),
|
||||
('20250709235107'),
|
||||
('20250628000003'),
|
||||
|
||||
Reference in New Issue
Block a user