Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
3709057
feat(client): add DynamoMapper client project
j-d-ha Apr 6, 2026
9583afb
chore(config): clean up and streamline .DotSettings file
j-d-ha Apr 6, 2026
fccc662
feat(client): implement DynamoClient with mapper support
j-d-ha Apr 6, 2026
4578a54
refactor(client): update namespace to align with DynamoMapper structure
j-d-ha Apr 6, 2026
2b9c65d
refactor(client): replace private field with public property for Dyna…
j-d-ha Apr 6, 2026
60b0ad1
refactor(client): update GetItemAsync method to use async/await
j-d-ha Apr 6, 2026
d5b6c1e
feat(client): add convenience methods and XML documentation to Dynamo…
j-d-ha Apr 6, 2026
2974165
chore(client): suppress ReSharper warning for public members
j-d-ha Apr 6, 2026
7c5e834
feat(test): add unit test project for DynamoMapper Client
j-d-ha Apr 6, 2026
94dc4e3
feat(skills): add support for DynamoMapper skill
j-d-ha Apr 6, 2026
86c7478
feat(skills): add git-workflow automation skill
j-d-ha Apr 6, 2026
cb90341
feat(test): enhance DynamoMapper Client test setup with mappers and m…
j-d-ha Apr 6, 2026
6064ca6
feat(skills): support instance-based mappers in DynamoMapper
j-d-ha Apr 6, 2026
69e7ecc
feat(test): add sample data and table creation logic to DynamoMapper …
j-d-ha Apr 6, 2026
23fb0ae
feat(test): add integration tests for DynamoClient functionality
j-d-ha Apr 6, 2026
0067dfb
feat(client): add dependency injection support for DynamoClient
j-d-ha Apr 7, 2026
3929cdc
feat(client): extend DynamoClient with GetItemResponse and PartiQL su…
j-d-ha Apr 7, 2026
6d4cb30
feat(client): update DynamoClient response handling and introduce Que…
j-d-ha Apr 7, 2026
35ffb2a
feat(client): enhance response handling with ScanResponse and Execute…
j-d-ha Apr 7, 2026
73b05cc
feat(client, runtime, test): introduce AttributeValue conversion exte…
j-d-ha Apr 7, 2026
8aa2bbe
refactor(test): update AttributeValue assertions to use BeEquivalentTo
j-d-ha Apr 7, 2026
2bc1abb
refactor(client): remove raw `ExecuteStatementAsync` method from Dyna…
j-d-ha Apr 7, 2026
9095dc8
feat(client, test): add enriched response models for CRUD methods wit…
j-d-ha Apr 7, 2026
df04e18
feat(ci): add OpenCode configuration for automated code formatting
j-d-ha Apr 7, 2026
7840afa
feat(hooks): add format hook for automated code cleanup support
j-d-ha Apr 7, 2026
4153f8b
feat(hooks): use environment variable for JetBrains DotSettings file …
j-d-ha Apr 7, 2026
b99bd0d
Merge branch 'main' into feature/add-client
j-d-ha Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions .claude/hooks/format.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.14"
# ///

import json
import os
import sys
import subprocess

DOTSETTINGS_FILE_NAME = "LayeredCraft.DynamoMapper.sln.DotSettings"


def main():
try:
# Read JSON input from stdin
input_data = json.load(sys.stdin)

cwd = input_data["cwd"]
eddited_input = input_data["tool_input"]["file_path"]
_, ext = os.path.splitext(eddited_input)

print(f"Running code cleanup on: '{eddited_input}' in directory: '{cwd}'")

match ext.lower():
case ".cs" | ".csx" | ".csproj" | ".props":
csharp(cwd, eddited_input)
case ".md":
markdown(cwd, eddited_input)
case _:
print(f"Skipping unsupported file type: '{ext}'")

sys.exit(0)

except json.JSONDecodeError:
# Handle JSON decode errors gracefully
sys.exit(0)
except Exception:
# Exit cleanly on any other error
sys.exit(0)


def csharp(cwd: str, eddited_input: str) -> None:
print("======================================")

print("Running C# code cleanup...")

