fastapi-react-admin 2.1.1
Module to automaticly generate fastapi routes for using react admin
Requires Python: >=3.9,<4.0

# FastAPI React Admin

This module provides a class ReactAdmin that allows for the automatic generation of routes for React Admin in a FastAPI application.

## Installation
```console
pip install fastapi-react-admin
```

## Base usage

FatstAPI part: 
```python
from fastapi import FastAPI

from schemas import MyTableModel
from fastapi_react_admin import ReactAdmin

app = FastAPI()
router = app.router
Session = async_sessionmaker(AsyncSession)

ReactAdmin(
    table=MyTableModel,  
    session=Session
).mount(router)
```

React Admin data provider:
```js
export const sendPost = async (resource: string, method: string, body?: any) => {
    const response = await axios({
        method: 'post',
        url: resource + "/ra" + method,
        data: body,
        headers: {
            "Admin-Token": sessionStorage.getItem('token')
        }
    })

    return response.data
}

const dataProvider: DataProvider = {
    getList: (resource: string, params: any) => {
        const { page, perPage } = params.pagination
        const { field, order } = params.sort

        const query = {
            sort: JSON.stringify([field, order]),
            range_: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),
            filter: JSON.stringify(params.filter),
        }

        return sendPost(resource, `/getList?${queryString.stringify(query)}`)
    },

    getOne: async (resource: string, params: any) => {
        return await sendPost(resource, '/getOne/' + params.id)
    },

    getMany: (resource: string, params: any) => {
        const query = {
            filter: JSON.stringify({ id: params.ids}),
        }

        return sendPost(resource, `/getMany?${queryString.stringify(query)}`)
    },

    getManyReference: (resource: string, params: any): any => {
        const { page, perPage } = params.pagination
        const { field, order } = params.sort

        const query = {
            sort: JSON.stringify([field, order]),
            range_: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),
            filter: JSON.stringify(params.filter),
        }

        return sendPost(params.target, `/getList?${queryString.stringify(query)}`)
    },

    create: async (resource: string, params: any) => {
        return await sendPost(resource, '/create', { 
            ...params.data
        })
    },

    update: async (resource: string, params: any) => {
        return await sendPost(resource, '/update/' + params.id, params.data)
    },

    updateMany: async (resource: string, params: any) => {
        const query = {
            filter: JSON.stringify({ id: params.ids}),
        }

        return await sendPost(resource, `/updateMany?${queryString.stringify(query)}`, params.data)
    },

    delete: (resource: string, params: any) => {
        return sendPost(resource, '/delete/' + params.id)
    },

    deleteMany: (resource: string, params: any) => {
        const query = {
            filter: JSON.stringify({ id: params.ids}),
        }

        return sendPost(resource, `/deleteMany?${queryString.stringify(query)}` )
    },
}

```


### ReactAdmin class params
- table (required): The SQLAlchemy model representing the database table.

- session (required): The async_sessionmaker[AsyncSession] for the database session.

- deleted_field (optional): The name of the field of the table to mark deleted fields (e.g., 'is_deleted'). Default is None.

- exclude_deleted (optional): Whether to exclude deleted records. Default is True.

- options (optional): The list of ExecutableOption of the sqlalchemy. Default is [].

- include_in_schema (optional): Whether to include the routes in the generated schema. Default is False.

### ReactAdmin mount params
- router (required): The APIRouter instance to mount the routes.

- depends (optional): The sequence of the dependencies

- prefix (optional): The URL prefix for the React Admin routes. Default is '/ra'.

- tags (optional): The FastAPI tags.

- include_* (optional): The params to include/exclude specific route. (For example: include_create=false)

### Route Endpoints
The following routes are automatically generated by the `ReactAdmin` class:

- POST /ra/getList: Get a list of records from the table. Accepts JSON payload with sort, filter, and range parameters.
- POST /ra/getOne/{id}: Get a single record by ID.
- POST /ra/getMany/{id}: Get multiple records by ID. Accepts JSON payload with id parameter.
- POST /ra/create: Create a new record. Accepts JSON payload with the record data.
- POST /ra/update/{id}: Update a record by ID. Accepts JSON payload with the updated data.
- POST /ra/updateMany: Update multiple records. Accepts JSON payload with id parameter and updated data.
- POST /ra/delete/{id}: Delete a record by ID.
- POST /ra/deleteMany: Delete multiple records. Accepts JSON payload with id parameter.

### Response Format
The response format for all routes is a JSON object with a data field. The data field contains the response data.