Files
medusa-store/www/apps/book/app/customization/custom-features/api-route/page.mdx

115 lines
2.8 KiB
Plaintext

import { Prerequisites } from "docs-ui"
export const metadata = {
title: `${pageNumber} Create Brand API Route`,
}
# {metadata.title}
<Note title="Example Chapter">
This chapter covers how to define an API route that creates a brand as the last step of the ["Build Custom Features" chapter](../page.mdx).
</Note>
<Prerequisites
items={[
{
text: "createBrandWorkflow",
link: "/customization/custom-features/workflow"
}
]}
/>
Create the file `src/api/admin/brands/route.ts` with the following content:
```ts title="src/api/admin/brands/route.ts" collapsibleLines="1-9" expandButtonLabel="Show Imports"
import {
MedusaRequest,
MedusaResponse,
} from "@medusajs/framework/http"
import {
CreateBrandInput,
createBrandWorkflow,
} from "../../../workflows/create-brand"
export const POST = async (
req: MedusaRequest<CreateBrandInput>,
res: MedusaResponse
) => {
const { result } = await createBrandWorkflow(req.scope)
.run({
input: req.body,
})
res.json({ brand: result })
}
```
This adds a `POST` API route at `/admin/brands`. In the API route's handler, you execute the `createBrandWorkflow`, passing it the request body as input.
You return in the response the created brand.
<Note>
Learn more about API routes [in this guide](../../../basics/api-routes/page.mdx).
</Note>
---
## Test API Route
To test it out, first, retrieve an authenticated token of your admin user by sending a `POST` request to the `/auth/user/emailpass` API Route:
```bash
curl -X POST 'http://localhost:9000/auth/user/emailpass' \
-H 'Content-Type: application/json' \
--data-raw '{
"email": "admin@medusa-test.com",
"password": "supersecret"
}'
```
Make sure to replace the email and password with your user's credentials.
Then, send a `POST` request to `/admin/brands`, passing the token received from the previous request in the `Authorization` header:
```bash
curl -X POST 'http://localhost:9000/admin/brands' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data '{
"name": "Acme"
}'
```
This returns the created brand in the response:
```json title="Example Response"
{
"brand": {
"id": "01J7AX9ES4X113HKY6C681KDZJ",
"name": "Acme",
"created_at": "2024-09-09T08:09:34.244Z",
"updated_at": "2024-09-09T08:09:34.244Z"
}
}
```
---
## Summary
By following the previous example chapters, you implemented a custom feature that allows admin users to create a brand by:
1. Creating a module that defines and manages the `Brand` data model.
2. Creating a workflow that uses the module's main service to create a brand record, and implements the compensation logic to delete that brand in case an error occurs.
3. Creating an API route that allows admin users to create a brand.
---
## Next Steps
In the next chapters, you'll learn how to extend data models and associate the brand with a product.