From dbfecced25d63c9191e19d57bd60691563d955aa Mon Sep 17 00:00:00 2001 From: dineshsalunke Date: Wed, 17 Jan 2024 21:45:36 +0530 Subject: [PATCH] fix: return error when converting project to api project --- routers/api/v1/projects/project.go | 29 ++++++++++++++++++++++------- services/convert/project.go | 29 ++++++++++++++++++++++------- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/routers/api/v1/projects/project.go b/routers/api/v1/projects/project.go index e258d6e7607..8b24e4d4886 100644 --- a/routers/api/v1/projects/project.go +++ b/routers/api/v1/projects/project.go @@ -17,7 +17,7 @@ import ( func innerCreateProject( ctx *context.APIContext, - project_type project_model.Type, + projectType project_model.Type, ) { form := web.GetForm(ctx).(*api.NewProjectPayload) project := &project_model.Project{ @@ -27,14 +27,14 @@ func innerCreateProject( Description: form.Description, CreatorID: ctx.Doer.ID, BoardType: project_model.BoardType(form.BoardType), - Type: project_type, + Type: projectType, } if ctx.ContextUser != nil { project.OwnerID = ctx.ContextUser.ID } - if project_type == project_model.TypeRepository { + if projectType == project_model.TypeRepository { project.RepoID = ctx.Repo.Repository.ID } @@ -49,7 +49,13 @@ func innerCreateProject( return } - ctx.JSON(http.StatusCreated, convert.ToAPIProject(ctx, project)) + projectResponse, err := convert.ToAPIProject(ctx, project) + if err != nil { + ctx.Error(http.StatusInternalServerError, "NewProject", err) + return + } + + ctx.JSON(http.StatusCreated, projectResponse) } func CreateUserProject(ctx *context.APIContext) { @@ -165,7 +171,12 @@ func GetProject(ctx *context.APIContext) { return } - ctx.JSON(http.StatusOK, convert.ToAPIProject(ctx, project)) + projectResponse, err := convert.ToAPIProject(ctx, project) + if err != nil { + ctx.Error(http.StatusInternalServerError, "GetProjectByID", err) + return + } + ctx.JSON(http.StatusOK, projectResponse) } func UpdateProject(ctx *context.APIContext) { @@ -215,7 +226,12 @@ func UpdateProject(ctx *context.APIContext) { ctx.Error(http.StatusInternalServerError, "UpdateProject", err) return } - ctx.JSON(http.StatusOK, convert.ToAPIProject(ctx, project)) + projectResponse, err := convert.ToAPIProject(ctx, project) + if err != nil { + ctx.Error(http.StatusInternalServerError, "UpdateProject", err) + return + } + ctx.JSON(http.StatusOK, projectResponse) } func DeleteProject(ctx *context.APIContext) { @@ -242,7 +258,6 @@ func DeleteProject(ctx *context.APIContext) { } ctx.Status(http.StatusNoContent) - } func ListUserProjects(ctx *context.APIContext) { diff --git a/services/convert/project.go b/services/convert/project.go index 0e25d6c10dd..4292037f9e9 100644 --- a/services/convert/project.go +++ b/services/convert/project.go @@ -10,8 +10,7 @@ import ( api "code.gitea.io/gitea/modules/structs" ) -func ToAPIProject(ctx context.Context, project *project_model.Project) *api.Project { - +func ToAPIProject(ctx context.Context, project *project_model.Project) (*api.Project, error) { apiProject := &api.Project{ Title: project.Title, Description: project.Description, @@ -23,7 +22,10 @@ func ToAPIProject(ctx context.Context, project *project_model.Project) *api.Proj } // try to laod the repo - project.LoadRepo(ctx) + err := project.LoadRepo(ctx) + if err != nil { + return nil, err + } if project.Repo != nil { apiProject.Repo = &api.RepositoryMeta{ ID: project.RepoID, @@ -33,7 +35,10 @@ func ToAPIProject(ctx context.Context, project *project_model.Project) *api.Proj } } - project.LoadCreator(ctx) + err = project.LoadCreator(ctx) + if err != nil { + return nil, err + } if project.Creator != nil { apiProject.Creator = &api.User{ ID: project.Creator.ID, @@ -42,7 +47,10 @@ func ToAPIProject(ctx context.Context, project *project_model.Project) *api.Proj } } - project.LoadOwner(ctx) + err = project.LoadOwner(ctx) + if err != nil { + return nil, err + } if project.Owner != nil { apiProject.Owner = &api.User{ ID: project.Owner.ID, @@ -51,13 +59,20 @@ func ToAPIProject(ctx context.Context, project *project_model.Project) *api.Proj } } - return apiProject + return apiProject, nil } func ToAPIProjectList(ctx context.Context, projects []*project_model.Project) ([]*api.Project, error) { result := make([]*api.Project, len(projects)) + var err error for i := range projects { - result[i] = ToAPIProject(ctx, projects[i]) + result[i], err = ToAPIProject(ctx, projects[i]) + if err != nil { + break + } + } + if err != nil { + return nil, err } return result, nil }