mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-23 15:51:24 +00:00
Quran API (#205)
* Add basic version of a Quran API * remove examples json swp * fix search translation * add examples json
This commit is contained in:
206
quran/domain/domain.go
Normal file
206
quran/domain/domain.go
Normal file
@@ -0,0 +1,206 @@
|
||||
package domain
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
pb "github.com/micro/services/quran/proto"
|
||||
)
|
||||
|
||||
var (
|
||||
// the default tafsir author
|
||||
tafsir = map[int32]string{
|
||||
169: "Tafsir Ibn Kathir",
|
||||
}
|
||||
)
|
||||
|
||||
type Chapter struct {
|
||||
Id int32 `json:"id"`
|
||||
RevelationPlace string `json:"revelation_place"`
|
||||
RevelationOrder int32 `json:"revelation_order"`
|
||||
BismillahPrefix bool `json:"bismillah_pre"`
|
||||
NameSimple string `json:"name_simple"`
|
||||
NameComplex string `json:"name_complex"`
|
||||
NameArabic string `json:"name_arabic"`
|
||||
VersesCount int32 `json:"verses_count"`
|
||||
Pages []int32 `json:"pages"`
|
||||
TranslatedName *TranslatedName `json:"translated_name"`
|
||||
}
|
||||
|
||||
type TranslatedName struct {
|
||||
LanguageName string `json:"language_name"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type TranslationText struct {
|
||||
Id int32 `json:"id"`
|
||||
ResourceId int32 `json:"resource_id"`
|
||||
Text string `json:"text"`
|
||||
ResourceName string `json:"resource_name"`
|
||||
}
|
||||
|
||||
type Translation struct {
|
||||
Text string `json:"text"`
|
||||
LanguageName string `json:"language_name"`
|
||||
}
|
||||
|
||||
type Transliteration struct {
|
||||
Text string `json:"text"`
|
||||
LanguageName string `json:"language_name"`
|
||||
}
|
||||
|
||||
type Tafsir struct {
|
||||
Id int32 `json:"id"`
|
||||
ResourceId int32 `json:"resource_id"`
|
||||
Text string `json:"text"`
|
||||
}
|
||||
|
||||
type ChapterInfo struct {
|
||||
Id int32 `json:"id"`
|
||||
ChapterId int32 `json:"chapter_id"`
|
||||
LanguageName string `json:"language_name"`
|
||||
ShortText string `json:"short_text"`
|
||||
Source string `json:"source"`
|
||||
Text string `json:"text"`
|
||||
}
|
||||
|
||||
type Pagination struct {
|
||||
PerPage int32 `json:"per_page"`
|
||||
CurrentPage int32 `json:"current_page"`
|
||||
NextPage int32 `json:"next_page"`
|
||||
TotalPages int32 `json:"total_pages"`
|
||||
TotalRecords int32 `json:"total_records"`
|
||||
}
|
||||
|
||||
type Verse struct {
|
||||
Id int32 `json:"id"`
|
||||
VerseNumber int32 `json:"verse_number"`
|
||||
VerseKey string `json:"verse_key"`
|
||||
JuzNumber int32 `json:"juz_number"`
|
||||
HizbNumber int32 `json:"hizb_number"`
|
||||
RubNumber int32 `json:"rub_number"`
|
||||
PageNumber int32 `json:"page_number"`
|
||||
Translations []*TranslationText `json:"translations"`
|
||||
Tafsirs []*Tafsir `json:"tafsirs"`
|
||||
Words []*Word `json:"words"`
|
||||
TextImlaei string `json:"text_imlaei"`
|
||||
}
|
||||
|
||||
type Word struct {
|
||||
Id int32 `json:"id"`
|
||||
Position int32 `json:"position"`
|
||||
AudioUrl string `json:"audio_url"`
|
||||
CharTypeName string `json:"char_type_name"`
|
||||
CodeV1 string `json:"code_v1"`
|
||||
PageNumber int32 `json:"page_number"`
|
||||
LineNumber int32 `json:"line_number"`
|
||||
Text string `json:"text_imlaei"`
|
||||
Code string `json:"code_v2"`
|
||||
Translation *Translation `json:"translation"`
|
||||
Transliteration *Translation `json:"transliteration"`
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
VerseId int32 `json:"verse_id"`
|
||||
VerseKey string `json:"verse_key"`
|
||||
Text string `json:"text"`
|
||||
Translations []*SearchTranslation `json:"translations"`
|
||||
}
|
||||
|
||||
type SearchResults struct {
|
||||
Query string `json:"query"`
|
||||
TotalResults int32 `json:"total_results"`
|
||||
CurrentPage int32 `json:"current_page"`
|
||||
TotalPages int32 `json:"total_pages"`
|
||||
Results []*Result `json:"results"`
|
||||
}
|
||||
|
||||
type SearchTranslation struct {
|
||||
ResourceId int32 `json:"resource_id"`
|
||||
Text string `json:"text"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type VersesByChapter struct {
|
||||
Pagination *Pagination `json:"pagination"`
|
||||
Verses []*Verse `json:"verses"`
|
||||
}
|
||||
|
||||
func VerseToProto(verse *Verse) *pb.Verse {
|
||||
var transliteration []string
|
||||
var translation []string
|
||||
var words []*pb.Word
|
||||
|
||||
for _, word := range verse.Words {
|
||||
words = append(words, &pb.Word{
|
||||
Id: word.Id,
|
||||
Position: word.Position,
|
||||
CharType: word.CharTypeName,
|
||||
Page: word.PageNumber,
|
||||
Line: word.LineNumber,
|
||||
Text: word.Text,
|
||||
Code: word.Code,
|
||||
Translation: word.Translation.Text,
|
||||
Transliteration: word.Transliteration.Text,
|
||||
})
|
||||
|
||||
// skip the end
|
||||
if word.CharTypeName == "end" {
|
||||
continue
|
||||
}
|
||||
|
||||
translation = append(translation, word.Translation.Text)
|
||||
transliteration = append(transliteration, word.Transliteration.Text)
|
||||
}
|
||||
|
||||
var translations []*pb.Translation
|
||||
|
||||
for _, tr := range verse.Translations {
|
||||
translations = append(translations, &pb.Translation{
|
||||
Id: tr.Id,
|
||||
Source: tr.ResourceName,
|
||||
Text: tr.Text,
|
||||
})
|
||||
}
|
||||
|
||||
var interpretations []*pb.Interpretation
|
||||
|
||||
for _, tf := range verse.Tafsirs {
|
||||
interpretations = append(interpretations, &pb.Interpretation{
|
||||
Id: tf.Id,
|
||||
Source: tafsir[tf.ResourceId],
|
||||
Text: tf.Text,
|
||||
})
|
||||
}
|
||||
|
||||
return &pb.Verse{
|
||||
Id: verse.Id,
|
||||
Key: verse.VerseKey,
|
||||
Number: verse.VerseNumber,
|
||||
Page: verse.PageNumber,
|
||||
Text: verse.TextImlaei,
|
||||
TranslatedText: strings.Join(translation, " "),
|
||||
Transliteration: strings.Join(transliteration, " "),
|
||||
Words: words,
|
||||
Translations: translations,
|
||||
Interpretations: interpretations,
|
||||
}
|
||||
}
|
||||
|
||||
func ResultToProto(r *Result) *pb.Result {
|
||||
var translations []*pb.Translation
|
||||
|
||||
for _, tr := range r.Translations {
|
||||
translations = append(translations, &pb.Translation{
|
||||
Id: tr.ResourceId,
|
||||
Source: tr.Name,
|
||||
Text: tr.Text,
|
||||
})
|
||||
}
|
||||
|
||||
return &pb.Result{
|
||||
VerseKey: r.VerseKey,
|
||||
VerseId: r.VerseId,
|
||||
Text: r.Text,
|
||||
Translations: translations,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user