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 }