Atag SPA | API Documentation

Documentazione Schema Prisma

Modello User

Il modello User rappresenta gli utenti nel sistema, inclusi i clienti e gli amministratori. Contiene campi come email, password, e userType. Il campo userType può essere uno dei seguenti: CUSTOMER, ADMIN,MANAGEMENT o SHOP_MANAGER, definiti dall'enum UserType.

model User {
  id             Int            @id @default(autoincrement())
  email          String         @unique
  password       String
  companyName    String
  contactPerson  String
  phoneNumber    String
  address        String
  city           String
  postalCode     String
  country        String
  vatNumber      String         @unique
  userType       UserType       @default(CUSTOMER)
  orders         Order[]        @relation(name: "UserOrders")
  payments       Payment[]      @relation(name: "UserPayments")
  couponUsages   CouponUsage[]  @relation(name: "UserCouponUsages")
  pages          Page[]         @relation(name: "UserPages")
  posts          Post[]         @relation(name: "UserPosts")
  accounts       Account[]      @relation("UserAccounts")
  sessions       Session[]      @relation("UserSessions")
  createdAt      DateTime       @default(now())
  updatedAt      DateTime       @updatedAt
}

Documentazione API Test

Test API delle Pagine

La pagina di test per l'API delle Pagine ti permette di eseguire richieste HTTP per creare, aggiornare, eliminare e recuperare pagine. Vai a /test/page per utilizzare questa interfaccia.

Metodi Supportati

  • GET: Recupera una pagina o una specifica traduzione.
  • POST: Crea una nuova pagina.
  • PUT: Aggiorna una traduzione esistente.
  • PATCH: Aggiunge una nuova traduzione a una pagina esistente.
  • DELETE: Elimina una pagina o una traduzione specifica.

Esempio di Corpo JSON (POST)

{
  "slug": "chi-siamo",
  "status": "PUBLISHED",
  "translations": [
    {
      "language": "it",
      "title": "Chi Siamo",
      "content": "<p>Benvenuti nella nostra azienda!</p>",
      "seoTitle": "Scopri di più su di noi",
      "metaDescription": "Informazioni su ciò che facciamo"
    }
  ]
}
Per testare l'API, seleziona il metodo, inserisci lo slug della pagina e, per i metodi POST, PUT e PATCH, incolla il corpo JSON.

Test API dei Coupon

La pagina di test per l'API dei Coupon ti permette di eseguire richieste HTTP per creare, aggiornare, eliminare e recuperare i coupon. Vai a /test/coupons per utilizzare questa interfaccia.

Metodi Supportati

  • GET: Recupera i dettagli di un coupon specifico tramite il codice.
  • POST: Crea un nuovo coupon nel sistema.
  • PATCH: Aggiorna un coupon esistente.
  • DELETE: Elimina un coupon dal sistema.

Esempio di Corpo JSON (POST)

{
  "code": "SUMMER2024",
  "discountValue": 15,
  "discountType": "PERCENTAGE",
  "usageLimit": 100,
  "expiresAt": "2024-09-30T23:59:59Z",
  "active": true,
  "translations": [
    {
      "language": "it",
      "description": "Coupon estivo 2024"
    }
  ]
}

Esempio di Corpo JSON (PATCH)

{
  "code": "SUMMER2024",
  "discountValue": 20
}
Per testare l'API, seleziona il metodo, inserisci il codice del coupon e, per i metodi POST e PATCH, incolla il corpo JSON.

API Login Documentation

Panoramica del Sistema di Autenticazione

L’applicazione utilizza NextAuth.js per gestire l’autenticazione degli utenti tramite un provider di Credenziali (email e password). La gestione dello stato di autenticazione avviene tramite JWT (JSON Web Tokens) e le sessioni sono mantenute sia lato client che server.

Documentazione API Pagamenti

Panoramica dell'API Pagamenti

Questa API consente ai client di creare e aggiornare i record di pagamento nel sistema. Il sistema è integrato con il gateway di pagamento Nexi. Di seguito sono riportati i dettagli sugli endpoint per la creazione di un nuovo pagamento e per l'aggiornamento di un pagamento esistente con una richiesta PATCH.

Documentazione API per gli Ordini

Crea un Ordine (POST)

Endpoint: POST /api/orders
Descrizione: Questo endpoint permette di creare un nuovo ordine associato ad un utente autenticato.

