Skip to content

Commit

Permalink
Merge pull request confused-Techie#42 from Digitalone1/main
Browse files Browse the repository at this point in the history
Improve versions management
  • Loading branch information
confused-Techie authored Jan 8, 2023
2 parents 8485b5c + 3db9416 commit 617f284
Show file tree
Hide file tree
Showing 8 changed files with 231 additions and 182 deletions.
7 changes: 4 additions & 3 deletions scripts/database/create_names_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

CREATE TABLE names (
name VARCHAR(128) NOT NULL PRIMARY KEY,
pointer UUID NOT NULL REFERENCES packages(pointer)
pointer UUID NOT NULL REFERENCES packages(pointer),
-- constraints
CONSTRAINT lowercase_names CHECK (name = LOWER(name))
);

-- Lowercase constraint added upon the following issue:
-- https://github.com/confused-Techie/atom-backend/issues/90

ALTER TABLE names ADD CONSTRAINT lowercase_names CHECK (name = LOWER(name));
18 changes: 10 additions & 8 deletions scripts/database/create_packages_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,31 @@

CREATE EXTENSION pgcrypto;

-- packageType enum type
CREATE TYPE packageType AS ENUM('package', 'theme');

CREATE TABLE packages (
pointer UUID DEFAULT GEN_RANDOM_UUID() PRIMARY KEY,
name VARCHAR(128) NOT NULL UNIQUE,
package_type packageType NOT NULL,
created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
creation_method VARCHAR(128),
downloads BIGINT NOT NULL DEFAULT 0,
stargazers_count BIGINT NOT NULL DEFAULT 0,
original_stargazers BIGINT NOT NULL DEFAULT 0,
data JSONB
data JSONB,
-- constraints
CONSTRAINT lowercase_names CHECK (name = LOWER(name))
);

-- Lowercase constraint
-- Lowercase constraint added upon the following issue:
-- https://github.com/confused-Techie/atom-backend/issues/90

ALTER TABLE packages ADD CONSTRAINT lowercase_names CHECK (name = LOWER(name));

/* The introduction of the packageType column
-- Add packageType column

ALTER TABLE packages ADD COLUMN package_type VARCHAR(20);
UPDATE packages
Expand All @@ -33,15 +39,11 @@ UPDATE packages
SET package_type = 'package'
WHERE package_type IS DISTINCT FROM 'theme';
-- Create packageType enum type

CREATE TYPE packageType AS ENUM('package', 'theme');

-- Cast existing values of package_type in packageType

ALTER TABLE packages
ALTER COLUMN package_type TYPE packageType USING (package_type::packageType),
ALTER COLUMN package_type SET NOT NULL;
*/

-- Create a function and a trigger to set the current timestamp
-- in the `updated` column of the updated row
Expand Down
29 changes: 11 additions & 18 deletions scripts/database/create_versions_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,15 @@ CREATE TABLE versions (
semver VARCHAR(256) NOT NULL,
license VARCHAR(128) NOT NULL,
engine JSONB NOT NULL,
meta JSONB
meta JSONB,
-- generated columns
semver_v1 INTEGER GENERATED ALWAYS AS
(CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[1] AS INTEGER)) STORED,
semver_v2 INTEGER GENERATED ALWAYS AS
(CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[2] AS INTEGER)) STORED,
semver_v3 INTEGER GENERATED ALWAYS AS
(CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[3] AS INTEGER)) STORED,
-- constraints
CONSTRAINT semver2_format CHECK (semver ~ '^\d+\.\d+\.\d+'),
CONSTRAINT unique_pack_version UNIQUE(package, semver_v1, semver_v2, semver_v3)
);

-- Constrain to avoiding the duplication of already published versions

ALTER TABLE versions ADD CONSTRAINT unique_pack_version UNIQUE(package, semver);

-- Constrain to force the semantic version 2.0 format

ALTER TABLE versions ADD CONSTRAINT semver2_format CHECK (semver ~ '^\d+\.\d+\.\d+');

-- Generated columns to help sorting by semver

ALTER TABLE versions ADD COLUMN semver_v1 INTEGER
GENERATED ALWAYS AS (CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[1] AS INTEGER)) STORED;
ALTER TABLE versions ADD COLUMN semver_v2 INTEGER
GENERATED ALWAYS AS (CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[2] AS INTEGER)) STORED;
ALTER TABLE versions ADD COLUMN semver_v3 INTEGER
GENERATED ALWAYS AS (CAST ((regexp_match(semver, '^(\d+)\.(\d+)\.(\d+)'))[3] AS INTEGER)) STORED;
Loading

0 comments on commit 617f284

Please sign in to comment.