shes working

This commit is contained in:
2026-02-17 09:57:35 -05:00
parent d8a80bd728
commit a5a5d41e50
6 changed files with 79 additions and 31 deletions

View File

@@ -219,6 +219,7 @@ handle_delete_table :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_Req
make_error_response(response, .ValidationException, "Invalid request or missing TableName")
return
}
defer delete(table_name)
err := dynamodb.delete_table(engine, table_name)
if err != .None {
@@ -267,16 +268,22 @@ handle_describe_table :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_R
for ks, i in metadata.key_schema {
if i > 0 do strings.write_string(&builder, ",")
fmt.sbprintf(&builder, `{"AttributeName":"%s","KeyType":"%s"}`,
ks.attribute_name, dynamodb.key_type_to_string(ks.key_type))
strings.write_string(&builder, `{"AttributeName":"`)
strings.write_string(&builder, ks.attribute_name)
strings.write_string(&builder, `","KeyType":"`)
strings.write_string(&builder, dynamodb.key_type_to_string(ks.key_type))
strings.write_string(&builder, `"}`)
}
strings.write_string(&builder, `],"AttributeDefinitions":[`)
for ad, i in metadata.attribute_definitions {
if i > 0 do strings.write_string(&builder, ",")
fmt.sbprintf(&builder, `{"AttributeName":"%s","AttributeType":"%s"}`,
ad.attribute_name, dynamodb.scalar_type_to_string(ad.attribute_type))
strings.write_string(&builder, `{"AttributeName":"`)
strings.write_string(&builder, ad.attribute_name)
strings.write_string(&builder, `","AttributeType":"`)
strings.write_string(&builder, dynamodb.scalar_type_to_string(ad.attribute_type))
strings.write_string(&builder, `"}`)
}
strings.write_string(&builder, `]`)
@@ -291,8 +298,11 @@ handle_describe_table :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_R
strings.write_string(&builder, `","KeySchema":[`)
for ks, ki in gsi.key_schema {
if ki > 0 do strings.write_string(&builder, ",")
fmt.sbprintf(&builder, `{"AttributeName":"%s","KeyType":"%s"}`,
ks.attribute_name, dynamodb.key_type_to_string(ks.key_type))
strings.write_string(&builder, `{"AttributeName":"`)
strings.write_string(&builder, ks.attribute_name)
strings.write_string(&builder, `","KeyType":"`)
strings.write_string(&builder, dynamodb.key_type_to_string(ks.key_type))
strings.write_string(&builder, `"}`)
}
strings.write_string(&builder, `],"Projection":{"ProjectionType":"`)
strings.write_string(&builder, projection_type_to_string(gsi.projection.projection_type))
@@ -455,6 +465,7 @@ handle_get_item :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_Request
make_error_response(response, .ValidationException, "Invalid request or missing TableName")
return
}
defer delete(table_name)
key, key_ok := dynamodb.parse_key_from_request(request.body)
if !key_ok {
@@ -493,6 +504,7 @@ handle_delete_item :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_Requ
make_error_response(response, .ValidationException, "Invalid request or missing TableName")
return
}
defer delete(table_name)
key, key_ok := dynamodb.parse_key_from_request(request.body)
if !key_ok {
@@ -939,9 +951,13 @@ handle_batch_write_item :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP
item_json := dynamodb.serialize_item(req.item)
switch req.type {
case .Put:
fmt.sbprintf(&builder, `{"PutRequest":{"Item":%s}}`, item_json)
strings.write_string(&builder, `{"PutRequest":{"Item":`)
strings.write_string(&builder, item_json)
strings.write_string(&builder, "}}")
case .Delete:
fmt.sbprintf(&builder, `{"DeleteRequest":{"Key":%s}}`, item_json)
strings.write_string(&builder, `{"DeleteRequest":{"Key":`)
strings.write_string(&builder, item_json)
strings.write_string(&builder, "}}")
}
}
@@ -1086,7 +1102,9 @@ handle_batch_get_item :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_R
if ti > 0 {
strings.write_string(&builder, ",")
}
fmt.sbprintf(&builder, `"%s":{"Keys":[`, table_req.table_name)
strings.write_string(&builder, `"`)
strings.write_string(&builder, table_req.table_name)
strings.write_string(&builder, `":{"Keys":["`)
for key, ki in table_req.keys {
if ki > 0 {
@@ -1650,6 +1668,8 @@ handle_storage_error :: proc(response: ^HTTP_Response, err: dynamodb.Storage_Err
make_error_response(response, .ValidationException, "One or more required key attributes are missing")
case .Invalid_Key:
make_error_response(response, .ValidationException, "Invalid key: type mismatch or malformed key value")
case .Validation_Error:
make_error_response(response, .ValidationException, "Invalid request: type mismatch or incompatible operand")
case .Serialization_Error:
make_error_response(response, .InternalServerError, "Internal serialization error")
case .RocksDB_Error: