Base URL: /shop/
Authentication: Required for most endpoints (JWT / Session)
GET /shop/store-items/Response (200 OK)
[
{
"id": 1,
"name": "Premium Course Access",
"description": "Get full access to premium content",
"price_in_points": 500,
"is_premium_course": true,
"course": 15
},
{
"id": 2,
"name": "Certificate Bundle",
"description": "Get 3 certificates at discounted price",
"price_in_points": 300,
"is_premium_course": false
}
]
POST /shop/store-items/Request Body
{
"name": "New Item",
"description": "Item description",
"price_in_points": 250,
"is_premium_course": true,
"course": 12
}
POST /shop/purchases/Request Body
{
"store_item_id": 1
}
Success Response (201 Created)
{
"id": 5,
"user": 123,
"store_item": 1,
"points_spent": 500,
"purchase_date": "2023-12-15T10:30:45Z"
}
Error Response (400 Bad Request)
{
"error": "Not enough points"
}
Automatic Enrollment: If the purchased item is a premium course, the user is automatically enrolled in the course upon successful purchase.
POST /shop/Countdown/set-countdown/Request Body
{
"target_date": "2023-12-31T23:59:59"
}
Response (200 OK)
{
"message": "Countdown set successfully.",
"target_date": "2023-12-31T23:59:59Z"
}
Error Response (400 Bad Request)
{
"error": "Invalid date format. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS)."
}
GET /shop/Countdown/get-remaining-time/Response (200 OK) - Active Countdown
{
"target_date": "2023-12-31T23:59:59Z",
"remaining_time": "15 days, 3 hours, 25 minutes, 10 seconds"
}
Response (200 OK) - Expired Countdown
{
"message": "The countdown has expired."
}