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âmp | Obligatoriu | Descriere |
|---|---|---|
salon_id | Da | |
service_id | Da | |
master_id | Da | |
starts_at | Da | ISO 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âmp | Tip | Obligatoriu | Descriere |
|---|---|---|---|
rating | integer | Da | De la 1 la 5 |
body | string | Nu | Textul 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
}