{"_id":"@anatoliacms/anatolia-common","_rev":"3-34877e465141417944d9c0d329711624","name":"@anatoliacms/anatolia-common","dist-tags":{"latest":"1.0.1"},"versions":{"1.1.16":{"name":"@anatoliacms/anatolia-common","version":"1.1.16","description":"An abstraction layer to create core controllers for Nestjs","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"prepublish":"rm -rf dist && tsc && npm publish"},"repository":{"type":"git","url":"git+https://github.com/gunerkaanalkim/nest-crud.git"},"keywords":["nest","crud","abstraction","generator"],"author":{"name":"Guner Kaan Alkim","email":"g.kaanalkim@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gunerkaanalkim/nest-crud/issues"},"homepage":"https://github.com/gunerkaanalkim/nest-crud#readme","devDependencies":{"@nestjs/common":"^10.2.8","@nestjs/typeorm":"^10.0.0","ts-node":"^10.9.1","typeorm":"^0.3.17","typescript":"^5.2.2"},"_id":"@anatoliacms/anatolia-common@1.1.16","gitHead":"510fd8c899edaa3fa7b3cee1a92d769d7de9c347","_nodeVersion":"21.1.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-TDkjr2akfZIbi99SCFgqsk/pAm2f0laPPSTF20oE96z27KfGNwkqjeOd2Smc1GFaJ4beQp9nW0NO/9q+lfPZag==","shasum":"33e54ed60b95b0cec751075e25b0d984fc20dad0","tarball":"https://registry.npmjs.org/@anatoliacms/anatolia-common/-/anatolia-common-1.1.16.tgz","fileCount":33,"unpackedSize":171672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAY9qrUDIpqDYFv9/cN5Oany8qQxkWu2wjf+TCQGvCqgIgCpZC3OT72Za0uyV6/ncyZrQa3cnZSsrOjoCRwssnAAw="}]},"_npmUser":{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"},"directories":{},"maintainers":[{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anatolia-common_1.1.16_1701387229839_0.7534343404208905"},"_hasShrinkwrap":false},"1.1.17":{"name":"@anatoliacms/anatolia-common","version":"1.1.17","description":"An abstraction layer to create core controllers for Anatolia CMS","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"prepublish":"rm -rf dist && tsc && npm publish","build":"rm -rf dist && tsc -p ."},"repository":{"type":"git","url":"git+https://github.com/gunerkaanalkim/nest-crud.git"},"keywords":["nest","crud","abstraction","generator"],"author":{"name":"Guner Kaan Alkim","email":"g.kaanalkim@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gunerkaanalkim/nest-crud/issues"},"homepage":"https://github.com/gunerkaanalkim/nest-crud#readme","devDependencies":{"@nestjs/common":"^10.2.8","@nestjs/typeorm":"^10.0.0","ts-node":"^10.9.1","typeorm":"^0.3.17","typescript":"^5.2.2"},"_id":"@anatoliacms/anatolia-common@1.1.17","gitHead":"60077d57c5bff0353512dfae6fab002d4f10eae4","_nodeVersion":"21.1.0","_npmVersion":"10.2.0","dist":{"integrity":"sha512-1LTWdYnoBIeslwp55C5FG8c/pN4tyioC+xkMevT78tISfrdKhAQFezZJbF+BUFLCb5mtkrvKR86Je49ONMPH6w==","shasum":"09f99e510017ec8782d4b5cf6f22032cdfd57ffa","tarball":"https://registry.npmjs.org/@anatoliacms/anatolia-common/-/anatolia-common-1.1.17.tgz","fileCount":33,"unpackedSize":171718,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCLnAAHV/iQRXiF5jFbI2nfeLa2H2uXJULAJMkb0q7+EwIgDaWOP8PU0cI7GDVWKvHujICRiuuU/ZlHmk8sZp+InYk="}]},"_npmUser":{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"},"directories":{},"maintainers":[{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anatolia-common_1.1.17_1701387657009_0.4701999533776604"},"_hasShrinkwrap":false},"1.0.0":{"name":"@anatoliacms/anatolia-common","version":"1.0.0","version-name":"sumerian","description":"An abstraction layer to create core controllers for Anatolia CMS","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"rm -rf dist && tsc -p ."},"repository":{"type":"git","url":"git+https://github.com/gunerkaanalkim/nest-crud.git"},"keywords":["nest","crud","abstraction","generator"],"author":{"name":"Guner Kaan Alkim","email":"g.kaanalkim@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gunerkaanalkim/nest-crud/issues"},"homepage":"https://github.com/gunerkaanalkim/nest-crud#readme","devDependencies":{"@nestjs/common":"^10.2.8","@nestjs/typeorm":"^10.0.0","ts-node":"^10.9.1","typeorm":"^0.3.17","typescript":"^5.2.2"},"gitHead":"29020b6c458177b819ae1433144daac7c6ef5944","_id":"@anatoliacms/anatolia-common@1.0.0","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-ptmf2k0HoK3vvM67CBUTie3/uYx4Iz9J+TUbiDUhokd3HA6eSsEmxxqNRCR1sZkWIg/pkHEYPmg0zVzIy+3Cdg==","shasum":"f95427e6c8657d900bd3c778f0644b2f8d455b91","tarball":"https://registry.npmjs.org/@anatoliacms/anatolia-common/-/anatolia-common-1.0.0.tgz","fileCount":34,"unpackedSize":171896,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFnqbTRp1d6Q44sePToq7Fkam98CsRhs4eEnyeiuusMAiEAsHNbHyE3qCvYffbT5tT+q1KS7mtNy+x9RJ2W71DQfdk="}]},"_npmUser":{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"},"directories":{},"maintainers":[{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anatolia-common_1.0.0_1701431051213_0.9913381522555971"},"_hasShrinkwrap":false},"1.0.1":{"name":"@anatoliacms/anatolia-common","version":"1.0.1","version-name":"sumerian","description":"An abstraction layer to create core controllers for Anatolia CMS","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"rm -rf dist && tsc -p ."},"repository":{"type":"git","url":"git+https://github.com/gunerkaanalkim/nest-crud.git"},"keywords":["nest","crud","abstraction","generator"],"author":{"name":"Guner Kaan Alkim","email":"g.kaanalkim@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/gunerkaanalkim/nest-crud/issues"},"homepage":"https://github.com/gunerkaanalkim/nest-crud#readme","devDependencies":{"@nestjs/common":"^10.2.8","@nestjs/typeorm":"^10.0.0","ts-node":"^10.9.1","typeorm":"^0.3.17","typescript":"^5.2.2"},"gitHead":"f241482feb4136a9d7ff21ae6b11cb605d62612c","_id":"@anatoliacms/anatolia-common@1.0.1","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-RECiD7Pzf+ws7cg9Sc+lDw6YpmqETBEOdGRVHazHwhQRfzIpsvMZOb/cxE4Iz5fR8hsbOLRos8rcj0msoVnkXg==","shasum":"260bf678c007e62cb2a9167c0875bca69a6362cb","tarball":"https://registry.npmjs.org/@anatoliacms/anatolia-common/-/anatolia-common-1.0.1.tgz","fileCount":39,"unpackedSize":184518,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDP076aFDx/SalNW1pas49ABHQ7UoI8xNnT8HJ7ODrVBAIgZ9X3FApNhtJmHmNxm3NL9cciInAG5joZKcOyAoK7UEU="}]},"_npmUser":{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"},"directories":{},"maintainers":[{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/anatolia-common_1.0.1_1704318545256_0.9503909141112787"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-30T23:33:49.741Z","1.1.16":"2023-11-30T23:33:50.140Z","modified":"2024-01-03T21:49:05.595Z","1.1.17":"2023-11-30T23:40:57.191Z","1.0.0":"2023-12-01T11:44:11.401Z","1.0.1":"2024-01-03T21:49:05.413Z"},"maintainers":[{"name":"gunerkaanalkim","email":"g.kaanalkim@gmail.com"}],"description":"An abstraction layer to create core controllers for Anatolia CMS","homepage":"https://github.com/gunerkaanalkim/nest-crud#readme","keywords":["nest","crud","abstraction","generator"],"repository":{"type":"git","url":"git+https://github.com/gunerkaanalkim/nest-crud.git"},"author":{"name":"Guner Kaan Alkim","email":"g.kaanalkim@gmail.com"},"bugs":{"url":"https://github.com/gunerkaanalkim/nest-crud/issues"},"license":"MIT","readme":"# nest-crud\nAn abstraction layer that implements TypeORM and Repository pattern, to create core controllers for Nestjs\n\nNowadays we're spending too much time to create core controllers called CRUD controller. \nTo prevent this, we can use **nest-crud** abstraction layer.\n\n```bash\nnpm install nest-crud-abstraction\n```\n\n# Sample Project\nTo see how to use `nest-crud-abstraction` package, please refer to the sample folder in the root of the project. Then run following;\n\n```bash\n//docker-compose.yml\n\ndocker-compose docker-compose --env-file .env.dev up\n```\n\n```bash\n//package.json\n\nnpm run start:dev\n```\n\n# At a glance\n\n## 1. Entities & Data Transfer Objects\n\nFirst we'll need an entity and a DTO like below. \n\nWe'll use that entity clas for database related developments and DTO class will be in charge of request&response body.\n\nEach entity must implement `AbstractEntity` class and each DTO must implement `AbstractDTO` class.\n\n```typescript\n//cat.entity.ts\n\nimport AbstractEntity from 'nest-crud-abstraction/dist/model/AbstractEntity';\nimport {Column, Entity} from 'typeorm';\n\n@Entity({name: 'cats'})\nexport default class CatEntity extends AbstractEntity {\n    @Column({name: 'breed'})\n    private _breed: string;\n\n    @Column({name: 'color'})\n    private _color: string;\n\n\n   // Getters & setters\n}\n```\n\n```typescript\n//cat.dto.ts\n\nimport AbstractDTO from 'nest-crud-abstraction/dist/payload/AbstractDTO';\n\nexport default class CatDto extends AbstractDTO {\n    private _breed: string;\n    private _color: string;\n\n    // Getters & setters\n}\n\n```\n\n# 2. Services for Business Logic\nEach controller we develop will depend on a service class.\nThis classes will be in charge of executing all business logic as usual in `Nestjs`.\n\nEach service must implement generic `AbstractCrudService<T, D>` class.\n\nFirst type have to be an entity and second one is a DTO.\n\nnest-crud service abstraction has two abstract methods called `getRepository` & `getMapper`.\n\n##### getRepository()\nnest-crud uses TypeORM repository pattern under the hood. \n\nThat's why you will need to create a repository as in constructor below and will to pass it to AbstractService layer by overriding this method.\n\n\n##### getMapper()\nWe wouldn't want to pass entity objects on rest layer, would we ?\n\nIf we agreed on this, we will need to create a mapper object that extends `AbstractMapper`.\n\n```typescript\n// cat.mapper.ts\nimport AbstractMapper from \"nest-crud-abstraction/dist/mapper/AbstractMapper\";\n\n@Injectable()\nexport default class CatMapper extends AbstractMapper<CatEntity, CatDto> {\n    toDTO(entity: CatEntity): CatDto {\n        const sampleDTO = new CatDto();\n\n        sampleDTO.breed = entity.breed;\n        sampleDTO.color = entity.color;\n\n        return sampleDTO;\n    }\n\n    toEntity(dto: CatDto): CatEntity {\n        const sampleEntity = new CatEntity();\n\n        sampleEntity.breed = dto.breed;\n        sampleEntity.color = dto.color;\n\n        return sampleEntity;\n    }\n}\n```\n\nThe last thing that we implement is CatService as below.\n\n```typescript\n//cat.service.ts\n\nimport AbstractCrudService from 'nest-crud-abstraction/dist/service/AbstractCrudService';\nimport AbstractMapper from \"nest-crud-abstraction/dist/mapper/AbstractMapper\";\n\n@Injectable()\nexport class CatService extends AbstractCrudService<CatEntity, CatDto> {\n    constructor(\n        @InjectRepository(CatEntity) private usersRepository: Repository<CatEntity>,\n        private readonly catMapper: CatMapper,\n    ) {\n        super();\n    }\n\n    protected getRepository(): any {\n        return this.usersRepository;\n    }\n\n    protected getMapper(): AbstractMapper<CatEntity, CatDto> {\n        return this.catMapper;\n    }\n    \n    // Your custom logic apart from core controllers.\n}\n\n\n```\n\n\nIf everything well up to now, we can create our core controllers.\n\n# Core Controllers\n\nYou can create your controller structure like Nest-style, there is only one difference. This controller should have implement `AbstractController<T,D>`\n\n##### getService()\n\nThis method will pass your service component to AbstractController to create our core controllers.\n\n```typescript\n@Controller('/cats')\nexport class CatController extends AbstractController<CatEntity, CatDto> {\n    constructor(\n        private readonly appService: CatService\n    ) {\n        super();\n    }\n\n    protected getService(): AbstractCrudService<CatEntity, CatDto> {\n        return this.appService;\n    }\n}\n```\n\n# Conclusion\n\nIf you run your application you should see below output that describes our mapped endpoints.\n\n```bash\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [NestFactory] Starting Nest application...\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [InstanceLoader] AppModule dependencies initialized +49ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [InstanceLoader] TypeOrmCoreModule dependencies initialized +71ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [InstanceLoader] TypeOrmModule dependencies initialized +0ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [InstanceLoader] CatsModule dependencies initialized +0ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [RoutesResolver] CatController {/cats}: +7ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [RouterExplorer] Mapped {/cats, GET} route +1ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [RouterExplorer] Mapped {/cats/:id, GET} route +1ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [RouterExplorer] Mapped {/cats/:id, GET} route +0ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [RouterExplorer] Mapped {/cats/:id, DELETE} route +0ms\n[Nest] 52991  - 11/06/2023, 5:42:00 PM     LOG [NestApplication] Nest application successfully started +1ms\n```","readmeFilename":"README.md"}