Daily Activities (Kunlik Mashg'ulotlar)
Ushbu bo'limda bolaning yoshiga va rivojlanish darajasiga mos ravishda tavsiya etiladigan kunlik mashg'ulotlar (ertaklar, o'yinlar, mashqlar) tushuntiriladi.
Mashg'ulotlar Oqimi (Flow)
- Dashboard/Plan: Bugungi kun uchun tavsiya etilgan mashg'ulotlar ro'yxatini olish.
- Kategoriyalar: Mashg'ulotlarni turli yo'nalishlar (Nutq, Motorika va h.k.) bo'yicha filterlash.
- Tafsilotlar (Details): Mashg'ulot mazmunini (qadamlar yoki o'yin ma'lumotlari) yuklash.
- Progress: Mashg'ulotni boshlash va yakunlash holatlarini yuborish.
1. Kunlik reja (Dashboard)
Bolaning bugungi kunlik mashg'ulotlar rejasini olish.
- URL:
/client/activities/dashboard - Metod:
GET - Headers:
Authorization: Bearer {access_token}
Response
[
{
"id": "uuid-activity-1",
"title": "Ona tili darsi",
"description": "Yangi so'zlarni o'rganamiz",
"durationMinutes": 15,
"type": "instructional",
"difficulty": "easy",
"status": "not_started"
}
]
2. Mashg'ulot toifalari
Mavjud barcha mashg'ulot kategoriyalari ro'yxatini olish.
- URL:
/client/activities/categories - Metod:
GET
Response
[
{
"id": "uuid-cat-1",
"slug": "speech-development",
"title": "Nutq rivojlanishi",
"icon": "headset"
}
]
3. Barcha mashg'ulotlar (Filtr bilan)
Tizimdagi barcha mashg'ulotlar ro'yxatini olish. Kategoriyalar bo'yicha filterlash imkoniyati bilan.
- URL:
/client/activities/all - Metod:
GET - Query Params:
categoryId(Optional): Ma'lum bir toifadagi mashg'ulotlarni ko'rish uchun.
Response
[
{
"id": "uuid-1",
"title": "...",
"categoryTitle": "Nutq rivojlanishi",
"status": "not_started"
}
]
4. Mashg'ulot tafsilotlari (Content va Interfeyslar)
Mashg'ulotlarni to'g'ri render qilish uchun quyidagi TypeScript interfeyslaridan foydalanish tavsiya etiladi.
- URL:
/client/activities/details/{activityId} - Metod:
GET - Query Params:
activityId(Required): Mashg'ulot ID si.
Umumiy Interfeyslar
export type ActivityDifficulty = 'easy' | 'medium' | 'hard';
export type ActivityType = 'instructional' | 'interactive';
export interface ActivityDetails {
id: string;
title: string;
description: string;
durationMinutes: number;
type: ActivityType;
difficulty: ActivityDifficulty;
content: InstructionalContent | InteractiveContent;
status: 'not_started' | 'started' | 'completed';
}
A. Instructional (Ko'rsatmali mashg'ulot)
Ushbu turdagi mashg'ulotlar odatda oddiy matnli qadamlar, rasmlar va audiolardan iborat bo'ladi.
Interfeys:
export interface InstructionalContent {
steps: string[]; // Bajarilishi kerak bo'lgan qadamlar
checklist?: string[]; // Tekshirish uchun punktlar
hasTimer?: boolean; // Taymer ko'rsatish kerakmi?
image?: string; // Asosiy rasm (Asset ID)
audio?: string; // Ovozli yo'riqnoma (Asset ID)
}
JSON Sample:
{
"steps": ["Mashqni boshlang", "Qo'lingizni ko'taring"],
"checklist": ["Suv ichildimi?", "Tayyormisiz?"],
"image": "uuid-asset-id"
}
Frontend uchun tavsiya:
stepsmassiviniv-foryokimap()orqali tartiblangan ro'yxat (ol) ko'rinishida chiqaring.- Har bir qadam yonida "Bajarildi" chekboksini qo'shish foydali bo'ladi.
B. Interactive (O'yin/Test)
Ushbu turdagi mashg'ulotlar interaktiv o'yin yoki test ko'rinishida bo'ladi.
Interfeys:
export type InteractiveGameType = 'quiz' | 'true_false' | 'matching' | 'sorting';
export interface InteractiveContent {
gameType: InteractiveGameType;
rounds: InteractiveRound[];
}
export interface InteractiveRound {
question: string; // Savol matni
options: GameOption[]; // Javob variantlari
answer: string | number; // To'g'ri javobning 'value'si
hint?: string; // Yordamchi matn yoki rasm izohi
media?: string; // Rasm yoki video (Asset ID)
}
export interface GameOption {
label: string; // Variant nomi (masalan: "Olma")
value: string | number; // Variant qiymati (masalan: "apple")
image?: string; // Variant uchun rasm (Asset ID)
}
JSON Sample:
{
"gameType": "quiz",
"rounds": [
{
"question": "Qaysi meva qizil rangda?",
"options": [
{ "label": "Olma", "value": "apple", "image": "uuid-asset" },
{ "label": "Banan", "value": "banana" }
],
"answer": "apple"
}
]
}
Frontend uchun tavsiya:
gameTypega qarab turli xil komponentlarni (QuizComponent, MatchComponent) yuklang.- Har bir
roundyakunlangandan keyin foydalanuvchiga to'g'ri/noto'g'ri ekanligini bildiring. - Barcha
roundstugatilgandan keyincompleteAPI orqali natijani yuboring.
[!TIP] Media Assetlarni yuklash:
contentichidagiimageyokiaudiokabi ID-larni frontendda ko'rsatish uchun quyidagi endpointdan foydalaning:
GET /api/client/activities/files/{fileId}Misol:
<img src="https://api.kidapp.uz/api/client/activities/files/uuid-asset-id" />
5. Progress (Bajarilish holati)
Mashg'ulot boshlanganda va tugaganda tizimga xabar berish.
Mashg'ulotni boshlash
- URL:
/client/activities/start/{activityId} - Metod:
POST
Mashg'ulotni yakunlash
- URL:
/client/activities/complete/{activityId} - Metod:
POST
Request Body (Ixtiyoriy):
{
"score": 100,
"timeSpentSeconds": 120
}
Mashg'ulotlar uchun Enumlar
- ActivityType: Instructional vs Interactive
- Difficulty: Easy, Medium, Hard
- InteractiveGameType: Quiz, Matching...
- ProgressStatus: Started, Completed
