From 5f43d3322f7911f9e597c8f4f549a39a97c45445 Mon Sep 17 00:00:00 2001 From: Vilsol Date: Sat, 24 Aug 2024 02:42:00 +0300 Subject: [PATCH] feat: mod toggles for network use and explicit content --- db/schema/mod.go | 2 + generated/conv/mod.go | 2 + generated/custom_models.go | 40 +-- generated/ent/internal/schema.go | 2 +- generated/ent/migrate/schema.go | 2 + generated/ent/mod.go | 24 +- generated/ent/mod/mod.go | 20 ++ generated/ent/mod/where.go | 30 +++ generated/ent/mod_create.go | 130 ++++++++++ generated/ent/mod_update.go | 68 +++++ generated/ent/mutation.go | 194 ++++++++++---- generated/ent/runtime/runtime.go | 8 + generated/generated.go | 238 ++++++++++++++++-- generated/models_gen.go | 48 ++-- gql/resolver_mods.go | 4 + .../20240823233610_add_mod_toggles.down.sql | 2 + .../sql/20240823233610_add_mod_toggles.up.sql | 2 + migrations/sql/atlas.sum | 4 +- schemas/mod.graphql | 6 + tests/mod_test.go | 12 +- 20 files changed, 725 insertions(+), 113 deletions(-) create mode 100644 migrations/sql/20240823233610_add_mod_toggles.down.sql create mode 100644 migrations/sql/20240823233610_add_mod_toggles.up.sql diff --git a/db/schema/mod.go b/db/schema/mod.go index c095a6d6..d83c654c 100644 --- a/db/schema/mod.go +++ b/db/schema/mod.go @@ -39,6 +39,8 @@ func (Mod) Fields() []ent.Field { field.String("mod_reference").MaxLen(32), field.Bool("hidden").Default(false), field.JSON("compatibility", &util.CompatibilityInfo{}).Optional(), + field.Bool("toggle_network_use").Default(false), + field.Bool("toggle_explicit_content").Default(false), } } diff --git a/generated/conv/mod.go b/generated/conv/mod.go index d54bd81b..1942d7e0 100755 --- a/generated/conv/mod.go +++ b/generated/conv/mod.go @@ -46,6 +46,8 @@ func (c *ModImpl) Convert(source *ent.Mod) *generated.Mod { } generatedMod.Tags = pGeneratedTagList generatedMod.Compatibility = c.pUtilCompatibilityInfoToPGeneratedCompatibilityInfo((*source).Compatibility) + generatedMod.ToggleNetworkUse = (*source).ToggleNetworkUse + generatedMod.ToggleExplicitContent = (*source).ToggleExplicitContent pGeneratedMod = &generatedMod } return pGeneratedMod diff --git a/generated/custom_models.go b/generated/custom_models.go index 84980883..6cd89605 100755 --- a/generated/custom_models.go +++ b/generated/custom_models.go @@ -3,25 +3,29 @@ package generated import "github.com/99designs/gqlgen/graphql" type NewMod struct { - Name string `json:"name" validate:"required,min=3,max=32"` - ShortDescription string `json:"short_description" validate:"required,min=16,max=128"` - FullDescription *string `json:"full_description"` - Logo *graphql.Upload `json:"logo"` - SourceURL *string `json:"source_url"` - ModReference string `json:"mod_reference"` - Hidden *bool `json:"hidden"` - TagIDs []string `json:"tagIDs" validate:"dive,min=3,max=24"` + Name string `json:"name" validate:"required,min=3,max=32"` + ShortDescription string `json:"short_description" validate:"required,min=16,max=128"` + FullDescription *string `json:"full_description"` + Logo *graphql.Upload `json:"logo"` + SourceURL *string `json:"source_url"` + ModReference string `json:"mod_reference"` + Hidden *bool `json:"hidden"` + TagIDs []string `json:"tagIDs" validate:"dive,min=3,max=24"` + ToggleNetworkUse *bool `json:"toggle_network_use"` + ToggleExplicitContent *bool `json:"toggle_explicit_content"` } type UpdateMod struct { - Name *string `json:"name" validate:"omitempty,min=3,max=32"` - ShortDescription *string `json:"short_description" validate:"omitempty,min=16,max=128"` - FullDescription *string `json:"full_description"` - Logo *graphql.Upload `json:"logo"` - SourceURL *string `json:"source_url"` - ModReference *string `json:"mod_reference"` - Hidden *bool `json:"hidden"` - Compatibility *CompatibilityInfoInput `json:"compatibility"` - Authors []UpdateUserMod `json:"authors"` - TagIDs []string `json:"tagIDs" validate:"dive,min=3,max=24"` + Name *string `json:"name" validate:"omitempty,min=3,max=32"` + ShortDescription *string `json:"short_description" validate:"omitempty,min=16,max=128"` + FullDescription *string `json:"full_description"` + Logo *graphql.Upload `json:"logo"` + SourceURL *string `json:"source_url"` + ModReference *string `json:"mod_reference"` + Hidden *bool `json:"hidden"` + Compatibility *CompatibilityInfoInput `json:"compatibility"` + Authors []UpdateUserMod `json:"authors"` + TagIDs []string `json:"tagIDs" validate:"dive,min=3,max=24"` + ToggleNetworkUse *bool `json:"toggle_network_use"` + ToggleExplicitContent *bool `json:"toggle_explicit_content"` } diff --git a/generated/ent/internal/schema.go b/generated/ent/internal/schema.go index 551987c7..b8b053cc 100644 --- a/generated/ent/internal/schema.go +++ b/generated/ent/internal/schema.go @@ -6,4 +6,4 @@ // Package internal holds a loadable version of the latest schema. package internal -const Schema = "{\"Schema\":\"github.com/satisfactorymodding/smr-api/db/schema\",\"Package\":\"github.com/satisfactorymodding/smr-api/generated/ent\",\"Schemas\":[{\"name\":\"Announcement\",\"config\":{\"Table\":\"\"},\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"message\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"importance\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"Guide\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"ref_name\":\"guides\",\"unique\":true,\"inverse\":true},{\"name\":\"tags\",\"type\":\"Tag\",\"through\":{\"N\":\"guide_tags\",\"T\":\"GuideTag\"}}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"short_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":128,\"validators\":1,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"guide\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"views\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":2,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"GuideTag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"guide\",\"type\":\"Guide\",\"field\":\"guide_id\",\"unique\":true,\"required\":true},{\"name\":\"tag\",\"type\":\"Tag\",\"field\":\"tag_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"guide_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"tag_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"guide_id\",\"tag_id\"],\"StructTag\":null}}},{\"name\":\"Mod\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"versions\",\"type\":\"Version\"},{\"name\":\"authors\",\"type\":\"User\",\"ref_name\":\"mods\",\"through\":{\"N\":\"user_mods\",\"T\":\"UserMod\"},\"inverse\":true},{\"name\":\"tags\",\"type\":\"Tag\",\"through\":{\"N\":\"mod_tags\",\"T\":\"ModTag\"}},{\"name\":\"dependents\",\"type\":\"Version\",\"ref_name\":\"dependencies\",\"through\":{\"N\":\"version_dependencies\",\"T\":\"VersionDependency\"},\"inverse\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"short_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":128,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"full_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"logo\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"source_url\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"creator_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"approved\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"views\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hotness\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"popularity\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":9,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"downloads\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":10,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"denied\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":11,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"last_version_date\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":12,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_reference\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":13,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hidden\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":14,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"compatibility\",\"type\":{\"Type\":3,\"Ident\":\"*util.CompatibilityInfo\",\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"PkgName\":\"util\",\"Nillable\":true,\"RType\":{\"Name\":\"CompatibilityInfo\",\"Ident\":\"util.CompatibilityInfo\",\"Kind\":22,\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"Methods\":{}}},\"optional\":true,\"position\":{\"Index\":15,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"fields\":[\"last_version_date\"]},{\"unique\":true,\"fields\":[\"mod_reference\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"ModTag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true},{\"name\":\"tag\",\"type\":\"Tag\",\"field\":\"tag_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"tag_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"mod_id\",\"tag_id\"],\"StructTag\":null}}},{\"name\":\"SatisfactoryVersion\",\"config\":{\"Table\":\"\"},\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"version\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"unique\":true,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"engine_version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"default\":true,\"default_value\":\"4.26\",\"default_kind\":24,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}]},{\"name\":\"Tag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mods\",\"type\":\"Mod\",\"ref_name\":\"tags\",\"through\":{\"N\":\"mod_tags\",\"T\":\"ModTag\"},\"inverse\":true},{\"name\":\"guides\",\"type\":\"Guide\",\"ref_name\":\"tags\",\"through\":{\"N\":\"guide_tags\",\"T\":\"GuideTag\"},\"inverse\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":24,\"unique\":true,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":512,\"optional\":true,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"User\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"guides\",\"type\":\"Guide\"},{\"name\":\"sessions\",\"type\":\"UserSession\",\"storage_key\":{\"Table\":\"\",\"Symbols\":null,\"Columns\":[\"user_id\"]}},{\"name\":\"mods\",\"type\":\"Mod\",\"through\":{\"N\":\"user_mods\",\"T\":\"UserMod\"}},{\"name\":\"groups\",\"type\":\"UserGroup\"}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"email\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":256,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"username\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"avatar\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"joined_from\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"banned\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"rank\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":1,\"default_kind\":2,\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"github_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"google_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"facebook_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"email\"]},{\"unique\":true,\"fields\":[\"github_id\"]},{\"unique\":true,\"fields\":[\"google_id\"]},{\"unique\":true,\"fields\":[\"facebook_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"UserGroup\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"ref_name\":\"groups\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":14,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"group_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":14,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"user_id\",\"group_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"UserMod\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"unique\":true,\"required\":true},{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"role\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"user_id\",\"mod_id\"],\"StructTag\":null}}},{\"name\":\"UserSession\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"ref_name\":\"sessions\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"token\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":512,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"user_agent\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"token\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"Version\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"ref_name\":\"versions\",\"unique\":true,\"inverse\":true,\"required\":true},{\"name\":\"dependencies\",\"type\":\"Mod\",\"through\":{\"N\":\"version_dependencies\",\"T\":\"VersionDependency\"}},{\"name\":\"targets\",\"type\":\"VersionTarget\"}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"game_version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"changelog\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"downloads\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"key\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"stability\",\"type\":{\"Type\":6,\"Ident\":\"util.Stability\",\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"PkgName\":\"util\",\"Nillable\":false,\"RType\":{\"Name\":\"Stability\",\"Ident\":\"util.Stability\",\"Kind\":24,\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"Methods\":{\"Values\":{\"In\":[],\"Out\":[{\"Name\":\"\",\"Ident\":\"[]string\",\"Kind\":23,\"PkgPath\":\"\",\"Methods\":null}]}}}},\"enums\":[{\"N\":\"release\",\"V\":\"release\"},{\"N\":\"beta\",\"V\":\"beta\"},{\"N\":\"alpha\",\"V\":\"alpha\"}],\"default\":true,\"default_value\":\"release\",\"default_kind\":24,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"approved\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hotness\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"denied\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":9,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"metadata\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":10,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_reference\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":11,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_major\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":12,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_minor\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":13,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_patch\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":14,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"size\",\"type\":{\"Type\":13,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":15,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hash\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":64,\"optional\":true,\"validators\":2,\"position\":{\"Index\":16,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"fields\":[\"approved\"]},{\"fields\":[\"denied\"]},{\"fields\":[\"mod_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"VersionDependency\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"version\",\"type\":\"Version\",\"field\":\"version_id\",\"unique\":true,\"required\":true},{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"version_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"condition\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":64,\"validators\":1,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"optional\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}],\"annotations\":{\"Fields\":{\"ID\":[\"version_id\",\"mod_id\"],\"StructTag\":null}}},{\"name\":\"VersionTarget\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"version\",\"type\":\"Version\",\"field\":\"version_id\",\"ref_name\":\"targets\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"version_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"target_name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"key\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hash\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"size\",\"type\":{\"Type\":13,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"unique\":true,\"fields\":[\"version_id\",\"target_name\"]}]}],\"Features\":[\"sql/modifier\",\"intercept\",\"schema/snapshot\",\"sql/execquery\",\"sql/upsert\"]}" +const Schema = "{\"Schema\":\"github.com/satisfactorymodding/smr-api/db/schema\",\"Package\":\"github.com/satisfactorymodding/smr-api/generated/ent\",\"Schemas\":[{\"name\":\"Announcement\",\"config\":{\"Table\":\"\"},\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"message\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"importance\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"Guide\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"ref_name\":\"guides\",\"unique\":true,\"inverse\":true},{\"name\":\"tags\",\"type\":\"Tag\",\"through\":{\"N\":\"guide_tags\",\"T\":\"GuideTag\"}}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"short_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":128,\"validators\":1,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"guide\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"views\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":2,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"GuideTag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"guide\",\"type\":\"Guide\",\"field\":\"guide_id\",\"unique\":true,\"required\":true},{\"name\":\"tag\",\"type\":\"Tag\",\"field\":\"tag_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"guide_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"tag_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"guide_id\",\"tag_id\"],\"StructTag\":null}}},{\"name\":\"Mod\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"versions\",\"type\":\"Version\"},{\"name\":\"authors\",\"type\":\"User\",\"ref_name\":\"mods\",\"through\":{\"N\":\"user_mods\",\"T\":\"UserMod\"},\"inverse\":true},{\"name\":\"tags\",\"type\":\"Tag\",\"through\":{\"N\":\"mod_tags\",\"T\":\"ModTag\"}},{\"name\":\"dependents\",\"type\":\"Version\",\"ref_name\":\"dependencies\",\"through\":{\"N\":\"version_dependencies\",\"T\":\"VersionDependency\"},\"inverse\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"short_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":128,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"full_description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"logo\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"source_url\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"creator_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"approved\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"views\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hotness\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"popularity\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":9,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"downloads\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":10,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"denied\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":11,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"last_version_date\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":12,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_reference\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":13,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hidden\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":14,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"compatibility\",\"type\":{\"Type\":3,\"Ident\":\"*util.CompatibilityInfo\",\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"PkgName\":\"util\",\"Nillable\":true,\"RType\":{\"Name\":\"CompatibilityInfo\",\"Ident\":\"util.CompatibilityInfo\",\"Kind\":22,\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"Methods\":{}}},\"optional\":true,\"position\":{\"Index\":15,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"toggle_network_use\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":16,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"toggle_explicit_content\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":17,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"fields\":[\"last_version_date\"]},{\"unique\":true,\"fields\":[\"mod_reference\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"ModTag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true},{\"name\":\"tag\",\"type\":\"Tag\",\"field\":\"tag_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"tag_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"mod_id\",\"tag_id\"],\"StructTag\":null}}},{\"name\":\"SatisfactoryVersion\",\"config\":{\"Table\":\"\"},\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"version\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"unique\":true,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"engine_version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"default\":true,\"default_value\":\"4.26\",\"default_kind\":24,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}]},{\"name\":\"Tag\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mods\",\"type\":\"Mod\",\"ref_name\":\"tags\",\"through\":{\"N\":\"mod_tags\",\"T\":\"ModTag\"},\"inverse\":true},{\"name\":\"guides\",\"type\":\"Guide\",\"ref_name\":\"tags\",\"through\":{\"N\":\"guide_tags\",\"T\":\"GuideTag\"},\"inverse\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":24,\"unique\":true,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"description\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":512,\"optional\":true,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"User\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"guides\",\"type\":\"Guide\"},{\"name\":\"sessions\",\"type\":\"UserSession\",\"storage_key\":{\"Table\":\"\",\"Symbols\":null,\"Columns\":[\"user_id\"]}},{\"name\":\"mods\",\"type\":\"Mod\",\"through\":{\"N\":\"user_mods\",\"T\":\"UserMod\"}},{\"name\":\"groups\",\"type\":\"UserGroup\"}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"email\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":256,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"username\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"avatar\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"joined_from\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"banned\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"rank\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":1,\"default_kind\":2,\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"github_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"google_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"facebook_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"optional\":true,\"validators\":1,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"email\"]},{\"unique\":true,\"fields\":[\"github_id\"]},{\"unique\":true,\"fields\":[\"google_id\"]},{\"unique\":true,\"fields\":[\"facebook_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"UserGroup\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"ref_name\":\"groups\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":14,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"group_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":14,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"user_id\",\"group_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"UserMod\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"field\":\"user_id\",\"unique\":true,\"required\":true},{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"user_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"role\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}}],\"annotations\":{\"Fields\":{\"ID\":[\"user_id\",\"mod_id\"],\"StructTag\":null}}},{\"name\":\"UserSession\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"user\",\"type\":\"User\",\"ref_name\":\"sessions\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"token\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":512,\"validators\":1,\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"user_agent\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"unique\":true,\"fields\":[\"token\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"Version\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"ref_name\":\"versions\",\"unique\":true,\"inverse\":true,\"required\":true},{\"name\":\"dependencies\",\"type\":\"Mod\",\"through\":{\"N\":\"version_dependencies\",\"T\":\"VersionDependency\"}},{\"name\":\"targets\",\"type\":\"VersionTarget\"}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":16,\"validators\":1,\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"game_version\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"changelog\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"downloads\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"key\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":5,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"stability\",\"type\":{\"Type\":6,\"Ident\":\"util.Stability\",\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"PkgName\":\"util\",\"Nillable\":false,\"RType\":{\"Name\":\"Stability\",\"Ident\":\"util.Stability\",\"Kind\":24,\"PkgPath\":\"github.com/satisfactorymodding/smr-api/util\",\"Methods\":{\"Values\":{\"In\":[],\"Out\":[{\"Name\":\"\",\"Ident\":\"[]string\",\"Kind\":23,\"PkgPath\":\"\",\"Methods\":null}]}}}},\"enums\":[{\"N\":\"release\",\"V\":\"release\"},{\"N\":\"beta\",\"V\":\"beta\"},{\"N\":\"alpha\",\"V\":\"alpha\"}],\"default\":true,\"default_value\":\"release\",\"default_kind\":24,\"position\":{\"Index\":6,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"approved\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":7,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hotness\",\"type\":{\"Type\":17,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":0,\"default_kind\":7,\"position\":{\"Index\":8,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"denied\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_value\":false,\"default_kind\":1,\"position\":{\"Index\":9,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"metadata\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":10,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_reference\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":32,\"validators\":1,\"position\":{\"Index\":11,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_major\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":12,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_minor\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":13,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"version_patch\",\"type\":{\"Type\":12,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":14,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"size\",\"type\":{\"Type\":13,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":15,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hash\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":64,\"optional\":true,\"validators\":2,\"position\":{\"Index\":16,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]},{\"fields\":[\"approved\"]},{\"fields\":[\"denied\"]},{\"fields\":[\"mod_id\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":2}]},{\"name\":\"VersionDependency\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"version\",\"type\":\"Version\",\"field\":\"version_id\",\"unique\":true,\"required\":true},{\"name\":\"mod\",\"type\":\"Mod\",\"field\":\"mod_id\",\"unique\":true,\"required\":true}],\"fields\":[{\"name\":\"created_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"immutable\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"updated_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"update_default\":true,\"position\":{\"Index\":1,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"deleted_at\",\"type\":{\"Type\":2,\"Ident\":\"\",\"PkgPath\":\"time\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}},{\"name\":\"version_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"mod_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"condition\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"size\":64,\"validators\":1,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"optional\",\"type\":{\"Type\":1,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"fields\":[\"deleted_at\"]}],\"hooks\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}],\"interceptors\":[{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":1}],\"annotations\":{\"Fields\":{\"ID\":[\"version_id\",\"mod_id\"],\"StructTag\":null}}},{\"name\":\"VersionTarget\",\"config\":{\"Table\":\"\"},\"edges\":[{\"name\":\"version\",\"type\":\"Version\",\"field\":\"version_id\",\"ref_name\":\"targets\",\"unique\":true,\"inverse\":true,\"required\":true}],\"fields\":[{\"name\":\"id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"default\":true,\"default_kind\":19,\"position\":{\"Index\":0,\"MixedIn\":true,\"MixinIndex\":0}},{\"name\":\"version_id\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":0,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"target_name\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"position\":{\"Index\":1,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"key\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":2,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"hash\",\"type\":{\"Type\":7,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":3,\"MixedIn\":false,\"MixinIndex\":0}},{\"name\":\"size\",\"type\":{\"Type\":13,\"Ident\":\"\",\"PkgPath\":\"\",\"PkgName\":\"\",\"Nillable\":false,\"RType\":null},\"optional\":true,\"position\":{\"Index\":4,\"MixedIn\":false,\"MixinIndex\":0}}],\"indexes\":[{\"unique\":true,\"fields\":[\"version_id\",\"target_name\"]}]}],\"Features\":[\"sql/modifier\",\"intercept\",\"schema/snapshot\",\"sql/execquery\",\"sql/upsert\"]}" diff --git a/generated/ent/migrate/schema.go b/generated/ent/migrate/schema.go index 6fafb654..e98bf162 100644 --- a/generated/ent/migrate/schema.go +++ b/generated/ent/migrate/schema.go @@ -110,6 +110,8 @@ var ( {Name: "mod_reference", Type: field.TypeString, Size: 32}, {Name: "hidden", Type: field.TypeBool, Default: false}, {Name: "compatibility", Type: field.TypeJSON, Nullable: true}, + {Name: "toggle_network_use", Type: field.TypeBool, Default: false}, + {Name: "toggle_explicit_content", Type: field.TypeBool, Default: false}, } // ModsTable holds the schema information for the "mods" table. ModsTable = &schema.Table{ diff --git a/generated/ent/mod.go b/generated/ent/mod.go index 87a147d8..dc5e1105 100644 --- a/generated/ent/mod.go +++ b/generated/ent/mod.go @@ -57,6 +57,10 @@ type Mod struct { Hidden bool `json:"hidden,omitempty"` // Compatibility holds the value of the "compatibility" field. Compatibility *util.CompatibilityInfo `json:"compatibility,omitempty"` + // ToggleNetworkUse holds the value of the "toggle_network_use" field. + ToggleNetworkUse bool `json:"toggle_network_use,omitempty"` + // ToggleExplicitContent holds the value of the "toggle_explicit_content" field. + ToggleExplicitContent bool `json:"toggle_explicit_content,omitempty"` // Edges holds the relations/edges for other nodes in the graph. // The values are being populated by the ModQuery when eager-loading is set. Edges ModEdges `json:"edges"` @@ -154,7 +158,7 @@ func (*Mod) scanValues(columns []string) ([]any, error) { switch columns[i] { case mod.FieldCompatibility: values[i] = new([]byte) - case mod.FieldApproved, mod.FieldDenied, mod.FieldHidden: + case mod.FieldApproved, mod.FieldDenied, mod.FieldHidden, mod.FieldToggleNetworkUse, mod.FieldToggleExplicitContent: values[i] = new(sql.NullBool) case mod.FieldViews, mod.FieldHotness, mod.FieldPopularity, mod.FieldDownloads: values[i] = new(sql.NullInt64) @@ -299,6 +303,18 @@ func (m *Mod) assignValues(columns []string, values []any) error { return fmt.Errorf("unmarshal field compatibility: %w", err) } } + case mod.FieldToggleNetworkUse: + if value, ok := values[i].(*sql.NullBool); !ok { + return fmt.Errorf("unexpected type %T for field toggle_network_use", values[i]) + } else if value.Valid { + m.ToggleNetworkUse = value.Bool + } + case mod.FieldToggleExplicitContent: + if value, ok := values[i].(*sql.NullBool); !ok { + return fmt.Errorf("unexpected type %T for field toggle_explicit_content", values[i]) + } else if value.Valid { + m.ToggleExplicitContent = value.Bool + } default: m.selectValues.Set(columns[i], values[i]) } @@ -426,6 +442,12 @@ func (m *Mod) String() string { builder.WriteString(", ") builder.WriteString("compatibility=") builder.WriteString(fmt.Sprintf("%v", m.Compatibility)) + builder.WriteString(", ") + builder.WriteString("toggle_network_use=") + builder.WriteString(fmt.Sprintf("%v", m.ToggleNetworkUse)) + builder.WriteString(", ") + builder.WriteString("toggle_explicit_content=") + builder.WriteString(fmt.Sprintf("%v", m.ToggleExplicitContent)) builder.WriteByte(')') return builder.String() } diff --git a/generated/ent/mod/mod.go b/generated/ent/mod/mod.go index 79ae3c80..edd4b69d 100644 --- a/generated/ent/mod/mod.go +++ b/generated/ent/mod/mod.go @@ -53,6 +53,10 @@ const ( FieldHidden = "hidden" // FieldCompatibility holds the string denoting the compatibility field in the database. FieldCompatibility = "compatibility" + // FieldToggleNetworkUse holds the string denoting the toggle_network_use field in the database. + FieldToggleNetworkUse = "toggle_network_use" + // FieldToggleExplicitContent holds the string denoting the toggle_explicit_content field in the database. + FieldToggleExplicitContent = "toggle_explicit_content" // EdgeVersions holds the string denoting the versions edge name in mutations. EdgeVersions = "versions" // EdgeAuthors holds the string denoting the authors edge name in mutations. @@ -136,6 +140,8 @@ var Columns = []string{ FieldModReference, FieldHidden, FieldCompatibility, + FieldToggleNetworkUse, + FieldToggleExplicitContent, } var ( @@ -194,6 +200,10 @@ var ( ModReferenceValidator func(string) error // DefaultHidden holds the default value on creation for the "hidden" field. DefaultHidden bool + // DefaultToggleNetworkUse holds the default value on creation for the "toggle_network_use" field. + DefaultToggleNetworkUse bool + // DefaultToggleExplicitContent holds the default value on creation for the "toggle_explicit_content" field. + DefaultToggleExplicitContent bool // DefaultID holds the default value on creation for the "id" field. DefaultID func() string ) @@ -296,6 +306,16 @@ func ByHidden(opts ...sql.OrderTermOption) OrderOption { return sql.OrderByField(FieldHidden, opts...).ToFunc() } +// ByToggleNetworkUse orders the results by the toggle_network_use field. +func ByToggleNetworkUse(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldToggleNetworkUse, opts...).ToFunc() +} + +// ByToggleExplicitContent orders the results by the toggle_explicit_content field. +func ByToggleExplicitContent(opts ...sql.OrderTermOption) OrderOption { + return sql.OrderByField(FieldToggleExplicitContent, opts...).ToFunc() +} + // ByVersionsCount orders the results by versions count. func ByVersionsCount(opts ...sql.OrderTermOption) OrderOption { return func(s *sql.Selector) { diff --git a/generated/ent/mod/where.go b/generated/ent/mod/where.go index a284da4f..7861fc39 100644 --- a/generated/ent/mod/where.go +++ b/generated/ent/mod/where.go @@ -155,6 +155,16 @@ func Hidden(v bool) predicate.Mod { return predicate.Mod(sql.FieldEQ(FieldHidden, v)) } +// ToggleNetworkUse applies equality check predicate on the "toggle_network_use" field. It's identical to ToggleNetworkUseEQ. +func ToggleNetworkUse(v bool) predicate.Mod { + return predicate.Mod(sql.FieldEQ(FieldToggleNetworkUse, v)) +} + +// ToggleExplicitContent applies equality check predicate on the "toggle_explicit_content" field. It's identical to ToggleExplicitContentEQ. +func ToggleExplicitContent(v bool) predicate.Mod { + return predicate.Mod(sql.FieldEQ(FieldToggleExplicitContent, v)) +} + // CreatedAtEQ applies the EQ predicate on the "created_at" field. func CreatedAtEQ(v time.Time) predicate.Mod { return predicate.Mod(sql.FieldEQ(FieldCreatedAt, v)) @@ -1000,6 +1010,26 @@ func CompatibilityNotNil() predicate.Mod { return predicate.Mod(sql.FieldNotNull(FieldCompatibility)) } +// ToggleNetworkUseEQ applies the EQ predicate on the "toggle_network_use" field. +func ToggleNetworkUseEQ(v bool) predicate.Mod { + return predicate.Mod(sql.FieldEQ(FieldToggleNetworkUse, v)) +} + +// ToggleNetworkUseNEQ applies the NEQ predicate on the "toggle_network_use" field. +func ToggleNetworkUseNEQ(v bool) predicate.Mod { + return predicate.Mod(sql.FieldNEQ(FieldToggleNetworkUse, v)) +} + +// ToggleExplicitContentEQ applies the EQ predicate on the "toggle_explicit_content" field. +func ToggleExplicitContentEQ(v bool) predicate.Mod { + return predicate.Mod(sql.FieldEQ(FieldToggleExplicitContent, v)) +} + +// ToggleExplicitContentNEQ applies the NEQ predicate on the "toggle_explicit_content" field. +func ToggleExplicitContentNEQ(v bool) predicate.Mod { + return predicate.Mod(sql.FieldNEQ(FieldToggleExplicitContent, v)) +} + // HasVersions applies the HasEdge predicate on the "versions" edge. func HasVersions() predicate.Mod { return predicate.Mod(func(s *sql.Selector) { diff --git a/generated/ent/mod_create.go b/generated/ent/mod_create.go index 389e47f2..eb5f2b2d 100644 --- a/generated/ent/mod_create.go +++ b/generated/ent/mod_create.go @@ -237,6 +237,34 @@ func (mc *ModCreate) SetCompatibility(ui *util.CompatibilityInfo) *ModCreate { return mc } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (mc *ModCreate) SetToggleNetworkUse(b bool) *ModCreate { + mc.mutation.SetToggleNetworkUse(b) + return mc +} + +// SetNillableToggleNetworkUse sets the "toggle_network_use" field if the given value is not nil. +func (mc *ModCreate) SetNillableToggleNetworkUse(b *bool) *ModCreate { + if b != nil { + mc.SetToggleNetworkUse(*b) + } + return mc +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (mc *ModCreate) SetToggleExplicitContent(b bool) *ModCreate { + mc.mutation.SetToggleExplicitContent(b) + return mc +} + +// SetNillableToggleExplicitContent sets the "toggle_explicit_content" field if the given value is not nil. +func (mc *ModCreate) SetNillableToggleExplicitContent(b *bool) *ModCreate { + if b != nil { + mc.SetToggleExplicitContent(*b) + } + return mc +} + // SetID sets the "id" field. func (mc *ModCreate) SetID(s string) *ModCreate { mc.mutation.SetID(s) @@ -390,6 +418,14 @@ func (mc *ModCreate) defaults() error { v := mod.DefaultHidden mc.mutation.SetHidden(v) } + if _, ok := mc.mutation.ToggleNetworkUse(); !ok { + v := mod.DefaultToggleNetworkUse + mc.mutation.SetToggleNetworkUse(v) + } + if _, ok := mc.mutation.ToggleExplicitContent(); !ok { + v := mod.DefaultToggleExplicitContent + mc.mutation.SetToggleExplicitContent(v) + } if _, ok := mc.mutation.ID(); !ok { if mod.DefaultID == nil { return fmt.Errorf("ent: uninitialized mod.DefaultID (forgotten import ent/runtime?)") @@ -462,6 +498,12 @@ func (mc *ModCreate) check() error { if _, ok := mc.mutation.Hidden(); !ok { return &ValidationError{Name: "hidden", err: errors.New(`ent: missing required field "Mod.hidden"`)} } + if _, ok := mc.mutation.ToggleNetworkUse(); !ok { + return &ValidationError{Name: "toggle_network_use", err: errors.New(`ent: missing required field "Mod.toggle_network_use"`)} + } + if _, ok := mc.mutation.ToggleExplicitContent(); !ok { + return &ValidationError{Name: "toggle_explicit_content", err: errors.New(`ent: missing required field "Mod.toggle_explicit_content"`)} + } return nil } @@ -574,6 +616,14 @@ func (mc *ModCreate) createSpec() (*Mod, *sqlgraph.CreateSpec) { _spec.SetField(mod.FieldCompatibility, field.TypeJSON, value) _node.Compatibility = value } + if value, ok := mc.mutation.ToggleNetworkUse(); ok { + _spec.SetField(mod.FieldToggleNetworkUse, field.TypeBool, value) + _node.ToggleNetworkUse = value + } + if value, ok := mc.mutation.ToggleExplicitContent(); ok { + _spec.SetField(mod.FieldToggleExplicitContent, field.TypeBool, value) + _node.ToggleExplicitContent = value + } if nodes := mc.mutation.VersionsIDs(); len(nodes) > 0 { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2M, @@ -958,6 +1008,30 @@ func (u *ModUpsert) ClearCompatibility() *ModUpsert { return u } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (u *ModUpsert) SetToggleNetworkUse(v bool) *ModUpsert { + u.Set(mod.FieldToggleNetworkUse, v) + return u +} + +// UpdateToggleNetworkUse sets the "toggle_network_use" field to the value that was provided on create. +func (u *ModUpsert) UpdateToggleNetworkUse() *ModUpsert { + u.SetExcluded(mod.FieldToggleNetworkUse) + return u +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (u *ModUpsert) SetToggleExplicitContent(v bool) *ModUpsert { + u.Set(mod.FieldToggleExplicitContent, v) + return u +} + +// UpdateToggleExplicitContent sets the "toggle_explicit_content" field to the value that was provided on create. +func (u *ModUpsert) UpdateToggleExplicitContent() *ModUpsert { + u.SetExcluded(mod.FieldToggleExplicitContent) + return u +} + // UpdateNewValues updates the mutable fields using the new values that were set on create except the ID field. // Using this option is equivalent to using: // @@ -1317,6 +1391,34 @@ func (u *ModUpsertOne) ClearCompatibility() *ModUpsertOne { }) } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (u *ModUpsertOne) SetToggleNetworkUse(v bool) *ModUpsertOne { + return u.Update(func(s *ModUpsert) { + s.SetToggleNetworkUse(v) + }) +} + +// UpdateToggleNetworkUse sets the "toggle_network_use" field to the value that was provided on create. +func (u *ModUpsertOne) UpdateToggleNetworkUse() *ModUpsertOne { + return u.Update(func(s *ModUpsert) { + s.UpdateToggleNetworkUse() + }) +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (u *ModUpsertOne) SetToggleExplicitContent(v bool) *ModUpsertOne { + return u.Update(func(s *ModUpsert) { + s.SetToggleExplicitContent(v) + }) +} + +// UpdateToggleExplicitContent sets the "toggle_explicit_content" field to the value that was provided on create. +func (u *ModUpsertOne) UpdateToggleExplicitContent() *ModUpsertOne { + return u.Update(func(s *ModUpsert) { + s.UpdateToggleExplicitContent() + }) +} + // Exec executes the query. func (u *ModUpsertOne) Exec(ctx context.Context) error { if len(u.create.conflict) == 0 { @@ -1843,6 +1945,34 @@ func (u *ModUpsertBulk) ClearCompatibility() *ModUpsertBulk { }) } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (u *ModUpsertBulk) SetToggleNetworkUse(v bool) *ModUpsertBulk { + return u.Update(func(s *ModUpsert) { + s.SetToggleNetworkUse(v) + }) +} + +// UpdateToggleNetworkUse sets the "toggle_network_use" field to the value that was provided on create. +func (u *ModUpsertBulk) UpdateToggleNetworkUse() *ModUpsertBulk { + return u.Update(func(s *ModUpsert) { + s.UpdateToggleNetworkUse() + }) +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (u *ModUpsertBulk) SetToggleExplicitContent(v bool) *ModUpsertBulk { + return u.Update(func(s *ModUpsert) { + s.SetToggleExplicitContent(v) + }) +} + +// UpdateToggleExplicitContent sets the "toggle_explicit_content" field to the value that was provided on create. +func (u *ModUpsertBulk) UpdateToggleExplicitContent() *ModUpsertBulk { + return u.Update(func(s *ModUpsert) { + s.UpdateToggleExplicitContent() + }) +} + // Exec executes the query. func (u *ModUpsertBulk) Exec(ctx context.Context) error { if u.create.err != nil { diff --git a/generated/ent/mod_update.go b/generated/ent/mod_update.go index 8db066d6..9b3f9c67 100644 --- a/generated/ent/mod_update.go +++ b/generated/ent/mod_update.go @@ -321,6 +321,34 @@ func (mu *ModUpdate) ClearCompatibility() *ModUpdate { return mu } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (mu *ModUpdate) SetToggleNetworkUse(b bool) *ModUpdate { + mu.mutation.SetToggleNetworkUse(b) + return mu +} + +// SetNillableToggleNetworkUse sets the "toggle_network_use" field if the given value is not nil. +func (mu *ModUpdate) SetNillableToggleNetworkUse(b *bool) *ModUpdate { + if b != nil { + mu.SetToggleNetworkUse(*b) + } + return mu +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (mu *ModUpdate) SetToggleExplicitContent(b bool) *ModUpdate { + mu.mutation.SetToggleExplicitContent(b) + return mu +} + +// SetNillableToggleExplicitContent sets the "toggle_explicit_content" field if the given value is not nil. +func (mu *ModUpdate) SetNillableToggleExplicitContent(b *bool) *ModUpdate { + if b != nil { + mu.SetToggleExplicitContent(*b) + } + return mu +} + // AddVersionIDs adds the "versions" edge to the Version entity by IDs. func (mu *ModUpdate) AddVersionIDs(ids ...string) *ModUpdate { mu.mutation.AddVersionIDs(ids...) @@ -628,6 +656,12 @@ func (mu *ModUpdate) sqlSave(ctx context.Context) (n int, err error) { if mu.mutation.CompatibilityCleared() { _spec.ClearField(mod.FieldCompatibility, field.TypeJSON) } + if value, ok := mu.mutation.ToggleNetworkUse(); ok { + _spec.SetField(mod.FieldToggleNetworkUse, field.TypeBool, value) + } + if value, ok := mu.mutation.ToggleExplicitContent(); ok { + _spec.SetField(mod.FieldToggleExplicitContent, field.TypeBool, value) + } if mu.mutation.VersionsCleared() { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2M, @@ -1130,6 +1164,34 @@ func (muo *ModUpdateOne) ClearCompatibility() *ModUpdateOne { return muo } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (muo *ModUpdateOne) SetToggleNetworkUse(b bool) *ModUpdateOne { + muo.mutation.SetToggleNetworkUse(b) + return muo +} + +// SetNillableToggleNetworkUse sets the "toggle_network_use" field if the given value is not nil. +func (muo *ModUpdateOne) SetNillableToggleNetworkUse(b *bool) *ModUpdateOne { + if b != nil { + muo.SetToggleNetworkUse(*b) + } + return muo +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (muo *ModUpdateOne) SetToggleExplicitContent(b bool) *ModUpdateOne { + muo.mutation.SetToggleExplicitContent(b) + return muo +} + +// SetNillableToggleExplicitContent sets the "toggle_explicit_content" field if the given value is not nil. +func (muo *ModUpdateOne) SetNillableToggleExplicitContent(b *bool) *ModUpdateOne { + if b != nil { + muo.SetToggleExplicitContent(*b) + } + return muo +} + // AddVersionIDs adds the "versions" edge to the Version entity by IDs. func (muo *ModUpdateOne) AddVersionIDs(ids ...string) *ModUpdateOne { muo.mutation.AddVersionIDs(ids...) @@ -1467,6 +1529,12 @@ func (muo *ModUpdateOne) sqlSave(ctx context.Context) (_node *Mod, err error) { if muo.mutation.CompatibilityCleared() { _spec.ClearField(mod.FieldCompatibility, field.TypeJSON) } + if value, ok := muo.mutation.ToggleNetworkUse(); ok { + _spec.SetField(mod.FieldToggleNetworkUse, field.TypeBool, value) + } + if value, ok := muo.mutation.ToggleExplicitContent(); ok { + _spec.SetField(mod.FieldToggleExplicitContent, field.TypeBool, value) + } if muo.mutation.VersionsCleared() { edge := &sqlgraph.EdgeSpec{ Rel: sqlgraph.O2M, diff --git a/generated/ent/mutation.go b/generated/ent/mutation.go index 2acb4b51..c3136b0e 100644 --- a/generated/ent/mutation.go +++ b/generated/ent/mutation.go @@ -1932,48 +1932,50 @@ func (m *GuideTagMutation) ResetEdge(name string) error { // ModMutation represents an operation that mutates the Mod nodes in the graph. type ModMutation struct { config - op Op - typ string - id *string - created_at *time.Time - updated_at *time.Time - deleted_at *time.Time - name *string - short_description *string - full_description *string - logo *string - source_url *string - creator_id *string - approved *bool - views *uint - addviews *int - hotness *uint - addhotness *int - popularity *uint - addpopularity *int - downloads *uint - adddownloads *int - denied *bool - last_version_date *time.Time - mod_reference *string - hidden *bool - compatibility **util.CompatibilityInfo - clearedFields map[string]struct{} - versions map[string]struct{} - removedversions map[string]struct{} - clearedversions bool - authors map[string]struct{} - removedauthors map[string]struct{} - clearedauthors bool - tags map[string]struct{} - removedtags map[string]struct{} - clearedtags bool - dependents map[string]struct{} - removeddependents map[string]struct{} - cleareddependents bool - done bool - oldValue func(context.Context) (*Mod, error) - predicates []predicate.Mod + op Op + typ string + id *string + created_at *time.Time + updated_at *time.Time + deleted_at *time.Time + name *string + short_description *string + full_description *string + logo *string + source_url *string + creator_id *string + approved *bool + views *uint + addviews *int + hotness *uint + addhotness *int + popularity *uint + addpopularity *int + downloads *uint + adddownloads *int + denied *bool + last_version_date *time.Time + mod_reference *string + hidden *bool + compatibility **util.CompatibilityInfo + toggle_network_use *bool + toggle_explicit_content *bool + clearedFields map[string]struct{} + versions map[string]struct{} + removedversions map[string]struct{} + clearedversions bool + authors map[string]struct{} + removedauthors map[string]struct{} + clearedauthors bool + tags map[string]struct{} + removedtags map[string]struct{} + clearedtags bool + dependents map[string]struct{} + removeddependents map[string]struct{} + cleareddependents bool + done bool + oldValue func(context.Context) (*Mod, error) + predicates []predicate.Mod } var _ ent.Mutation = (*ModMutation)(nil) @@ -2896,6 +2898,78 @@ func (m *ModMutation) ResetCompatibility() { delete(m.clearedFields, mod.FieldCompatibility) } +// SetToggleNetworkUse sets the "toggle_network_use" field. +func (m *ModMutation) SetToggleNetworkUse(b bool) { + m.toggle_network_use = &b +} + +// ToggleNetworkUse returns the value of the "toggle_network_use" field in the mutation. +func (m *ModMutation) ToggleNetworkUse() (r bool, exists bool) { + v := m.toggle_network_use + if v == nil { + return + } + return *v, true +} + +// OldToggleNetworkUse returns the old "toggle_network_use" field's value of the Mod entity. +// If the Mod object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *ModMutation) OldToggleNetworkUse(ctx context.Context) (v bool, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldToggleNetworkUse is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldToggleNetworkUse requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldToggleNetworkUse: %w", err) + } + return oldValue.ToggleNetworkUse, nil +} + +// ResetToggleNetworkUse resets all changes to the "toggle_network_use" field. +func (m *ModMutation) ResetToggleNetworkUse() { + m.toggle_network_use = nil +} + +// SetToggleExplicitContent sets the "toggle_explicit_content" field. +func (m *ModMutation) SetToggleExplicitContent(b bool) { + m.toggle_explicit_content = &b +} + +// ToggleExplicitContent returns the value of the "toggle_explicit_content" field in the mutation. +func (m *ModMutation) ToggleExplicitContent() (r bool, exists bool) { + v := m.toggle_explicit_content + if v == nil { + return + } + return *v, true +} + +// OldToggleExplicitContent returns the old "toggle_explicit_content" field's value of the Mod entity. +// If the Mod object wasn't provided to the builder, the object is fetched from the database. +// An error is returned if the mutation operation is not UpdateOne, or the database query fails. +func (m *ModMutation) OldToggleExplicitContent(ctx context.Context) (v bool, err error) { + if !m.op.Is(OpUpdateOne) { + return v, errors.New("OldToggleExplicitContent is only allowed on UpdateOne operations") + } + if m.id == nil || m.oldValue == nil { + return v, errors.New("OldToggleExplicitContent requires an ID field in the mutation") + } + oldValue, err := m.oldValue(ctx) + if err != nil { + return v, fmt.Errorf("querying old value for OldToggleExplicitContent: %w", err) + } + return oldValue.ToggleExplicitContent, nil +} + +// ResetToggleExplicitContent resets all changes to the "toggle_explicit_content" field. +func (m *ModMutation) ResetToggleExplicitContent() { + m.toggle_explicit_content = nil +} + // AddVersionIDs adds the "versions" edge to the Version entity by ids. func (m *ModMutation) AddVersionIDs(ids ...string) { if m.versions == nil { @@ -3146,7 +3220,7 @@ func (m *ModMutation) Type() string { // order to get all numeric fields that were incremented/decremented, call // AddedFields(). func (m *ModMutation) Fields() []string { - fields := make([]string, 0, 19) + fields := make([]string, 0, 21) if m.created_at != nil { fields = append(fields, mod.FieldCreatedAt) } @@ -3204,6 +3278,12 @@ func (m *ModMutation) Fields() []string { if m.compatibility != nil { fields = append(fields, mod.FieldCompatibility) } + if m.toggle_network_use != nil { + fields = append(fields, mod.FieldToggleNetworkUse) + } + if m.toggle_explicit_content != nil { + fields = append(fields, mod.FieldToggleExplicitContent) + } return fields } @@ -3250,6 +3330,10 @@ func (m *ModMutation) Field(name string) (ent.Value, bool) { return m.Hidden() case mod.FieldCompatibility: return m.Compatibility() + case mod.FieldToggleNetworkUse: + return m.ToggleNetworkUse() + case mod.FieldToggleExplicitContent: + return m.ToggleExplicitContent() } return nil, false } @@ -3297,6 +3381,10 @@ func (m *ModMutation) OldField(ctx context.Context, name string) (ent.Value, err return m.OldHidden(ctx) case mod.FieldCompatibility: return m.OldCompatibility(ctx) + case mod.FieldToggleNetworkUse: + return m.OldToggleNetworkUse(ctx) + case mod.FieldToggleExplicitContent: + return m.OldToggleExplicitContent(ctx) } return nil, fmt.Errorf("unknown Mod field %s", name) } @@ -3439,6 +3527,20 @@ func (m *ModMutation) SetField(name string, value ent.Value) error { } m.SetCompatibility(v) return nil + case mod.FieldToggleNetworkUse: + v, ok := value.(bool) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetToggleNetworkUse(v) + return nil + case mod.FieldToggleExplicitContent: + v, ok := value.(bool) + if !ok { + return fmt.Errorf("unexpected type %T for field %s", value, name) + } + m.SetToggleExplicitContent(v) + return nil } return fmt.Errorf("unknown Mod field %s", name) } @@ -3623,6 +3725,12 @@ func (m *ModMutation) ResetField(name string) error { case mod.FieldCompatibility: m.ResetCompatibility() return nil + case mod.FieldToggleNetworkUse: + m.ResetToggleNetworkUse() + return nil + case mod.FieldToggleExplicitContent: + m.ResetToggleExplicitContent() + return nil } return fmt.Errorf("unknown Mod field %s", name) } diff --git a/generated/ent/runtime/runtime.go b/generated/ent/runtime/runtime.go index d0b30a16..f9b7cf9b 100644 --- a/generated/ent/runtime/runtime.go +++ b/generated/ent/runtime/runtime.go @@ -146,6 +146,14 @@ func init() { modDescHidden := modFields[14].Descriptor() // mod.DefaultHidden holds the default value on creation for the hidden field. mod.DefaultHidden = modDescHidden.Default.(bool) + // modDescToggleNetworkUse is the schema descriptor for toggle_network_use field. + modDescToggleNetworkUse := modFields[16].Descriptor() + // mod.DefaultToggleNetworkUse holds the default value on creation for the toggle_network_use field. + mod.DefaultToggleNetworkUse = modDescToggleNetworkUse.Default.(bool) + // modDescToggleExplicitContent is the schema descriptor for toggle_explicit_content field. + modDescToggleExplicitContent := modFields[17].Descriptor() + // mod.DefaultToggleExplicitContent holds the default value on creation for the toggle_explicit_content field. + mod.DefaultToggleExplicitContent = modDescToggleExplicitContent.Default.(bool) // modDescID is the schema descriptor for id field. modDescID := modMixinFields0[0].Descriptor() // mod.DefaultID holds the default value on creation for the id field. diff --git a/generated/generated.go b/generated/generated.go index ee7c752f..2cc95b8c 100644 --- a/generated/generated.go +++ b/generated/generated.go @@ -149,29 +149,31 @@ type ComplexityRoot struct { } Mod struct { - Approved func(childComplexity int) int - Authors func(childComplexity int) int - Compatibility func(childComplexity int) int - CreatedAt func(childComplexity int) int - CreatorID func(childComplexity int) int - Downloads func(childComplexity int) int - FullDescription func(childComplexity int) int - Hidden func(childComplexity int) int - Hotness func(childComplexity int) int - ID func(childComplexity int) int - LastVersionDate func(childComplexity int) int - LatestVersions func(childComplexity int) int - Logo func(childComplexity int) int - ModReference func(childComplexity int) int - Name func(childComplexity int) int - Popularity func(childComplexity int) int - ShortDescription func(childComplexity int) int - SourceURL func(childComplexity int) int - Tags func(childComplexity int) int - UpdatedAt func(childComplexity int) int - Version func(childComplexity int, version string) int - Versions func(childComplexity int, filter map[string]interface{}) int - Views func(childComplexity int) int + Approved func(childComplexity int) int + Authors func(childComplexity int) int + Compatibility func(childComplexity int) int + CreatedAt func(childComplexity int) int + CreatorID func(childComplexity int) int + Downloads func(childComplexity int) int + FullDescription func(childComplexity int) int + Hidden func(childComplexity int) int + Hotness func(childComplexity int) int + ID func(childComplexity int) int + LastVersionDate func(childComplexity int) int + LatestVersions func(childComplexity int) int + Logo func(childComplexity int) int + ModReference func(childComplexity int) int + Name func(childComplexity int) int + Popularity func(childComplexity int) int + ShortDescription func(childComplexity int) int + SourceURL func(childComplexity int) int + Tags func(childComplexity int) int + ToggleExplicitContent func(childComplexity int) int + ToggleNetworkUse func(childComplexity int) int + UpdatedAt func(childComplexity int) int + Version func(childComplexity int, version string) int + Versions func(childComplexity int, filter map[string]interface{}) int + Views func(childComplexity int) int } ModVersion struct { @@ -906,6 +908,20 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Mod.Tags(childComplexity), true + case "Mod.toggle_explicit_content": + if e.complexity.Mod.ToggleExplicitContent == nil { + break + } + + return e.complexity.Mod.ToggleExplicitContent(childComplexity), true + + case "Mod.toggle_network_use": + if e.complexity.Mod.ToggleNetworkUse == nil { + break + } + + return e.complexity.Mod.ToggleNetworkUse(childComplexity), true + case "Mod.updated_at": if e.complexity.Mod.UpdatedAt == nil { break @@ -2607,6 +2623,8 @@ type Mod { hidden: Boolean! tags: [Tag!] compatibility: CompatibilityInfo + toggle_network_use: Boolean! + toggle_explicit_content: Boolean! authors: [UserMod!]! version(version: String!): Version @@ -2653,6 +2671,8 @@ input NewMod { mod_reference: ModReference! hidden: Boolean tagIDs: [TagID!] + toggle_network_use: Boolean + toggle_explicit_content: Boolean } input UpdateMod { @@ -2666,6 +2686,8 @@ input UpdateMod { hidden: Boolean tagIDs: [TagID!] compatibility: CompatibilityInfoInput + toggle_network_use: Boolean + toggle_explicit_content: Boolean } input UpdateUserMod { @@ -4919,6 +4941,10 @@ func (ec *executionContext) fieldContext_GetMods_mods(_ context.Context, field g return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -5055,6 +5081,10 @@ func (ec *executionContext) fieldContext_GetMyMods_mods(_ context.Context, field return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -7111,6 +7141,94 @@ func (ec *executionContext) fieldContext_Mod_compatibility(_ context.Context, fi return fc, nil } +func (ec *executionContext) _Mod_toggle_network_use(ctx context.Context, field graphql.CollectedField, obj *Mod) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mod_toggle_network_use(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.ToggleNetworkUse, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mod_toggle_network_use(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mod", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _Mod_toggle_explicit_content(ctx context.Context, field graphql.CollectedField, obj *Mod) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mod_toggle_explicit_content(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.ToggleExplicitContent, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mod_toggle_explicit_content(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mod", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _Mod_authors(ctx context.Context, field graphql.CollectedField, obj *Mod) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Mod_authors(ctx, field) if err != nil { @@ -8446,6 +8564,10 @@ func (ec *executionContext) fieldContext_Mutation_createMod(ctx context.Context, return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -8579,6 +8701,10 @@ func (ec *executionContext) fieldContext_Mutation_updateMod(ctx context.Context, return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -11067,6 +11193,10 @@ func (ec *executionContext) fieldContext_Query_getMod(ctx context.Context, field return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -11167,6 +11297,10 @@ func (ec *executionContext) fieldContext_Query_getModByReference(ctx context.Con return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -11267,6 +11401,10 @@ func (ec *executionContext) fieldContext_Query_getModByIdOrReference(ctx context return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -14941,6 +15079,10 @@ func (ec *executionContext) fieldContext_UserMod_mod(_ context.Context, field gr return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -16136,6 +16278,10 @@ func (ec *executionContext) fieldContext_Version_mod(_ context.Context, field gr return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -16505,6 +16651,10 @@ func (ec *executionContext) fieldContext_VersionDependency_mod(_ context.Context return ec.fieldContext_Mod_tags(ctx, field) case "compatibility": return ec.fieldContext_Mod_compatibility(ctx, field) + case "toggle_network_use": + return ec.fieldContext_Mod_toggle_network_use(ctx, field) + case "toggle_explicit_content": + return ec.fieldContext_Mod_toggle_explicit_content(ctx, field) case "authors": return ec.fieldContext_Mod_authors(ctx, field) case "version": @@ -18929,7 +19079,7 @@ func (ec *executionContext) unmarshalInputNewMod(ctx context.Context, obj interf asMap[k] = v } - fieldsInOrder := [...]string{"name", "short_description", "full_description", "logo", "source_url", "mod_reference", "hidden", "tagIDs"} + fieldsInOrder := [...]string{"name", "short_description", "full_description", "logo", "source_url", "mod_reference", "hidden", "tagIDs", "toggle_network_use", "toggle_explicit_content"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -18992,6 +19142,20 @@ func (ec *executionContext) unmarshalInputNewMod(ctx context.Context, obj interf return it, err } it.TagIDs = data + case "toggle_network_use": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("toggle_network_use")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.ToggleNetworkUse = data + case "toggle_explicit_content": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("toggle_explicit_content")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.ToggleExplicitContent = data } } @@ -19306,7 +19470,7 @@ func (ec *executionContext) unmarshalInputUpdateMod(ctx context.Context, obj int asMap[k] = v } - fieldsInOrder := [...]string{"name", "short_description", "full_description", "logo", "source_url", "mod_reference", "authors", "hidden", "tagIDs", "compatibility"} + fieldsInOrder := [...]string{"name", "short_description", "full_description", "logo", "source_url", "mod_reference", "authors", "hidden", "tagIDs", "compatibility", "toggle_network_use", "toggle_explicit_content"} for _, k := range fieldsInOrder { v, ok := asMap[k] if !ok { @@ -19383,6 +19547,20 @@ func (ec *executionContext) unmarshalInputUpdateMod(ctx context.Context, obj int return it, err } it.Compatibility = data + case "toggle_network_use": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("toggle_network_use")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.ToggleNetworkUse = data + case "toggle_explicit_content": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("toggle_explicit_content")) + data, err := ec.unmarshalOBoolean2ᚖbool(ctx, v) + if err != nil { + return it, err + } + it.ToggleExplicitContent = data } } @@ -20721,6 +20899,16 @@ func (ec *executionContext) _Mod(ctx context.Context, sel ast.SelectionSet, obj out.Values[i] = ec._Mod_tags(ctx, field, obj) case "compatibility": out.Values[i] = ec._Mod_compatibility(ctx, field, obj) + case "toggle_network_use": + out.Values[i] = ec._Mod_toggle_network_use(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } + case "toggle_explicit_content": + out.Values[i] = ec._Mod_toggle_explicit_content(ctx, field, obj) + if out.Values[i] == graphql.Null { + atomic.AddUint32(&out.Invalids, 1) + } case "authors": field := field diff --git a/generated/models_gen.go b/generated/models_gen.go index 7fe907bf..ce84d9ea 100644 --- a/generated/models_gen.go +++ b/generated/models_gen.go @@ -96,29 +96,31 @@ type LatestVersions struct { } type Mod struct { - ID string `json:"id"` - Name string `json:"name"` - ShortDescription string `json:"short_description"` - FullDescription *string `json:"full_description,omitempty"` - Logo *string `json:"logo,omitempty"` - SourceURL *string `json:"source_url,omitempty"` - CreatorID string `json:"creator_id"` - Approved bool `json:"approved"` - Views int `json:"views"` - Downloads int `json:"downloads"` - Hotness int `json:"hotness"` - Popularity int `json:"popularity"` - UpdatedAt string `json:"updated_at"` - CreatedAt string `json:"created_at"` - LastVersionDate *string `json:"last_version_date,omitempty"` - ModReference string `json:"mod_reference"` - Hidden bool `json:"hidden"` - Tags []*Tag `json:"tags,omitempty"` - Compatibility *CompatibilityInfo `json:"compatibility,omitempty"` - Authors []*UserMod `json:"authors"` - Version *Version `json:"version,omitempty"` - Versions []*Version `json:"versions"` - LatestVersions *LatestVersions `json:"latestVersions"` + ID string `json:"id"` + Name string `json:"name"` + ShortDescription string `json:"short_description"` + FullDescription *string `json:"full_description,omitempty"` + Logo *string `json:"logo,omitempty"` + SourceURL *string `json:"source_url,omitempty"` + CreatorID string `json:"creator_id"` + Approved bool `json:"approved"` + Views int `json:"views"` + Downloads int `json:"downloads"` + Hotness int `json:"hotness"` + Popularity int `json:"popularity"` + UpdatedAt string `json:"updated_at"` + CreatedAt string `json:"created_at"` + LastVersionDate *string `json:"last_version_date,omitempty"` + ModReference string `json:"mod_reference"` + Hidden bool `json:"hidden"` + Tags []*Tag `json:"tags,omitempty"` + Compatibility *CompatibilityInfo `json:"compatibility,omitempty"` + ToggleNetworkUse bool `json:"toggle_network_use"` + ToggleExplicitContent bool `json:"toggle_explicit_content"` + Authors []*UserMod `json:"authors"` + Version *Version `json:"version,omitempty"` + Versions []*Version `json:"versions"` + LatestVersions *LatestVersions `json:"latestVersions"` } type ModVersion struct { diff --git a/gql/resolver_mods.go b/gql/resolver_mods.go index 50ca5f33..caa21d1b 100644 --- a/gql/resolver_mods.go +++ b/gql/resolver_mods.go @@ -70,6 +70,8 @@ func (r *mutationResolver) CreateMod(ctx context.Context, newMod generated.NewMo SetINNF(newMod.SourceURL, dbMod.SetSourceURL) SetINNF(newMod.FullDescription, dbMod.SetFullDescription) SetINNF(newMod.Hidden, dbMod.SetHidden) + SetINNF(newMod.ToggleNetworkUse, dbMod.SetToggleNetworkUse) + SetINNF(newMod.ToggleExplicitContent, dbMod.SetToggleExplicitContent) user, _, err := db.UserFromGQLContext(ctx) if err != nil { @@ -183,6 +185,8 @@ func (r *mutationResolver) UpdateMod(ctx context.Context, modID string, updateMo SetINNF(updateMod.ModReference, dbUpdate.SetModReference) SetINNF(updateMod.Hidden, dbUpdate.SetHidden) SetCompatibilityINNF(updateMod.Compatibility, dbUpdate.SetCompatibility) + SetINNF(updateMod.ToggleNetworkUse, dbUpdate.SetToggleNetworkUse) + SetINNF(updateMod.ToggleExplicitContent, dbUpdate.SetToggleExplicitContent) if updateMod.Logo != nil { file, err := io.ReadAll(updateMod.Logo.File) diff --git a/migrations/sql/20240823233610_add_mod_toggles.down.sql b/migrations/sql/20240823233610_add_mod_toggles.down.sql new file mode 100644 index 00000000..2f0c55f8 --- /dev/null +++ b/migrations/sql/20240823233610_add_mod_toggles.down.sql @@ -0,0 +1,2 @@ +-- reverse: modify "mods" table +ALTER TABLE "mods" DROP COLUMN "toggle_explicit_content", DROP COLUMN "toggle_network_use"; diff --git a/migrations/sql/20240823233610_add_mod_toggles.up.sql b/migrations/sql/20240823233610_add_mod_toggles.up.sql new file mode 100644 index 00000000..71b4a515 --- /dev/null +++ b/migrations/sql/20240823233610_add_mod_toggles.up.sql @@ -0,0 +1,2 @@ +-- modify "mods" table +ALTER TABLE "mods" ADD COLUMN "toggle_network_use" boolean NOT NULL DEFAULT false, ADD COLUMN "toggle_explicit_content" boolean NOT NULL DEFAULT false; diff --git a/migrations/sql/atlas.sum b/migrations/sql/atlas.sum index 24ee167e..f6276d88 100644 --- a/migrations/sql/atlas.sum +++ b/migrations/sql/atlas.sum @@ -1,4 +1,4 @@ -h1:jK63b8w0c9g+PnSyhF6TU9wnMyjt22iOXdgDCpBTLNA= +h1:MN9riA8+Nkvz7j3pJR+7EczYNPVSmI5lG5thfEEFtGw= 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= @@ -67,3 +67,5 @@ h1:jK63b8w0c9g+PnSyhF6TU9wnMyjt22iOXdgDCpBTLNA= 20240818235330_index_fixes.up.sql h1:xTw9pSSWkMcjZeIC+npdWT2nk+bvcjVMHHvyB2cDz5g= 20240819092347_user_indexes.down.sql h1:a+LhZ3NoCFBFWrBDcZAKjh8szFZsKWSLFd9LfsoDWbs= 20240819092347_user_indexes.up.sql h1:Ei9ma1Kd/88nB4QOKmSfjz+gSs/sW1rB7LM3+3bY71s= +20240823233610_add_mod_toggles.down.sql h1:6M1jiInRvHFBMTj2+NRdipO/z5oyn7qBYt4EIOTIqXg= +20240823233610_add_mod_toggles.up.sql h1:GuKMUrlGo1PppjX0uiw3OTyi2nziRI+o/LVtWfcjyLc= diff --git a/schemas/mod.graphql b/schemas/mod.graphql index e4819c30..162200c3 100755 --- a/schemas/mod.graphql +++ b/schemas/mod.graphql @@ -35,6 +35,8 @@ type Mod { hidden: Boolean! tags: [Tag!] compatibility: CompatibilityInfo + toggle_network_use: Boolean! + toggle_explicit_content: Boolean! authors: [UserMod!]! version(version: String!): Version @@ -81,6 +83,8 @@ input NewMod { mod_reference: ModReference! hidden: Boolean tagIDs: [TagID!] + toggle_network_use: Boolean + toggle_explicit_content: Boolean } input UpdateMod { @@ -94,6 +98,8 @@ input UpdateMod { hidden: Boolean tagIDs: [TagID!] compatibility: CompatibilityInfoInput + toggle_network_use: Boolean + toggle_explicit_content: Boolean } input UpdateUserMod { diff --git a/tests/mod_test.go b/tests/mod_test.go index 5f29d410..2f3a7a1d 100644 --- a/tests/mod_test.go +++ b/tests/mod_test.go @@ -44,7 +44,9 @@ func TestMods(t *testing.T) { short_description: "Foo Bar 123 Foo Bar 123", full_description: "Lorem ipsum dolor sit amet", mod_reference: $mod_reference, - tagIDs: $tags + tagIDs: $tags, + toggle_network_use: true, + toggle_explicit_content: true }) { id } @@ -81,6 +83,8 @@ func TestMods(t *testing.T) { last_version_date mod_reference hidden + toggle_network_use + toggle_explicit_content tags { id name @@ -126,6 +130,8 @@ func TestMods(t *testing.T) { testza.AssertEqual(t, &fullDescription, queryResponse.GetMod.FullDescription) testza.AssertEqual(t, modReference, queryResponse.GetMod.ModReference) testza.AssertEqual(t, userID, queryResponse.GetMod.CreatorID) + testza.AssertTrue(t, queryResponse.GetMod.ToggleNetworkUse) + testza.AssertTrue(t, queryResponse.GetMod.ToggleExplicitContent) }) t.Run("Query One By Reference", func(t *testing.T) { @@ -190,6 +196,8 @@ func TestMods(t *testing.T) { name: "Foo Bar", tagIDs: $tags, authors: $authors, + toggle_network_use: false, + toggle_explicit_content: false, compatibility: { EA: { note: "Hello" @@ -255,6 +263,8 @@ func TestMods(t *testing.T) { testza.AssertEqual(t, &fullDescription, queryResponse.GetMods.Mods[1].FullDescription) testza.AssertEqual(t, modReference, queryResponse.GetMods.Mods[1].ModReference) testza.AssertEqual(t, userID, queryResponse.GetMods.Mods[1].CreatorID) + testza.AssertFalse(t, queryResponse.GetMods.Mods[1].ToggleNetworkUse) + testza.AssertFalse(t, queryResponse.GetMods.Mods[1].ToggleExplicitContent) }) t.Run("Query My Mods", func(t *testing.T) {