Skip to content

Commit

Permalink
Merge pull request #116 from MakairaIO/MAKAIRA-3810
Browse files Browse the repository at this point in the history
feat: add shopadapter for shopware 6
  • Loading branch information
nfqphihungnguyen authored Sep 15, 2023
2 parents b6cd58f + f60e6e3 commit 61c2c41
Show file tree
Hide file tree
Showing 20 changed files with 2,215 additions and 6 deletions.
48 changes: 43 additions & 5 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import {
LocalStorageSsrSafe,
MakairaAddItemToWishlist,
MakairaGetWishlist,
MakairaProduct,
MakairaRemoveItemFromWishlist,
MakairaShopProviderWishlist,
WishlistAddItemEvent,
Expand Down
5 changes: 5 additions & 0 deletions packages/storefront-shop-adapter-shopware6/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
src
.turbo
tsconfig.json
tsconfig.build.cjs.json
tsconfig.build.esm.json
219 changes: 219 additions & 0 deletions packages/storefront-shop-adapter-shopware6/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
# @makaira/storefront-shop-adapter-shopware6

This shop adapter can be used to connect your shopware6 shop with your storefront. This adapter is developed based on the [shopware store-api](https://shopware.stoplight.io/docs/store-api).

## Installation

`yarn install @makaira/storefront-types @makaira/storefront-shop-adapter-shopware6`

or

`npm install @makaira/storefront-types @makaira/storefront-shop-adapter-shopware6`

## Adding to your project

### Basic usage

```typescript
import { StorefrontShopAdapterShopware6 } from '@makaira/storefront-shop-adapter-shopware6'

const client = new StorefrontShopAdapterShopware6({
url: '<SHOPWARE6-API-BASE-URL>',
accessToken: '<SHOPWARE6-API-TOKEN>',
})
```

You can find the correct access key within your [admin panel's sales channel configuration](https://docs.shopware.com/en/shopware-6-en/settings/saleschannel#api-access) in the section labeled API Access.

### Usage with `@makaira/storefront-react`

```tsx
import { StorefrontShopAdapterShopware6 } from '@makaira/storefront-shop-adapter-shopware6'
import { ShopProvider } from '@makaira/storefront-react'

const shopClient = new StorefrontShopAdapterShopware6({
url: '<SHOPWARE6-API-BASE-URL>',
})

function Index() {
return (
<ShopProvider client={shopClient}>
<App />
</ShopProvider>
)
}
```

In addition if you are using typescript in your project and want to get the correct autosuggestion you have to create a new declaration file (e.g `index.d.ts`) with the following content:

```typescript
import '@makaira/storefront-react'
import { StorefrontShopAdapterShopware6 } from '@makaira/storefront-shop-adapter-shopware6'

declare module '@makaira/storefront-react' {
interface StorefrontReactCustomClient {
client: StorefrontShopAdapterShopware6
}
}
```

## Additional constructor arguments

| Argument | Required | Description | Type |
| ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| url | required | The base api url to made requests again. | `string` |
| accessToken | required | identifies the sales channel | `string` |
| storage | optional | A storage engine for persisting data. This is by default the `LocalStorage` that is working in SSR. On Server Side every read and write will not be performed but not creates an error. | `MakairaStorage` |

## Feature map

| Feature | Available |
| ---------------- | --------- |
| cart | |
| - addItem ||
| - getCart ||
| - removeItem ||
| - updateItem ||
| review | |
| - getReviews ||
| - createReview ||
| user | |
| - login ||
| - logout ||
| - signup ||
| - getUser ||
| - forgotPassword ||
| wishlist | |
| - getWishlist ||
| - addItem ||
| - removeItem ||
| - createWishlist ||
| checkout | |
| - getCheckout ||
| - submit ||

## Additional input properties

### Cart

#### getCart

_No additional properties_

#### addItem

| Property | Required/Optional | Description | Type |
| ------------ | ----------------- | ------------------------------------------------------------------------------------------ | --------- |
| product.id | required | Unique identity of type of entity. | `string` |
| good | required | When set to true, it indicates the line item is physical else it is virtual. | `boolean` |
| referencedId | required | Unique identity of type of entity. | `string` |
| type | required | Type refers to the entity type of an item whether it is product or promotion for instance. | `string` |
| quantity | Optional | Number of items of product. Required when type = `"product"` | `number` |

#### removeItem

| Property | Required/Optional | Description | Type |
| ---------- | ----------------- | ---------------------------------- | -------- |
| product.id | required | Unique identity of type of entity. | `string` |

#### updateItem

| Property | Required/Optional | Description | Type |
| ---------- | ----------------- | --------------------------------------------------------------------- | -------- |
| product.id | required | Unique identity of type of entity. | `string` |
| quantity | Optional | Number of items of product changing. Required when type = `"product"` | `number` |

### Review

#### getReviews

| Property | Required/Optional | Description | Type |
| ---------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------- |
| product.id | required | Unique identity of type of entity. | `string` |
| pagination | Optional | Paginate response items | `object` |
| search-queries: `filter, associations, includes, total-count-mode, post-filter, query, sort, aggregations, grouping, fields` | Optional | Query to filter response with [condition](https://shopware.stoplight.io/docs/store-api/cf710bf73d0cd-search-queries#search-queries) | `object` |

#### createReview

| Property | Required/Optional | Description | Type |
| ----------------- | ----------------- | ---------------------------------------------------------------------------------------- | -------- |
| review.product.id | Required | Unique identity of type of entity. | `string` |
| review.rating | Required | The review rating for the product. | `double` |
| review.text | Required | The content of review. | `string` |
| title | Required | The title of the review. | `string` |
| headline | optional | An optional headline for this review. | `string` |
| email | optional | The email address of the review author. If not set, the email of the customer is chosen. | `string` |
| name | optional | The name of the review author. If not set, the first name of the customer is chosen. | `string` |

### User

#### getUser

_No additional properties_

#### login

| Property | Required/Optional | Description | Type |
| -------- | ----------------- | ----------- | -------- |
| username | Required | Email. | `string` |
| password | Required | Password. | `string` |

#### logout

_No additional properties_

#### signup

| Property | Required/Optional | Description | Type |
| ------------------------ | ----------------- | ------------------------------------------------------------------------- | -------- |
| username | Required | Email of the customer. | `string` |
| password | Required | Password for the customer. | `string` |
| firstName | Required | Customer first name. | `string` |
| lastName | Required | Customer last name. | `string` |
| storefrontUrl | Required | URL of the storefront for that registration. Used in confirmation emails. | `string` |
| billingAddress.countryId | Required | Unique identity of country. | `string` |
| billingAddress.city | Required | Name of customer's city. | `string` |
| billingAddress.street | Required | Name of customer's street. | `string` |

Other properties check on [document](https://shopware.stoplight.io/docs/store-api/b08a8858e0c5d-register-a-customer)

#### forgotPassword

| Property | Required/Optional | Description | Type |
| ------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| username | Required | Email. | `string` |
| storefrontUrl | Required | URL of the storefront to use for the generated reset link. It has to be a domain that is configured in the sales channel domain settings. | `string` |

### Wishlist

#### getWishlist

| Property | Required/Optional | Description | Type |
| ---------------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -------- |
| search-queries: `filter, associations, includes, total-count-mode, post-filter, query, sort, aggregations, grouping, fields` | Optional | Query to filter response with [condition](https://shopware.stoplight.io/docs/store-api/cf710bf73d0cd-search-queries#search-queries) | `object` |

Other properties check on [document](https://shopware.stoplight.io/docs/store-api/14f94ff26ea3b-fetch-a-wishlist)

#### addItem

| Property | Required/Optional | Description | Type |
| --------- | ----------------- | -------------------------------------- | -------- |
| productId | Required | Identifier of the product to be added. | `string` |

Other properties check on [document](https://shopware.stoplight.io/docs/store-api/b2d281de3cdd6-add-a-product-to-a-wishlist)

#### removeItem

| Property | Required/Optional | Description | Type |
| --------- | ----------------- | -------------------------------------------------------------- | -------- |
| productId | Required | The identifier of the product to be removed from the wishlist. | `string` |

Other properties check on [document](https://shopware.stoplight.io/docs/store-api/e4e034e43e4d3-remove-a-product-from-a-wishlist)

#### createWishlist

| Property | Required/Optional | Description | Type |
| ---------- | ----------------- | ---------------- | --------------- |
| productIds | Optional | List product id. | `array[string]` |

Other properties check on [document](https://shopware.stoplight.io/docs/store-api/e1d8a35023a23-create-a-wishlist-for-a-customer)
48 changes: 48 additions & 0 deletions packages/storefront-shop-adapter-shopware6/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"name": "@makaira/storefront-shop-adapter-shopware6",
"version": "1.0.5",
"description": "Contains the makaira shopware6 shop adapter to connect your storefront",
"main": "./dist/esm/index.js",
"typings": "./dist/types/index.d.ts",
"exports": {
"import": "./dist/esm/index.js",
"require": "./dist/cjs/index.js",
"default": "./dist/esm/index.js"
},
"files": [
"./dist"
],
"engines": {
"node": ">=15.0.0"
},
"scripts": {
"clean": "rimraf ./dist",
"lint:eslint": "eslint src --fix",
"lint:tsc": "tsc --project tsconfig.json --noEmit --skipLibCheck",
"build": "tsc --project tsconfig.build.esm.json & tsc --project tsconfig.build.cjs.json",
"release": "semantic-release",
"test": "jest --passWithNoTests"
},
"repository": {
"type": "git",
"url": "git+https://github.com/MakairaIO/storefront-shop-adapter.git"
},
"publishConfig": {
"access": "public"
},
"keywords": [
"storefront",
"makaira",
"shopware"
],
"author": "Jonas Embach <[email protected]>",
"license": "ISC",
"bugs": {
"url": "https://github.com/MakairaIO/storefront-shop-adapter/issues"
},
"homepage": "https://github.com/MakairaIO/storefront-shop-adapter#readme",
"dependencies": {
"@makaira/storefront-types": "1.10.0",
"isomorphic-unfetch": "^3.1.0"
}
}
1 change: 1 addition & 0 deletions packages/storefront-shop-adapter-shopware6/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './providers'
Loading

0 comments on commit 61c2c41

Please sign in to comment.