Add MediaMetadata model.

Add a model for storing image and video metadata for uploaded files.

Metadata is extracted using ExifTool. You will need to install ExifTool
after this commit. ExifTool 12.22 is the minimum required version
because we use the `--binary` option, which was added in this release.

The MediaMetadata model is separate from the MediaAsset model because
some files contain tons of metadata, and most of it is non-essential.
The MediaAsset model represents an uploaded file and contains essential
metadata, like the file's size and type, while the MediaMetadata model
represents all the other non-essential metadata associated with a file.

Metadata is stored as a JSON column in the database.

ExifTool returns all the file's metadata, not just the EXIF metadata.
EXIF is one of several types of image metadata, hence why we call
it MediaMetadata instead of EXIFMetadata.
This commit is contained in:
evazion
2021-09-07 18:22:34 -05:00
parent 291758ddb7
commit 3d660953d4
20 changed files with 235 additions and 21 deletions

View File

@@ -2496,6 +2496,38 @@ CREATE SEQUENCE public.media_assets_id_seq
ALTER SEQUENCE public.media_assets_id_seq OWNED BY public.media_assets.id;
--
-- Name: media_metadata; Type: TABLE; Schema: public; Owner: -
--
CREATE TABLE public.media_metadata (
id bigint NOT NULL,
created_at timestamp(6) without time zone NOT NULL,
updated_at timestamp(6) without time zone NOT NULL,
media_asset_id bigint NOT NULL,
metadata jsonb DEFAULT '"{}"'::jsonb NOT NULL
);
--
-- Name: media_metadata_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE SEQUENCE public.media_metadata_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
--
-- Name: media_metadata_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
--
ALTER SEQUENCE public.media_metadata_id_seq OWNED BY public.media_metadata.id;
--
-- Name: mod_actions; Type: TABLE; Schema: public; Owner: -
--
@@ -4321,6 +4353,13 @@ ALTER TABLE ONLY public.ip_geolocations ALTER COLUMN id SET DEFAULT nextval('pub
ALTER TABLE ONLY public.media_assets ALTER COLUMN id SET DEFAULT nextval('public.media_assets_id_seq'::regclass);
--
-- Name: media_metadata id; Type: DEFAULT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.media_metadata ALTER COLUMN id SET DEFAULT nextval('public.media_metadata_id_seq'::regclass);
--
-- Name: mod_actions id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -4709,6 +4748,14 @@ ALTER TABLE ONLY public.media_assets
ADD CONSTRAINT media_assets_pkey PRIMARY KEY (id);
--
-- Name: media_metadata media_metadata_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
ALTER TABLE ONLY public.media_metadata
ADD CONSTRAINT media_metadata_pkey PRIMARY KEY (id);
--
-- Name: mod_actions mod_actions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
--
@@ -7034,6 +7081,20 @@ CREATE INDEX index_media_assets_on_md5 ON public.media_assets USING btree (md5);
CREATE INDEX index_media_assets_on_updated_at ON public.media_assets USING btree (updated_at);
--
-- Name: index_media_metadata_on_media_asset_id; Type: INDEX; Schema: public; Owner: -
--
CREATE UNIQUE INDEX index_media_metadata_on_media_asset_id ON public.media_metadata USING btree (media_asset_id);
--
-- Name: index_media_metadata_on_metadata; Type: INDEX; Schema: public; Owner: -
--
CREATE INDEX index_media_metadata_on_metadata ON public.media_metadata USING gin (metadata);
--
-- Name: index_mod_actions_on_created_at; Type: INDEX; Schema: public; Owner: -
--
@@ -8115,6 +8176,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20210310221248'),
('20210330003356'),
('20210330093133'),
('20210901230931');
('20210901230931'),
('20210908015203');