diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index f311630..d61a894 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -19,6 +19,7 @@ jobs: matrix: docker-compose-file: - docker-compose.yml + - testing/docker-compose.hsqldb.yml - testing/docker-compose.cockroachdb.yml - testing/docker-compose.yugabytedb.yml dockerfile: diff --git a/build.gradle b/build.gradle index e5b1fac..535b051 100644 --- a/build.gradle +++ b/build.gradle @@ -29,6 +29,7 @@ dependencies { implementation 'io.activej:activej-boot:5.5' implementation 'io.activej:activej-specializer:5.5' implementation 'io.activej:activej-launchers-http:5.5' + implementation 'org.hsqldb:hsqldb:2.7.2' implementation 'org.postgresql:postgresql:42.6.0' implementation 'org.hibernate:hibernate-core:6.3.1.Final' implementation 'org.hibernate:hibernate-hikaricp:6.3.1.Final' diff --git a/src/main/resources/changelog/db.changelog-master.xml b/src/main/resources/changelog/db.changelog-master.xml index 68fb5f2..4d3a056 100644 --- a/src/main/resources/changelog/db.changelog-master.xml +++ b/src/main/resources/changelog/db.changelog-master.xml @@ -6,5 +6,4 @@ - diff --git a/src/main/resources/changelog/version/0-1-init-hsqldb.sql b/src/main/resources/changelog/version/0-1-init-hsqldb.sql new file mode 100644 index 0000000..cbcc14c --- /dev/null +++ b/src/main/resources/changelog/version/0-1-init-hsqldb.sql @@ -0,0 +1,135 @@ +CREATE TABLE IF NOT EXISTS users ( + id BIGSERIAL NOT NULL, + password TEXT NULL, + session_id VARCHAR(36) NULL, + username VARCHAR(24) NULL UNIQUE, + CONSTRAINT users_pkey PRIMARY KEY (id) +); + +DROP INDEX users.users_id_idx IF EXISTS; + +CREATE INDEX IF NOT EXISTS username_idx ON users (username ASC); + +-- rollback DROP TABLE users IF EXISTS + +CREATE TABLE IF NOT EXISTS channels ( + uploader_id VARCHAR(24) NOT NULL, + uploader VARCHAR(100) NULL, + uploader_avatar VARCHAR(150) NULL, + verified BOOLEAN NULL, + CONSTRAINT channels_pkey PRIMARY KEY (uploader_id) +); + +CREATE INDEX IF NOT EXISTS channels_uploader_idx ON channels (uploader ASC); + +-- rollback DROP TABLE channels IF EXISTS + +CREATE TABLE IF NOT EXISTS pubsub ( + id VARCHAR(24) NOT NULL, + subbed_at INT8 NULL, + CONSTRAINT pubsub_pkey PRIMARY KEY (id) +); + +CREATE INDEX IF NOT EXISTS pubsub_id_idx ON pubsub (id ASC); + +-- rollback DROP TABLE pubsub IF EXISTS + +CREATE TABLE IF NOT EXISTS playlists ( + id BIGSERIAL NOT NULL, + name VARCHAR(200) NULL, + playlist_id UUID NOT NULL UNIQUE DEFAULT uuid(), + short_description VARCHAR(100) NULL, + thumbnail VARCHAR(300) NULL, + owner INT8 NOT NULL, + CONSTRAINT playlists_pkey PRIMARY KEY (id), + CONSTRAINT fk_playlists_owner FOREIGN KEY (owner) REFERENCES users(id) +); + +-- rollback DROP TABLE playlists IF EXISTS + +CREATE TABLE IF NOT EXISTS playlist_videos ( + id VARCHAR(11) NOT NULL, + duration INT8 NULL, + thumbnail VARCHAR(400) NULL, + title VARCHAR(120) NULL, + uploader_id VARCHAR(24) NOT NULL, + CONSTRAINT playlist_videos_pkey PRIMARY KEY (id), + CONSTRAINT fk_playlist_video_uploader_id FOREIGN KEY (uploader_id) REFERENCES channels(uploader_id) +); + +CREATE INDEX IF NOT EXISTS playlist_videos_id_idx ON playlist_videos (id ASC); +CREATE INDEX IF NOT EXISTS playlist_videos_uploader_id_idx ON playlist_videos (uploader_id ASC); + +-- rollback DROP TABLE playlist_videos IF EXISTS + +CREATE TABLE IF NOT EXISTS playlists_videos_ids ( + playlist_id INT8 NOT NULL, + videos_id VARCHAR(11) NOT NULL, + videos_order INT4 NOT NULL, + CONSTRAINT playlists_videos_ids_pkey PRIMARY KEY (playlist_id, videos_order), + CONSTRAINT fk_playlists_videos_video_id_playlist_video FOREIGN KEY (videos_id) REFERENCES playlist_videos(id), + CONSTRAINT fk_playlists_videos_playlist_id_playlist FOREIGN KEY (playlist_id) REFERENCES playlists(id) +); + +CREATE INDEX IF NOT EXISTS playlists_videos_ids_playlist_id_idx ON playlists_videos_ids (playlist_id ASC); + +-- rollback DROP TABLE playlists_videos_ids IF EXISTS + +CREATE TABLE IF NOT EXISTS unauthenticated_subscriptions ( + id VARCHAR(24) NOT NULL, + subscribed_at INT8 NOT NULL, + CONSTRAINT unauthenticated_subscriptions_pkey PRIMARY KEY (id), + CONSTRAINT fk_unauthenticated_subscriptions_id_channels FOREIGN KEY (id) REFERENCES channels(uploader_id) +); + +CREATE INDEX IF NOT EXISTS unauthenticated_subscriptions_subscribed_at_idx ON unauthenticated_subscriptions (subscribed_at ASC); + +-- rollback DROP TABLE unauthenticated_subscriptions IF EXISTS + +CREATE INDEX IF NOT EXISTS users_session_id_idx ON users (session_id ASC); + +-- rollback DROP INDEX users_session_id_idx IF EXISTS + +CREATE TABLE IF NOT EXISTS videos ( + id VARCHAR(11) NOT NULL UNIQUE, + duration INT8 NULL, + thumbnail VARCHAR(400) NULL, + title VARCHAR(120) NULL, + uploaded INT8 NULL, + views INT8 NULL, + uploader_id VARCHAR(24) NOT NULL, + is_short BOOLEAN NOT NULL DEFAULT false, + CONSTRAINT videos_pkey PRIMARY KEY (id, uploader_id), + CONSTRAINT fk_videos_channels_uploader_id FOREIGN KEY (uploader_id) REFERENCES channels(uploader_id) +); + +CREATE UNIQUE INDEX IF NOT EXISTS videos_id_idx ON videos (id ASC); +CREATE INDEX IF NOT EXISTS video_uploaded_idx ON videos (uploaded ASC); +CREATE INDEX IF NOT EXISTS video_uploader_id_idx ON videos (uploader_id ASC); + +-- rollback DROP TABLE videos IF EXISTS + +CREATE TABLE IF NOT EXISTS users_subscribed ( + subscriber INT8 NOT NULL, + channel VARCHAR(24) NOT NULL, + CONSTRAINT users_subscribed_pkey PRIMARY KEY (subscriber, channel), + CONSTRAINT fk_subscriber_users FOREIGN KEY (subscriber) REFERENCES users(id) +); + +CREATE INDEX IF NOT EXISTS users_subscribed_subscriber_idx ON users_subscribed (subscriber ASC); +CREATE INDEX IF NOT EXISTS users_subscribed_channel_idx ON users_subscribed (channel ASC); + +-- rollback DROP TABLE users_subscribed IF EXISTS + +CREATE INDEX IF NOT EXISTS pubsub_subbed_at_idx ON pubsub (subbed_at ASC); + +-- rollback DROP INDEX pubsub_subbed_at_idx IF EXISTS + +CREATE INDEX IF NOT EXISTS playlists_playlist_id_idx ON playlists (playlist_id ASC); +CREATE INDEX IF NOT EXISTS playlists_owner_idx ON playlists (owner ASC); + +-- rollback DROP INDEX playlists_playlist_id_idx IF EXISTS +-- rollback DROP INDEX playlists_owner_idx IF EXISTS +CREATE INDEX IF NOT EXISTS unauthenticated_subscriptions_id_idx ON unauthenticated_subscriptions (id ASC); + +-- rollback DROP INDEX unauthenticated_subscriptions_id_idx IF EXISTS diff --git a/src/main/resources/changelog/version/0-init.xml b/src/main/resources/changelog/version/0-init.xml index 649566a..d29ff61 100644 --- a/src/main/resources/changelog/version/0-init.xml +++ b/src/main/resources/changelog/version/0-init.xml @@ -9,9 +9,10 @@ - + + diff --git a/src/main/resources/changelog/version/1-fix-subs.xml b/src/main/resources/changelog/version/1-fix-subs.xml index e3f44cc..f26d9ed 100644 --- a/src/main/resources/changelog/version/1-fix-subs.xml +++ b/src/main/resources/changelog/version/1-fix-subs.xml @@ -4,12 +4,25 @@ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd"> - + ALTER TABLE unauthenticated_subscriptions DROP CONSTRAINT IF EXISTS fk_unauthenticated_subscriptions_id_channels; ALTER TABLE unauthenticated_subscriptions ADD CONSTRAINT fk_unauthenticated_subscriptions_id_channels FOREIGN KEY (id) REFERENCES channels(uploader_id); + + + + + + + + diff --git a/testing/config.hsqldb.properties b/testing/config.hsqldb.properties new file mode 100644 index 0000000..4c8ebe2 --- /dev/null +++ b/testing/config.hsqldb.properties @@ -0,0 +1,18 @@ +# The port to Listen on. +PORT: 8080 + +# Proxy +PROXY_PART: https://pipedproxy-ams.kavin.rocks + +# Public API URL +API_URL: https://pipedapi.kavin.rocks + +# Public Frontend URL +FRONTEND_URL: https://piped.video + +# Hibernate properties +hibernate.connection.url: jdbc:hsqldb:mem:memdb;sql.syntax_pgs=true +hibernate.connection.driver_class: org.hsqldb.jdbcDriver +hibernate.dialect: org.hibernate.dialect.HSQLDialect +hibernate.connection.username: piped +hibernate.connection.password: changeme diff --git a/testing/docker-compose.hsqldb.yml b/testing/docker-compose.hsqldb.yml new file mode 100644 index 0000000..31f4070 --- /dev/null +++ b/testing/docker-compose.hsqldb.yml @@ -0,0 +1,8 @@ +services: + piped: + image: 1337kavin/piped:latest + restart: unless-stopped + ports: + - "127.0.0.1:8080:8080" + volumes: + - ./config.hsqldb.properties:/app/config.properties