2.5 KiB
2.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a Rust library called entity-changes that provides entity change tracking functionality for MySQL databases using SQLx. The library supports tracking entity modifications with actors, sessions, and change sets, along with procedural macros for automatic derivation of entity tracking capabilities.
Architecture
Workspace Structure
- Main library (
src/): Core entity change tracking functionality - entity-update_derive (
entity-update_derive/): Procedural macro crate for deriving Entity and Update traits - entity-changes-ctl (
entity-changes-ctl/): Command-line utility for the library
Core Components
- models.rs: Defines
EntityChangestruct andActionenum for tracking entity modifications - repositories.rs: Database query functions for creating and retrieving entity changes by various criteria (ID, entity, session, actor, change set)
- value.rs: Type-safe value system supporting MySQL types (integers, strings, UUIDs, dates, etc.) with
Valueenum andUpdaterfor SQL operations - condition.rs: Query condition system with
Conditionenum supporting SQL operations (Equal, Like, In, And, Or, etc.) - helpers.rs: Utility functions and macros for the library
Features
derive: Enables procedural macro support for Entity and Update traitsstatic-validation: Enables static SQLx validation during compilation
Development Commands
Building
cargo build
Testing
cargo test
Building with all features
cargo build --all-features
Working with workspace members
# Build specific workspace member
cargo build -p entity-update_derive
cargo build -p entity-changes-ctl
# Test specific workspace member
cargo test -p entity-changes
Releasing
The project uses a Makefile for tagging releases:
make tag
This creates a git tag based on the version in Cargo.toml and pushes it to the remote repository.
Important Notes
- The library is designed specifically for MySQL databases via SQLx
- All entity changes include metadata: actor_id, session_id, change_set_id, and timestamps
- The
new_valuefield stores JSON data for tracking actual changes - Procedural macros are optional and gated behind the "derive" feature
- The library uses UUIDs for all entity identifiers
- Query conditions support both simple field-value pairs and complex nested And/Or logic