---
# System prepended metadata

title: 'Pagify : Objet API'

---

# Pagify - Objets API
https://cheerz0.atlassian.net/wiki/spaces/TECH/pages/3030843393/Chantier+2024+Migration+des+pages+Pagify

## Conventions

* Les objets nuls devraient être renvoyés à `nil`/`null`
	* :no_entry: Pas un hash 
	* :no_entry: Pas un tableau vide
* Les String sont 
	* Soit présentes et non vide/blank
	* Soit nulles
	* :no_entry: Pas de chaînes vides ou "blank"

## Banner
#### Json
```json
{
    "color": AdaptativeColor,
    "text": AdaptativeText,
    "navigation": Link,
}
```

## AppBar
#### Json
```json
{
    "text": Sting,
    "display_type": String,
}
```

## TrackingPage
#### Json
```json
{
    "screen_name": String,
    "screen_group": String,
    "properties": Map<String, String>,
    "products": List<TrackingProduct> // web only
}
```

## TrackingProduct
#### Json
```json
{
    "category": String,
    "sub_category": String,
    "tag": String,
    "name": String, // <-- possible de faire sauter
    "price": Number, // <-- possible de faire sauter
}
```

## SEO
#### Json
```json
{
    "meta_title": String,
    "meta_description": String,
}
```

## Breadcrumb
#### Json
```json
{
    "text": String,
    "navigation": Navigation,
}
```


## Action
#### Nommage
Nom de la classe : `Action`
Exemple de nom de variable : `action`

#### Json
```json
{
    "title": string,
    "subtitle": string,
    "entries": List<Entry>,
}
```

## :warning:Entry <-- :warning: le système d'entries est déprécié et ne devrait pas être utilisé

#### Nommage
Nom de la classe : `Entry`
Exemple de nom de variable : `entry`

#### Json
```json
{
    "text": string,
    "price": FormattedPrice,
    "full_price":
    "discount": Label,
    "on_click": Link,
    "image": Image,
}
```

## :warning: MultiChoicePrices

#### Nommage
Nom de la classe : `MultiChoicePrices`
Exemple de nom de variable : `multi_choice_prices`

#### Json
```json
{
  "title": String,
  "prices": List<ChoicePrice>,
  "custom_amount": CustomAmount,
}
```

## :warning: ChoicePrice

#### Nommage
Nom de la classe : `ChoicePrice`
Exemple de nom de variable : `prices`

#### Json
```json
{
    "amount": {
        "cents": Number,
        "currency": String,
        "formatted_price": String,
    },
    "is_selected": Boolean,
  }
```

## :warning: CustomAmount

#### Nommage
Nom de la classe : `CustomAmount`
Exemple de nom de variable : `custom_amount`

#### Json
```json
{
    "min": Number,
    "max": Number,
    "text_button": String,
    "text_input": String,
}
```

## AdaptativeText

#### Nommage
Nom de la classe : `AdaptativeText`
Exemple de nom de variable : `title`, `subtitle`, etc.

#### Json
```json
{
  "short": String,
  "long": String?,
}
```

#### Notes
La variable `long` est nullable.
Si elle n'est renseignée dans le back-office, elle n'est pas renvoyée par le back.
C'est alors au front de faire le fallback sur `short`.

## Icon

#### Nommage
Nom de la classe : `Icon`
Exemple de nom de variable : `icon`

#### Json
```json
{
  "light": Image,
  "dark": Image?,
}
```

## Image

#### Nommage
Nom de la classe : `Image`
Exemple de nom de variable : `image`

#### Json
```json
{
  "small": String,
  "large": String,
}
```

## Carousel

#### Nommage
Nom de la classe : `Carousel`
Exemple de nom de variable : `carousel`

#### Json
```json
{
    "carousel": <List>CarouselItem
}
```

## CarouselItem

#### Nommage
Nom de la classe : `CarouselItem`

