Skip to content

Commit

Permalink
fix: normalize database to match code model
Browse files Browse the repository at this point in the history
  • Loading branch information
Vilsol committed Aug 15, 2024
1 parent fb589e3 commit bb20f1a
Show file tree
Hide file tree
Showing 17 changed files with 88 additions and 94 deletions.
4 changes: 2 additions & 2 deletions db/schema/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ func (Version) Fields() []ent.Field {
field.String("version").MaxLen(16),
field.String("game_version").Optional(), // TODO Should be backfilled and turned non-optional
field.String("changelog").Optional(),
field.Uint("downloads").Default(0).Optional(),
field.Uint("downloads").Default(0),
field.String("key").Optional(),
field.Enum("stability").GoType(util.Stability("")),
field.Enum("stability").GoType(util.Stability("")).Default("release"),
field.Bool("approved").Default(false),
field.Uint("hotness").Default(0),
field.Bool("denied").Default(false),
Expand Down
2 changes: 1 addition & 1 deletion generated/ent/internal/schema.go

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions generated/ent/migrate/schema.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 0 additions & 20 deletions generated/ent/mutation.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions generated/ent/version/version.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 0 additions & 10 deletions generated/ent/version/where.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 15 additions & 20 deletions generated/ent/version_create.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 0 additions & 18 deletions generated/ent/version_update.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 15 additions & 4 deletions gql/versions.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/satisfactorymodding/smr-api/generated"
"github.com/satisfactorymodding/smr-api/generated/conv"
"github.com/satisfactorymodding/smr-api/generated/ent"
mod2 "github.com/satisfactorymodding/smr-api/generated/ent/mod"
version2 "github.com/satisfactorymodding/smr-api/generated/ent/version"
"github.com/satisfactorymodding/smr-api/generated/ent/versiondependency"
"github.com/satisfactorymodding/smr-api/generated/ent/versiontarget"
Expand Down Expand Up @@ -138,10 +139,15 @@ func FinalizeVersionUploadAsync(ctx context.Context, mod *ent.Mod, versionID str
return nil, err
}

for modID, condition := range modInfo.Dependencies {
for modReference, condition := range modInfo.Dependencies {
modDependency, err := db.From(ctx).Mod.Query().Where(mod2.ModReference(modReference)).First(ctx)
if err != nil {
return nil, err
}

_, err = db.From(ctx).VersionDependency.Create().
SetVersion(dbVersion).
SetModID(modID).
SetModID(modDependency.ID).
SetCondition(condition).
SetOptional(false).
Save(ctx)
Expand All @@ -150,10 +156,15 @@ func FinalizeVersionUploadAsync(ctx context.Context, mod *ent.Mod, versionID str
}
}

for modID, condition := range modInfo.OptionalDependencies {
for modReference, condition := range modInfo.OptionalDependencies {
modDependency, err := db.From(ctx).Mod.Query().Where(mod2.ModReference(modReference)).First(ctx)
if err != nil {
return nil, err
}

_, err = db.From(ctx).VersionDependency.Create().
SetVersion(dbVersion).
SetModID(modID).
SetModID(modDependency.ID).
SetCondition(condition).
SetOptional(true).
Save(ctx)
Expand Down
2 changes: 1 addition & 1 deletion migrations/code/20240614131600_sml_as_mod.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func init() {
err = utils.ExecuteOnVersions(ctx, func(m *ent.Mod) bool {
return m.ModReference != "SML"
}, nil, func(mod *ent.Mod, version *ent.Version) {
smlDependency, err := version.QueryVersionDependencies().Where(versiondependency.ModID("SML")).First(ctx)
smlDependency, err := version.QueryVersionDependencies().Where(versiondependency.ModIDIn(smlMod.ModReference, smlMod.ID)).First(ctx)
if err != nil {
slox.Error(ctx, "failed to get SML dependency", slog.String("mod", mod.ModReference), slog.String("version", version.Version), slog.Any("err", err))
return
Expand Down
3 changes: 3 additions & 0 deletions migrations/sql/000030_db_normalization.down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ALTER TABLE "versions"
ALTER COLUMN "downloads" SET DEFAULT NULL,
ALTER COLUMN "hotness" SET DEFAULT NULL;
32 changes: 32 additions & 0 deletions migrations/sql/000030_db_normalization.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
UPDATE versions
SET downloads = 0
WHERE downloads IS NULL;

UPDATE versions
SET hotness = 0
WHERE hotness IS NULL;

ALTER TABLE "versions"
ALTER COLUMN "downloads" SET DEFAULT 0,
ALTER COLUMN "hotness" SET DEFAULT 0,
ALTER COLUMN "stability" TYPE character varying,
ALTER COLUMN "stability" SET NOT NULL;

UPDATE versions
SET mod_reference = (SELECT mod_reference FROM mods WHERE mod_id = "versions".mod_id LIMIT 1)
WHERE mod_reference IS NULL;

DELETE
FROM version_dependencies
WHERE (SELECT id
FROM mods
WHERE mod_reference = version_dependencies.mod_id
LIMIT 1) IS NULL
AND mod_id != 'SML';

UPDATE version_dependencies
SET mod_id = (SELECT id
FROM mods
WHERE mod_reference = version_dependencies.mod_id
LIMIT 1)
WHERE mod_id NOT IN (SELECT id FROM mods);
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
-- reverse: drop enum type "version_stability"
CREATE TYPE "version_stability" AS ENUM ('alpha', 'beta', 'release');
-- reverse: drop "bootstrap_versions" table
CREATE TABLE "bootstrap_versions"
(
Expand Down Expand Up @@ -61,12 +59,9 @@ ALTER TABLE "versions"
ALTER COLUMN "metadata" TYPE text,
ALTER COLUMN "hotness" TYPE integer,
ALTER COLUMN "hotness" DROP NOT NULL,
ALTER COLUMN "hotness" DROP DEFAULT,
ALTER COLUMN "stability" TYPE "version_stability",
ALTER COLUMN "stability" DROP NOT NULL,
ALTER COLUMN "key" TYPE text,
ALTER COLUMN "downloads" TYPE integer,
ALTER COLUMN "downloads" DROP DEFAULT,
ALTER COLUMN "downloads" DROP NOT NULL,
ALTER COLUMN "changelog" TYPE text,
ALTER COLUMN "version" TYPE character varying(16),
ALTER COLUMN "version" DROP NOT NULL,
Expand Down
10 changes: 3 additions & 7 deletions migrations/sql/20240705180551_initial_transfer_to_atlas.up.sql
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,11 @@ ALTER TABLE "versions"
ALTER COLUMN "version" SET NOT NULL,
ALTER COLUMN "changelog" TYPE character varying,
ALTER COLUMN "downloads" TYPE bigint,
ALTER COLUMN "downloads" SET DEFAULT 0,
ALTER COLUMN "downloads" SET NOT NULL,
ALTER COLUMN "key" TYPE character varying,
ALTER COLUMN "stability" TYPE character varying,
ALTER COLUMN "stability" SET NOT NULL,
ALTER COLUMN "stability" SET DEFAULT 'release',
ALTER COLUMN "hotness" TYPE bigint,
ALTER COLUMN "hotness" SET NOT NULL,
ALTER COLUMN "hotness" SET DEFAULT 0,
ALTER COLUMN "metadata" TYPE character varying,
ALTER COLUMN "mod_reference" TYPE character varying,
ALTER COLUMN "mod_reference" SET NOT NULL,
Expand All @@ -200,7 +198,7 @@ ALTER TABLE "version_dependencies"
ALTER COLUMN "condition" SET NOT NULL,
ALTER COLUMN "optional" SET NOT NULL,
ALTER COLUMN "optional" DROP DEFAULT,
ADD CONSTRAINT "version_dependencies_mods_mod" FOREIGN KEY ("mod_id") REFERENCES "mods" ("mod_reference") ON UPDATE NO ACTION ON DELETE NO ACTION,
ADD CONSTRAINT "version_dependencies_mods_mod" FOREIGN KEY ("mod_id") REFERENCES "mods" ("id") ON UPDATE NO ACTION ON DELETE NO ACTION,
ADD CONSTRAINT "version_dependencies_versions_version" FOREIGN KEY ("version_id") REFERENCES "versions" ("id") ON UPDATE NO ACTION ON DELETE NO ACTION;
-- create index "versiondependency_deleted_at" to table: "version_dependencies"
CREATE INDEX "versiondependency_deleted_at" ON "version_dependencies" ("deleted_at");
Expand All @@ -223,5 +221,3 @@ CREATE UNIQUE INDEX "versiontarget_version_id_target_name" ON "version_targets"
ALTER INDEX "uix_version_targets_id" RENAME TO "versiontarget_id";
-- drop "bootstrap_versions" table
DROP TABLE "bootstrap_versions";
-- drop enum type "version_stability"
DROP TYPE "version_stability";
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- reverse: drop enum type "version_stability"
CREATE TYPE "version_stability" AS ENUM ('alpha', 'beta', 'release');
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- drop enum type "version_stability"
DROP TYPE "version_stability";
10 changes: 7 additions & 3 deletions migrations/sql/atlas.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
h1:qtNrOIk9jo+dNfpj0UW7RKsI+VXj9m/bZo5AJhEz6t4=
h1:L/84AOAeeCvf1ZW9OWJGof99VvG8zHID59Bqgs69cRE=
000001_create_initial_tables.down.sql h1:QcXXwE8ir3PM3vZjQfBihY55WiuLYjN8pbbk/L6U+bs=
000001_create_initial_tables.up.sql h1:EfAqETefs7TW9BDVS4ukiB7wUFs+HQzVdc3qHhdAFd4=
000002_create_user_group_table.down.sql h1:uJjRbQ3H7yvPGNXLD5iSPmderEoWhCNGdsqN8yqBIRY=
Expand Down Expand Up @@ -57,5 +57,9 @@ h1:qtNrOIk9jo+dNfpj0UW7RKsI+VXj9m/bZo5AJhEz6t4=
000028_increase_token_length_limit.up.sql h1:j8x0A/MQf/Sqv0ZqULcn3AMbQkH632EW7YfzlSIeezA=
000029_sml_as_mod.down.sql h1:+OMz5BAnf/sjjO6hcnWagU2OXmabMHYMXwHmSlZk2rg=
000029_sml_as_mod.up.sql h1:v7c+91q+KhlNvanFmYRnCaKsEyRm21fYBMAkFnww6D4=
20240705180551_initial_transfer_to_atlas.down.sql h1:BDHfD4oUI8bjG6GMepdzAZxbKijfcAx9YXvFz32OsiI=
20240705180551_initial_transfer_to_atlas.up.sql h1:HKd9W+5vGB79Di70wZXervMJ/nXhSBaWuU+QjZg+LcU=
000030_db_normalization.down.sql h1:sNhE40c4ovaNIGqxixWXyOaVkvRBnf4UbOZfDYQZ6mw=
000030_db_normalization.up.sql h1:yMRb1VotTcttD6tTo5iLuVOufcGg+XVnMP3BBlcXE64=
20240705180551_initial_transfer_to_atlas.down.sql h1:8rloW9ZDgB4Jd0qqJYIrVw/EgR67nSaBAPDLMqznof4=
20240705180551_initial_transfer_to_atlas.up.sql h1:3jYXg7xI3XZ72RHLb7T4EV1+HbIzzTCtl6oykFe7NlU=
20240815141045_drop_version_stability_enum.down.sql h1:PJpy9dH9NkWFID4A4jIJbQt3M2vEtC1ven/Uv92y8yo=
20240815141045_drop_version_stability_enum.up.sql h1:AJrNUBBHXbpLtmy0vflBFiCYeMxWoIgWOA3hozvbC7E=

0 comments on commit bb20f1a

Please sign in to comment.