Models
Модели
Modellar
User
Пользователь
Foydalanuvchi
Custom user model with email as username.
Пользовательская модель пользователя с email в качестве имени пользователя.
Emailni foydalanuvchi nomi sifatida ishlatadigan maxsus foydalanuvchi modeli.
class User(AbstractBaseUser, PermissionsMixin): ...
Fields: email, full_name, avatar, is_premium, premium_expires_at, role, is_active, is_staff, created_at, last_login_at.
Поля: email, full_name, avatar, is_premium, premium_expires_at, role, is_active, is_staff, created_at, last_login_at.
Maydonlar: email, full_name, avatar, is_premium, premium_expires_at, role, is_active, is_staff, created_at, last_login_at.
AnonymousSession
Анонимная сессия
Anonim Sessiya
Tracks anonymous users.
Отслеживает анонимных пользователей.
Anonim foydalanuvchilarni kuzatib boradi.
class AnonymousSession(models.Model): ...
Fields: session_token, fingerprint_hash, ip_address, country, city, first_seen_at, last_seen_at, total_visits.
Поля: session_token, fingerprint_hash, ip_address, country, city, first_seen_at, last_seen_at, total_visits.
Maydonlar: session_token, fingerprint_hash, ip_address, country, city, first_seen_at, last_seen_at, total_visits.
Genre
Жанр
Janr
Anime genres.
Жанры аниме.
Anime janrlari.
class Genre(models.Model): ...
Fields: name, name_ru, slug, description, created_at, updated_at.
Поля: name, name_ru, slug, description, created_at, updated_at.
Maydonlar: name, name_ru, slug, description, created_at, updated_at.
Anime
Аниме
Anime
Main anime model.
Основная модель аниме.
Asosiy anime modeli.
class Anime(models.Model): ...
Fields: title, slug, english_title, russian_title, uzbek_title, description, type, status, total_episodes, duration_minutes, release_year, season, poster_url, banner_url, trailer_url, rating, total_views, total_favorites, total_likes, total_comments, is_premium_only, is_published, published_at, genres, created_at, updated_at.
Поля: title, slug, english_title, russian_title, uzbek_title, description, type, status, total_episodes, duration_minutes, release_year, season, poster_url, banner_url, trailer_url, rating, total_views, total_favorites, total_likes, total_comments, is_premium_only, is_published, published_at, genres, created_at, updated_at.
Maydonlar: title, slug, english_title, russian_title, uzbek_title, description, type, status, total_episodes, duration_minutes, release_year, season, poster_url, banner_url, trailer_url, rating, total_views, total_favorites, total_likes, total_comments, is_premium_only, is_published, published_at, genres, created_at, updated_at.
Episode
Эпизод
Epizod
Episodes of anime.
Эпизоды аниме.
Anime epizodlari.
class Episode(models.Model): ...
Fields: anime, episode_number, title, title_ru, slug, description, total_likes, thumbnail_url, duration_seconds, air_date, is_premium_only, total_views, is_published, created_at.
Поля: anime, episode_number, title, title_ru, slug, description, total_likes, thumbnail_url, duration_seconds, air_date, is_premium_only, total_views, is_published, created_at.
Maydonlar: anime, episode_number, title, title_ru, slug, description, total_likes, thumbnail_url, duration_seconds, air_date, is_premium_only, total_views, is_published, created_at.
EpisodeLanguage
Язык эпизода
Epizod Tili
Video tracks in different languages and qualities.
Видео треки на разных языках и качествах.
Turli tillarda va sifatlarda video treklar.
class EpisodeLanguage(models.Model): ...
Fields: episode, language, video_url, video_quality, file_size_mb, is_default, created_at.
Поля: episode, language, video_url, video_quality, file_size_mb, is_default, created_at.
Maydonlar: episode, language, video_url, video_quality, file_size_mb, is_default, created_at.
WatchHistory
История просмотров
Ko'rish Tarixi
Tracks watched episodes.
Отслеживает просмотренные эпизоды.
Ko'rilgan epizodlarni kuzatib boradi.
class WatchHistory(models.Model): ...
Fields: user, anonymous_session, anime, episode, watch_duration_seconds, completed, watched_at, ip_address, device_type, country.
Поля: user, anonymous_session, anime, episode, watch_duration_seconds, completed, watched_at, ip_address, device_type, country.
Maydonlar: user, anonymous_session, anime, episode, watch_duration_seconds, completed, watched_at, ip_address, device_type, country.
Like
Лайк
Layk
Likes/dislikes for anime or episodes.
Лайки/дизлайки для аниме или эпизодов.
Anime yoki epizodlar uchun layk/dizlayk.
class Like(models.Model): ...
Fields: user, anonymous_session, anime, episode, is_like, created_at, updated_at.
Поля: user, anonymous_session, anime, episode, is_like, created_at, updated_at.
Maydonlar: user, anonymous_session, anime, episode, is_like, created_at, updated_at.
Comment
Комментарий
Izoh
Comments on anime or episodes.
Комментарии к аниме или эпизодам.
Anime yoki epizodlarga izohlar.
class Comment(models.Model): ...
Fields: user, anonymous_session, anime, episode, parent, comment, guest_name, is_approved, created_at, updated_at.
Поля: user, anonymous_session, anime, episode, parent, comment, guest_name, is_approved, created_at, updated_at.
Maydonlar: user, anonymous_session, anime, episode, parent, comment, guest_name, is_approved, created_at, updated_at.
Subscription
Подписка
Obuna
User subscriptions.
Подписки пользователей.
Foydalanuvchi obunalari.
class Subscription(models.Model): ...
Fields: user, plan_type, price, currency, status, starts_at, expires_at, auto_renew, created_at.
Поля: user, plan_type, price, currency, status, starts_at, expires_at, auto_renew, created_at.
Maydonlar: user, plan_type, price, currency, status, starts_at, expires_at, auto_renew, created_at.
Payment
Платеж
To'lov
Payment records.
Записи платежей.
To'lov yozuvlari.
class Payment(models.Model): ...
Fields: user, subscription, payment_gateway, transaction_id, amount, currency, status, payment_method, paid_at, created_at.
Поля: user, subscription, payment_gateway, transaction_id, amount, currency, status, payment_method, paid_at, created_at.
Maydonlar: user, subscription, payment_gateway, transaction_id, amount, currency, status, payment_method, paid_at, created_at.
Advertisement
Реклама
Reklama
Ads configuration.
Конфигурация рекламы.
Reklama konfiguratsiyasi.
class Advertisement(models.Model): ...
Fields: title, type, content_url, html_code, duration_seconds, click_url, position, is_active, priority, total_impressions, total_clicks, created_at.
Поля: title, type, content_url, html_code, duration_seconds, click_url, position, is_active, priority, total_impressions, total_clicks, created_at.
Maydonlar: title, type, content_url, html_code, duration_seconds, click_url, position, is_active, priority, total_impressions, total_clicks, created_at.
AdImpression
Просмотр рекламы
Reklama Ko'rish
Tracks ad views and clicks.
Отслеживает просмотры и клики по рекламе.
Reklama ko'rish va bosishlarni kuzatib boradi.
class AdImpression(models.Model): ...
Fields: ad, user, anonymous_session, anime, episode, clicked, viewed_at, ip_address.
Поля: ad, user, anonymous_session, anime, episode, clicked, viewed_at, ip_address.
Maydonlar: ad, user, anonymous_session, anime, episode, clicked, viewed_at, ip_address.
Favorite
Избранное
Sevimli
User favorites.
Избранное пользователя.
Foydalanuvchi sevimlilari.
class Favorite(models.Model): ...
Fields: user, anonymous_session, anime, added_at.
Поля: user, anonymous_session, anime, added_at.
Maydonlar: user, anonymous_session, anime, added_at.
API Endpoints
API Endpoints
API Endpointlari
POST /register/
POST /register/
POST /register/
Register a new user.
Регистрация нового пользователя.
Yangi foydalanuvchini ro'yxatdan o'tkazish.
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"email": "user@example.com",
"password": "password123",
"full_name": "John Doe"
}
Response Example (201 Created):
Пример ответа (201 Created):
Javob Misoli (201 Yaratildi):
{
"success": true,
"data": {
"id": 1,
"email": "user@example.com",
"full_name": "John Doe"
},
"message": "User registered successfully"
}
POST /login/
POST /login/
POST /login/
Login user and get JWT tokens.
Вход пользователя и получение JWT токенов.
Foydalanuvchi kirishi va JWT tokenlarini olish.
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"email": "user@example.com",
"password": "password123"
}
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": {
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"user": {
"id": 1,
"email": "user@example.com"
}
},
"message": "Login successful"
}
GET/PATCH /me/
GET/PATCH /me/
GET/PATCH /me/
Get or update current user profile (authenticated).
Получение или обновление профиля текущего пользователя (аутентифицировано).
Joriy foydalanuvchi profilini olish yoki yangilash (autentifikatsiyalangan).
Request Body Example (PATCH):
Пример тела запроса (PATCH):
So'rov Tanasi Misoli (PATCH):
{
"full_name": "Updated Name"
}
Response Example (GET/200 OK):
Пример ответа (GET/200 OK):
Javob Misoli (GET/200 OK):
{
"success": true,
"data": {
"email": "user@example.com",
"full_name": "John Doe"
},
"message": "Current user info"
}
POST /logout/
POST /logout/
POST /logout/
Logout by blacklisting refresh token (authenticated).
Выход путем добавления refresh токена в черный список (аутентифицировано).
Refresh tokenni qora ro'yxatga qo'shish orqali chiqish (autentifikatsiyalangan).
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"message": "Successfully logged out"
}
GET /animes/
GET /animes/
GET /animes/
List published anime with filters, search, ordering, and pagination.
Список опубликованных аниме с фильтрами, поиском, сортировкой и пагинацией.
Nashr etilgan animelarni filtrlar, qidiruv, tartiblash va sahifalash bilan ro'yxatlash.
Example Query Params: ?type=TV&status=ONGOING&search=title&ordering=-release_year
Пример параметров запроса: ?type=TV&status=ONGOING&search=title&ordering=-release_year
So'rov Parametrlari Misoli: ?type=TV&status=ONGOING&search=title&ordering=-release_year
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": [
{"id": 1, "title": "Anime Title", "slug": "anime-title", ...}
],
"message": "Anime list retrieved",
"meta": {"count": 10, "next": "/api/animes/?page=2", "previous": null}
}
GET /animes/<int:pk>/
GET /animes/<int:pk>/
GET /animes/<int:pk>/
Retrieve details of a specific published anime by ID.
Получение деталей конкретного опубликованного аниме по ID.
Muayyan nashr etilgan animening tafsilotlarini ID bo'yicha olish.
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": {"id": 1, "title": "Anime Title", ...},
"message": "Anime details retrieved"
}
Error Response Example (404 Not Found):
Пример ошибки (404 Not Found):
Xato Javob Misoli (404 Topilmadi):
{
"success": false,
"message": "Anime not found"
}
GET /animes/<str:anime_identifier>/episodes/
GET /animes/<str:anime_identifier>/episodes/
GET /animes/<str:anime_identifier>/episodes/
List episodes for a specific anime (by ID or slug) with filters and pagination.
Список эпизодов для конкретного аниме (по ID или slug) с фильтрами и пагинацией.
Muayyan anime uchun epizodlarni (ID yoki slug bo'yicha) filtrlar va sahifalash bilan ro'yxatlash.
Example Query Params: ?episode_number__gt=5&ordering=air_date
Пример параметров запроса: ?episode_number__gt=5&ordering=air_date
So'rov Parametrlari Misoli: ?episode_number__gt=5&ordering=air_date
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": [
{"id": 1, "episode_number": 1, "title": "Episode 1", ...}
],
"message": "Episodes retrieved",
"meta": {"count": 5, "next": null, "previous": null}
}
GET /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/
GET /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/
GET /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/
Retrieve details of a specific episode (by ID or slug) for an anime.
Получение деталей конкретного эпизода (по ID или slug) для аниме.
Anime uchun muayyan epizod tafsilotlarini (ID yoki slug bo'yicha) olish.
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": {"id": 1, "episode_number": 1, "title": "Episode 1", ...},
"message": "Episode details retrieved"
}
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/watch/
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/watch/
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/watch/
Record watch history for an episode (authenticated or anonymous).
Запись истории просмотра для эпизода (аутентифицировано или анонимно).
Epizod uchun ko'rish tarixini yozib olish (autentifikatsiyalangan yoki anonim).
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"watch_duration_seconds": 300,
"completed": true
}
Response Example (201 Created or 200 OK):
Пример ответа (201 Created или 200 OK):
Javob Misoli (201 Yaratildi yoki 200 OK):
{
"success": true,
"message": "Watch history recorded successfully"
}
GET /genres/
GET /genres/
GET /genres/
List all genres with search, ordering, and pagination.
Список всех жанров с поиском, сортировкой и пагинацией.
Barcha janrlarni qidiruv, tartiblash va sahifalash bilan ro'yxatlash.
Example Query Params: ?search=action&ordering=name
Пример параметров запроса: ?search=action&ordering=name
So'rov Parametrlari Misoli: ?search=action&ordering=name
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": [
{"id": 1, "name": "Action", "slug": "action", ...}
],
"message": "Genres retrieved"
}
GET /genres/<str:identifier>/
GET /genres/<str:identifier>/
GET /genres/<str:identifier>/
Retrieve details of a specific genre (by ID or slug).
Получение деталей конкретного жанра (по ID или slug).
Muayyan janr tafsilotlarini (ID yoki slug bo'yicha) olish.
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": {"id": 1, "name": "Action", ...},
"message": "Genre details retrieved"
}
GET /genres/<str:identifier>/animes/
GET /genres/<str:identifier>/animes/
GET /genres/<str:identifier>/animes/
List anime for a specific genre (by ID or slug) with filters and pagination.
Список аниме для конкретного жанра (по ID или slug) с фильтрами и пагинацией.
Muayyan janr uchun animelarni (ID yoki slug bo'yicha) filtrlar va sahifalash bilan ro'yxatlash.
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": [
{"id": 1, "title": "Action Anime", ...}
],
"message": "Anime list retrieved"
}
POST /animes/<str:anime_identifier>/like/
POST /animes/<str:anime_identifier>/like/
POST /animes/<str:anime_identifier>/like/
Toggle like/dislike for an anime (authenticated or anonymous).
Переключение лайка/дизлайка для аниме (аутентифицировано или анонимно).
Anime uchun layk/dizlaykni o'zgartirish (autentifikatsiyalangan yoki anonim).
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"is_like": true
}
Response Example (201 Created):
Пример ответа (201 Created):
Javob Misoli (201 Yaratildi):
{
"success": true,
"data": {"action": "created", "is_like": true},
"message": "Like added successfully"
}
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/like/
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/like/
POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/like/
Toggle like/dislike for an episode (authenticated or anonymous).
Переключение лайка/дизлайка для эпизода (аутентифицировано или анонимно).
Epizod uchun layk/dizlaykni o'zgartirish (autentifikatsiyalangan yoki anonim).
Request Body Example:
Пример тела запроса:
So'rov Tanasi Misoli:
{
"is_like": false
}
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": {"action": "updated", "is_like": false},
"message": "Like updated successfully"
}
GET/POST /animes/<str:anime_identifier>/comments/
GET/POST /animes/<str:anime_identifier>/comments/
GET/POST /animes/<str:anime_identifier>/comments/
List or create comments for an anime (authenticated or anonymous for POST).
Список или создание комментариев для аниме (аутентифицировано или анонимно для POST).
Anime uchun izohlarni ro'yxatlash yoki yaratish (POST uchun autentifikatsiyalangan yoki anonim).
Request Body Example (POST):
Пример тела запроса (POST):
So'rov Tanasi Misoli (POST):
{
"comment": "Great anime!",
"parent": 1
}
Response Example (GET/200 OK):
Пример ответа (GET/200 OK):
Javob Misoli (GET/200 OK):
{
"success": true,
"data": [
{"id": 1, "comment": "Great anime!", ...}
],
"message": "Comments retrieved"
}
GET/POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/comments/
GET/POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/comments/
GET/POST /animes/<str:anime_identifier>/episodes/<str:episode_identifier>/comments/
List or create comments for an episode (authenticated or anonymous for POST).
Список или создание комментариев для эпизода (аутентифицировано или анонимно для POST).
Epizod uchun izohlarni ro'yxatlash yoki yaratish (POST uchun autentifikatsiyalangan yoki anonim).
Request Body Example (POST):
Пример тела запроса (POST):
So'rov Tanasi Misoli (POST):
{
"comment": "Awesome episode!"
}
Response Example (POST/201 Created):
Пример ответа (POST/201 Created):
Javob Misoli (POST/201 Yaratildi):
{
"success": true,
"data": {"id": 2, "comment": "Awesome episode!", ...},
"message": "Comment posted successfully"
}
PUT/DELETE /comments/<int:comment_id>/
PUT/DELETE /comments/<int:comment_id>/
PUT/DELETE /comments/<int:comment_id>/
Update or delete a comment (authenticated or anonymous, owner only).
Обновление или удаление комментария (аутентифицировано или анонимно, только владелец).
Izohni yangilash yoki o'chirish (autentifikatsiyalangan yoki anonim, faqat egasi).
Request Body Example (PUT):
Пример тела запроса (PUT):
So'rov Tanasi Misoli (PUT):
{
"comment": "Updated comment"
}
Response Example (PUT/200 OK):
Пример ответа (PUT/200 OK):
Javob Misoli (PUT/200 OK):
{
"success": true,
"data": {"id": 1, "comment": "Updated comment", ...},
"message": "Comment updated successfully"
}
Response Example (DELETE/200 OK):
Пример ответа (DELETE/200 OK):
Javob Misoli (DELETE/200 OK):
{
"success": true,
"message": "Comment deleted successfully"
}
POST/DELETE /animes/<str:anime_identifier>/favorite/
POST/DELETE /animes/<str:anime_identifier>/favorite/
POST/DELETE /animes/<str:anime_identifier>/favorite/
Add or remove anime from favorites (authenticated or anonymous).
Добавление или удаление аниме из избранного (аутентифицировано или анонимно).
Animeni sevimlilarga qo'shish yoki olib tashlash (autentifikatsiyalangan yoki anonim).
Response Example (POST/201 Created):
Пример ответа (POST/201 Created):
Javob Misoli (POST/201 Yaratildi):
{
"success": true,
"message": "Anime added to favorites"
}
Response Example (DELETE/200 OK):
Пример ответа (DELETE/200 OK):
Javob Misoli (DELETE/200 OK):
{
"success": true,
"message": "Anime removed from favorites"
}
GET /favorites/
GET /favorites/
GET /favorites/
List user's or anonymous session's favorite anime with pagination.
Список избранных аниме пользователя или анонимной сессии с пагинацией.
Foydalanuvchi yoki anonim sessiyaning sevimli animelarini sahifalash bilan ro'yxatlash.
Response Example (200 OK):
Пример ответа (200 OK):
Javob Misoli (200 OK):
{
"success": true,
"data": [
{"id": 1, "title": "Favorite Anime", ...}
],
"message": "Favorite anime retrieved"
}