-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
4,092 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
id: wechat-testbed | ||
|
||
web: | ||
addr: 0.0.0.0:10009 | ||
|
||
mq: | ||
addr: amqp://erp:erpPass123@81.71.151.176:5672 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package config | ||
|
||
import ( | ||
"context" | ||
"log" | ||
"log/slog" | ||
"net/http" | ||
"time" | ||
|
||
amqp "github.com/rabbitmq/amqp091-go" | ||
"github.com/spf13/viper" | ||
"github.com/twiglab/crm/wechat/mq" | ||
"github.com/twiglab/crm/wechat/pkg/bc" | ||
"github.com/twiglab/crm/wechat/web" | ||
) | ||
|
||
type Web struct { | ||
Addr string `yaml:"addr" mapstructure:"addr"` | ||
} | ||
|
||
func (c Web) Create(ctx context.Context) *http.Server { | ||
return web.NewHttpServer(ctx, c.Addr, nil) | ||
} | ||
|
||
type BcExchange struct { | ||
Name string `yaml:"name" mapstructure:"name"` | ||
} | ||
|
||
func (c BcExchange) Create(conn *amqp.Connection) *mq.MQ { | ||
q := mq.New(slog.Default(), 5*time.Second) | ||
if err := q.BuildWith(conn, bc.MQ_BC_EXCHANGE_NAME); err != nil { | ||
log.Fatal(err) | ||
} | ||
return q | ||
} | ||
|
||
type MQ struct { | ||
Addr string `yaml:"addr" mapstructure:"addr"` | ||
} | ||
|
||
func (c MQ) Create() *amqp.Connection { | ||
conn, err := mq.Dial(c.Addr) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
|
||
return conn | ||
} | ||
|
||
type App struct { | ||
ID string `yaml:"id" mapstructure:"id"` | ||
MQ MQ `yaml:"mq" mapstructure:"mq"` | ||
BcExchange BcExchange `yaml:"bc-exchange" mapstructure:"bc-exchange"` | ||
Web Web `yaml:"web" mapstructure:"web"` | ||
} | ||
|
||
func InitConfig(config any) { | ||
viper.SetConfigName("config") | ||
viper.SetConfigType("yaml") | ||
viper.AddConfigPath(".") | ||
|
||
viper.AutomaticEnv() | ||
|
||
if err := viper.ReadInConfig(); err != nil { | ||
log.Fatal(err) | ||
|
||
} | ||
|
||
if err := viper.Unmarshal(config); err != nil { | ||
log.Fatal(err) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,155 @@ | ||
# Where are all the schema files located? globs are supported eg src/**/*.graphqls | ||
schema: | ||
- schema/**/*.graphqls | ||
|
||
# Where should the generated server code go? | ||
exec: | ||
package: graph | ||
layout: single-file # Only other option is "follow-schema," ie multi-file. | ||
|
||
# Only for single-file layout: | ||
filename: graph/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: graph/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: graph | ||
layout: follow-schema # Only other option is "single-file." | ||
|
||
# Only for single-file layout: | ||
# filename: graph/resolver.go | ||
|
||
# Only for follow-schema layout: | ||
dir: graph | ||
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: | ||
- "github.com/twiglab/crm/wechat/pkg/bc/msg" | ||
|
||
# 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 |
Oops, something went wrong.