feat: sync collectible star gifts
This commit is contained in:
parent
47fcf0ea41
commit
5ecf4e912d
64 changed files with 7559 additions and 403 deletions
81
deploy/migrations/0089_star_gift_catalog.up.sql
Normal file
81
deploy/migrations/0089_star_gift_catalog.up.sql
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
-- Durable, administrator-managed regular Star Gift catalog. The previous seven-item
|
||||
-- animated_emoji-derived directory was development-only and is intentionally not migrated.
|
||||
-- Existing received rows refer to those non-durable definitions, so clear them instead of
|
||||
-- manufacturing a read-time compatibility fallback that could no longer reconstruct assets.
|
||||
|
||||
CREATE SEQUENCE public.star_gift_catalog_gift_id_seq AS bigint START WITH 9000000000000001;
|
||||
CREATE SEQUENCE public.star_gift_catalog_revision_id_seq AS bigint START WITH 1;
|
||||
|
||||
CREATE TABLE public.star_gift_catalog (
|
||||
gift_id bigint DEFAULT nextval('public.star_gift_catalog_gift_id_seq') NOT NULL,
|
||||
active_revision_id bigint NOT NULL,
|
||||
enabled boolean DEFAULT true NOT NULL,
|
||||
sort_order integer DEFAULT 0 NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
CONSTRAINT star_gift_catalog_pkey PRIMARY KEY (gift_id)
|
||||
);
|
||||
|
||||
CREATE TABLE public.star_gift_catalog_revisions (
|
||||
id bigint DEFAULT nextval('public.star_gift_catalog_revision_id_seq') NOT NULL,
|
||||
gift_id bigint NOT NULL,
|
||||
revision integer NOT NULL,
|
||||
title text DEFAULT '' NOT NULL,
|
||||
stars bigint NOT NULL,
|
||||
convert_stars bigint NOT NULL,
|
||||
document_id bigint NOT NULL,
|
||||
animation_json jsonb NOT NULL,
|
||||
animation_sha256 bytea NOT NULL,
|
||||
source_name text DEFAULT '' NOT NULL,
|
||||
source_format text NOT NULL,
|
||||
width integer NOT NULL,
|
||||
height integer NOT NULL,
|
||||
frame_rate double precision DEFAULT 0 NOT NULL,
|
||||
in_point double precision DEFAULT 0 NOT NULL,
|
||||
out_point double precision DEFAULT 0 NOT NULL,
|
||||
created_by text DEFAULT '' NOT NULL,
|
||||
command_id text DEFAULT '' NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
CONSTRAINT star_gift_catalog_revisions_pkey PRIMARY KEY (id),
|
||||
CONSTRAINT star_gift_catalog_revisions_gift_revision_uniq UNIQUE (gift_id, revision),
|
||||
CONSTRAINT star_gift_catalog_revisions_document_uniq UNIQUE (document_id),
|
||||
CONSTRAINT star_gift_catalog_revision_price_check CHECK (stars > 0 AND convert_stars >= 0 AND convert_stars <= stars),
|
||||
CONSTRAINT star_gift_catalog_revision_shape_check CHECK (width = 512 AND height = 512 AND jsonb_typeof(animation_json) = 'object'),
|
||||
CONSTRAINT star_gift_catalog_revision_source_check CHECK (source_format IN ('tgs', 'lottie')),
|
||||
CONSTRAINT star_gift_catalog_revision_gift_fk FOREIGN KEY (gift_id)
|
||||
REFERENCES public.star_gift_catalog(gift_id) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED,
|
||||
CONSTRAINT star_gift_catalog_revision_document_fk FOREIGN KEY (document_id)
|
||||
REFERENCES public.documents(id) ON DELETE RESTRICT
|
||||
);
|
||||
|
||||
ALTER TABLE public.star_gift_catalog
|
||||
ADD CONSTRAINT star_gift_catalog_active_revision_fk FOREIGN KEY (active_revision_id)
|
||||
REFERENCES public.star_gift_catalog_revisions(id) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED;
|
||||
|
||||
CREATE INDEX star_gift_catalog_enabled_order_idx
|
||||
ON public.star_gift_catalog (sort_order, gift_id) WHERE enabled;
|
||||
CREATE INDEX star_gift_catalog_revisions_gift_idx
|
||||
ON public.star_gift_catalog_revisions (gift_id, revision DESC);
|
||||
|
||||
DELETE FROM public.peer_star_gifts;
|
||||
ALTER TABLE public.peer_star_gifts
|
||||
ADD COLUMN catalog_revision_id bigint NOT NULL,
|
||||
ADD CONSTRAINT peer_star_gifts_catalog_revision_fk FOREIGN KEY (catalog_revision_id)
|
||||
REFERENCES public.star_gift_catalog_revisions(id) ON DELETE RESTRICT;
|
||||
CREATE INDEX peer_star_gifts_catalog_revision_idx
|
||||
ON public.peer_star_gifts (catalog_revision_id);
|
||||
CREATE INDEX peer_star_gifts_gift_idx
|
||||
ON public.peer_star_gifts (gift_id);
|
||||
|
||||
CREATE FUNCTION public.telesrv_notify_star_gift_catalog_changed() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
PERFORM public.telesrv_bump_read_model_version('star_gift_catalog', 0, '', 0);
|
||||
RETURN NULL;
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE TRIGGER star_gift_catalog_changed
|
||||
AFTER INSERT OR UPDATE OR DELETE ON public.star_gift_catalog
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION public.telesrv_notify_star_gift_catalog_changed();
|
||||
Loading…
Add table
Add a link
Reference in a new issue