Skip to content

Commit d5b7081

Browse files
artparclaude
andcommitted
Override Update/Create/Delete on ExtendedClient to prevent panics
The upstream daptin-go-client panics on nil type assertion when the server returns an error response (no "data" key). Override all three methods to use ParseSingleResponse with proper nil checks and HTTP status code handling. Fixes #10 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6e7dcb0 commit d5b7081

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

client/client.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,36 @@ func (e *ExtendedClient) FindOne(tableName, referenceId string, parameters dapti
7575
return ParseSingleResponse(resp.Body())
7676
}
7777

78+
// Update overrides the upstream to handle error responses without panicking.
79+
func (e *ExtendedClient) Update(tableName, referenceId string, object daptinClient.JsonApiObject) (daptinClient.JsonApiObject, error) {
80+
resp, err := e.nextRequest().SetBody(object).Patch(
81+
e.Endpoint + "/api/" + tableName + "/" + referenceId,
82+
)
83+
if err := e.checkResponse(resp, err); err != nil {
84+
return nil, err
85+
}
86+
return ParseSingleResponse(resp.Body())
87+
}
88+
89+
// Create overrides the upstream to handle error responses without panicking.
90+
func (e *ExtendedClient) Create(tableName string, attributes daptinClient.JsonApiObject) (daptinClient.JsonApiObject, error) {
91+
resp, err := e.nextRequest().SetBody(attributes).Post(
92+
e.Endpoint + "/api/" + tableName,
93+
)
94+
if err := e.checkResponse(resp, err); err != nil {
95+
return nil, err
96+
}
97+
return ParseSingleResponse(resp.Body())
98+
}
99+
100+
// Delete overrides the upstream to add HTTP status checking.
101+
func (e *ExtendedClient) Delete(tableName, referenceId string) error {
102+
resp, err := e.nextRequest().Delete(
103+
e.Endpoint + "/api/" + tableName + "/" + referenceId,
104+
)
105+
return e.checkResponse(resp, err)
106+
}
107+
78108
// MapArray extracts a named sub-map from each JsonApiObject.
79109
func MapArray(objects []daptinClient.JsonApiObject, keyName string) []map[string]interface{} {
80110
result := make([]map[string]interface{}, 0, len(objects))

0 commit comments

Comments
 (0)