ZANIX Framework Templates
This repository contains templates for the ZANIX Framework, designed to accelerate the development of projects using the ZANIX ecosystem. The templates provide a starting point for various types of applications and follow the ZANIX architecture patterns.
Templates
Currently, the repository includes the following template:
-
api-base: A template for creating API-based applications using the
@zanix/server
library. It can be installed using the commandzjs new api [path]
of @zanix/Cli, where[path]
is the destination path for the new project.
Architecture Overview
The templates in this repository follow the Adapter pattern, which promotes separation of concerns and flexibility in integrating with external services and APIs. The overall architecture of a ZANIX application is depicted below:
┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐ ┌───────────────────────┐
│ │ │ │ │ │ │ │
│ Controllers/Resolvers │───────► Services ◄─────► Adapters ◄──────► Clients/Providers │
│ │ │ │ │ │ │ │
└───────────────────────┘ └───────────────────────┘ └───────────────────────┘ └───────────────────────┘
▲ | | |
│ └─────────────────────────────────────────────────────────┘
│ ▼
┌───────────────────────┐ ┌───────────────────────────────────────────────────────────────────────────────┐
│ │ │ |
│ API │───────► Dependencies │
│ │ │ |
└───────────────────────┘ └───────────────────────────────────────────────────────────────────────────────┘
- Controllers/Resolvers: Responsible for handling incoming requests and invoking the corresponding service methods or resolving data.
- Services: Implement the business logic of the application and interact with adapters for data retrieval, manipulation, or external service communication.
- Adapters: Provide the necessary abstractions and interfaces to interact with external services or data sources. They can also function as "wildcard" classes.
- Clients/Providers: Act as clients to external services or providers of data. Clients are responsible for making requests and handling responses, while providers offer data access or integration capabilities.
Project Structure
The project structure for the generated template follows a modular approach to maintain separation of concerns and facilitate maintainability. Here's an overview of the folder structure: root folder
├─ CHANGELOG.md
├─ jest.config.js
├─ package-lock.json
├─ package.json
├─ tsconfig.json
├─ README.md
├─ .eslintrc
├─ .prettierrc
└─ resources (assets, data, statics, scripts, non-modular files)
└─ src
│ ├─ tests
│ ├─ app
│ │ ├─ (gql)
│ │ │ ├─ types
│ │ │ │ ├─ _.graphql
│ │ │ │ └─ _.gql
│ │ │ └─ inputs
│ │ │ │ ├─ _.graphql
│ │ │ │ └─ _.gql
│ │ ├─ (rest)
│ │ │ ├─ rtos
│ │ │ │ └─ _.rto.ts (request transfer object)
│ │ │ └─ _.controller.ts (inject one service)
│ │ ├─ adapters
│ │ │ └─ _.adapter.ts (inject one client, provider, or adapters)
│ │ ├─ services
│ │ │ └─ _.service.ts (inject adapters or services)
│ │ ├─ types.d.ts
│ │ ├─ commons
│ │ │ ├─ clients
│ │ │ │ └─ _.client.ts
│ │ │ ├─ providers
│ │ │ │ └─ _.provider.ts
│ │ │ ├─ middlewares
│ │ │ │ ├─ _.pipes.ts
│ │ │ │ └─ _.interceptor.ts
│ │ │ ├─ models
│ │ │ └─ utils
│ │ │ └─ ...
│ ├─ config
│ │ ├─ secrets
│ │ │ └─ \*.srt
│ │ └─ zanix.ts (for variable, secret and configuration definition)
This structure is designed to promote modularity, scalability, and maintainability in your ZANIX Framework projects. Feel free to explore each directory to understand the purpose of different files and folders. the resources
and src/config
folders must not change their name or location for the CLI commands to work correctly.
For more information on how to use the templates and get started with ZANIX Framework, please refer to the documentation or the individual template's README file, like Zanix Configuration and Zanix Server.
Contributing
If you have any suggestions, bug reports, or feature requests, please feel free to open an issue or submit a pull request. We welcome contributions from the community to make the ZANIX Framework Templates even better!
License
The ZANIX Framework Templates are open-source software licensed under the MIT License. Feel free to use, modify, and distribute the templates as per the terms of the license.