# Routes

## 🚏 Webstore Routes

This section outlines all HTTP routes supported by the webstore, including the associated template, method, and query parameters for each.

***

### 🏠 Home

**Route:** `GET /`\
**Template:** `index.html`

Displays the main homepage of the webstore.

***

### 🛍 Products

#### 🔎 List Products

**Route:** `GET /products`\
**Template:** `category.html`

| Query Parameter | Type      | Description                                            |
| --------------- | --------- | ------------------------------------------------------ |
| `tags`          | string\[] | Optional. Comma-separated tag slugs to filter products |

***

#### 📄 View Product

**Route:** `GET /products/{product.slug}`\
**Template:** `product.html`

Displays product detail page based on the provided slug.

***

#### 💳 Checkout Product

**Route:** `POST /products/{product.slug}/checkout`

| Query Parameter | Type    | Description                                     |
| --------------- | ------- | ----------------------------------------------- |
| `cart`          | boolean | Optional. Adds to cart if true                  |
| `subscription`  | boolean | Optional. Adds as a subscription                |
| `quantity`      | int     | Optional. Product quantity (default: 1)         |
| `gift_to`       | string  | Optional. Recipient’s platform ID               |
| `gift_platform` | string  | Optional. Gifting platform (default: `"steam"`) |
| `gameserver_id` | string  | Optional. ID of selected gameserver             |

***

### 🛒 Cart

#### 🧾 View Cart

**Route:** `GET /cart`\
**Template:** `cart.html`

***

#### ➕ Add to Cart

**Route:** `POST /cart/add/{product.slug}`

| Query Parameter | Type    | Description                      |
| --------------- | ------- | -------------------------------- |
| `quantity`      | integer | Optional. Defaults to 1          |
| `gameserver_id` | string  | Optional. Selected gameserver ID |

***

#### ✏️ Set Cart Line

**Route:** `POST /cart/set/{product.slug}`

| Query Parameter | Type    | Description                         |
| --------------- | ------- | ----------------------------------- |
| `quantity`      | integer | Optional. New quantity (default: 1) |
| `gameserver_id` | string  | Optional. Selected gameserver ID    |

> **Note:** This route is also used to **remove from cart** by setting quantity to `0`.

***

#### 🗑 Empty Cart

**Route:** `POST /cart/empty`

Clears all items from the customer's cart.

***

#### ✅ Checkout Cart

**Route:** `POST /cart/checkout`

| Query Parameter | Type   | Description                           |
| --------------- | ------ | ------------------------------------- |
| `return_url`    | string | Optional. Redirect URL after checkout |

***

### 👤 Authentication

#### 🔐 Sign In

**Route:** `POST /auth/sign-in`

| Query Parameter | Type   | Description                           |
| --------------- | ------ | ------------------------------------- |
| `return_url`    | string | Optional. URL to redirect after login |

***

#### 🔓 Sign Out

**Route:** `POST /auth/sign-out`

Signs out the currently logged-in user.

***

### 🔁 Subscriptions

#### 📋 View Subscriptions

**Route:** `GET /subscriptions`\
**Template:** `subscriptions.html`

***

#### ❌ Cancel Subscription

**Route:** `POST /subscriptions/{subscription.id}/cancel`

Cancels the specified subscription.

***

### 🎉 Checkout Complete

**Route:** `GET /complete`\
**Template:** `complete.html`

Displays a confirmation message after a successful transaction.

***

### 📜 Legal Pages

| Page             | Route                         |
| ---------------- | ----------------------------- |
| Terms of Service | `GET /legal/terms-of-service` |
| User Agreement   | `GET /legal/user-agreement`   |
| Privacy Policy   | `GET /legal/privacy`          |
