https://github.com/SoftwareBrothers/adminjs-prisma
https://github.com/SoftwareBrothers/adminjs-prisma
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/SoftwareBrothers/adminjs-prisma
- Owner: SoftwareBrothers
- License: mit
- Created: 2021-10-13T07:59:52.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-06-18T12:45:42.000Z (12 months ago)
- Last Synced: 2025-07-03T00:06:22.477Z (11 months ago)
- Language: TypeScript
- Size: 724 KB
- Stars: 48
- Watchers: 10
- Forks: 33
- Open Issues: 27
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## adminjs-prisma
This is an official [AdminJS](https://github.com/SoftwareBrothers/adminjs) adapter which integrates [Prisma](https://prisma.io/) into AdminJS.
### Installation
- yarn: `yarn add @adminjs/prisma`
- npm: `npm install @adminjs/prisma`
## Usage
The plugin can be registered using standard `AdminJS.registerAdapter` method.
```typescript
import { Database, Resource } from '@adminjs/prisma'
import AdminJS from 'adminjs'
AdminJS.registerAdapter({ Database, Resource })
```
## Example (Basic)
Whole code can be found in `example-app` directory in the repository.
```typescript
import express from 'express'
import AdminJS from 'adminjs'
import AdminJSExpress from '@adminjs/express'
import { Database, Resource, getModelByName } from '@adminjs/prisma'
import { PrismaClient } from '@prisma/client'
import { DMMFClass } from '@prisma/client/runtime'
const PORT = process.env.port || 3000
const prisma = new PrismaClient()
AdminJS.registerAdapter({ Database, Resource })
const run = async () => {
const app = express()
const admin = new AdminJS({
resources: [{
resource: { model: getModelByName('Post'), client: prisma },
options: {},
}, {
resource: { model: getModelByName('Profile'), client: prisma },
options: {},
}, {
resource: { model: getModelByName('Publisher'), client: prisma },
options: {},
}],
})
const router = AdminJSExpress.buildRouter(admin)
app.use(admin.options.rootPath, router)
app.listen(PORT, () => {
console.log(`Example app listening at http://localhost:${PORT}`)
})
}
run()
.finally(async () => {
await prisma.$disconnect()
})
```
## Example (Custom Client Output Path)
If you defined a custom client output path in your Prisma's schema, for example:
```prisma
generator client {
provider = "prisma-client-js"
output = "./client-prisma"
}
```
You must:
* import your custom Prisma client
* provide it to each resource which uses that Prisma client
*Example*:
```typescript
// other imports
import PrismaModule from '../prisma/client-prisma/index.js';
// ...
const prisma = new PrismaModule.PrismaClient();
// ...
// Notice `clientModule` per resource
const admin = new AdminJS({
resources: [{
resource: { model: getModelByName('Post', PrismaModule), client: prisma, clientModule: PrismaModule },
options: {
properties: {
someJson: { type: 'mixed', isArray: true },
'someJson.number': { type: 'number' },
'someJson.string': { type: 'string' },
'someJson.boolean': { type: 'boolean' },
'someJson.date': { type: 'datetime' },
},
},
}, {
resource: { model: getModelByName('Profile', PrismaModule), client: prisma, clientModule: PrismaModule },
options: {},
}, {
resource: { model: getModelByName('Publisher', PrismaModule), client: prisma, clientModule: PrismaModule },
options: {},
}],
});
// ...
```
## ManyToOne / ManyToMany
These relationships are currently not supported by default. You can manage them using custom actions and components.
## Pull request
Before you make a PR make sure all tests pass and your code won't cause linter errors.
You can do this by running:
```
yarn lint
yarn test
```
Make sure you have an `.env` file with `DATABASE_URL` specified.
## Running example app with local code modifications
MySQL database is required. You can use the database from `adminjs-example-app`:
https://github.com/SoftwareBrothers/adminjs-example-app/blob/master/docker-compose.yaml#L24
```
$ yarn
$ yarn build # after making changes or run "yarn dev" and open a new terminal for next command
$ yarn link
$ cd example-app
$ yarn
$ npx prisma generate
$ npx prisma migrate dev
```
Now copy `example-app/node_modules/.prisma` folder into `node_modules/.prisma`. This is required because installing library dependencies detects a different Prisma schema in test folder.
Continue in `example-app` folder:
```
$ yarn link "@adminjs/prisma"
$ yarn build
$ yarn start
```
The app should start at port 3000.
## License
AdminJS is copyrighted © 2023 rst.software. It is a free software, and may be redistributed under the terms specified in the [LICENSE](LICENSE.md) file.
## About rst.software

We’re an open, friendly team that helps clients from all over the world to transform their businesses and create astonishing products.
* We are available for [hire](https://www.rst.software/estimate-your-project).
* If you want to work for us - check out the [career page](https://www.rst.software/join-us).