```json
{
    "image": Image,
    "video_url": String?,
}
```

#### Notes de fallback
La variable `dark` est nullable.
Si elle n'est renseignée dans le back-office, elle n'est pas renvoyée par le back.
C'est alors au front de faire le fallback sur `light`.

## Navigation

#### Nommage
Nom de la classe : `Navigation`
Exemple de nom de variable : `navigation`

#### Json
```json
{
  "type": String,
  "destination": String,
}
```

#### Notes
:warning: Link est intentionnellement distinct de `Button` pour pouvoir être utilisé indépendamment de la UI (dans la gestion des deep link par exemple)

Voir [Archi Pagify - Links](https://hackmd.io/J5JMblMURIiyU_861jQHzw#Links)

## Button

#### Nommage
Nom de la classe : `Button`
Exemple de nom de variable : `button`

#### Json
```json
{
  "text": String,
  "navigation": Navigation,
}
```

## AdaptativeColor

#### Nommage
Nom de la classe : `AdaptativeColor`
Exemple de nom de variable : `color`, `background_color`, etc.

#### Json
```json
{
  "light": String, 
  "dark": String?, 
}
```

#### Notes
Les valeurs `light` et `dark` sont des code hexa contenant l'alpha si nécessaire.

## Label

#### Nommages
Nom de la classe : `Label`
Exemple de nom de variable : `label`

#### Json
```json
{
  "icon": String,
  "text": String,
  "color": String,
}
```

## Alert

#### Nommages
Nom de la classe : `Alert`
Exemple de nom de variable : `alert`

#### Json
```json
{
  "label": Label?,
  "message": AlertMessage,
  "start_at": String,// i.e. 2023-06-13T01:01:00+02:00
  "end_at": String, // i.e. 2023-06-13T01:01:00+02:00 
}

```
#### Notes
Cas possibles pour les alertes
* `label` seul (sur les collections/cat)
* `message` seul (sur les PP quand on a raté le dernier rappel)
* `label`  + `message` (sur les PP quand on a PAS raté le dernier rappel)
:warning: Pas de cas avec ni `label` ni `message`.

## AlertMessage

#### Nommages
Nom de la classe : `AlertMessage`
Exemple de nom de variable : `message`.

#### Json
```json
{
  "icon": String,
  "text": String,
  "color": String, // code hexa
}
```

## FormattedPrice

#### Nommages
Nom de la classe : `???`
Exemple de nom de variable : ``.

#### Json
```json
{
  "eur": String,
  "usd": String,
  "gbp": String,  
}
```

## Price

#### Nommages
Nom de la classe : `Price`
Exemple de nom de variable : `price`

#### Json
```json
{
  "eur": Number,
  "usd": Number,
  "gbp": Number,  
}
```

## SeoPage

#### Nommages
Nom de la classe : `SeoPage`
Exemple de nom de variable : `seo`

#### Json
```json
{
  "meta_description": String,
  "meta_title": String,
  "category_slug": String,
}
```

## SeoProduct

#### Nommages
Nom de la classe : `SeoProduct`
Exemple de nom de variable : `seo`

#### Json
```json
{
  "rating_value": Number,
  "review_count": Number,
}
```

## SeoProductPage

#### Nommages
Nom de la classe : `SeoProductPage`
Exemple de nom de variable : `seo_product`

#### Json
```json
{
    "meta_description": String,
    "meta_title": String,
    "rating_value": Number,
    "review_count": Number,
    "category_slug": String,
}
```

## Metadata

#### Nommages
Nom de la classe : `Metadata`
Exemple de nom de variable : `metadata`

#### Json
```json
{
    "kustom_web_mobile": Boolean,
    "kind": String,
}
```

## PriceTable

#### Nommages
Nom de la classe : `PriceTable`
Exemple de nom de variable : `price_table`

#### Json
```json
{
    product_name: string;
    product_tag?: string;
    product_price?: string;
    products?: PriceTable[];
}
```