Files
cppbessot/README.md

3.1 KiB

CPPBESSOT (C++ BackEnd Single Source of Truth):

A framework that uses OpenAI to maintain a single source of truth for the data model of a software project. It generates C++ headers, JSON serdes, ODB-based ORM headers, DB migrations, Typescript types and Zod schemas. I.e: a type-safe backend-to-frontend data model manager.

Basically, it enables one to write a web application whose backend is written in C++. This C++ web application can communicate seamlessly with a Typescript frontend without losing type-safety. We leverage Zod to enforce type safety. So you get type-safety from end to end. From C++ through to the Typescript frontend.

It works by specifying the data model in OpenAPI. Then the OpenAPI model is transpiled into both C++ headers (with JSON serdes and ODB ORM for your database of choice) and Typescript types with Zod schema descriptions.

CMake integration

Reusable CMake entry point for embedding in a larger project:

  • cmake/CppBeSSOT.cmake

The primary schema root folder is configurable via:

  • CPPBESSOT_WORKDIR (defaults to db)

This repo also carries self-contained schema fixtures for test runs:

  • db/test-schema-v1.1
  • db/test-schema-v1.2

Simple Integration Guide

1) Add the module from your parent project

# Parent project CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(MyApp LANGUAGES CXX)

# Optional: where schema directories live (default is "db")
set(CPPBESSOT_WORKDIR "db")

# Required: exact schema directory basename under CPPBESSOT_WORKDIR
set(DB_SCHEMA_DIR_TO_GENERATE "v1.1")

# Optional: only needed if you will run db_gen_migrations
# set(DB_SCHEMA_DIR_MIGRATION_FROM "v1.1")
# set(DB_SCHEMA_DIR_MIGRATION_TO "v1.2")

include(path/to/cppbessot/cmake/CppBeSSOT.cmake)

2) Build generation targets manually

cmake -S . -B build
cmake --build build --target db_gen_orm_serdes_and_zod
cmake --build build --target db_gen_sql_ddl
cmake --build build --target db_check_schema_changes

Optional migration generation:

cmake -S . -B build \
  -DDB_SCHEMA_DIR_MIGRATION_FROM=v1.1 \
  -DDB_SCHEMA_DIR_MIGRATION_TO=v1.2
cmake --build build --target db_gen_migrations

2b) Build the bundled serdes tests

These tests validate that checked-in generated C++ model code can be compiled and used for JSON round trips. They are owned by cppbessot, not by any parent project.

git submodule update --init --recursive tests/googletest
cmake -S . -B build-tests -DDB_SCHEMA_DIR_TO_GENERATE=test-schema-v1.2
cmake --build build-tests --target cpp_serdes_test_schema_v1_2
ctest --test-dir build-tests --output-on-failure

The local test fixtures live under db/test-schema-v1.1 and db/test-schema-v1.2. They intentionally differ so migration generation has real additive schema changes to process.

target_link_libraries(my_app PRIVATE
  cppbessot::openai_model_gen
  cppbessot::odb_sqlite   # if sqlite odb sources exist
  cppbessot::odb_pgsql    # if postgre odb sources exist
)

Optional manual enable mode

set(CPPBESSOT_AUTO_ENABLE OFF)
include(path/to/cppbessot/cmake/CppBeSSOT.cmake)
cppbessot_enable()