Salvataggio transazionale della mappa con controllo di versione
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://example.com/api/admin/v1/establishments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/maps/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
payload := strings.NewReader("{ \"map\": { \"name\": { \"additionalProperty\": \"example\" }, \"width\": 1, \"height\": 1, \"grid_size\": 1, \"background\": { \"type\": \"image\", \"url\": \"example\", \"geojson\": {}, \"scale\": 1, \"rotation\": 1, \"offset_x\": 1, \"offset_y\": 1, \"opacity\": 1 }, \"sea_side\": \"top\", \"sort_order\": 1 }, \"spots\": [ { \"id\": \"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0\", \"zone_id\": \"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0\", \"label\": \"example\", \"row_label\": \"example\", \"number\": 1, \"kind\": \"umbrella\", \"asset\": \"example\", \"x\": 1, \"y\": 1, \"rotation\": 1, \"shape\": { \"type\": \"circle\", \"w\": 1, \"h\": 1 }, \"capacity\": { \"additionalProperty\": 1 }, \"max_extra\": { \"additionalProperty\": 1 }, \"price_category_override\": \"example\", \"attributes\": [ \"example\" ], \"active\": true } ], \"decorations\": [ { \"id\": \"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0\", \"kind\": \"walkway\", \"asset\": \"example\", \"variant\": \"example\", \"x\": 1, \"y\": 1, \"rotation\": 1, \"shape\": { \"type\": \"circle\", \"w\": 1, \"h\": 1 }, \"label\": { \"additionalProperty\": \"example\" } } ] }")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("cookie", "arenile_session=<arenile_session>") req.Header.Add("If-Match", "example") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://example.com/api/admin/v1/establishments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/maps/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PUT', headers: { cookie: 'arenile_session=<arenile_session>', 'If-Match': 'example', 'Content-Type': 'application/json' }, body: '{"map":{"name":{"additionalProperty":"example"},"width":1,"height":1,"grid_size":1,"background":{"type":"image","url":"example","geojson":{},"scale":1,"rotation":1,"offset_x":1,"offset_y":1,"opacity":1},"sea_side":"top","sort_order":1},"spots":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","zone_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","label":"example","row_label":"example","number":1,"kind":"umbrella","asset":"example","x":1,"y":1,"rotation":1,"shape":{"type":"circle","w":1,"h":1},"capacity":{"additionalProperty":1},"max_extra":{"additionalProperty":1},"price_category_override":"example","attributes":["example"],"active":true}],"decorations":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","kind":"walkway","asset":"example","variant":"example","x":1,"y":1,"rotation":1,"shape":{"type":"circle","w":1,"h":1},"label":{"additionalProperty":"example"}}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://example.com/api/admin/v1/establishments/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/maps/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Content-Type: application/json' \ --header 'If-Match: example' \ --cookie arenile_session=<arenile_session> \ --data '{ "map": { "name": { "additionalProperty": "example" }, "width": 1, "height": 1, "grid_size": 1, "background": { "type": "image", "url": "example", "geojson": {}, "scale": 1, "rotation": 1, "offset_x": 1, "offset_y": 1, "opacity": 1 }, "sea_side": "top", "sort_order": 1 }, "spots": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "zone_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "label": "example", "row_label": "example", "number": 1, "kind": "umbrella", "asset": "example", "x": 1, "y": 1, "rotation": 1, "shape": { "type": "circle", "w": 1, "h": 1 }, "capacity": { "additionalProperty": 1 }, "max_extra": { "additionalProperty": 1 }, "price_category_override": "example", "attributes": [ "example" ], "active": true } ], "decorations": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "kind": "walkway", "asset": "example", "variant": "example", "x": 1, "y": 1, "rotation": 1, "shape": { "type": "circle", "w": 1, "h": 1 }, "label": { "additionalProperty": "example" } } ] }'Richiede If-Match con la versione letta; in caso di conflitto risponde 412 version_conflict con current_version.
Authorizations
Sezione intitolata “Authorizations”Parameters
Sezione intitolata “Parameters”Path Parameters
Sezione intitolata “Path Parameters”Header Parameters
Sezione intitolata “Header Parameters”ETag (versione) della mappa letta in precedenza; obbligatorio (428 precondition_required se assente). * salva sulla versione corrente; la forma debole W/"3" è accettata (ADR 0008).
Obbligatorio per le richieste autenticate via cookie che modificano
dati: deve coincidere con il valore del cookie arenile_csrf.
Request Bodyrequired
Sezione intitolata “Request Bodyrequired”Salvataggio transazionale dell’intero documento: postazioni e decorazioni assenti vengono eliminate (rifiutato con spot_has_future_allocations se una postazione eliminata ha allocazioni future: va disattivata).
object
object
Testo localizzato lingua → testo (es. {“it”: “Prima fila”}); si ricade sulla lingua predefinita.
object
Sfondo opzionale della mappa (spec 11.2).
object
URL dell’immagine (type=image).
Perimetro GeoJSON (type=geojson).
object
object
ID di una postazione esistente da aggiornare; assente = nuova postazione.
Famiglia della postazione (semantica: pacchetti e regole possono richiederla). I valori sunbed, daybed, cabana e hammock coprono le famiglie prenotabili del kit mappa (ADR 0012).
Illustrazione del kit mappa (id di assets/map-kits/*/manifest.json, uguali in ogni kit; ADR 0012, 0024). Assente = illustrazione predefinita del tipo. Le postazioni accettano solo illustrazioni prenotabili.
object
Quantità per codice componente (es. {“umbrella”: 1, “sunbed”: 2}).
object
Quantità per codice componente (es. {“umbrella”: 1, “sunbed”: 2}).
object
object
Assente = nuovo elemento.
Illustrazione del kit mappa (id di assets/map-kits/*/manifest.json, uguali in ogni kit; ADR 0012, 0024). Assente = illustrazione predefinita del tipo. Le postazioni accettano solo illustrazioni prenotabili.
Variante di colore dell’illustrazione, se l’illustrazione ne prevede (bandiera_mare: green, yellow, red).
object
Testo localizzato lingua → testo (es. {“it”: “Prima fila”}); si ricade sulla lingua predefinita.
object
Responses
Sezione intitolata “Responses”Mappa salvata
Documento completo della mappa; la versione è anche nell’header ETag.
object
object
Testo localizzato lingua → testo (es. {“it”: “Prima fila”}); si ricade sulla lingua predefinita.
object
Sfondo opzionale della mappa (spec 11.2).
object
URL dell’immagine (type=image).
Perimetro GeoJSON (type=geojson).
object
Versione per la concorrenza ottimistica; coincide con l’ETag.
Postazione prenotabile.
object
Famiglia della postazione (semantica: pacchetti e regole possono richiederla). I valori sunbed, daybed, cabana e hammock coprono le famiglie prenotabili del kit mappa (ADR 0012).
Illustrazione del kit mappa (id di assets/map-kits/*/manifest.json, uguali in ogni kit; ADR 0012, 0024). Assente = illustrazione predefinita del tipo. Le postazioni accettano solo illustrazioni prenotabili.
object
Quantità per codice componente (es. {“umbrella”: 1, “sunbed”: 2}).
object
Quantità per codice componente (es. {“umbrella”: 1, “sunbed”: 2}).
object
Elemento decorativo non prenotabile.
object
Illustrazione del kit mappa (id di assets/map-kits/*/manifest.json, uguali in ogni kit; ADR 0012, 0024). Assente = illustrazione predefinita del tipo. Le postazioni accettano solo illustrazioni prenotabili.
Variante di colore dell’illustrazione, se l’illustrazione ne prevede (bandiera_mare: green, yellow, red).
object
Testo localizzato lingua → testo (es. {“it”: “Prima fila”}); si ricade sulla lingua predefinita.
object
Example
{ "map": { "background": { "type": "image" }, "sea_side": "top" }, "spots": [ { "kind": "umbrella", "shape": { "type": "circle" } } ], "decorations": [ { "kind": "walkway", "shape": { "type": "circle" } } ]}Headers
Sezione intitolata “Headers”Versione della risorsa ("<version>"), da reinviare in If-Match.
Richiesta non valida
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Autenticazione assente o non valida
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Permesso negato
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Risorsa inesistente
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Conflitto con lo stato corrente
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Versione non aggiornata (version_conflict, con current_version)
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}Header If-Match mancante (precondition_required)
Errore RFC 9457 (application/problem+json).
object
Slug stabile del tipo di errore. I client devono basarsi su questo
valore, mai sul testo di title o detail.
Secondi da attendere (solo per rate_limited).
object
Versione corrente della risorsa (solo per version_conflict).
Postazioni con allocazioni future (solo per spot_has_future_allocations).
Vincoli violati (solo per policy_violation).
object
Codice stabile (es. lead_time_too_short).
object
Mezze giornate non disponibili (solo per spot_unavailable, pool_exhausted, quota_exceeded).
Mezza giornata non disponibile per una risorsa (spec 7.2), restituita in Problem.conflicts e nelle anteprime.
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Fascia: mattina o pomeriggio.
Stato della prenotazione (spec 10.2).
Cliente già presente con la stessa email o telefono (solo per conflict su createCustomer).
Periodo del soggiorno e data odierna dello stabilimento (solo per booking_outside_period).
object
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Data di calendario YYYY-MM-DD nel fuso dello stabilimento.
Example
{ "type": "bad_request", "conflicts": [ { "slot": "AM", "reason": "spot_unavailable" } ], "current_status": "draft"}
