package svc import ( "app-cloudep-tweeting-service/internal/config" domainRepo "app-cloudep-tweeting-service/internal/domain/repository" "app-cloudep-tweeting-service/internal/lib/neo4j" model "app-cloudep-tweeting-service/internal/model/mongo" "app-cloudep-tweeting-service/internal/repository" "github.com/zeromicro/go-zero/core/stores/redis" vi "code.30cm.net/digimon/library-go/validator" ) type ServiceContext struct { Config config.Config Validate vi.Validate PostModel model.PostModel CommentModel model.CommentModel TimelineRepo domainRepo.TimelineRepository SocialNetworkRepository domainRepo.SocialNetworkRepository } func NewServiceContext(c config.Config) *ServiceContext { newRedis, err := redis.NewRedis(c.RedisCluster, redis.Cluster()) if err != nil { panic(err) } neoClient := neo4j.NewNeo4J(&neo4j.Config{ URI: c.Neo4J.URI, Username: c.Neo4J.Username, Password: c.Neo4J.Password, MaxConnectionPoolSize: c.Neo4J.MaxConnectionPoolSize, MaxConnectionLifetime: c.Neo4J.MaxConnectionLifetime, ConnectionTimeout: c.Neo4J.ConnectionTimeout, }, neo4j.WithPerformance(), neo4j.WithLogLevel(c.Neo4J.LogLevel)) return &ServiceContext{ Config: c, Validate: vi.MustValidator(), PostModel: MustPostModel(c), CommentModel: MustCommentModel(c), TimelineRepo: repository.MustGenerateRepository(repository.TimelineRepositoryParam{ Config: c, Redis: *newRedis, }), SocialNetworkRepository: repository.MustSocialNetworkRepository(repository.SocialNetworkParam{ Config: c, Neo4jClient: neoClient, }), } }