package resolvers // This file will be automatically regenerated based on the schema, any resolver implementations // will be copied through when generating and any unknown code will be moved to the end. import ( "context" "errors" "git.aiterp.net/stufflog/server/graph/graphcore" "git.aiterp.net/stufflog/server/internal/xlerrors" "git.aiterp.net/stufflog/server/models" ) func (r *mutationResolver) CreateProject(ctx context.Context, input graphcore.ProjectCreateInput) (*models.Project, error) { user := r.Auth.UserFromContext(ctx) if user == nil { return nil, xlerrors.PermissionDenied } project := &models.Project{ ID: input.ID, Name: input.Name, Description: input.Description, DailyPoints: input.DailyPoints, } if !project.ValidKey() { return nil, errors.New("the project must have a valid ID (only uppercase allowed)") } if project.Name == "" || project.Description == "" { return nil, errors.New("name and description cannot be left empty") } project, err := r.Database.Projects().Insert(ctx, *project) if err != nil { return nil, err } err = r.Database.Projects().SetPermission(ctx, models.ProjectPermission{ ProjectID: project.ID, UserID: user.ID, Level: models.ProjectPermissionLevelOwner, }) return project, nil } func (r *mutationResolver) CreateIssue(ctx context.Context, input graphcore.IssueCreateInput) (*models.Issue, error) { user := r.Auth.UserFromContext(ctx) if user == nil { return nil, xlerrors.PermissionDenied } project, err := r.Database.Projects().Find(ctx, input.ProjectID) if err != nil { return nil, err } if perm, err := r.Auth.ProjectPermission(ctx, *project); err != nil || !perm.CanManageOwnIssue() { return nil, xlerrors.PermissionDenied } issue := &models.Issue{ ProjectID: project.ID, OwnerID: user.ID, AssigneeID: "", StatusStage: input.StatusStage, StatusName: input.StatusName, Name: input.Name, Title: input.Name, Description: input.Description, } if input.Title != nil && *input.Title != "" { issue.Title = *input.Title } if input.DueTime != nil && !input.DueTime.IsZero() { issue.DueTime = *input.DueTime } if input.AssigneeID != nil && *input.AssigneeID != "" { issue.AssigneeID = *input.AssigneeID } issue, err = r.Database.Issues().Insert(ctx, *issue) if err != nil { return nil, err } return issue, nil } func (r *mutationResolver) LoginUser(ctx context.Context, input graphcore.UserLoginInput) (*models.User, error) { return r.Auth.Login(ctx, input.Username, input.Password) } func (r *mutationResolver) LogoutUser(ctx context.Context) (*models.User, error) { return r.Auth.Logout(ctx) } func (r *mutationResolver) CreateUser(ctx context.Context, input graphcore.UserCreateInput) (*models.User, error) { active := input.Active == nil || *input.Active admin := input.Admin != nil && *input.Admin return r.Auth.CreateUser(ctx, input.Username, input.Password, input.Name, active, admin) } func (r *mutationResolver) EditUser(ctx context.Context, input graphcore.UserEditInput) (*models.User, error) { return r.Auth.EditUser(ctx, input.Username, input.SetName, input.CurrentPassword, input.SetPassword) } // Mutation returns graphcore.MutationResolver implementation. func (r *Resolver) Mutation() graphcore.MutationResolver { return &mutationResolver{r} } type mutationResolver struct{ *Resolver }