Skip to main content

Programări

Gestionarea programărilor. Toate endpoint-urile necesită autentificare.

Statusurile programării (AASM)

confirmed → in_progress → completed → reviewed
↘ cancelled (terminal)
↘ no_show (terminal)

Status inițial la creare: confirmed.


Creare programare

POST /api/v1/appointments

Crearea unei programări. Clientul rezervă un interval.

Cerere

{
"appointment": {
"salon_id": "uuid",
"service_id": "uuid",
"master_id": "uuid",
"starts_at": "2026-04-07T10:00:00Z"
}
}
CâmpObligatoriuDescriere
salon_idDa
service_idDa
master_idDa
starts_atDaISO 8601, UTC

Răspuns 201

{
"success": true,
"status": "201",
"message": "Appointment created successfully",
"errors": null,
"data": {
"id": "uuid",
"status": "confirmed",
"starts_at": "2026-04-07T10:00:00Z",
"ends_at": "2026-04-07T10:30:00Z",
"total_amount": "150.0",
"salon": {
"salon_id": "uuid",
"name": "Barber House",
"address": "str. Pushkin 12"
},
"master": {
"master_id": "uuid",
"name": "Ion Popescu"
},
"service": {
"service_id": "uuid",
"name": "Men's Haircut",
"price_snapshot": "150.0",
"duration_min": 30
}
}
}

Obține programare

GET /api/v1/appointments/:id

Detaliile unei programări specifice. Accesibil doar participanților (client, maestru, proprietar salon, admin).

Răspuns 200

Același corp ca răspunsul POST /api/v1/appointments.


Confirmare programare

PATCH /api/v1/appointments/:id/confirm

Confirmarea manuală a unei programări. Doar proprietarul salonului sau maestrul.

În prezent programările se creează deja cu statusul confirmed. Endpoint-ul este rezervat pentru confirmarea manuală viitoare.

Răspuns 200

{
"success": true,
"status": "200",
"message": "Appointment confirmed successfully",
"errors": null,
"data": { ... }
}

Anulare programare

PATCH /api/v1/appointments/:id/cancel

Anularea unei programări. Disponibil clientului, maestrului și proprietarului.
Pentru clienți se verifică politica de anulare (cancellation_hours_before). Proprietarul și admin pot anula fără restricții.

Răspuns 200

{
"success": true,
"status": "200",
"message": "Appointment cancelled successfully",
"errors": null,
"data": { ... }
}

Finalizare programare

PATCH /api/v1/appointments/:id/complete

Marcarea programării ca finalizată. Doar proprietarul salonului sau maestrul.

Răspuns 200

{
"success": true,
"status": "200",
"message": "Appointment completed successfully",
"errors": null,
"data": { ... }
}

Marcare neprezentare

PATCH /api/v1/appointments/:id/no_show

Marcarea clientului ca absent. Doar proprietarul salonului sau maestrul.

Răspuns 200

{
"success": true,
"status": "200",
"message": "Appointment marked as no-show",
"errors": null,
"data": { ... }
}

Trimite recenzie

POST /api/v1/appointments/:id/review

Trimiterea unei recenzii după finalizarea programării. Doar clientul, doar după statusul completed.
După trimitere cu succes, programarea trece în statusul reviewed.

Cerere

{
"review": {
"rating": 5,
"body": "Maestru excelent, voi reveni!"
}
}
CâmpTipObligatoriuDescriere
ratingintegerDaDe la 1 la 5
bodystringNuTextul recenziei

Răspuns 201

{
"success": true,
"status": "201",
"message": "Review submitted successfully",
"errors": null,
"data": {
"id": "uuid",
"rating": 5,
"body": "Maestru excelent, voi reveni!",
"created_at": "2026-04-07T11:00:00Z"
}
}

Răspuns 422 — Programare nefinalizată

{
"success": false,
"status": "422",
"message": "Validation failed",
"errors": {
"appointment": ["must be completed before review"]
},
"data": null
}