Corpo della Richiesta

{
  "items": [
    { "productId": 1, "quantity": 2, "price": 15.99 },
    { "productId": 2, "quantity": 1, "price": 45.50 }
  ],
  "total": 77.48
}

Esempio di Risposta

{
  "id": 1,
  "userId": 123,
  "orderDate": "2024-09-19T14:00:00.000Z",
  "status": "PENDING",
  "total": 77.48,
  "items": [
    { "productId": 1, "quantity": 2, "price": 15.99 },
    { "productId": 2, "quantity": 1, "price": 45.50 }
  ],
  "createdAt": "2024-09-19T14:00:00.000Z",
  "updatedAt": "2024-09-19T14:00:00.000Z"
}

Pages API Documentation

Create a Page (POST)

Endpoint: POST /api/pages
Description: Crea una nuova pagina con le relative traduzioni.

Request Body

{
  "slug": "chi-siamo",
  "status": "PUBLISHED",
  "translations": [
    {
      "language": "it",
      "title": "Chi Siamo",
      "content": "<p>Benvenuti nella nostra azienda!</p>",
      "seoTitle": "Scopri di più su di noi",
      "metaDescription": "Informazioni su ciò che facciamo",
      "canonicalUrl": "https://tuo-sito.com/chi-siamo",
      "metaKeywords": ["azienda", "chi siamo"],
      "ogImage": "https://tuo-sito.com/images/chi-siamo.jpg",
      "ogTitle": "Chi Siamo",
      "ogDescription": "Benvenuti nella nostra azienda!"
    }
  ]
}

Response Example

{
  "id": 1,
  "slug": "chi-siamo",
  "status": "PUBLISHED",
  "createdAt": "2024-09-01T12:34:56.789Z",
  "translations": [
    {
      "id": 1,
      "language": "it",
      "title": "Chi Siamo",
      "content": "<p>Benvenuti nella nostra azienda!</p>"
    }
  ]
}

Users API Documentation

Create a User (POST)

Endpoint: POST /api/users
Description: Crea un nuovo utente nel sistema.

Request Body

{
  "email": "john.doe@example.com",
  "password": "securePassword123",
  "companyName": "Doe Enterprises",
  "contactPerson": "John Doe",
  "phoneNumber": "+123456789",
  "address": "123 Main Street",
  "city": "Sample City",
  "postalCode": "12345",
  "country": "USA",
  "vatNumber": "US123456789",
  "userType": "CUSTOMER"
}

Response Example

{
  "id": 1,
  "email": "john.doe@example.com",
  "companyName": "Doe Enterprises",
  "contactPerson": "John Doe",
  "phoneNumber": "+123456789",
  "address": "123 Main Street",
  "city": "Sample City",
  "postalCode": "12345",
  "country": "USA",
  "vatNumber": "US123456789",
  "userType": "CUSTOMER",
  "createdAt": "2024-09-01T12:34:56.789Z"
}

Documentazione API per le Notifiche Email

Invia una Notifica Email (POST)

Endpoint: POST /api/notifications/email
Descrizione: Invia una notifica via email per un determinato evento.

Corpo della Richiesta

{
  "email": "utente@example.com",
  "type": "ORDER_CONFIRMED",
  "language": "it",
  "dynamicData": {
    "name": "Mario Rossi",
    "orderId": "123456",
    "orderDate": "2024-09-01"
  }
}

Esempio di Risposta

{
  "message": "Email di notifica inviata con successo",
  "result": {
    "accepted": ["utente@example.com"],
    "messageId": "<unique-id@example.com>"
  }
}

Documentazione API per la Gestione dei Coupon

Crea un nuovo Coupon (POST)

Endpoint: POST /api/coupons
Descrizione: Crea un nuovo codice coupon da usare nel sistema.

Corpo della Richiesta

{
  "code": "SUMMER2024",
  "discountValue": 20,
  "discountType": "PERCENTAGE",
  "usageLimit": 100,
  "expiresAt": "2024-12-31",
  "active": true
}

Esempio di Risposta

{
  "id": 1,
  "code": "SUMMER2024",
  "discountValue": 20,
  "discountType": "PERCENTAGE",
  "usageLimit": 100,
  "expiresAt": "2024-12-31",
  "active": true
}