Skip to content

Commit 819f6f6

Browse files
committed
handler panic for rendering
1 parent c488de4 commit 819f6f6

File tree

15 files changed

+522
-76
lines changed

15 files changed

+522
-76
lines changed

bin/templates/crud-api.go.tmpl.bash

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ $(test -n "$with_project" && echo " params.ProjectID = internal.ProjectIDByName[
1818
${camel_name}, err := h.svc.${pascal_name}.Create(c, tx, &params)
1919
if err != nil {
2020
renderErrorResponse(c, "Could not create ${sentence_name}", err)
21-
22-
return nil, nil
2321
}
2422
2523
res := ${pascal_name}Response{
@@ -36,8 +34,6 @@ func (h *StrictHandlers) Get${pascal_name}(c *gin.Context, request Get${pascal_n
3634
${camel_name}, err := h.svc.${pascal_name}.ByID(c, tx, request.${pascal_name}ID)
3735
if err != nil {
3836
renderErrorResponse(c, "Could not create ${sentence_name}", err)
39-
40-
return nil, nil
4137
}
4238
4339
res := ${pascal_name}Response{
@@ -56,8 +52,6 @@ func (h *StrictHandlers) Update${pascal_name}(c *gin.Context, request Update${pa
5652
${camel_name}, err := h.svc.${pascal_name}.Update(c, tx, request.${pascal_name}ID, &params)
5753
if err != nil {
5854
renderErrorResponse(c, "Could not update ${sentence_name}", err)
59-
60-
return nil, nil
6155
}
6256
6357
res := ${pascal_name}Response{
@@ -74,8 +68,6 @@ func (h *StrictHandlers) Delete${pascal_name}(c *gin.Context, request Delete${pa
7468
_, err := h.svc.${pascal_name}.Delete(c, tx, request.${pascal_name}ID)
7569
if err != nil {
7670
renderErrorResponse(c, "Could not delete ${sentence_name}", err)
77-
78-
return nil, nil
7971
}
8072
8173
return Delete${pascal_name}204Response{}, nil

cmd/oapi-codegen/oapi-templates/strict/strict-gin.tmpl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ func (sh *strictHandlers) authMiddlewares(opID OperationID) []gin.HandlerFunc {
2222
{{$opid := .OperationId}}
2323
// {{$opid}} operation middleware
2424
func (sh *strictHandlers) {{.OperationId}}(ctx *gin.Context{{genParamArgs .PathParams}}{{if .RequiresParamObject}}, params externalRef0.{{.OperationId}}Params{{end}}) {
25+
defer func() {
26+
if r := recover(); r != nil {
27+
// handler() may panic to notify early handler exit
28+
if _, ok := r.(*HandlerExitError); !ok {
29+
panic(r)
30+
}
31+
// swallow panic, assume error response was rendered already to gin context
32+
}
33+
}()
34+
2535
var request {{$opid | ucFirst}}RequestObject
2636

2737
{{range .PathParams -}}

internal/rest/api_activity.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ func (h *StrictHandlers) CreateActivity(c *gin.Context, request CreateActivityRe
88
activity, err := h.svc.Activity.Create(c.Request.Context(), h.pool, request.ProjectName, &request.Body.ActivityCreateParams)
99
if err != nil {
1010
renderErrorResponse(c, "could not create activity", err)
11-
12-
return nil, nil
1311
}
1412

1513
return CreateActivity201JSONResponse{Activity: *activity}, nil
@@ -18,8 +16,6 @@ func (h *StrictHandlers) CreateActivity(c *gin.Context, request CreateActivityRe
1816
func (h *StrictHandlers) DeleteActivity(c *gin.Context, request DeleteActivityRequestObject) (DeleteActivityResponseObject, error) {
1917
if _, err := h.svc.Activity.Delete(c.Request.Context(), h.pool, request.ActivityID); err != nil {
2018
renderErrorResponse(c, "could not delete activity", err)
21-
22-
return nil, nil
2319
}
2420

2521
return DeleteActivity204Response{}, nil
@@ -29,8 +25,6 @@ func (h *StrictHandlers) GetActivity(c *gin.Context, request GetActivityRequestO
2925
activity, err := h.svc.Activity.ByID(c.Request.Context(), h.pool, request.ActivityID)
3026
if err != nil {
3127
renderErrorResponse(c, "could not get activity", err)
32-
33-
return nil, nil
3428
}
3529

3630
return GetActivity200JSONResponse{Activity: *activity}, nil
@@ -40,8 +34,6 @@ func (h *StrictHandlers) UpdateActivity(c *gin.Context, request UpdateActivityRe
4034
activity, err := h.svc.Activity.Update(c.Request.Context(), h.pool, request.ActivityID, &request.Body.ActivityUpdateParams)
4135
if err != nil {
4236
renderErrorResponse(c, "could not update activity", err)
43-
44-
return nil, nil
4537
}
4638

4739
return UpdateActivity200JSONResponse{Activity: *activity}, nil

internal/rest/api_notifications.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ func (h *StrictHandlers) GetPaginatedNotifications(c *gin.Context, request GetPa
1212
nn, err := h.svc.Notification.PaginatedUserNotifications(c.Request.Context(), h.pool, caller.UserID, request.Params)
1313
if err != nil {
1414
renderErrorResponse(c, "Could not fetch notifications", err)
15-
16-
return nil, nil
1715
}
1816

1917
nextCursor := ""

internal/rest/api_oidc.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,18 @@ func (h *StrictHandlers) MyProviderCallback(c *gin.Context, request MyProviderCa
5353
userinfo, err := GetUserInfoFromCtx(c)
5454
if err != nil {
5555
renderErrorResponse(c, "OIDC authentication error", internal.WrapErrorf(err, models.ErrorCodeOIDC, "user info not found"))
56-
return nil, nil
5756
}
5857

5958
ctx := c.Request.Context()
6059

6160
u, err := h.svc.Authentication.GetOrRegisterUserFromUserInfo(ctx, *userinfo)
6261
if err != nil {
6362
renderErrorResponse(c, "OIDC authentication error", internal.WrapErrorf(err, models.ErrorCodeOIDC, "could not get or register user"))
64-
return nil, nil
6563
}
6664

6765
accessToken, err := h.svc.Authentication.CreateAccessTokenForUser(ctx, u)
6866
if err != nil {
6967
renderErrorResponse(c, "OIDC authentication error", internal.WrapErrorf(err, models.ErrorCodeOIDC, "could not create access token"))
70-
return nil, nil
7168
}
7269

7370
http.SetCookie(c.Writer, &http.Cookie{

internal/rest/api_team.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ func (h *StrictHandlers) CreateTeam(c *gin.Context, request CreateTeamRequestObj
1818
team, err := h.svc.Team.Create(ctx, tx, &params)
1919
if err != nil {
2020
renderErrorResponse(c, "Could not create team", err)
21-
22-
return nil, nil
2321
}
2422

2523
h.event.Queue(ctx, fmt.Sprintf("team created: %v", team.TeamID), models.TopicTeamCreated)
@@ -36,8 +34,6 @@ func (h *StrictHandlers) UpdateTeam(c *gin.Context, request UpdateTeamRequestObj
3634
team, err := h.svc.Team.Update(ctx, tx, models.TeamID(request.TeamID), &params)
3735
if err != nil {
3836
renderErrorResponse(c, "Could not update team", err)
39-
40-
return nil, nil
4137
}
4238

4339
return UpdateTeam200JSONResponse{Team: *team}, nil
@@ -50,8 +46,6 @@ func (h *StrictHandlers) GetTeam(c *gin.Context, request GetTeamRequestObject) (
5046
team, err := h.svc.Team.ByID(ctx, tx, models.TeamID(request.TeamID))
5147
if err != nil {
5248
renderErrorResponse(c, "Could not get team", err)
53-
54-
return nil, nil
5549
}
5650

5751
return GetTeam200JSONResponse{Team: *team}, nil
@@ -64,8 +58,6 @@ func (h *StrictHandlers) DeleteTeam(c *gin.Context, request DeleteTeamRequestObj
6458
_, err := h.svc.Team.Delete(ctx, tx, models.TeamID(request.TeamID))
6559
if err != nil {
6660
renderErrorResponse(c, "Could not delete team", err)
67-
68-
return nil, nil
6961
}
7062

7163
return DeleteTeam204Response{}, nil

internal/rest/api_user.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,11 @@ func (h *StrictHandlers) UpdateUser(c *gin.Context, request UpdateUserRequestObj
2121
user, err := h.svc.User.Update(c, tx, models.UserID{UUID: request.Id}, caller, request.Body)
2222
if err != nil {
2323
renderErrorResponse(c, "Could not update user", err)
24-
25-
return nil, nil
2624
}
2725

2826
role, ok := h.svc.Authorization.RoleByRank(user.RoleRank)
2927
if !ok {
3028
renderErrorResponse(c, fmt.Sprintf("Role with rank %d not found", user.RoleRank), nil)
31-
32-
return nil, nil
3329
}
3430

3531
res := UserResponse{User: user, Role: role.Name}
@@ -43,8 +39,6 @@ func (h *StrictHandlers) DeleteUser(c *gin.Context, request DeleteUserRequestObj
4339
_, err := h.svc.User.Delete(c, tx, models.NewUserID(request.Id))
4440
if err != nil {
4541
renderErrorResponse(c, "Could not delete user", err)
46-
47-
return nil, nil
4842
}
4943

5044
return DeleteUser204Response{}, nil
@@ -57,8 +51,6 @@ func (h *StrictHandlers) GetCurrentUser(c *gin.Context, request GetCurrentUserRe
5751
if !ok {
5852
msg := fmt.Sprintf("role with rank %d not found", caller.RoleRank)
5953
renderErrorResponse(c, msg, errors.New(msg))
60-
61-
return nil, nil
6254
}
6355

6456
res := UserResponse{
@@ -82,8 +74,6 @@ func (h *StrictHandlers) UpdateUserAuthorization(c *gin.Context, request UpdateU
8274

8375
if _, err := h.svc.User.UpdateUserAuthorization(c, tx, models.UserID{UUID: request.Id}, caller, request.Body); err != nil {
8476
renderErrorResponse(c, "Error updating user authorization", err)
85-
86-
return nil, nil
8777
}
8878

8979
return UpdateUserAuthorization204Response{}, nil
@@ -93,8 +83,6 @@ func (h *StrictHandlers) GetPaginatedUsers(c *gin.Context, request GetPaginatedU
9383
users, err := h.svc.User.Paginated(c, h.pool, request.Params)
9484
if err != nil {
9585
renderErrorResponse(c, "Could not update user", err)
96-
97-
return nil, nil
9886
}
9987

10088
nextCursor := ""
@@ -103,8 +91,6 @@ func (h *StrictHandlers) GetPaginatedUsers(c *gin.Context, request GetPaginatedU
10391
nextCursor, err = getNextCursor(lastUser, request.Params.Column, models.TableEntityUser)
10492
if err != nil {
10593
renderErrorResponse(c, "Could not define next cursor", err)
106-
107-
return nil, nil
10894
}
10995
}
11096
items := make([]UserResponse, len(users))

internal/rest/api_work_item.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,19 @@ func (h *StrictHandlers) CreateWorkitem(c *gin.Context, request CreateWorkitemRe
3737
jsonBody, err := io.ReadAll(c.Request.Body)
3838
if err != nil {
3939
renderErrorResponse(c, "Failed to read request body", err)
40-
41-
return nil, nil
4240
}
4341
span.SetAttributes(tracing.MetadataAttribute(jsonBody))
4442
c.Request.Body = io.NopCloser(bytes.NewBuffer(jsonBody))
4543

4644
project, err := projectByDiscriminator(request.Body)
4745
if err != nil {
4846
renderErrorResponse(c, "Failed to get project", err)
49-
50-
return nil, nil
5147
}
5248

5349
var res any // depends on project
5450
b, err := request.Body.ValueByDiscriminator()
5551
if err != nil {
5652
renderErrorResponse(c, "Failed to read discriminator", err)
57-
58-
return nil, nil
5953
}
6054

6155
//exhaustive:enforce
@@ -74,8 +68,6 @@ func (h *StrictHandlers) CreateWorkitem(c *gin.Context, request CreateWorkitemRe
7468
})
7569
if err != nil {
7670
renderErrorResponse(c, "Could not create work item", err)
77-
78-
return nil, nil
7971
}
8072

8173
res = DemoWorkItemResponse{
@@ -96,8 +88,6 @@ func (h *StrictHandlers) CreateWorkitem(c *gin.Context, request CreateWorkitemRe
9688
})
9789
if err != nil {
9890
renderErrorResponse(c, "Could not create work item", err)
99-
100-
return nil, nil
10191
}
10292

10393
res = DemoTwoWorkItemResponse{
@@ -106,8 +96,6 @@ func (h *StrictHandlers) CreateWorkitem(c *gin.Context, request CreateWorkitemRe
10696
}
10797
default:
10898
renderErrorResponse(c, "Unknown discriminator", internal.NewErrorf(models.ErrorCodeUnknown, "%+v", b))
109-
110-
return nil, nil
11199
}
112100

113101
var resJson *CreateWorkitem201JSONResponse

internal/rest/api_work_item_comment.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ func (h *StrictHandlers) CreateWorkItemComment(c *gin.Context, request CreateWor
1313
workItemComment, err := h.svc.WorkItemComment.Create(c, tx, &params)
1414
if err != nil {
1515
renderErrorResponse(c, "Could not create work item comment", err)
16-
17-
return nil, nil
1816
}
1917

2018
res := WorkItemCommentResponse{
@@ -31,8 +29,6 @@ func (h *StrictHandlers) GetWorkItemComment(c *gin.Context, request GetWorkItemC
3129
workItemComment, err := h.svc.WorkItemComment.ByID(c, tx, request.WorkItemCommentID)
3230
if err != nil {
3331
renderErrorResponse(c, "Could not create work item comment", err)
34-
35-
return nil, nil
3632
}
3733

3834
res := WorkItemCommentResponse{
@@ -52,8 +48,6 @@ func (h *StrictHandlers) UpdateWorkItemComment(c *gin.Context, request UpdateWor
5248
workItemComment, err := h.svc.WorkItemComment.Update(c, tx, caller, models.WorkItemCommentID(request.WorkItemCommentID), &params)
5349
if err != nil {
5450
renderErrorResponse(c, "Could not update work item comment", err)
55-
56-
return nil, nil
5751
}
5852

5953
res := WorkItemCommentResponse{
@@ -71,8 +65,6 @@ func (h *StrictHandlers) DeleteWorkItemComment(c *gin.Context, request DeleteWor
7165
_, err := h.svc.WorkItemComment.Delete(c, tx, caller, models.WorkItemCommentID(request.WorkItemCommentID))
7266
if err != nil {
7367
renderErrorResponse(c, "Could not delete work item comment", err)
74-
75-
return nil, nil
7668
}
7769

7870
return DeleteWorkItemComment204Response{}, nil

internal/rest/api_work_item_tag.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ func (h *StrictHandlers) CreateWorkItemTag(c *gin.Context, request CreateWorkIte
1818
wit, err := h.svc.WorkItemTag.Create(ctx, tx, caller, &body.WorkItemTagCreateParams)
1919
if err != nil {
2020
renderErrorResponse(c, "Could not create work item tag", err)
21-
22-
return nil, nil
2321
}
2422

2523
return CreateWorkItemTag201JSONResponse{WorkItemTag: *wit}, nil

0 commit comments

Comments
 (0)