Register New Company
POST/company/auth/register
Endpoint per registrare nuove aziende e il loro utente amministratore iniziale. Esegue le seguenti operazioni:
- Valida i dati obbligatori (ragione sociale, password corrispondenti)
- Verifica l'unicità dell'email
- Crea l'indirizzo fiscale
- Crea l'azienda nel database
- Crea l'utente amministratore
- Configura l'account Stripe (customer + connected account)
- Invia l'email di benvenuto
- Crea la tariffa iniziale gratuita per 1 mese
- Collega a un fornitore esistente se il taxid coincide
Flusso dettagliato:
- Il client invia i dati dell'azienda e dell'utente in formato JSON
- Il server valida i campi obbligatori (406 se mancanti)
- Verifica il taxid secondo le norme fiscali spagnole (406 se non valido)
- Controlla l'unicità dell'email (403 se esiste già)
- Crea l'indirizzo fiscale con i dati forniti
- Registra l'azienda nel database
- Crea l'utente amministratore con password hashata
- Configura l'account Stripe (customer + connected account) per pagamenti futuri
- Invia l'email di attivazione con token univoco
- Crea la tariffa iniziale gratuita per 30 giorni
- Se esiste un company_provider con lo stesso taxid, lo collega automaticamente
Requisiti dei dati:
- Taxid/NIF/CIF valido secondo la normativa spagnola (opzionale ma consigliato)
- Ragione sociale completa
- Email aziendale non registrata
- Password sicura (minimo 8 caratteri, maiuscole, numeri e caratteri speciali)
- Indirizzo fiscale completo
Struttura della richiesta:
\{
user: \{
email: admin@azienda.com
<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>
<ParamsDetails
parameters={[]}
>
</ParamsDetails>
<RequestSchema
title={"Body"}
body={{"content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","description":"Dati dell'amministratore utente","properties":{"email":{"type":"string","format":"email","description":"Email dell'utente"},"password":{"type":"string","format":"password","description":"Password dell'utente"},"password_confirm":{"type":"string","description":"Conferma password"}}},"invoice_data":{"type":"object","description":"Dati fiscali di fatturazione","properties":{"taxid":{"type":"string","description":"Partita IVA dell'azienda"},"email":{"type":"string","format":"email","description":"Email di fatturazione"},"socialName":{"type":"string","description":"Ragione sociale"},"phone":{"type":"string","description":"Telefono di contatto"}}},"socialName":{"type":"string","description":"Ragione sociale dell'azienda"},"address":{"type":"object","description":"Indirizzo fiscale dell'azienda","properties":{"place_id":{"type":"string","description":"ID del luogo di Google Places"},"formatted_address":{"type":"string","description":"Indirizzo formattato"},"geometry":{"type":"object","description":"Coordinate GPS","properties":{"location":{"type":"object","properties":{"lat":{"type":"number","format":"float"},"lng":{"type":"number","format":"float"}}}}},"address_components":{"type":"array","description":"Componenti dello sterzo","items":{"type":"object"}},"phone":{"type":"string","description":"Telefono dell'indirizzo"}}}},"required":["user","invoice_data","socialName","address"],"title":"RegisterRequest"},"example":{"user":{"email":"admin@transportesejemplo.com","password":"Transportes2024!","password_confirm":"Transportes2024!"},"invoice_data":{"taxid":"B12345678","email":"admin@transportesejemplo.com","socialName":"Transportes Ejemplo S.L.","phone":"+34123456789"},"socialName":"Transportes Ejemplo S.L.","address":{"place_id":"ChIJgTwKgJcpQg0RaSKMYcHeNs","address_components":[{"long_name":"123","types":["street_number"]},{"long_name":"Calle Mayor","types":["route"]},{"long_name":"Madrid","types":["locality","administrative_area_level_2"]},{"long_name":"Madrid","types":["administrative_area_level_1"]},{"long_name":"28013","types":["postal_code"]},{"long_name":"Spain","types":["country"]}],"formatted_address":"Calle Mayor 123, Madrid, 28013, Spain","geometry":{"location":{"lat":40.4168,"lng":-3.7038}},"phone":"+34123456789"}}}},"required":true}}
>
</RequestSchema>
<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Registrazione riuscita (restituisce oggetto vuoto)","content":{"application/json":{"schema":{"type":"object","example":{}}}},"headers":{}},"400":{"description":"Errore durante la creazione dell'indirizzo o UTC non valido","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":400},"message":{"type":"string","example":"Error creating address"}}}}},"headers":{}},"403":{"description":"Email già registrato","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":403},"message":{"type":"string","example":"COMPANY_EXISTS"},"existingCompany":{"type":"object"}}}}},"headers":{}},"406":{"description":"Errore di convalida","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"integer","example":406},"message":{"type":"string","enum":["NAME_REQUIRED","PASSWORD_NOT_MATCH","USER_ALREADY_EXISTS","USER_DISABLED_RECOVERABLE","CIA_ASIGN_FAILED","TRUCKER_DATA_INCOMPLETE"],"example":"PASSWORD_NOT_MATCH"}}}}},"headers":{}}}}
>
</StatusCodes>