Aplicación web para la gestión y alquiler de canchas deportivas. La aplicación permite a los usuarios buscar, reservar y valorar canchas, así como gestionar sus propias reservas y perfiles. Además, proporciona funcionalidades administrativas para gestionar usuarios, canchas, reservas y comentarios.
Antes de comenzar, asegúrate de tener instalado lo siguiente en tu sistema:
- Python (versión 3.12.2)
- PostgreSQL (versión 16)
- pip (administrador de paquetes de Python)
- Clona este repositorio:
git clone https://github.com/JohannGaviria/Python-Django-PostgreSQL-Cancha.git
- Crear el entorno virtual:
Utiliza virtualenv
o otro gestor de entornos virtuales
pip install virtualenv
python -m virtualenv nombre_del_entorno
- Instalar las dependencias:
cd Python-Django-PostgreSQL-Cancha
pip install -r requirements.txt
- Configurar la base de datos:
- Crea una base de datos PostgreSQL en tu entorno.
- Crea un archivo
.env
en la ruta raiz de tu proyecto y crea las variables de entorno con los datos correpodientes:- SECRET_KEY=tu_clave_secreta
- ENGINE=tu_base_de_datos
- NAME=tu_nombre_de_la_base_de_datos
- USER=tu_usuario_de_la_base_de_datos
- PASSWORD=tu_contraseña_de_la_base_de_datos
- HOST=tu_host
- PORT=tu_port
- Crea las migraciones:
python manage.py makemigrations
python manage.py migrate
- Crea los roles por defecto:
python manage.py create_default_rol
- Crea los estados de reservacion por defecto:
python manager.py create_default_status_reservation
- Ejecutar el servidor:
python manage.py runserver
¡Listo! El proyecto ahora debería estar en funcionamiento en tu entorno local. Puedes acceder a él desde tu navegador web visitando http://localhost:8000
.
- Ejecuta el servidor de desarrollo:
python manage.py runserver
- Accede a la API a través de las URL definidas.
POST /api/auth/signUp
Parámetro | Tipo | Descripción |
---|---|---|
full_name |
string |
Requerido. Nombre completo del usuario |
email |
string |
Requerido. Correo electrónico del usuario |
password |
string |
Requerido. Contraseña del usuario |
phone |
string |
Requerido. Numero celular del usuario |
birth_date |
string |
Requerido. Fecha de nacimiento del usuario |
rol |
int |
Requerido. Rol del usuario |
POST /api/auth/signUp
Content-Type: application/json
{
"full_name": "test fullname",
"email": "test@email.com",
"password": "testpassword",
"phone": "+57 321 987 6543",
"birth_date": "1999-09-09",
"rol": 2
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Successful registration",
"data": {
"token": {
"token_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"user": {
"id": 1,
"full_name": "test fullname",
"email": "test@email.com",
"phone": "+57 321 987 6543",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
}
}
POST /api/auth/signIn
Parámetro | Tipo | Descripción |
---|---|---|
email |
string |
Requerido. Email del usuario |
password |
string |
Requerido. Contraseña del usuario |
POST /api/auth/signIn
Content-Type: application/json
{
"email": "test@email.com",
"password": "testpassword"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "succes",
"message": "Successful login",
"data": {
"token": {
"token_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_expiration": "2024-06-10T02:27:34.039747Z"
},
"user": {
"id": 1,
"full_name": "test fullname",
"email": "test@email.com",
"phone": "+57 321 987 6543",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
}
}
GET /api/auth/signOut
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/auth/signOut
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Successful logout"
}
POST /api/users/update
Parámetro | Tipo | Descripción |
---|---|---|
full_name |
string |
Nombre completo del usuario |
email |
string |
Correo electrónico del usuario |
password |
string |
Contraseña del usuario |
phone |
string |
Numero celular del usuario |
birth_date |
string |
Fecha de nacimiento del usuario |
rol |
int |
Rol del usuario |
POST /api/users/update
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"full_name": "test new fullname",
"email": "testnew@email.com",
"password": "testnewpassword",
"phone": "+57 321 987 6543",
"birth_date": "1999-09-09",
"rol": 2
}
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Successful update",
"data": {
"token": {
"token_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"token_expiration": "2024-06-10T20:37:44.026227Z"
},
"user": {
"id": 1,
"full_name": "test new fullname",
"email": "testnew@email.com",
"phone": "+57 320 476 9010",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
}
}
DELETE /api/users/delete
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
DELETE /api/users/delete
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "successful deleted"
}
GET /api/users/search
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/users/search
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "All users retrieved successfully",
"data": {
"result": 2,
"user": [
{
"id": 1,
"full_name": "test fullname1",
"email": "test1@email.com",
"phone": "+57 320 476 9010",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
},
{
"id": 2,
"full_name": "Test fullname2",
"email": "test2@email.com",
"phone": "+57 323 542 2103",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
]
}
}
GET /api/users/search?query=
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
query |
string |
Requerido. Consulta de búsqueda |
tipos de busquedas:
- Nombre completo del usuario
- Email del usuario
- Numero celular del usuario
- Rol del usuario
- Estado del usuario
GET /api/users/search?query=consulta_de_búsqueda
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "User found successfully",
"data": {
"result": 2,
"user": [
{
"id": 1,
"full_name": "test fullname1",
"email": "test1@email.com",
"phone": "+57 320 476 9010",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
},
{
"id": 2,
"full_name": "Test fullname2",
"email": "test2@email.com",
"phone": "+57 323 542 2103",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
]
}
}
PATCH /api/users/change-status/{user_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
user_id |
int |
Requerido. ID del usuario |
action |
string |
Requerido. Acción a realizar: "activate" para activar al usuario o "deactivate" para desactivarlo. |
PATCH /api/users/change-status/{user_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"action": "activate"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "User activated successfully"
}
PATCH /api/users/change-status/{user_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"action": "deactivate"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "User deactivated successfully"
}
PATCH /api/users/change-role/{user_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
user_id |
int |
Requerido. ID del usuario |
action |
string |
Requerido. Acción a realizar: "user" para usuario o "admin" para administrador |
PATCH /api/users/change-role/{user_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"action": "user"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "successful role change",
"data": {
"token": {
"token_key": "693774e3f7a7be669b12fa95c454f6c466c90d3e",
"token_expiration": "2024-06-11T18:43:04.359593Z"
},
"user": {
"id": 1,
"full_name": "test fullname1",
"email": "test1@email.com",
"phone": "+57 320 476 9010",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": false,
"is_superuser": false,
"rol": 2
}
}
}
PATCH /api/users/change-role/{user_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"action": "admin"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "successful role change",
"data": {
"token": {
"token_key": "693774e3f7a7be669b12fa95c454f6c466c90d3e",
"token_expiration": "2024-06-11T18:43:04.359593Z"
},
"user": {
"id": 1,
"full_name": "test fullname1",
"email": "test1@email.com",
"phone": "+57 320 476 9010",
"birth_date": "1999-09-09",
"is_active": true,
"is_staff": true,
"is_superuser": true,
"rol": 1
}
}
}
DELETE /api/users/delete-user/{user_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
user_id |
int |
Requerido. ID del usuario |
DELETE /api/users/delete-user/{user_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "user deleted successfully"
}
POST /api/courts/surface-types
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
type |
string |
Requerido. Tipo de superficie |
POST /api/courts/surface-types
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"type": "Grass court"
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Successfully created surface type",
"data": {
"surface_type": {
"id": 1,
"type": "Grass court"
}
}
}
GET /api/courts/surface-types
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/courts/surface-types
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Correctly obtained surface types",
"data": {
"surface_type": [
{
"id": 1,
"type": "Grass court"
},
{
"id": 2,
"type": "Synthetic court"
}
]
}
}
POST /api/courts/court-status
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
status |
string |
Requerido. Estado de cancha |
POST /api/courts/court-status
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"status": "Available"
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Successfully created surface type",
"data": {
"court_status": {
"id": 1,
"status": "Available"
}
}
}
GET /api/courts/court-status
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/courts/court-status
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Correctly obtained court status",
"data": {
"court_status": [
{
"id": 1,
"status": "Available"
},
{
"id": 2,
"status": "Reserved"
}
]
}
}
POST /api/courts/surface-types
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
type |
string |
Requerido. Tipo de cacnha |
POST /api/courts/court-types
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"type": "Basketball court"
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Successfully created court type",
"data": {
"court_type": {
"id": 1,
"type": "Basketball court"
}
}
}
GET /api/courts/court-types
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/courts/court-types
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Correctly obtained court types",
"data": {
"surface_type": [
{
"id": 1,
"type": "Basketball court"
},
{
"id": 2,
"type": "Volleyball court"
}
]
}
}
POST /api/courts/add-court
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
name |
string |
Requerido. Nombre de la cancha |
code |
string |
Requerido. Código de la cancha |
size |
string |
Requerido. Tamaño de la cancha |
location |
string |
Requerido. Ubicación de la cancha |
price_hour |
decimal |
Requerido. Precio por hora de la cancha |
description |
string |
Descripcion de la cancha |
cover_image |
string |
Imagen de portada de la cancha |
surface_type |
int |
Requerido. ID del tipo de superficie |
court_status |
int |
Requerido. ID del estado de cancha |
court_type |
int |
Requerido. ID del tipo de cancha |
POST /api/courts/add-court
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"name": "Central Court",
"code": "CC001",
"size": "20x40",
"location": "Main Ave 123, Sports City",
"price_hour": 150.00,
"description": "A modern court with LED lighting and locker rooms.",
"cover_image": "uploads/central_court.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Court created correctly",
"data": {
"court": {
"id": 1,
"name": "Central Court",
"code": "CC001",
"size": "20x40",
"location": "Main Ave 123, Sports City",
"price_hour": "150.00",
"description": "A modern court with LED lighting and locker rooms.",
"cover_image": "uploads/central_court.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
}
}
PUT /api/courts/update-court/{court_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
court_id |
int |
Requerido. ID de la cancha |
name |
string |
Nombre de la cancha |
code |
string |
Código de la cancha |
size |
string |
Tamaño de la cancha |
location |
string |
Ubicación de la cancha |
price_hour |
decimal |
Precio por hora de la cancha |
description |
string |
Descripcion de la cancha |
cover_image |
file |
Imagen de portada de la cancha |
surface_type |
int |
ID del tipo de superficie |
court_status |
int |
ID del estado de cancha |
court_type |
int |
ID del tipo de cancha |
PUT /api/courts/update-court/{court_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"name": "New Central Court",
"code": "CC011",
"size": "20x45",
"location": "New Main Ave 123, Sports City",
"price_hour": 155.00,
"description": "A modern court with LED lighting and locker rooms.",
"cover_image": "uploads/central_court.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Court updated correctly",
"data": {
"court": {
"id": 1,
"name": "New Central Court",
"code": "CC011",
"size": "20x45",
"location": "New Main Ave 123, Sports City",
"price_hour": "155.00",
"description": "A modern court with LED lighting and locker rooms.",
"cover_image": "uploads/central_court.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
}
}
DELETE /api/courts/delete-court/{court_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
court_id |
int |
Requerido. ID de la cancha |
DELETE /api/courts/delete-court/{court_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Court deleted successfully"
}
POST /api/courts/add-court-image
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
image |
file |
Requerido. Imagen de la cancha |
court |
int |
Requerido. ID de la cancha |
POST /api/courts/add-court-image
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"image": "uploads/central_court_1.jpg",
"court": 1
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Court image added successfully",
"data": {
"image_court": {
"id": 1,
"image": "/uploads/central_court_1.jpg",
"court": 1
}
}
}
GET /api/courts/get-court-image/{court_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
court_id |
int |
Requerido. ID de la cancha |
GET /api/courts/get-court-image/{court_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Court images geted successfully",
"data": [
{
"id": 1,
"image": "/uploads/central_court_1.jpg",
"court": 1
},
{
"id": 2,
"image": "/uploads/central_court_2.jpg",
"court": 1
}
]
}
DELETE /api/courts/delete-court-image/{court_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
court_id |
int |
Requerido. ID de la cancha |
DELETE /api/courts/delete-court-image/{court_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Court images deleted successfully"
}
GET /api/courts/search-court
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
GET /api/courts/search-court
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Curts correctly obtained",
"data": {
"result": 8,
"courts": [
{
"id": 1,
"name": "Emerald Field",
"code": "CX501",
"size": "20x40",
"location": "1234 Evergreen Avenue, Springfield, Illinois",
"price_hour": "100.00",
"description": "Emerald Field is a premier sports facility located in Springfield, Illinois.",
"cover_image": "uploads/test_image_3.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
},
{
"id": 1,
"name": "Sunset Courts",
"code": "CZ201",
"size": "20x40",
"location": "456 Sunset Boulevard, Los Angeles, California",
"price_hour": "120.00",
"description": "Sunset Courts offers state-of-the-art facilities for tennis and basketball enthusiasts.",
"cover_image": "uploads/test_image_4.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
],
"court_images": [
{
"id": 1,
"image": "/uploads/test_image_1.jpg",
"court": 1
},
{
"id": 2,
"image": "/uploads/test_image_2.jpg",
"court": 1
},
{
"id": 3,
"image": "/uploads/test_image_3.jpg",
"court": 2
}
]
}
}
GET /api/courts/search-court?query=
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
query |
string |
Requerido. Consulta de búsqueda |
tipos de busquedas:
- Nombre de la cancha
- Código de la cancha
- Tamaño de la cancha
- Ubicación de la cancha
- Precio por hora de la cancha
- Descripción de la cancha
- Tipo de superficie de la cancha
- Estado de la cancha de la cancha
- Tipo de cancha de la cancha
GET /api/courts/search-court?query=consulta_de_búsqueda
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "Curts correctly obtained",
"data": {
"result": 8,
"courts": [
{
"id": 1,
"name": "Emerald Field",
"code": "CX501",
"size": "20x40",
"location": "1234 Evergreen Avenue, Springfield, Illinois",
"price_hour": "100.00",
"description": "Emerald Field is a premier sports facility located in Springfield, Illinois.",
"cover_image": "uploads/test_image_3.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
},
{
"id": 1,
"name": "Sunset Courts",
"code": "CZ201",
"size": "20x40",
"location": "456 Sunset Boulevard, Los Angeles, California",
"price_hour": "120.00",
"description": "Sunset Courts offers state-of-the-art facilities for tennis and basketball enthusiasts.",
"cover_image": "uploads/test_image_4.jpg",
"surface_type": 1,
"court_status": 1,
"court_type": 1
}
],
"court_images": [
{
"id": 1,
"image": "/uploads/test_image_1.jpg",
"court": 1
},
{
"id": 2,
"image": "/uploads/test_image_2.jpg",
"court": 1
},
{
"id": 3,
"image": "/uploads/test_image_3.jpg",
"court": 2
}
]
}
}
POST /api/reserves/reserve-court
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
start_datatime |
datetime |
Requerido. Fecha de inicio de la reservacion |
end_datatime |
datetime |
Requerido. Fecha de fin de la reservacion |
status |
int |
Requerido. ID del estado de reservacion |
user |
int |
Requerido. ID del usuario |
court |
int |
Requerido. ID de la cancha |
POST /api/reserves/reserve-court
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"start_datetime": "2024-07-01T15:30",
"end_datetime": "2024-07-01T16:30",
"status": 1,
"user": 1,
"court": 1
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Reservation created successfully",
"data": {
"id": 1,
"start_datetime": "2024-07-01T15:30",
"end_datetime": "2024-07-01T16:30",
"status": 1,
"user": 1,
"court": 1
}
}
GET /api/reserves/user-reservations
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
page |
int |
Numero de la pagina |
GET /api/reserves/user-reservations
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GET /api/reserves/user-reservations?page={numero_de_la_pagina}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Reservations obtained correctly",
"data": {
"reservations": [
{
"id": 1,
"start_datetime": "2024-06-27T14:30:00Z",
"end_datetime": "2024-06-27T16:30:00Z",
"status": 1,
"user": 1,
"court": 1
},
{
"id": 2,
"start_datetime": "2024-06-27T14:30:00Z",
"end_datetime": "2024-06-27T16:30:00Z",
"status": 1,
"user": 1,
"court": 2
}
]
}
}
GET /api/reserves/reservations
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
page |
int |
Numero de la pagina |
GET /api/reserves/reservations
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GET /api/reserves/reservations?page={number_page}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Reservations obtained correctly",
"data": {
"reservations": [
{
"id": 1,
"start_datetime": "2024-06-27T14:30:00Z",
"end_datetime": "2024-06-27T16:30:00Z",
"status": 1,
"user": 1,
"court": 1
},
{
"id": 2,
"start_datetime": "2024-06-27T14:30:00Z",
"end_datetime": "2024-06-27T16:30:00Z",
"status": 1,
"user": 1,
"court": 2
},
{
"id": 3,
"start_datetime": "2024-06-27T14:30:00Z",
"end_datetime": "2024-06-27T16:30:00Z",
"status": 1,
"user": 2,
"court": 3
}
]
}
}
PATCH /api/reserves/cancel-reservation/{reservation_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
reservation_id |
int |
Requerido. ID de la reservacion |
PATCH /api/reserves/cancel-reservation/{reservation_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Reservation canceled correctly"
}
POST /api/reviews/create-review
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
rating |
int |
Requerido. Calificación del 1 a 5 |
comment |
string |
Comentario de la review |
user_id |
int |
Requerido. ID del usuario |
court_id |
int |
Requerido. ID de la cancha |
POST /api/reviews/create-review
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{
"rating": 3,
"comment": "A very good court but poor lighting",
"user": 1,
"court": 2
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"status": "success",
"message": "Review created successfully",
"data": {
"review": {
"id": 1,
"rating": 3,
"comment": "A very good court but poor lighting",
"comment_datetime": "2024-07-03T17:16:40.420006Z",
"user": 1,
"court": 1
}
}
}
GET /api/reviews/list-review/{court_id}?page={number_page}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
court_id |
int |
Requerido. ID de la cancha |
page |
int |
Requerido. Numero de página |
GET /api/reviews/list-review/{court_id}?page={number_page}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Review obtained correctly",
"data": {
"reviews": [
{
"id": 1,
"rating": 3,
"comment": "A very good court but poor lighting",
"comment_datetime": "2024-07-03T17:16:40.420006Z",
"user": 1,
"court": 1
},
{
"id": 2,
"rating": 4,
"comment": "Excellent field, well maintained and with a great atmosphere to play",
"comment_datetime": "2024-07-02T19:38:10.617916Z",
"user": 2,
"court": 1
}
]
}
}
GET /api/reviews/list-all?page={number_page}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
page |
int |
Requerido. Numero de página |
GET /api/reviews/list-all?page={number_page}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Review obtained correctly",
"data": {
"reviews": [
{
"id": 1,
"rating": 3,
"comment": "A very good court but poor lighting",
"comment_datetime": "2024-07-03T17:16:40.420006Z",
"user": 1,
"court": 1
},
{
"id": 2,
"rating": 4,
"comment": "Excellent field, well maintained and with a great atmosphere to play",
"comment_datetime": "2024-07-02T19:38:10.617916Z",
"user": 2,
"court": 1
}
]
}
}
DELETE /api/reviews/delete-review/{review_id}
Parámetro | Tipo | Descripción |
---|---|---|
token |
string |
Requerido. Token de autenticación |
review_id |
int |
Requerido. ID de la review |
DELETE /api/reviews/delete-review/{review_id}
Content-Type: application/json
Authorization: Token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTP/1.1 200 Ok
Content-Type: application/json
{
"status": "success",
"message": "Review successfully deleted"
}