Skip to content

Commit 96068aa

Browse files
fix: Update api state management for CRUD endpoints
1 parent e57bffe commit 96068aa

5 files changed

Lines changed: 44 additions & 37 deletions

File tree

internal/internal_api/handler/add_member_to_team.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@ type AddMemberToTeamResponse struct {
1818
func AddMemberToTeam(w http.ResponseWriter, r *http.Request) {
1919
ctx := r.Context()
2020

21-
apiState := ctx.Value(util.ApiStateCtxKey).(internal_api.State)
21+
authId := ctx.Value(util.AuthIdCtxKey).(string)
22+
23+
apiState, err := internal_api.InternalApiState(authId, ctx)
24+
25+
if err != nil {
26+
util.JSONError(w, util.ErrorParam{Error: "Internal Server Error"}, http.StatusInternalServerError)
27+
return
28+
}
2229

2330
teamId, err := strconv.ParseInt(chi.URLParam(r, "team_id"), 10, 64)
2431
if err != nil {

internal/internal_api/handler/create_member.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ func CreateMember(w http.ResponseWriter, r *http.Request) {
3434
util.JSONError(w, util.ErrorParam{Error: "Bad Request"}, http.StatusBadRequest)
3535
}
3636

37-
apiState := ctx.Value(util.ApiStateCtxKey).(internal_api.State)
37+
authId := ctx.Value(util.AuthIdCtxKey).(string)
38+
39+
apiState, err := internal_api.InternalApiState(authId, ctx)
40+
41+
if err != nil {
42+
util.JSONError(w, util.ErrorParam{Error: "Internal Server Error"}, http.StatusInternalServerError)
43+
return
44+
}
3845

3946
newMemberRes, err := apiState.DB.CreateMember(body.Name, body.Email, ctx)
4047

internal/internal_api/handler/create_team.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,26 @@ func CreateTeam(w http.ResponseWriter, r *http.Request) {
2828
return
2929
}
3030

31-
organizationId := ctx.Value(util.OrganizationIdCtxKey).(int64)
32-
33-
if organizationId == 0 || body.TeamName == "" {
34-
fmt.Printf("No organization id or team name provided. Organization id: %d Team name: %s", organizationId, body.TeamName)
31+
if body.TeamName == "" {
32+
fmt.Printf("No team name provided. Team name: %s", body.TeamName)
3533
util.JSONError(w, util.ErrorParam{Error: "Bad Request"}, http.StatusBadRequest)
3634
}
3735

38-
apiState := ctx.Value(util.ApiStateCtxKey).(internal_api.State)
36+
authId := ctx.Value(util.AuthIdCtxKey).(string)
37+
38+
apiState, err := internal_api.InternalApiState(authId, ctx)
39+
40+
if err != nil {
41+
util.JSONError(w, util.ErrorParam{Error: "Internal Server Error"}, http.StatusInternalServerError)
42+
return
43+
}
44+
45+
organizationId, err := apiState.DB.GetOrganizationIdByAuthId(authId, ctx)
46+
47+
if err != nil {
48+
util.JSONError(w, util.ErrorParam{Error: "Bad request"}, http.StatusBadRequest)
49+
return
50+
}
3951

4052
newTeamRes, err := apiState.DB.CreateTeam(body.TeamName, organizationId, ctx)
4153

internal/internal_api/internal_api.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"database/sql"
66
"fmt"
7-
"net/http"
87
"os"
98

109
"github.com/dxta-dev/app/internal/internal_api/data"
@@ -52,8 +51,14 @@ func GetTenantDBUrlByAuthId(ctx context.Context, authId string) (TenantDBData, e
5251
return tenantData, nil
5352
}
5453

55-
func InternalApiState(dbUrl string, r *http.Request) (State, error) {
56-
tenantDB, err := data.NewTenantDB(dbUrl)
54+
func InternalApiState(authId string, ctx context.Context) (State, error) {
55+
tenantData, err := GetTenantDBUrlByAuthId(ctx, authId)
56+
57+
if err != nil {
58+
return State{}, err
59+
}
60+
61+
tenantDB, err := data.NewTenantDB(tenantData.DBUrl)
5762

5863
if err != nil {
5964
return State{}, err

internal/util/auth.go

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"net/http"
1010
"os"
1111

12-
"github.com/dxta-dev/app/internal/internal_api"
1312
"github.com/go-chi/jwtauth/v5"
1413
)
1514

@@ -92,8 +91,7 @@ type contextKey struct {
9291
}
9392

9493
var (
95-
OrganizationIdCtxKey = contextKey{"organizationId"}
96-
ApiStateCtxKey = contextKey{"apiState"}
94+
AuthIdCtxKey = contextKey{"authId"}
9795
)
9896

9997
func Authenticator() func(http.Handler) http.Handler {
@@ -116,36 +114,14 @@ func Authenticator() func(http.Handler) http.Handler {
116114
authId := claims["organizationId"].(string)
117115

118116
if authId == "" {
119-
fmt.Println("No organization id found in JWT payload")
117+
fmt.Println("No auth id found in JWT payload")
120118
JSONError(w, ErrorParam{Error: "Bad request"}, http.StatusBadRequest)
121119
return
122120
}
123121

124122
ctx := r.Context()
125123

126-
tenantData, err := internal_api.GetTenantDBUrlByAuthId(ctx, authId)
127-
128-
if err != nil {
129-
JSONError(w, ErrorParam{Error: "Internal Server Error"}, http.StatusInternalServerError)
130-
return
131-
}
132-
133-
apiState, err := internal_api.InternalApiState(tenantData.DBUrl, r)
134-
135-
if err != nil {
136-
JSONError(w, ErrorParam{Error: "Internal Server Error"}, http.StatusInternalServerError)
137-
return
138-
}
139-
140-
organizationId, err := apiState.DB.GetOrganizationIdByAuthId(authId, ctx)
141-
142-
if err != nil {
143-
JSONError(w, ErrorParam{Error: "Bad request"}, http.StatusBadRequest)
144-
return
145-
}
146-
147-
ctx = context.WithValue(ctx, OrganizationIdCtxKey, organizationId)
148-
ctx = context.WithValue(ctx, ApiStateCtxKey, apiState)
124+
ctx = context.WithValue(ctx, AuthIdCtxKey, authId)
149125

150126
next.ServeHTTP(w, r.WithContext(ctx))
151127
}

0 commit comments

Comments
 (0)