> For the complete documentation index, see [llms.txt](https://docs.flexbase.in/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flexbase.in/data-and-providers/data-stores/document-db/dynamo-db.md).

# Dynamo Db

## Description

DynamoDB is used as a **Document DB provider** behind the Flex abstraction (`IFlexDocumentStore`). Generated wiring maps your logical document models to Dynamo tables, and your business logic stays consistent across providers.

## Important Concepts

* **Table metadata is config-driven**: partition key / sort key and table names are configured.
* **Queries/handlers remain provider-agnostic**: you use `IFlexDocumentStore`.
* **AppContext is mandatory**: always call `dto.GetAppContext()`.

## Configuration in DI (where to add)

Provider wiring is generated in your Infrastructure project (under a `...DataStoreProviders/Document/DynamoDb` folder). You typically do **not** register individual queries/handlers here — Flex generates and wires those.

If you are wiring DynamoDB manually, add the **document-store provider** registration where you configure infrastructure services:

```csharp
// Infrastructure (example)
services.AddFlexDynamoDocumentStore<OrderDocument>(configuration);
```

## appsettings.json

```json
{
	"FlexBase": {
		"DataStores": {
			"Document": {
				"DynamoDb": {
					"Region": "us-east-1",
					"AccessKeyId": "<from-secrets>",
					"SecretAccessKey": "<from-secrets>",
					"TableName": "Orders",
					"PartitionKeyName": "id",
					"UseLocalStack": false,
					"ServiceUrl": null
				}
			}
		}
	}
}
```

## Examples (from the generated templates)

Dynamo uses the same generated shapes as other Document DB providers.

### Query example (Get-by-id)

```csharp
using Microsoft.Extensions.Logging;
using Sumeru.Flex;
using System;
using System.Threading.Tasks;

public class GetOrderById : FlexiQueryBridgeAsync<OrderDto>
{
		protected readonly ILogger<GetOrderById> _logger;
		protected readonly IFlexHost _flexHost;
		protected readonly IFlexDocumentStore _documentStore;
		protected GetOrderByIdParams _params;
		protected FlexAppContextBridge _flexAppContext;

		public GetOrderById(ILogger<GetOrderById> logger, IFlexHost flexHost, IFlexDocumentStore documentStore)
		{
				_logger = logger;
				_flexHost = flexHost;
				_documentStore = documentStore;
		}

		public virtual GetOrderById AssignParameters(GetOrderByIdParams @params)
		{
				_params = @params;
				return this;
		}

		public virtual async Task<OrderDto?> Fetch()
		{
				_flexAppContext = _params.GetAppContext();
				var doc = await _documentStore.GetByIdAsync<OrderDocument>(_params.Id);
				return doc == null ? null : new OrderDto { Id = doc.Id, Status = doc.Status };
		}
}

public class GetOrderByIdParams : DtoBridge
{
		public Guid Id { get; set; }
}
```

## Provider-specific considerations

* **Keys**: design your partition/sort keys around your read patterns.
* **Capacity mode**: provisioned vs on-demand is an environment choice; keep it in configuration.
* **TTL/Streams**: enable TTL for lifecycle cleanup and streams when you need change capture.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flexbase.in/data-and-providers/data-stores/document-db/dynamo-db.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
