{"id":20392329,"url":"https://github.com/akdasa-studios/framework","last_synced_at":"2025-03-05T00:21:24.074Z","repository":{"id":62870907,"uuid":"550839899","full_name":"akdasa-studios/framework","owner":"akdasa-studios","description":"📦 Build solid applications","archived":false,"fork":false,"pushed_at":"2024-08-30T12:06:37.000Z","size":685,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-15T10:26:20.092Z","etag":null,"topics":["clean-architecture","clean-code","ddd","framework","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akdasa-studios.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"akdasa-studios"}},"created_at":"2022-10-13T12:14:21.000Z","updated_at":"2024-01-12T18:41:25.000Z","dependencies_parsed_at":"2024-01-04T16:48:02.151Z","dependency_job_id":"789d4630-9c26-4b88-b792-abf5814444de","html_url":"https://github.com/akdasa-studios/framework","commit_stats":null,"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akdasa-studios%2Fframework","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akdasa-studios%2Fframework/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akdasa-studios%2Fframework/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akdasa-studios%2Fframework/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akdasa-studios","download_url":"https://codeload.github.com/akdasa-studios/framework/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241941708,"owners_count":20046171,"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":["clean-architecture","clean-code","ddd","framework","typescript"],"created_at":"2024-11-15T03:43:23.226Z","updated_at":"2025-03-05T00:21:24.054Z","avatar_url":"https://github.com/akdasa-studios.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/akdasa-studios/framework/main/docs/logo.svg\" height=\"128px\"/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/akdasa-studios/framework/actions/workflows/tests.yml\"\u003e\u003cimg src=\"https://github.com/akdasa-studios/framework/actions/workflows/tests.yml/badge.svg\" alt=\"Tests\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/akdasa-studios/framework\"\u003e\u003cimg src=\"https://codecov.io/gh/akdasa-studios/framework/branch/main/graph/badge.svg?token=OB1AZJDMY5\" alt=\"codecov\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://dashboard.stryker-mutator.io/reports/github.com/akdasa-studios/framework/main\"\u003e\u003cimg src=\"https://img.shields.io/endpoint?style=flat\u0026amp;url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fakdasa-studios%2Fframework%2Fmain\" alt=\"Mutation testing badge\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.codacy.com/gh/akdasa-studios/framework/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=akdasa-studios/framework\u0026amp;utm_campaign=Badge_Grade\"\u003e\u003cimg src=\"https://app.codacy.com/project/badge/Grade/a2f433a5afe841ca8bda8e6025ee4929\" alt=\"Codacy Badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n_Framework_ is a simple library we use to build our application. It is based on _Domain Driven Development_ principles. The goals of that framework are to help with:\n\n  1. Create applications using domain-oriented principles.\n  2. Create testable and robust applications.\n  3. Work on every platform: mobile, desktop, and web.\n\n# Documentation\n[Read the docs](./docs/index.md). Documentation is still in progress, but you can already find some useful information. If you have any questions, feel free to ask them in issues. We will try to answer them as soon as possible.\n\n## Development\n  1. `npm run test` - Run all tests\n  2. `npm run test:unit` - Run unit tests\n  3. `npm run test:mutational` - Run mutational tests\n\n# Show me the code!\n```ts\nimport { UuidIdentity, Aggregate, Entity } from '@akdasa-studios/framework/domain/models'\nimport { QueryBuilder } from '@akdasa-studios/framework/domain/persistence'\n\n// Identities\nclass OrderId extends UuidIdentity\u003c'Order'\u003e {}\nclass OrderLineId extends UuidIdentity\u003c'OrderLine'\u003e {}\n\n// Entity\nclass OrderLine extends Entity\u003cOrderLineId\u003e {\n  constructor(\n    public readonly line: string,\n    public readonly quantity: number,\n    id?: OrderLineId\n  ) {\n    super(id || new UuidIdentity())\n  }\n}\n\n// Aggregate\nclass Order extends Aggregate\u003cOrderId\u003e {\n  constructor(\n    public readonly lines: OrderLine[],\n    public readonly price: Price,\n    id?: OrderId\n  ) {\n    super(id || new UuidIdentity())\n  }\n\n  addLine(line: OrderLine) {\n    this.lines.push(line)\n  }\n}\n\n// Fetching data\nconst q = new QueryBuilder\u003cOrder\u003e()\n\n// Build queries using builder methods\nconst tastyDishes = q.or(\n  q.eq('sku.itemName', 'Lassi'),\n  q.eq('sku.itemName', 'Dosa'),\n)\n\n// Use parametric query\nconst moreExpensiveThan = (price: number) =\u003e q.gte('price', price)\nconst goldenOrders = moreExpensiveThan(1000)\n\n// Execute query\nclientRepository.find(q.and(goldenOrders, commonLastName))\n```\n","funding_links":["https://github.com/sponsors/akdasa-studios"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakdasa-studios%2Fframework","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakdasa-studios%2Fframework","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakdasa-studios%2Fframework/lists"}