Skip to content
/ cm-api Public

๐Ÿ“š Content management API for integrating with NodeJS(backend) and MongoDB

License

Notifications You must be signed in to change notification settings

jetvil/cm-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

34 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

@jetvil/cm-api

Bundle size Versionย  Downloadsย  GitHubย  GitHub Repo starsย  GitHub issuesย 

๐Ÿ“š Content management API for integrating with NodeJS Express(backend) and Prisma(ORM)

Features

  • ๐Ÿš€ Easy to use: Easy to install in your project.
  • โœ… ES6+ && TS: TypeScript and ES6+ support(JS).
  • ๐Ÿ“ฆ Required dependencies: You don't need what you won't use: express and prisma.
  • ๐Ÿ’ต Free: It's free and always will be, the beauty of open source.

Take in mind that this solution is for when you want to control your own backend and frontend, but do not want to have struggle to create a cms with all the routes and schemas and database handlers that come with it.

When you are looking for a full cms solution, we recommend strapi or changing languages and taking wagtail for python.

Getting Started

Installation

To use this package, install using npm, yarn or pnpm๐Ÿ“ฅ:

# npm
npm install @jetvil/cm-api
# yarn
yarn add @jetvil/cm-api
# pnpm
pnpm install @jetvil/cm-api

Usage

const express = require("express");
const { PrismaClient } = require("@prisma/client");
const jetvil = require("@jetvil/cm-api");

// prisma with eg. postgresql and schemas: "user" and "post"
const prisma = new PrismaClient(); // Prisma ORM, you must have it installed and generated.
const app = express();
const jetvil = jetvil();

app.use(express.json()); // for parsing application/json.

jetvil.setClient(prisma); // Set prisma client here or pass it in the router() method.
const router = jetvil.router(); // Empty by default, you can configure it by passing an object.

app.use("/api", router);

app.listen(3000, () => {
  console.log("Server is running on port 3000");
});
// Routes such as /user and /post will be available at /api/user and /api/post

Configuration

You can configure the router by passing an object to the router() method.

By doing so you can adjust the routes to your needs.

const jetvil = require("@jetvil/cm-api");

const jetvil = jetvil();

const router = jetvil.router({
  client: prisma, // Prisma ORM, you must have it installed and generated.
  global: {
    schemas: ["user", "post", "profile"], // if specified, only these schemas will be available.
    methods: ["get", "post", "put", "delete", "fake"], // if specified, only these methods will be available, 'fake' will not be used.
    middleware: [
      {
        methods: ["get"], // Method to which the middleware will be applied.
        schemas: ["user"], // Schema to which the middleware will be applied.
        handler: (req, res, next) => {
          // Middleware function.
          next();
        },
      },
    ],
  },
  config: {
    // note how the schema is the key and the value is an object with the schema config.
    // these are overrides for the global config on a per schema basis.
    user: {
      methods: ["get", "post", "put"], // note how the delete method is not included.
      actions: ["read", "create", "update", "delete"], // these actions determine what the user can do with the schema.
      // for example, if the user has the 'read' action, he can only read the schema.
      // when the 'filter' action is included, the user can filter the schema on the schema.

      middleware: [
        // this middleware will override the global middleware for the user schema.
        {
          handler: (_req, _res, next) => {
            console.log("Middleware applied to user schema!");
            next();
          },
        },
      ],
    },
  },
  verbose: true, // If true, the router will log the routes it generates.
});

Documentation

As of this moment, the documentation is not yet available, but it will be soonโณ

Contributing

Found a bug๐ŸฆŸ? or want to suggest a new feature๐Ÿ†•? or just want to help๐Ÿ†˜?

Feel free to open an issue or a pull request.

Contributions are always welcome!๐ŸŽ‰

  • Fork the project here.
  • Create a new branch like this: git checkout -b feature/featureName.
  • Commit your changes to your branch: git commit -m 'Create AwesomeFeature'โš™๏ธ.
  • Push your branch: git push origin feature/featureName.
  • Open a pull request on the dev branch here๐Ÿ”ƒ.

๐Ÿ“’Note: Make sure to add tests for your changes โœ….

About

๐Ÿ“š Content management API for integrating with NodeJS(backend) and MongoDB

Topics

Resources

License

Stars

Watchers

Forks