mirror of
https://github.com/stashapp/stash-box.git
synced 2026-02-06 10:12:39 -06:00
143 lines
4.0 KiB
Go
143 lines
4.0 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/99designs/gqlgen/graphql"
|
|
|
|
"github.com/stashapp/stash-box/pkg/manager/config"
|
|
"github.com/stashapp/stash-box/pkg/models"
|
|
"github.com/stashapp/stash-box/pkg/utils"
|
|
)
|
|
|
|
type Resolver struct {
|
|
getRepoFactory func(ctx context.Context) models.Repo
|
|
}
|
|
|
|
func NewResolver(repoFunc func(ctx context.Context) models.Repo) *Resolver {
|
|
return &Resolver{
|
|
getRepoFactory: repoFunc,
|
|
}
|
|
}
|
|
|
|
func (r *Resolver) Mutation() models.MutationResolver {
|
|
return &mutationResolver{r}
|
|
}
|
|
func (r *Resolver) Edit() models.EditResolver {
|
|
return &editResolver{r}
|
|
}
|
|
func (r *Resolver) EditComment() models.EditCommentResolver {
|
|
return &editCommentResolver{r}
|
|
}
|
|
func (r *Resolver) EditVote() models.EditVoteResolver {
|
|
return &editVoteResolver{r}
|
|
}
|
|
func (r *Resolver) Performer() models.PerformerResolver {
|
|
return &performerResolver{r}
|
|
}
|
|
func (r *Resolver) PerformerEdit() models.PerformerEditResolver {
|
|
return &performerEditResolver{r}
|
|
}
|
|
func (r *Resolver) StudioEdit() models.StudioEditResolver {
|
|
return &studioEditResolver{r}
|
|
}
|
|
func (r *Resolver) TagEdit() models.TagEditResolver {
|
|
return &tagEditResolver{r}
|
|
}
|
|
func (r *Resolver) SceneEdit() models.SceneEditResolver {
|
|
return &sceneEditResolver{r}
|
|
}
|
|
func (r *Resolver) Tag() models.TagResolver {
|
|
return &tagResolver{r}
|
|
}
|
|
func (r *Resolver) TagCategory() models.TagCategoryResolver {
|
|
return &tagCategoryResolver{r}
|
|
}
|
|
func (r *Resolver) Image() models.ImageResolver {
|
|
return &imageResolver{r}
|
|
}
|
|
func (r *Resolver) Studio() models.StudioResolver {
|
|
return &studioResolver{r}
|
|
}
|
|
func (r *Resolver) Scene() models.SceneResolver {
|
|
return &sceneResolver{r}
|
|
}
|
|
func (r *Resolver) Site() models.SiteResolver {
|
|
return &siteResolver{r}
|
|
}
|
|
func (r *Resolver) URL() models.URLResolver {
|
|
return &urlResolver{r}
|
|
}
|
|
func (r *Resolver) User() models.UserResolver {
|
|
return &userResolver{r}
|
|
}
|
|
func (r *Resolver) Query() models.QueryResolver {
|
|
return &queryResolver{r}
|
|
}
|
|
func (r *Resolver) QueryPerformersResultType() models.QueryPerformersResultTypeResolver {
|
|
return &queryPerformerResolver{r}
|
|
}
|
|
func (r *Resolver) QueryScenesResultType() models.QueryScenesResultTypeResolver {
|
|
return &querySceneResolver{r}
|
|
}
|
|
func (r *Resolver) QueryEditsResultType() models.QueryEditsResultTypeResolver {
|
|
return &queryEditResolver{r}
|
|
}
|
|
func (r *Resolver) Draft() models.DraftResolver {
|
|
return &draftResolver{r}
|
|
}
|
|
func (r *Resolver) PerformerDraft() models.PerformerDraftResolver {
|
|
return &performerDraftResolver{r}
|
|
}
|
|
func (r *Resolver) SceneDraft() models.SceneDraftResolver {
|
|
return &sceneDraftResolver{r}
|
|
}
|
|
|
|
type mutationResolver struct{ *Resolver }
|
|
|
|
type queryResolver struct{ *Resolver }
|
|
|
|
func (r *queryResolver) Version(ctx context.Context) (*models.Version, error) {
|
|
version, githash, buildstamp := GetVersion()
|
|
|
|
return &models.Version{
|
|
Version: version,
|
|
Hash: githash,
|
|
BuildTime: buildstamp,
|
|
BuildType: buildtype,
|
|
}, nil
|
|
}
|
|
|
|
func (r *queryResolver) GetConfig(ctx context.Context) (*models.StashBoxConfig, error) {
|
|
return &models.StashBoxConfig{
|
|
HostURL: config.GetHostURL(),
|
|
RequireInvite: config.GetRequireInvite(),
|
|
RequireActivation: config.GetRequireActivation(),
|
|
VotePromotionThreshold: config.GetVotePromotionThreshold(),
|
|
VoteApplicationThreshold: config.GetVoteApplicationThreshold(),
|
|
VotingPeriod: config.GetVotingPeriod(),
|
|
MinDestructiveVotingPeriod: config.GetMinDestructiveVotingPeriod(),
|
|
VoteCronInterval: config.GetVoteCronInterval(),
|
|
}, nil
|
|
}
|
|
|
|
// wasFieldIncluded returns true if the given field was included in the request.
|
|
// Slices are unmarshalled to empty slices even if the field was omitted. This
|
|
// method determines if it was omitted altogether.
|
|
func wasFieldIncluded(ctx context.Context, qualifiedField string) bool {
|
|
rctx := graphql.GetOperationContext(ctx)
|
|
|
|
if rctx != nil {
|
|
_, ret := utils.FindField(rctx.Variables, qualifiedField)
|
|
return ret
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func wasFieldIncludedFunc(ctx context.Context) func(qualifiedField string) bool {
|
|
return func(qualifiedField string) bool {
|
|
return wasFieldIncluded(ctx, qualifiedField)
|
|
}
|
|
}
|