result = subprocess.run(
[
"dotnet",
"tool",
"run",
"jb",
"cleanupcode",
"--profile=Built-in: Reformat Code",
f"--include={eddited_input}",
f"--settings={os.getenv('DOTSETTINGS_FILE')}",
],
cwd=cwd,
capture_output=True,
text=True,
)

print(result.stdout)

print("======================================")


def markdown(cwd: str, eddited_input: str) -> None:
print("======================================")

print("Running Markdown code cleanup...")

result = subprocess.run(
[
"uvx",
"--with",
"mdformat-mkdocs",
"--with",
"mdformat-frontmatter",
"mdformat",
eddited_input,
"--exclude",
".agents/**",
"--exclude",
".claude/**",
"--exclude",
".opencode/**"
],
cwd=cwd,
capture_output=True,
text=True,
)

print(result.stdout)

print("======================================")


if __name__ == "__main__":
print("Running format_cs.py hook...")
main()
19 changes: 19 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"respectGitignore": false,
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "uv run $CLAUDE_PROJECT_DIR/.claude/hooks/format.py"
}
]
}
]
},
"env": {
"DOTSETTINGS_FILE": "LayeredCraft.DynamoMapper.sln.DotSettings"
}
}
1 change: 1 addition & 0 deletions .claude/skills/dynamo-mapper
45 changes: 45 additions & 0 deletions .opencode/opencode.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"$schema": "https://opencode.ai/config.json",
"instructions": [
"CLAUDE.local.md"
],
"formatter": {
"cs-jb-formatter": {
"command": [
"dotnet",
"tool",
"run",
"jb",
"cleanupcode",
"--profile=Built-in: Reformat Code",
"--include=$FILE",
"--settings=LayeredCraft.DynamoMapper.sln.DotSettings"
],
"extensions": [
".cs",
".props",
".csproj"
]
},
"mdformat": {
"command": [
"uvx",
"--with",
"mdformat-mkdocs",
"--with",
"mdformat-frontmatter",
"mdformat",
"$FILE",
"--exclude",
".agents/**",
"--exclude",
".claude/**",
"--exclude",
".opencode/**"
],
"extensions": [
".md"
]
}
}
}
25 changes: 14 additions & 11 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,29 @@
<PackageVersion Include="AutoFixture.AutoNSubstitute" Version="4.18.1"/>
<PackageVersion Include="AutoFixture.Xunit3" Version="4.19.0"/>
<PackageVersion Include="AwesomeAssertions" Version="9.4.0"/>
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="4.0.17.9"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net100" Version="1.8.5"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net110" Version="1.8.5"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net80" Version="1.8.5"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net90" Version="1.8.5"/>
<PackageVersion Include="AWSSDK.DynamoDBv2" Version="4.0.17.3"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net100" Version="1.8.4"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net80" Version="1.8.4"/>
<PackageVersion Include="Basic.Reference.Assemblies.Net90" Version="1.8.4"/>
<PackageVersion Include="Humanizer.Core" Version="3.0.10"/>
<PackageVersion Include="LayeredCraft.SourceGeneratorTools" Version="0.1.0-beta.10"/>
<PackageVersion Include="Meziantou.Polyfill" Version="1.0.110"/>
<PackageVersion Include="Meziantou.Polyfill" Version="1.0.105"/>
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis" Version="5.0.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="5.3.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="5.0.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0"/>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.4.0"/>
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.202"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0"/>
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.3.0"/>
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.201"/>
<PackageVersion Include="NSubstitute" Version="5.3.0"/>
<PackageVersion Include="Scriban" Version="7.1.0"/>
<PackageVersion Include="Scriban" Version="7.0.6"/>
<PackageVersion Include="Testcontainers.DynamoDb" Version="4.11.0"/>
<PackageVersion Include="Verify.SourceGenerators" Version="2.5.0"/>
<PackageVersion Include="Verify.XunitV3" Version="31.16.1"/>
<PackageVersion Include="Verify.XunitV3" Version="31.13.5"/>
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.5"/>
<PackageVersion Include="xunit.v3.extensibility.core" Version="3.2.2"/>
<PackageVersion Include="xunit.v3.mtp-v2" Version="3.2.2"/>
</ItemGroup>
</Project>
</Project>
Loading
Loading