Saloane
Endpoint-urile publice GET sunt disponibile fără autentificare.
Creare/modificare/ștergere — doar pentru proprietarul salonului (salons.owner_id == current_user.id) sau admin.
Lista saloanelor
GET /api/v1/salons
Căutare și listare saloane.
Parametri de interogare
| Parametru | Descriere |
|---|---|
query | Căutare după nume / adresă |
category | Slug-ul categoriei |
price_min | Preț minim |
price_max | Preț maxim |
rating_min | Rating minim |
Răspuns 200
{
"success": true,
"status": "200",
"message": "Salons retrieved successfully",
"errors": null,
"data": [
{
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": []
}
]
}
Obține salon
GET /api/v1/salons/:id
Informații detaliate despre un salon. Include programul, serviciile și politica de anulare.
Răspuns 200
{
"success": true,
"status": "200",
"message": "Salon retrieved successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": [],
"cancellation_hours_before": 24,
"cancellation_fee_percent": "0.0",
"working_hours": [
{ "day_of_week": 1, "open": "09:00", "close": "18:00" },
{ "day_of_week": 2, "open": "09:00", "close": "18:00" }
],
"services": [
{
"id": "uuid",
"name": "Men's Haircut",
"category": "barbershop",
"duration_min": 30,
"price_from": 150.0
}
]
}
}
Creare salon
POST /api/v1/salons
Crearea unui salon nou. Necesită autentificare (proprietar sau admin).
Cerere
POST /api/v1/salons
Authorization: Bearer <token>
Content-Type: application/json
{
"salon": {
"name": "Barber House",
"address": "str. Pushkin 12",
"phone": "+37369000000",
"lat": 47.024,
"lng": 28.832,
"status": "pending"
}
}
Se pot trimite și photos[] ca multipart.
Răspuns 201
{
"success": true,
"status": "201",
"message": "Salon created successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
...
}
}
Actualizare salon
PATCH /api/v1/salons/:id
Actualizarea unui salon. Doar proprietarul (owner_id) sau admin.
Cerere
{
"salon": {
"name": "New Name",
"address": "New Address",
"status": "active"
}
}
Răspuns 200
Același corp ca POST /api/v1/salons cu datele actualizate.
Ștergere salon
DELETE /api/v1/salons/:id
Ștergerea unui salon. Doar proprietarul sau admin.
Răspuns 200
{
"success": true,
"status": "200",
"message": "Salon deleted successfully",
"errors": null,
"data": null
}
Adaugă la favorite
POST /api/v1/salons/:id/favorites
Adaugă salonul la favorite. Necesită autentificare.
Răspuns 201
{
"success": true,
"status": "201",
"message": "...",
"errors": null,
"data": null
}
Elimină din favorite
DELETE /api/v1/salons/:id/favorites
Elimină salonul din favorite. Necesită autentificare.
Răspuns 200
{
"success": true,
"status": "200",
"message": "...",
"errors": null,
"data": null
}