# 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[];
}
```