guesstimate/internal/graph/project_handler.go

184 lines
4.3 KiB
Go

package graph
import (
"context"
"github.com/99designs/gqlgen/graphql"
"forge.cadoles.com/Cadoles/guesstimate/internal/model"
model1 "forge.cadoles.com/Cadoles/guesstimate/internal/model"
"github.com/pkg/errors"
)
func handleProjects(ctx context.Context, filter *model1.ProjectsFilter) ([]*model1.Project, error) {
user, db, err := getSessionUser(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
if filter == nil {
filter = &model1.ProjectsFilter{
OwnerIds: make([]int64, 0, 1),
}
}
filter.OwnerIds = append(filter.OwnerIds, user.ID)
projects, err := repo.Search(ctx, filter)
if err != nil {
return nil, errors.WithStack(err)
}
return projects, nil
}
func handleCreateProject(ctx context.Context, input model.CreateProjectChanges) (*model.Project, error) {
user, db, err := getSessionUser(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
project, err := repo.Create(ctx, input.Title, user.ID)
if err != nil {
return nil, errors.WithStack(err)
}
return project, nil
}
func handleUpdateProjectTitle(ctx context.Context, projectID int64, title string) (*model.Project, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
project, err := repo.UpdateTitle(ctx, projectID, title)
if err != nil {
return nil, errors.WithStack(err)
}
return project, nil
}
func handleAddProjectTask(ctx context.Context, projectID int64, changes model.ProjectTaskChanges) (*model.Task, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
task, err := repo.AddTask(ctx, projectID, changes)
if err != nil {
return nil, errors.WithStack(err)
}
return task, nil
}
func handleRemoveProjectTask(ctx context.Context, projectID int64, taskID int64) (bool, error) {
db, err := getDB(ctx)
if err != nil {
return false, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
if err := repo.RemoveTask(ctx, projectID, taskID); err != nil {
return false, errors.WithStack(err)
}
return true, nil
}
func handleUpdateProjectTask(ctx context.Context, projectID, taskID int64, changes model.ProjectTaskChanges) (*model.Task, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
task, err := repo.UpdateTask(ctx, projectID, taskID, changes)
if err != nil {
return nil, errors.WithStack(err)
}
return task, nil
}
func handleUpdateProjectParams(ctx context.Context, projectID int64, changes model.ProjectParamsChanges) (*model.ProjectParams, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
project, err := repo.UpdateParams(ctx, projectID, changes)
if err != nil {
return nil, errors.WithStack(err)
}
return project.Params, nil
}
func handleAddProjectTaskCategory(ctx context.Context, projectID int64, changes model.ProjectTaskCategoryChanges) (*model.TaskCategory, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
taskCategory, err := repo.AddTaskCategory(ctx, projectID, changes)
if err != nil {
return nil, errors.WithStack(err)
}
return taskCategory, nil
}
func handleUpdateProjectTaskCategory(ctx context.Context, projectID int64, taskCategoryID int64, changes model.ProjectTaskCategoryChanges) (*model.TaskCategory, error) {
db, err := getDB(ctx)
if err != nil {
return nil, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
taskCategory, err := repo.UpdateTaskCategory(ctx, projectID, taskCategoryID, changes)
if err != nil {
return nil, errors.WithStack(err)
}
return taskCategory, nil
}
func handleRemoveProjectTaskCategory(ctx context.Context, projectID int64, taskCategoryID int64) (bool, error) {
db, err := getDB(ctx)
if err != nil {
return false, errors.WithStack(err)
}
repo := model.NewProjectRepository(db)
if err := repo.RemoveTaskCategory(ctx, projectID, taskCategoryID); err != nil {
if errors.Is(err, model.ErrAssociatedTaskExist) {
graphql.AddError(ctx, ErrAssociatedTaskExist)
return false, nil
}
return false, errors.WithStack(err)
}
return true, nil
}