mirror of
https://github.com/SamyRai/tercul-backend.git
synced 2025-12-26 22:21:33 +00:00
This commit includes a major refactoring of the GORM many-to-many relationships to use explicit join tables, improving stability and compatibility with GORM's features. It also implements a large number of previously unimplemented GraphQL mutations for core entities like Collections, Comments, Likes, and Bookmarks. Key changes: - Refactored polymorphic many-to-many relationships for Copyright and Monetization to use standard many-to-many with explicit join tables. - Implemented GraphQL mutations for Collection, Comment, Like, and Bookmark entities, including input validation and authorization checks. - Added comprehensive integration tests for all new features and refactored code. - Refactored the GraphQL integration test suite to be type-safe, using generics for response handling as requested. - Updated repository interfaces and implementations to support the new data model. - Updated the TODO.md file to reflect the completed work.
156 lines
5.6 KiB
YAML
156 lines
5.6 KiB
YAML
# Where are all the schema files located? globs are supported eg src/**/*.graphqls
|
|
schema:
|
|
- internal/adapters/graphql/*.graphqls
|
|
|
|
# Where should the generated server code go?
|
|
exec:
|
|
package: graphql
|
|
layout: single-file # Only other option is "follow-schema," ie multi-file.
|
|
|
|
# Only for single-file layout:
|
|
filename: internal/adapters/graphql/generated.go
|
|
|
|
# Only for follow-schema layout:
|
|
# dir: graph
|
|
# filename_template: "{name}.generated.go"
|
|
|
|
# Optional: Maximum number of goroutines in concurrency to use per child resolvers(default: unlimited)
|
|
# worker_limit: 1000
|
|
|
|
# Uncomment to enable federation
|
|
# federation:
|
|
# filename: graph/federation.go
|
|
# package: graph
|
|
# version: 2
|
|
# options:
|
|
# computed_requires: true
|
|
|
|
# Where should any generated models go?
|
|
model:
|
|
filename: internal/adapters/graphql/model/models_gen.go
|
|
package: model
|
|
|
|
# Optional: Pass in a path to a new gotpl template to use for generating the models
|
|
# model_template: [your/path/model.gotpl]
|
|
|
|
# Where should the resolver implementations go?
|
|
resolver:
|
|
package: graphql
|
|
layout: follow-schema # Only other option is "single-file."
|
|
|
|
# Only for single-file layout:
|
|
# filename: graph/resolver.go
|
|
|
|
# Only for follow-schema layout:
|
|
dir: internal/adapters/graphql
|
|
filename_template: "{name}.resolvers.go"
|
|
|
|
# Optional: turn on to not generate template comments above resolvers
|
|
# omit_template_comment: false
|
|
# Optional: Pass in a path to a new gotpl template to use for generating resolvers
|
|
# resolver_template: [your/path/resolver.gotpl]
|
|
# Optional: turn on to avoid rewriting existing resolver(s) when generating
|
|
# preserve_resolver: false
|
|
|
|
# Optional: turn on use ` + "`" + `gqlgen:"fieldName"` + "`" + ` tags in your models
|
|
# struct_tag: json
|
|
|
|
# Optional: turn on to use []Thing instead of []*Thing
|
|
# omit_slice_element_pointers: false
|
|
|
|
# Optional: turn on to omit Is<Name>() methods to interface and unions
|
|
# omit_interface_checks: true
|
|
|
|
# Optional: turn on to skip generation of ComplexityRoot struct content and Complexity function
|
|
# omit_complexity: false
|
|
|
|
# Optional: turn on to not generate any file notice comments in generated files
|
|
# omit_gqlgen_file_notice: false
|
|
|
|
# Optional: turn on to exclude the gqlgen version in the generated file notice. No effect if `omit_gqlgen_file_notice` is true.
|
|
# omit_gqlgen_version_in_file_notice: false
|
|
|
|
# Optional: turn on to exclude root models such as Query and Mutation from the generated models file.
|
|
# omit_root_models: false
|
|
|
|
# Optional: turn on to exclude resolver fields from the generated models file.
|
|
# omit_resolver_fields: false
|
|
|
|
# Optional: turn off to make struct-type struct fields not use pointers
|
|
# e.g. type Thing struct { FieldA OtherThing } instead of { FieldA *OtherThing }
|
|
# struct_fields_always_pointers: true
|
|
|
|
# Optional: turn off to make resolvers return values instead of pointers for structs
|
|
# resolvers_always_return_pointers: true
|
|
|
|
# Optional: turn on to return pointers instead of values in unmarshalInput
|
|
# return_pointers_in_unmarshalinput: false
|
|
|
|
# Optional: wrap nullable input fields with Omittable
|
|
# nullable_input_omittable: true
|
|
|
|
# Optional: set to speed up generation time by not performing a final validation pass.
|
|
# skip_validation: true
|
|
|
|
# Optional: set to skip running `go mod tidy` when generating server code
|
|
# skip_mod_tidy: true
|
|
|
|
# Optional: if this is set to true, argument directives that
|
|
# decorate a field with a null value will still be called.
|
|
#
|
|
# This enables argumment directives to not just mutate
|
|
# argument values but to set them even if they're null.
|
|
call_argument_directives_with_null: true
|
|
|
|
# Optional: set build tags that will be used to load packages
|
|
# go_build_tags:
|
|
# - private
|
|
# - enterprise
|
|
|
|
# Optional: set to modify the initialisms regarded for Go names
|
|
# go_initialisms:
|
|
# replace_defaults: false # if true, the default initialisms will get dropped in favor of the new ones instead of being added
|
|
# initialisms: # List of initialisms to for Go names
|
|
# - 'CC'
|
|
# - 'BCC'
|
|
|
|
# gqlgen will search for any type names in the schema in these go packages
|
|
# if they match it will use them, otherwise it will generate them.
|
|
# autobind:
|
|
# - "tercul/internal/adapters/graphql/model"
|
|
|
|
# This section declares type mapping between the GraphQL and go type systems
|
|
#
|
|
# The first line in each type will be used as defaults for resolver arguments and
|
|
# modelgen, the others will be allowed when binding to fields. Configure them to
|
|
# your liking
|
|
models:
|
|
ID:
|
|
model:
|
|
- github.com/99designs/gqlgen/graphql.ID
|
|
- github.com/99designs/gqlgen/graphql.Int
|
|
- github.com/99designs/gqlgen/graphql.Int64
|
|
- github.com/99designs/gqlgen/graphql.Int32
|
|
# gqlgen provides a default GraphQL UUID convenience wrapper for github.com/google/uuid
|
|
# but you can override this to provide your own GraphQL UUID implementation
|
|
UUID:
|
|
model:
|
|
- github.com/99designs/gqlgen/graphql.UUID
|
|
|
|
# The GraphQL spec explicitly states that the Int type is a signed 32-bit
|
|
# integer. Using Go int or int64 to represent it can lead to unexpected
|
|
# behavior, and some GraphQL tools like Apollo Router will fail when
|
|
# communicating numbers that overflow 32-bits.
|
|
#
|
|
# You may choose to use the custom, built-in Int64 scalar to represent 64-bit
|
|
# integers, or ignore the spec and bind Int to graphql.Int / graphql.Int64
|
|
# (the default behavior of gqlgen). This is fine in simple use cases when you
|
|
# do not need to worry about interoperability and only expect small numbers.
|
|
Int:
|
|
model:
|
|
- github.com/99designs/gqlgen/graphql.Int32
|
|
Int64:
|
|
model:
|
|
- github.com/99designs/gqlgen/graphql.Int
|
|
- github.com/99designs/gqlgen/graphql.Int64
|