Typescript ORM to connect to MySQL database
experimental support for PostgreSQL
Typescript port of Scala version
yarn add @nexys/fetchr
import FetchR from "@nexys/fetchr";
import { Database } from "@nexys/fetchr/dist/database/type";
import { Entity } from "@nexys/fetchr/dist/type";
const model: Entity[] = [
{
name: "User",
uuid: false,
fields: [
{ name: "firstName", type: "String", optional: false },
{ name: "lastName", type: "String", optional: false },
{ name: "email", type: "String", optional: false },
],
},
];
const dbConfig: Database = {
username: "",
host: "",
password: "",
database: "",
port: 3306,
};
const fetchr = new FetchR(dbConfig, model);
fetchr.mutate({
User: {
insert: {
data: { firstName: "john", lastName: "doe", email: "john@doe.com" },
},
},
});
// get all users
fetchr.query({ User: {} });
// get all users' emails whose names are "john"
fetchr.query({
User: { projection: { firstName: true }, filters: { firstName: "John" } },
});
There are 2 endpoints for querying: /data
and /mutate
. As their names suggests, the first one retrieves data and the second alters them. This is based on the same philosophy that was adopted by graphql.
This is the query endpoint: /query
(for legacy reason the endpoint /data
is also available)
The querying language is very easy is straightforward and follows the structure defined here.
Note that the endpoint always returns an object with the different entities queries as keys and the result in the form of an array as values.
- get a list of user from the entity
User
{User: {}}
- get a list of user belonging to a particulart workspace
{User: {workspace:{id: workspaceId}}}
Available through /mutate
. The following actions are available
insert
update
delete
The service supports multi models/databases
- Models can be set using
/model/set
- The strcuture is the one descrbied in
/service/type
- Models are stored in
/assets/models.json
- Models can be set using
/database/set
- The strcuture is the one descrbied in
/service/database/type
- Databases are stored in
/assets/databases.json
When a query requiring a particular database is called, it will look for an associated connection pool. If none is found, it will create a new one based on the database record (if not found, an error is thrown) and store it in a Map
object.
The migration engines is largely inspired from flyway. An array of migrations can be passed; each having a unique combination of index and version (e.g. 2.1
, 2.2
etc). Migrations are stored in a separate table with their checksum values.
GraphQL support is available. See https://github.com/nexys-system/server-boilerplate/blob/master/README.md#graphql-query-examples-tested-in-postman for more information