docs: add full documentation for all functions in tienda/views.py

Agent-Logs-Url: https://github.com/dsaub/proyecto-final/sessions/49df17c8-213a-4e23-adfe-465a0104f6a3

Co-authored-by: dsaub <54474838+dsaub@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-09 10:35:28 +00:00
committed by GitHub
parent 47ea00c822
commit ed92991872
66 changed files with 2580 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# `create_paypal_payment`
**Archivo:** `tienda/views.py`
**URL:** `/tienda/paypal/crear/`
**Tipo:** Vista privada (requiere autenticación)
**Método HTTP:** Solo `POST`
**Decorador:** `@login_required`
## Descripción
Crea un pago en PayPal y devuelve la URL de aprobación al frontend para redirigir al usuario. Sigue un flujo similar a [`create_checkout_session`](./create_checkout_session.md) pero usando la SDK de PayPal REST.
El proceso es:
1. Obtiene y valida la dirección de envío seleccionada.
2. Verifica el carrito y el stock.
3. Crea una reserva de stock atómica.
4. Configura PayPal SDK con las credenciales del entorno.
5. Construye la lista de items con precios IVA incluido.
6. Crea el pago en PayPal y guarda el `payment_id` en la sesión.
7. Devuelve la URL de aprobación de PayPal.
## Firma
```python
def create_paypal_payment(request: HttpRequest):
```
## Parámetros
| Nombre | Tipo | Descripción |
|-----------|---------------|-----------------------|
| `request` | `HttpRequest` | Petición HTTP de Django. |
## Cuerpo de la petición (JSON o form-data)
| Campo | Descripción |
|------------------------|-------------------------------------------|
| `shipping_address_id` | ID de la dirección de envío seleccionada. |
## Respuesta exitosa
```json
{ "redirect": "https://www.paypal.com/checkoutnow?token=..." }
```
## Respuestas de error
| Código | Descripción |
|--------|----------------------------------------------------|
| 400 | Carrito vacío, stock insuficiente, sin dirección, error de PayPal. |
| 405 | Método no permitido. |
| 500 | SDK de PayPal no instalado u otro error interno. |
> [!NOTE]
> Requiere que `paypalrestsdk` esté instalado y las variables `PAYPAL_MODE`, `PAYPAL_CLIENT_ID` y `PAYPAL_CLIENT_SECRET` estén configuradas en `settings.py`.