32 changed files with 2032 additions and 144 deletions
-
365apps/hadis/docs.py
-
16apps/hadis/migrations/0014_remove_hadistransmitter_narrator_layer.py
-
26apps/hadis/migrations/0015_hadistransmitter_narrator_layer.py
-
19apps/hadis/migrations/0016_remove_hadistransmitter_narrator_layer_and_more.py
-
64apps/hadis/migrations/0017_narratorlayer_hadistransmitter_narrator_layer.py
-
16apps/hadis/migrations/0018_remove_hadistransmitter_status.py
-
27apps/hadis/migrations/0019_hadistransmitter_status.py
-
17apps/hadis/migrations/0020_hadisreference_description.py
-
20apps/hadis/migrations/0021_remove_hadisreference_book_reference_and_more.py
-
30apps/hadis/migrations/0022_hadisreference_book_reference_and_more.py
-
29apps/hadis/migrations/0023_remove_hadisreference_book_reference_and_more.py
-
16apps/hadis/migrations/0024_remove_hadisreference_book.py
-
25apps/hadis/migrations/0025_hadisreference_book_reference.py
-
16apps/hadis/migrations/0026_remove_hadisreference_book_reference.py
-
25apps/hadis/migrations/0027_hadisreference_book_reference.py
-
17apps/hadis/migrations/0028_hadistransmitter_description.py
-
21apps/hadis/migrations/0029_remove_hadistransmitter_description_and_more.py
-
16apps/hadis/migrations/0030_remove_hadistransmitter_is_gap.py
-
17apps/hadis/migrations/0031_hadistransmitter_is_gap.py
-
21apps/hadis/migrations/0032_remove_hadis_a_hadis_description.py
-
57apps/hadis/migrations/0033_hadiscorrection.py
-
25apps/hadis/models/hadis.py
-
3apps/hadis/models/transmitter.py
-
216apps/hadis/serializers/hadis.py
-
73apps/hadis/serializers/reference.py
-
12apps/hadis/urls.py
-
128apps/hadis/views/category.py
-
18apps/hadis/views/hadis.py
-
38apps/hadis/views/reference.py
-
38apps/hadis/views/transmitter.py
-
635docs/SyncHadis.md
-
130docs/hadisdetail.md
@ -0,0 +1,16 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 08:55 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0013_hadis_title_narrator"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="narrator_layer", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,26 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 08:56 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0014_remove_hadistransmitter_narrator_layer"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="narrator_layer", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
help_text="The layer/class (Tabaqah) this narrator belongs to", |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="transmitters", |
||||
|
to="hadis.narratorlayer", |
||||
|
verbose_name="narrator layer", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,19 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 08:57 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0015_hadistransmitter_narrator_layer"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="narrator_layer", |
||||
|
), |
||||
|
migrations.DeleteModel( |
||||
|
name="NarratorLayer", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,64 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 08:58 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0016_remove_hadistransmitter_narrator_layer_and_more"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name="NarratorLayer", |
||||
|
fields=[ |
||||
|
( |
||||
|
"id", |
||||
|
models.BigAutoField( |
||||
|
auto_created=True, |
||||
|
primary_key=True, |
||||
|
serialize=False, |
||||
|
verbose_name="ID", |
||||
|
), |
||||
|
), |
||||
|
("name", models.CharField(max_length=255, verbose_name="name")), |
||||
|
( |
||||
|
"number", |
||||
|
models.PositiveIntegerField( |
||||
|
unique=True, verbose_name="layer number" |
||||
|
), |
||||
|
), |
||||
|
( |
||||
|
"description", |
||||
|
models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
( |
||||
|
"created_at", |
||||
|
models.DateTimeField(auto_now_add=True, verbose_name="created at"), |
||||
|
), |
||||
|
( |
||||
|
"updated_at", |
||||
|
models.DateTimeField(auto_now=True, verbose_name="updated at"), |
||||
|
), |
||||
|
], |
||||
|
options={ |
||||
|
"verbose_name": "Narrator Layer", |
||||
|
"verbose_name_plural": "Narrator Layers", |
||||
|
"ordering": ["number"], |
||||
|
}, |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="narrator_layer", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
help_text="The layer/class (Tabaqah) this narrator belongs to", |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="transmitters", |
||||
|
to="hadis.narratorlayer", |
||||
|
verbose_name="narrator layer", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,16 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 09:02 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0017_narratorlayer_hadistransmitter_narrator_layer"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="status", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,27 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 09:03 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0018_remove_hadistransmitter_status"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="status", |
||||
|
field=models.CharField( |
||||
|
choices=[ |
||||
|
("reliable", "Reliable"), |
||||
|
("weak", "Weak"), |
||||
|
("unknown", "Unknown"), |
||||
|
], |
||||
|
default="unknown", |
||||
|
help_text="Reliability status of the narrator", |
||||
|
max_length=20, |
||||
|
verbose_name="reliability status", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,17 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 09:53 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0019_hadistransmitter_status"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="description", |
||||
|
field=models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,20 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 09:55 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0020_hadisreference_description"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
), |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadisreference", |
||||
|
name="description", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,30 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 09:56 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0021_remove_hadisreference_book_reference_and_more"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="hadis_references", |
||||
|
to="hadis.bookreference", |
||||
|
verbose_name="book reference", |
||||
|
), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="description", |
||||
|
field=models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,29 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:00 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0022_hadisreference_book_reference_and_more"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="book", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="hadis_references", |
||||
|
to="hadis.bookreference", |
||||
|
verbose_name="book reference", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,16 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:01 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0023_remove_hadisreference_book_reference_and_more"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadisreference", |
||||
|
name="book", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,25 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:02 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0024_remove_hadisreference_book"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="hadis_references", |
||||
|
to="hadis.bookreference", |
||||
|
verbose_name="book reference", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,16 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:03 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0025_hadisreference_book_reference"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,25 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:05 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0026_remove_hadisreference_book_reference"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadisreference", |
||||
|
name="book_reference", |
||||
|
field=models.ForeignKey( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
on_delete=django.db.models.deletion.SET_NULL, |
||||
|
related_name="hadis_references", |
||||
|
to="hadis.bookreference", |
||||
|
verbose_name="book reference", |
||||
|
), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,17 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:19 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0027_hadisreference_book_reference"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="description", |
||||
|
field=models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,21 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:39 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0028_hadistransmitter_description"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="description", |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="is_gap", |
||||
|
field=models.BooleanField(default=False, verbose_name="is gap"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,16 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:39 |
||||
|
|
||||
|
from django.db import migrations |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0029_remove_hadistransmitter_description_and_more"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="is_gap", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,17 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:40 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0030_remove_hadistransmitter_is_gap"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name="hadistransmitter", |
||||
|
name="is_gap", |
||||
|
field=models.BooleanField(default=False, verbose_name="is gap"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,21 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 10:45 |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0031_hadistransmitter_is_gap"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.RemoveField( |
||||
|
model_name="hadis", |
||||
|
name="a", |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name="hadis", |
||||
|
name="description", |
||||
|
field=models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,57 @@ |
|||||
|
# Generated by Django 5.2.9 on 2025-12-13 11:39 |
||||
|
|
||||
|
import django.db.models.deletion |
||||
|
from django.db import migrations, models |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
dependencies = [ |
||||
|
("hadis", "0032_remove_hadis_a_hadis_description"), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name="HadisCorrection", |
||||
|
fields=[ |
||||
|
( |
||||
|
"id", |
||||
|
models.BigAutoField( |
||||
|
auto_created=True, |
||||
|
primary_key=True, |
||||
|
serialize=False, |
||||
|
verbose_name="ID", |
||||
|
), |
||||
|
), |
||||
|
("title", models.CharField(max_length=255, verbose_name="title")), |
||||
|
( |
||||
|
"description", |
||||
|
models.TextField(blank=True, null=True, verbose_name="description"), |
||||
|
), |
||||
|
( |
||||
|
"translation", |
||||
|
models.JSONField(default=list, verbose_name="translation"), |
||||
|
), |
||||
|
( |
||||
|
"created_at", |
||||
|
models.DateTimeField(auto_now_add=True, verbose_name="created at"), |
||||
|
), |
||||
|
( |
||||
|
"updated_at", |
||||
|
models.DateTimeField(auto_now=True, verbose_name="updated at"), |
||||
|
), |
||||
|
( |
||||
|
"hadis", |
||||
|
models.ForeignKey( |
||||
|
on_delete=django.db.models.deletion.CASCADE, |
||||
|
to="hadis.hadis", |
||||
|
verbose_name="hadis correction", |
||||
|
), |
||||
|
), |
||||
|
], |
||||
|
options={ |
||||
|
"verbose_name": "Hadis Correction", |
||||
|
"verbose_name_plural": "Hadis Corrections", |
||||
|
"ordering": ("-created_at",), |
||||
|
}, |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,635 @@ |
|||||
|
# Hadis Sync API Endpoints Documentation |
||||
|
|
||||
|
This document provides comprehensive examples of all sync endpoints in the Hadis API. These endpoints are designed for offline mobile applications and return complete datasets in optimized formats. |
||||
|
|
||||
|
## Overview |
||||
|
|
||||
|
The sync endpoints provide complete data synchronization for offline use. They return all data at once (no pagination) and are optimized with `select_related` and `prefetch_related` for performance. |
||||
|
|
||||
|
## Base URL |
||||
|
``` |
||||
|
https://api.example.com/api/hadis/ |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 1. Sync Sects |
||||
|
**Endpoint:** `GET /sync/sects/` |
||||
|
**Purpose:** Get all active sects grouped by sect type (Shia/Sunni) |
||||
|
|
||||
|
### Response Structure |
||||
|
```json |
||||
|
{ |
||||
|
"shia": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"title": "Shia Hadith Collections", |
||||
|
"description": "Primary collections of Shia hadith", |
||||
|
"source_types": ["quran", "hadith"] |
||||
|
} |
||||
|
], |
||||
|
"sunni": [ |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"title": "Sunni Hadith Collections", |
||||
|
"description": "Primary collections of Sunni hadith", |
||||
|
"source_types": ["hadith"] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 2. Sync Categories Tree |
||||
|
**Endpoint:** `GET /sync/categories/tree/` |
||||
|
**Purpose:** Get complete hierarchical category tree grouped by sect type with enhanced child information |
||||
|
|
||||
|
### Response Structure |
||||
|
```json |
||||
|
{ |
||||
|
"count": 12, |
||||
|
"results": { |
||||
|
"shia": { |
||||
|
"sects": { |
||||
|
"1": { |
||||
|
"id": 1, |
||||
|
"sect_type": "shia", |
||||
|
"title": "Shia Hadith Collections", |
||||
|
"description": "Collections of Shia hadith", |
||||
|
"order": 1 |
||||
|
} |
||||
|
}, |
||||
|
"categories": { |
||||
|
"quran": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"name": "Tafsir", |
||||
|
"hadis_count": 150, |
||||
|
"has_hadis": false, |
||||
|
"order": 1, |
||||
|
"xmind_file": "http://example.com/media/xmind/tafsir.xmind", |
||||
|
"has_xmind_file": true, |
||||
|
"children": [ |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"name": "Surah Al-Fatiha", |
||||
|
"hadis_count": 25, |
||||
|
"has_hadis": true, |
||||
|
"order": 1, |
||||
|
"father_category": { |
||||
|
"id": 1, |
||||
|
"name": "Tafsir", |
||||
|
"sect_id": 1, |
||||
|
"sect_type": "shia", |
||||
|
"source_type": "quran" |
||||
|
}, |
||||
|
"hadis_details": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"title": "The Opening", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "Actions are but by intention...", |
||||
|
"translation": "Actions are but by intention...", |
||||
|
"share_link": "http://example.com/hadis/1" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"title": "Prayer Times", |
||||
|
"title_narrator": "From Abdullah ibn Masud", |
||||
|
"text": "The five daily prayers...", |
||||
|
"translation": "The five daily prayers...", |
||||
|
"share_link": "http://example.com/hadis/2" |
||||
|
} |
||||
|
], |
||||
|
"children": [] |
||||
|
}, |
||||
|
{ |
||||
|
"id": 3, |
||||
|
"name": "Surah Al-Baqarah", |
||||
|
"hadis_count": 125, |
||||
|
"has_hadis": false, |
||||
|
"order": 2, |
||||
|
"father_category": { |
||||
|
"id": 1, |
||||
|
"name": "Tafsir", |
||||
|
"sect_id": 1, |
||||
|
"sect_type": "shia", |
||||
|
"source_type": "quran" |
||||
|
}, |
||||
|
"children": [ |
||||
|
{ |
||||
|
"id": 4, |
||||
|
"name": "Verses 1-50", |
||||
|
"hadis_count": 75, |
||||
|
"has_hadis": true, |
||||
|
"father_category": { |
||||
|
"id": 3, |
||||
|
"name": "Surah Al-Baqarah", |
||||
|
"sect_id": 1, |
||||
|
"sect_type": "shia", |
||||
|
"source_type": "quran" |
||||
|
}, |
||||
|
"hadis_details": [ |
||||
|
{ |
||||
|
"id": 5, |
||||
|
"title": "About Prayer", |
||||
|
"title_narrator": "From Ali ibn Abi Talib", |
||||
|
"text": "Prayer is the pillar of religion...", |
||||
|
"translation": "Prayer is the pillar of religion...", |
||||
|
"share_link": "http://example.com/hadis/5" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
], |
||||
|
"hadith": [] |
||||
|
} |
||||
|
}, |
||||
|
"sunni": { |
||||
|
"sects": { |
||||
|
"2": { |
||||
|
"id": 2, |
||||
|
"sect_type": "sunni", |
||||
|
"title": "Sunni Hadith Collections", |
||||
|
"description": "Collections of Sunni hadith", |
||||
|
"order": 2 |
||||
|
} |
||||
|
}, |
||||
|
"categories": { |
||||
|
"hadith": [ |
||||
|
{ |
||||
|
"id": 10, |
||||
|
"name": "Sahih al-Bukhari", |
||||
|
"hadis_count": 2500, |
||||
|
"has_hadis": true, |
||||
|
"hadis_details": [ |
||||
|
{ |
||||
|
"id": 100, |
||||
|
"title": "The Beginning of Revelation", |
||||
|
"title_narrator": "From Aisha", |
||||
|
"text": "The first revelation came to Prophet Muhammad...", |
||||
|
"translation": "The first revelation came to Prophet Muhammad...", |
||||
|
"share_link": "http://example.com/hadis/100" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 101, |
||||
|
"title": "Prayer in the Mosque", |
||||
|
"title_narrator": "From Umar ibn Khattab", |
||||
|
"text": "The reward of prayer in congregation...", |
||||
|
"translation": "The reward of prayer in congregation...", |
||||
|
"share_link": "http://example.com/hadis/101" |
||||
|
} |
||||
|
], |
||||
|
"children": [] |
||||
|
}, |
||||
|
{ |
||||
|
"id": 11, |
||||
|
"name": "Sahih Muslim", |
||||
|
"hadis_count": 2200, |
||||
|
"has_hadis": false, |
||||
|
"children": [ |
||||
|
{ |
||||
|
"id": 12, |
||||
|
"name": "Book of Faith", |
||||
|
"hadis_count": 150, |
||||
|
"has_hadis": true, |
||||
|
"father_category": { |
||||
|
"id": 11, |
||||
|
"name": "Sahih Muslim", |
||||
|
"sect_id": 2, |
||||
|
"sect_type": "sunni", |
||||
|
"source_type": "hadith" |
||||
|
}, |
||||
|
"hadis_details": [ |
||||
|
{ |
||||
|
"id": 200, |
||||
|
"title": "Faith and Actions", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "Faith consists of more than sixty branches...", |
||||
|
"translation": "Faith consists of more than sixty branches...", |
||||
|
"share_link": "http://example.com/hadis/200" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 3. Sync Hadis |
||||
|
**Endpoint:** `GET /sync/hadis/` |
||||
|
**Purpose:** Get all hadis data for offline synchronization |
||||
|
|
||||
|
### Response Structure |
||||
|
```json |
||||
|
{ |
||||
|
"count": 1500, |
||||
|
"results": { |
||||
|
"1": { |
||||
|
"id": 1, |
||||
|
"number": 1, |
||||
|
"category_id": 2, |
||||
|
"title": "The Opening", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "Actions are but by intention...", |
||||
|
"description": "This hadith emphasizes the importance of intention in all actions...", |
||||
|
"translations": { |
||||
|
"en": "Actions are but by intention...", |
||||
|
"ar": "إنما الأعمال بالنيات...", |
||||
|
"fa": "اعمال به نیت است..." |
||||
|
}, |
||||
|
"explanation": "This hadith emphasizes the importance of intention in all actions...", |
||||
|
"address": "Sahih al-Bukhari, Book of Revelation", |
||||
|
"hadis_status": { |
||||
|
"id": 1, |
||||
|
"title": "Sahih", |
||||
|
"color": "green" |
||||
|
}, |
||||
|
"hadis_status_text": "Authentic", |
||||
|
"share_link": "http://example.com/hadis/1", |
||||
|
"tags": [ |
||||
|
{"id": 1, "title": "Intention"}, |
||||
|
{"id": 2, "title": "Actions"} |
||||
|
], |
||||
|
"links": { |
||||
|
"audio": "http://example.com/audio/hadis1.mp3", |
||||
|
"video": "http://example.com/video/hadis1.mp4" |
||||
|
}, |
||||
|
"transmitters": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"order": 1, |
||||
|
"is_gap": false, |
||||
|
"narrator_layer": "sahaba", |
||||
|
"transmitter": { |
||||
|
"id": 1, |
||||
|
"full_name": "Abu Hurairah", |
||||
|
"birth_year_hijri": 18, |
||||
|
"death_year_hijri": 59, |
||||
|
"madhhab": "sunni", |
||||
|
"description": "One of the most prolific narrators of hadith", |
||||
|
"reliability": "very_reliable" |
||||
|
} |
||||
|
} |
||||
|
], |
||||
|
"references": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"title": "Sahih al-Bukhari", |
||||
|
"images": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"image": "http://example.com/media/books/bukhari_cover.jpg", |
||||
|
"order": 1, |
||||
|
"description": "Front cover of Sahih al-Bukhari" |
||||
|
} |
||||
|
], |
||||
|
"authors": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"name": "Muhammad ibn Isma'il al-Bukhari" |
||||
|
} |
||||
|
], |
||||
|
"description": "The most authentic collection of hadith compiled by Imam Bukhari" |
||||
|
} |
||||
|
], |
||||
|
"corrections": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"title": "Translation Correction", |
||||
|
"description": "Corrected translation for better accuracy", |
||||
|
"translation": { |
||||
|
"en": "Actions are judged by intentions...", |
||||
|
"ar": "إنما الأعمال بالنيات...", |
||||
|
"fa": "اعمال به نیت ها قضاوت می شود..." |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"2": { |
||||
|
"id": 2, |
||||
|
"number": 2, |
||||
|
"category_id": 3, |
||||
|
"title": "Five Pillars of Islam", |
||||
|
"title_narrator": "From Abdullah ibn Umar", |
||||
|
"text": "Islam is built on five pillars...", |
||||
|
"translations": { |
||||
|
"en": "Islam is built on five pillars...", |
||||
|
"ar": "بني الإسلام على خمس...", |
||||
|
"fa": "اسلام بر پنج پایه استوار است..." |
||||
|
}, |
||||
|
"explanation": "This hadith outlines the fundamental practices of Islam...", |
||||
|
"address": "Sahih al-Bukhari, Book of Faith", |
||||
|
"hadis_status": { |
||||
|
"id": 1, |
||||
|
"title": "Sahih", |
||||
|
"color": "green" |
||||
|
}, |
||||
|
"hadis_status_text": "Authentic", |
||||
|
"share_link": "http://example.com/hadis/2", |
||||
|
"tags": [ |
||||
|
{"id": 3, "title": "Pillars of Islam"}, |
||||
|
{"id": 4, "title": "Faith"} |
||||
|
], |
||||
|
"links": { |
||||
|
"audio": "http://example.com/audio/hadis2.mp3" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 4. Sync Narrators |
||||
|
**Endpoint:** `GET /sync/narrators/` |
||||
|
**Purpose:** Get all transmitter (narrator) data with biographical information and scholarly opinions |
||||
|
|
||||
|
### Response Structure |
||||
|
```json |
||||
|
{ |
||||
|
"count": 200, |
||||
|
"results": { |
||||
|
"1": { |
||||
|
"id": 1, |
||||
|
"full_name": "Abu Daud Sulaiman ibn al-Ash'ath al-Azdi al-Sijistani", |
||||
|
"biographical": { |
||||
|
"personal_info": { |
||||
|
"full_name": "Abu Daud Sulaiman ibn al-Ash'ath al-Azdi al-Sijistani", |
||||
|
"kunya": "Abu Daud", |
||||
|
"known_as": "Imam Abu Daud", |
||||
|
"nickname": "Al-Sijistani" |
||||
|
}, |
||||
|
"dates": { |
||||
|
"birth_year_hijri": 202, |
||||
|
"death_year_hijri": 275, |
||||
|
"age_at_death": 73 |
||||
|
}, |
||||
|
"locations": { |
||||
|
"origin": "Sijistan (modern Sistan)", |
||||
|
"lived_in": "Basra, Baghdad", |
||||
|
"died_in": "Basra" |
||||
|
}, |
||||
|
"religious_profile": { |
||||
|
"reliability": "very_reliable", |
||||
|
"madhhab": "shafii", |
||||
|
"in_sahih_muslim": true, |
||||
|
"in_sahih_bukhari": false |
||||
|
}, |
||||
|
"description": "One of the six canonical hadith collectors. Known for his compilation 'Sunan Abu Daud'.", |
||||
|
"thumbnail": "http://example.com/media/transmitters/abu_daud.jpg" |
||||
|
}, |
||||
|
"scholars_opinions": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"scholar_name": "Imam al-Nawawi", |
||||
|
"opinion_text": "Abu Daud is reliable and trustworthy in his transmissions. His collection is one of the six authentic books.", |
||||
|
"status": "confirmed", |
||||
|
"created_at": "2024-01-15T10:30:00Z", |
||||
|
"updated_at": "2024-01-15T10:30:00Z" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"scholar_name": "Ibn Kathir", |
||||
|
"opinion_text": "Abu Daud was meticulous in his research and only included authentic hadith in his collection.", |
||||
|
"status": "confirmed", |
||||
|
"created_at": "2024-01-16T14:20:00Z", |
||||
|
"updated_at": "2024-01-16T14:20:00Z" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"2": { |
||||
|
"id": 2, |
||||
|
"full_name": "Muhammad ibn Isma'il al-Bukhari", |
||||
|
"biographical": { |
||||
|
"personal_info": { |
||||
|
"full_name": "Muhammad ibn Isma'il al-Bukhari", |
||||
|
"kunya": "Abu Abdullah", |
||||
|
"known_as": "Imam al-Bukhari", |
||||
|
"nickname": "The Collector" |
||||
|
}, |
||||
|
"dates": { |
||||
|
"birth_year_hijri": 194, |
||||
|
"death_year_hijri": 256, |
||||
|
"age_at_death": 62 |
||||
|
}, |
||||
|
"locations": { |
||||
|
"origin": "Bukhara (modern Uzbekistan)", |
||||
|
"lived_in": "Bukhara, Nishapur, Baghdad", |
||||
|
"died_in": "Khartank, near Bukhara" |
||||
|
}, |
||||
|
"religious_profile": { |
||||
|
"reliability": "very_reliable", |
||||
|
"madhhab": "hanafi", |
||||
|
"in_sahih_muslim": true, |
||||
|
"in_sahih_bukhari": true |
||||
|
}, |
||||
|
"description": "The compiler of Sahih al-Bukhari, considered the most authentic hadith collection by Muslims.", |
||||
|
"thumbnail": "http://example.com/media/transmitters/bukhari.jpg" |
||||
|
}, |
||||
|
"scholars_opinions": [ |
||||
|
{ |
||||
|
"id": 3, |
||||
|
"scholar_name": "Imam Muslim", |
||||
|
"opinion_text": "Al-Bukhari is the most knowledgeable person regarding the conditions of narrators and the defects of hadith.", |
||||
|
"status": "confirmed", |
||||
|
"created_at": "2024-01-17T09:15:00Z", |
||||
|
"updated_at": "2024-01-17T09:15:00Z" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 4, |
||||
|
"scholar_name": "Ibn Hajar al-Asqalani", |
||||
|
"opinion_text": "The hadith of al-Bukhari are the most authentic after the Quran.", |
||||
|
"status": "confirmed", |
||||
|
"created_at": "2024-01-18T11:45:00Z", |
||||
|
"updated_at": "2024-01-18T11:45:00Z" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 5. Sync References |
||||
|
**Endpoint:** `GET /sync/references/` |
||||
|
**Purpose:** Get all book reference data with basic information, detailed publication info, and related hadises |
||||
|
|
||||
|
### Response Structure |
||||
|
```json |
||||
|
{ |
||||
|
"count": 50, |
||||
|
"results": { |
||||
|
"1": { |
||||
|
"id": 1, |
||||
|
"title": "Sahih al-Bukhari", |
||||
|
"basic_info": { |
||||
|
"title": "Sahih al-Bukhari", |
||||
|
"authors": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"name": "Muhammad ibn Isma'il al-Bukhari" |
||||
|
} |
||||
|
], |
||||
|
"rating": 5.0, |
||||
|
"description": "The most authentic collection of hadith compiled by Imam Bukhari. Contains over 7000 hadith with complete chains of narration.", |
||||
|
"volume": "9 volumes" |
||||
|
}, |
||||
|
"information": { |
||||
|
"language": "Arabic", |
||||
|
"isbn": "978-1234567890", |
||||
|
"year_of_publication": "846", |
||||
|
"number_of_pages": 4200, |
||||
|
"volume_info": "9 volumes", |
||||
|
"rating": 5.0 |
||||
|
}, |
||||
|
"hadis": [ |
||||
|
{ |
||||
|
"id": 1, |
||||
|
"title": "The Opening", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "Actions are but by intention...", |
||||
|
"translation": "Actions are but by intention...", |
||||
|
"share_link": "http://example.com/hadis/1" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"title": "Five Pillars of Islam", |
||||
|
"title_narrator": "From Abdullah ibn Umar", |
||||
|
"text": "Islam is built on five pillars...", |
||||
|
"translation": "Islam is built on five pillars...", |
||||
|
"share_link": "http://example.com/hadis/2" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 100, |
||||
|
"title": "The Beginning of Revelation", |
||||
|
"title_narrator": "From Aisha", |
||||
|
"text": "The first revelation came to Prophet Muhammad...", |
||||
|
"translation": "The first revelation came to Prophet Muhammad...", |
||||
|
"share_link": "http://example.com/hadis/100" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"2": { |
||||
|
"id": 2, |
||||
|
"title": "Sahih Muslim", |
||||
|
"basic_info": { |
||||
|
"title": "Sahih Muslim", |
||||
|
"authors": [ |
||||
|
{ |
||||
|
"id": 2, |
||||
|
"name": "Muslim ibn al-Hajjaj al-Naysaburi" |
||||
|
} |
||||
|
], |
||||
|
"rating": 4.9, |
||||
|
"description": "Second most authentic hadith collection, compiled by Imam Muslim. Known for its strict criteria for authenticity.", |
||||
|
"volume": "8 volumes" |
||||
|
}, |
||||
|
"information": { |
||||
|
"language": "Arabic", |
||||
|
"isbn": "978-0987654321", |
||||
|
"year_of_publication": "875", |
||||
|
"number_of_pages": 3800, |
||||
|
"volume_info": "8 volumes", |
||||
|
"rating": 4.9 |
||||
|
}, |
||||
|
"hadis": [ |
||||
|
{ |
||||
|
"id": 3, |
||||
|
"title": "Faith and Actions", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "Faith consists of more than sixty branches...", |
||||
|
"translation": "Faith consists of more than sixty branches...", |
||||
|
"share_link": "http://example.com/hadis/3" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 4, |
||||
|
"title": "Purification", |
||||
|
"title_narrator": "From Abu Hurairah", |
||||
|
"text": "The key to prayer is purification...", |
||||
|
"translation": "The key to prayer is purification...", |
||||
|
"share_link": "http://example.com/hadis/4" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"3": { |
||||
|
"id": 3, |
||||
|
"title": "Tafsir Ibn Kathir", |
||||
|
"basic_info": { |
||||
|
"title": "Tafsir Ibn Kathir", |
||||
|
"authors": [ |
||||
|
{ |
||||
|
"id": 3, |
||||
|
"name": "Ibn Kathir" |
||||
|
} |
||||
|
], |
||||
|
"rating": 4.8, |
||||
|
"description": "Comprehensive tafsir (exegesis) of the Quran, combining hadith and scholarly opinions.", |
||||
|
"volume": "4 volumes" |
||||
|
}, |
||||
|
"information": { |
||||
|
"language": "Arabic", |
||||
|
"isbn": "978-1122334455", |
||||
|
"year_of_publication": "1370", |
||||
|
"number_of_pages": 2800, |
||||
|
"volume_info": "4 volumes", |
||||
|
"rating": 4.8 |
||||
|
}, |
||||
|
"hadis": [ |
||||
|
{ |
||||
|
"id": 5, |
||||
|
"title": "Quranic Interpretation", |
||||
|
"title_narrator": "From Ibn Abbas", |
||||
|
"text": "The Quran should be interpreted in light of the Prophet's explanations...", |
||||
|
"translation": "The Quran should be interpreted in light of the Prophet's explanations...", |
||||
|
"share_link": "http://example.com/hadis/5" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## Usage Notes |
||||
|
|
||||
|
### **Performance Optimizations** |
||||
|
- All sync endpoints use `NoPagination` for complete dataset retrieval |
||||
|
- Database queries are optimized with `select_related` and `prefetch_related` |
||||
|
- Related data is prefetched to avoid N+1 query problems |
||||
|
|
||||
|
### **Data Relationships** |
||||
|
- **Categories Tree**: Hierarchical structure with father category references and embedded hadis details |
||||
|
- **Hadis**: Include full translation dictionaries and metadata |
||||
|
- **Narrators**: Biographical data grouped with scholarly opinions |
||||
|
- **References**: Publication details with embedded related hadis |
||||
|
|
||||
|
### **Offline Synchronization** |
||||
|
- Designed for mobile apps requiring complete offline datasets |
||||
|
- Structured for efficient client-side caching and updates |
||||
|
- Includes all necessary related data to minimize API calls |
||||
|
|
||||
|
### **Response Format** |
||||
|
All sync endpoints return: |
||||
|
```json |
||||
|
{ |
||||
|
"count": <total_records>, |
||||
|
"results": { |
||||
|
"<id>": { ...record_data... } |
||||
|
} |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
This format allows for easy lookup by ID and provides total count information. |
||||
@ -0,0 +1,130 @@ |
|||||
|
```json |
||||
|
{ |
||||
|
"id": 1800, |
||||
|
"number": 1, |
||||
|
"title": "Достоинство молитвы и ее место в религии - Толкование суры Аль-Фатиха (1)", |
||||
|
"title_narrator": null, |
||||
|
"text": "قال رسول الله صلى الله عليه وآله: الصلاة عمود الدين، إن قبلت قبل ما سواها، وإن ردت رد ما سواها. وهي أول ما يحاسب عليه العبد يوم القيامة، فإن صلحت صلح سائر عمله، وإن فسدت فسد سائر عمله.\n\nوالصلاة معراج المؤمن، وهي قربان كل تقي، وهي حب الله تعالى. من أحبها وأقامها في أوقاتها وحافظ على حدودها رفعه الله إلى درجة الأبرار. ومن استخف بها وضيعها وتركها فقد استخف بدين الله، ولا نصيب له في الإسلام.\n\nإن الله تعالى فرض خمس صلوات في اليوم والليلة، وجعل لكل صلاة وقتاً معلوماً، فمن صلاها في وقتها وأتم ركوعها وسجودها وخشوعها، كانت له نوراً وبرهاناً ونجاة يوم القيامة.", |
||||
|
"translation": "The Messenger of Allah said: Prayer is the pillar of religion, if it is accepted, other deeds are accepted, and if it is rejected, other deeds are rejected. It is the first thing for which a servant will be held accountable on the Day of Judgment, and if it is sound, all his other deeds will be sound, and if it is corrupted, all his other deeds will be corrupted.\n\nPrayer is the ascension of the believer, it is the offering of every God-fearing person, and it is the love of Allah the Almighty. Whoever loves it and establishes it at its times and maintains its boundaries, Allah will raise him to the rank of the righteous. And whoever takes it lightly, wastes it and abandons it, has taken Allah's religion lightly, and has no share in Islam.\n\nIndeed, Allah the Almighty has prescribed five prayers in a day and night, and has appointed a specific time for each prayer. Whoever prays them at their time and completes their bowing, prostration and humility, they will be light, proof and salvation for him on the Day of Judgment.", |
||||
|
"explanation": "Этот обширный хадис представляет собой фундаментальное учение о молитве в Исламе. Он раскрывает несколько ключевых аспектов:\n\nВо-первых, молитва описывается как \"столп религии\" (عمود الدين), что указывает на ее центральную роль в исламской вере. Это метафора подчеркивает, что как здание не может стоять без столпов, так и религиозная жизнь мусульманина не может быть полноценной без молитвы.\n\nВо-вторых, хадис устанавливает принцип, согласно которому принятие или отвержение молитвы Аллахом определяет судьбу всех остальных деяний верующего. Это подчеркивает качественный аспект молитвы - важна не только ее форма, но и искренность, концентрация и правильное выполнение.\n\nВ-третьих, молитва представлена как \"معراج المؤمن\" (вознесение верующего), что отсылает к ночному путешествию Пророка (мир ему) и подчеркивает духовное измерение молитвы как средства приближения к Всевышнему.\n\nХадис также подчеркивает важность своевременного совершения молитв и соблюдения их внешних и внутренних условий, обещая великую награду тем, кто относится к молитве с должным вниманием и уважением.", |
||||
|
"address": null, |
||||
|
"hadis_status_text": null, |
||||
|
"links": [ |
||||
|
{ |
||||
|
"link": "https://example.com/source1", |
||||
|
"title": "Source 1" |
||||
|
}, |
||||
|
{ |
||||
|
"link": "https://example.com/source2", |
||||
|
"title": "Source 2" |
||||
|
} |
||||
|
], |
||||
|
"share_link": "https://imamjavad.nwhco.ir/hadis/None", |
||||
|
"status": true, |
||||
|
"category": { |
||||
|
"id": 330, |
||||
|
"title": "Толкование суры Аль-Фатиха", |
||||
|
"category_type": null |
||||
|
}, |
||||
|
"hadis_status": { |
||||
|
"id": 130, |
||||
|
"title": "Прерванный", |
||||
|
"color": "orange" |
||||
|
}, |
||||
|
"tags": [ |
||||
|
{ |
||||
|
"id": 510, |
||||
|
"title": "Хадж" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 514, |
||||
|
"title": "Терпение" |
||||
|
}, |
||||
|
{ |
||||
|
"id": 520, |
||||
|
"title": "Постановления" |
||||
|
} |
||||
|
], |
||||
|
"transmitters": [ |
||||
|
{ |
||||
|
"id": 5992, |
||||
|
"transmitter": { |
||||
|
"id": 53, |
||||
|
"full_name": "Мухаммад ибн аль-Хасан ат-Туси", |
||||
|
"birth_year_hijri": 385, |
||||
|
"death_year_hijri": 460, |
||||
|
"description": "Шейх Туси, автор книг Тахзиб аль-Ахкам и аль-Истибсар", |
||||
|
"reliability": "unknown", |
||||
|
"madhhab": "unknown" |
||||
|
}, |
||||
|
"order": 1, |
||||
|
"is_gap": false |
||||
|
}, |
||||
|
{ |
||||
|
"id": 5993, |
||||
|
"transmitter": { |
||||
|
"id": 60, |
||||
|
"full_name": "Мухаммад ибн Муслим", |
||||
|
"birth_year_hijri": 70, |
||||
|
"death_year_hijri": 150, |
||||
|
"description": "Мухаммад ибн Муслим, из сподвижников имама Бакира и имама Садика (мир им)", |
||||
|
"reliability": "unknown", |
||||
|
"madhhab": "unknown" |
||||
|
}, |
||||
|
"order": 2, |
||||
|
"is_gap": false |
||||
|
}, |
||||
|
{ |
||||
|
"id": 5994, |
||||
|
"transmitter": { |
||||
|
"id": 56, |
||||
|
"full_name": "Абу Дауд ас-Сиджистани", |
||||
|
"birth_year_hijri": 202, |
||||
|
"death_year_hijri": 275, |
||||
|
"description": "Имам Абу Дауд, автор Сунан Абу Дауд", |
||||
|
"reliability": "unknown", |
||||
|
"madhhab": "unknown" |
||||
|
}, |
||||
|
"order": 3, |
||||
|
"is_gap": false |
||||
|
}, |
||||
|
{ |
||||
|
"id": 5995, |
||||
|
"transmitter": { |
||||
|
"id": 59, |
||||
|
"full_name": "Али ибн аль-Хусейн ас-Саджжад", |
||||
|
"birth_year_hijri": 38, |
||||
|
"death_year_hijri": 95, |
||||
|
"description": "Имам Али ибн аль-Хусейн (мир ему), четвертый имам шиитов", |
||||
|
"reliability": "unknown", |
||||
|
"madhhab": "unknown" |
||||
|
}, |
||||
|
"order": 4, |
||||
|
"is_gap": true |
||||
|
}, |
||||
|
{ |
||||
|
"id": 5996, |
||||
|
"transmitter": { |
||||
|
"id": 58, |
||||
|
"full_name": "Мухаммад ибн Али аль-Бакир", |
||||
|
"birth_year_hijri": 57, |
||||
|
"death_year_hijri": 114, |
||||
|
"description": "Имам Мухаммад Бакир (мир ему), пятый имам шиитов", |
||||
|
"reliability": "unknown", |
||||
|
"madhhab": "unknown" |
||||
|
}, |
||||
|
"order": 5, |
||||
|
"is_gap": false |
||||
|
} |
||||
|
], |
||||
|
"description": null, |
||||
|
"references": [ |
||||
|
{ |
||||
|
"id": 2193, |
||||
|
"book_title": null, |
||||
|
"book_images": null, |
||||
|
"book_authors": null |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
``` |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue