{"id":21770210,"url":"https://github.com/godzie44/d3","last_synced_at":"2025-04-13T16:40:47.916Z","repository":{"id":65781111,"uuid":"237603939","full_name":"godzie44/d3","owner":"godzie44","description":"Golang ORM and data mapper ","archived":false,"fork":false,"pushed_at":"2022-01-14T13:26:40.000Z","size":412,"stargazers_count":22,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-27T07:35:49.804Z","etag":null,"topics":["ddd","golang-orm","golang-package","orm"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/godzie44.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-02-01T11:22:17.000Z","updated_at":"2025-03-18T10:32:21.000Z","dependencies_parsed_at":"2023-02-09T17:25:11.698Z","dependency_job_id":null,"html_url":"https://github.com/godzie44/d3","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godzie44%2Fd3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godzie44%2Fd3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godzie44%2Fd3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godzie44%2Fd3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/godzie44","download_url":"https://codeload.github.com/godzie44/d3/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248746818,"owners_count":21155334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddd","golang-orm","golang-package","orm"],"created_at":"2024-11-26T14:11:44.338Z","updated_at":"2025-04-13T16:40:47.878Z","avatar_url":"https://github.com/godzie44.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![golangci-lint](https://github.com/godzie44/d3orm/workflows/golangci-lint/badge.svg) ![tests](https://github.com/godzie44/d3orm/workflows/tests/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/godzie44/d3/badge.svg?branch=master)](https://coveralls.io/github/godzie44/d3?branch=master)\n\n# D3 ORM\n\nD3 is a golang ORM and DataMapper. This project was designed with respect to such \nORM's like hibernate and doctrine. The main task - give an instrument to create a nice domain layer. If your business code not expressive enough, or if you want unit tests without a database, or if in your application, for some reason, you need aggregates, \nrepositories, entities, and value objects - d3 can be a good choice.\n\n## Motivation. Why another ORM?\n\nIn my opinion in GO have a lot of good ORM's. They are pretty fast and may save the developer from a lot of boilerplate code. But, if you want to write code\nin DDD style (using DDD patterns and philosophy) it's not enough, \nbecause DDD approach imposes certain requirements. Main requirement - \npersistence ignorance. Current GO ORM's do not provide a sufficient level of abstraction for this.\nIn other words, we need to keep business logic free of data access code. That's why D3 created.\n\n## Main futures\n\n- code generation instead of reflection\n- DB schema auto-generation\n- one-to-one, one-to-many, and many-to-many relations\n- lazy and eager relation loading\n- query builder\n- relation fetch strategies (eager/lazy as above or extract relation in one query with join)\n- fetched entity cache (first level cache)\n- cascade remove and update of related entities\n- application-level transaction (UnitOfWork)\n- DB transactions support\n- smart persist layer doesn't generate redundant queries on entity updates\n- UUID support\n\n## Documentation\n\nAll documentation is on the project [wiki](https://github.com/godzie44/d3/wiki).\n\n## Example of usage\n\nA full example of usage you can see in [this](https://github.com/godzie44/last-wish) project. Note, that is it is a test project\nwith main responsibility show d3 ORM in action.\n\n## Tests\n\nD3 integration tests require a PostgreSQL database. Connect to the database specified in the D3_PG_TEST_DB environment variable.\n\n## Roadmap\n\n- [ ] add mysql support\n- [X] add sqlite support\n- [ ] composite pk\n- [ ] not only schema generation but generation of schema diff's\n- [ ] embedding structures\n- [X] index definition in entity comments\n- [ ] generate fk's for relations\n\nNote: Current project status - is alpha. It can be used in production with some risky.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodzie44%2Fd3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgodzie44%2Fd3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodzie44%2Fd3/lists"}