Skip to content

Commit

Permalink
feat: finish normal operator test case
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinyay945 committed Sep 26, 2023
1 parent 1125c8d commit 8a681a8
Show file tree
Hide file tree
Showing 5 changed files with 229 additions and 81 deletions.
102 changes: 77 additions & 25 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 13 additions & 16 deletions domain/anki_operator.go
Expand Up @@ -12,35 +12,32 @@ func NewOperatorGenerate(gpter GPTer, textToSpeecher TextToSpeecher, ankier Anki
return &OperatorGenerate{gpter: gpter, textToSpeecher: textToSpeecher, ankier: ankier}
}

func (g *OperatorGenerate) GetByNote(note AnkiNote) (o Operator, err error) {
func (g *OperatorGenerate) GetByNote(note AnkiNote, rememberVocabularyList []string) (o Operator, err error) {
switch note.ModelName {
case "Japanese (recognition&recall) 動詞篇":
o = &VerbOperator{
Note: note,
gpter: g.gpter,
textToSpeecher: g.textToSpeecher,
ankier: g.ankier,
Note: note,
gpter: g.gpter,
textToSpeecher: g.textToSpeecher,
ankier: g.ankier,
rememberVocabularyList: rememberVocabularyList,
}
case "Japanese (recognition&recall) 形容詞":
o = &AdjOperator{
Note: note,
gpter: g.gpter,
textToSpeecher: g.textToSpeecher,
ankier: g.ankier,
Note: note,
gpter: g.gpter,
textToSpeecher: g.textToSpeecher,
ankier: g.ankier,
rememberVocabularyList: rememberVocabularyList,
}
case "Japanese (recognition&recall)":
o = &NormalOperator{
Note: note,
gpter: g.gpter,
textToSpeecher: g.textToSpeecher,
ankier: g.ankier,
}
o = NewNormalOperator(note, g.gpter, g.textToSpeecher, g.ankier, rememberVocabularyList)
default:
err = fmt.Errorf("don't support for this modelType: %s", note.ModelName)
}
return
}

type OperatorGenerator interface {
GetByNote(note AnkiNote) (o Operator, err error)
GetByNote(note AnkiNote, rememberVoculary []string) (o Operator, err error)
}
10 changes: 5 additions & 5 deletions domain/anki_operator_test.go
Expand Up @@ -28,23 +28,23 @@ func (t *AnkiOperationSuite) Test_get_correct_modal_type_operator() {
ModelName: "Japanese (recognition&recall)",
}
generator := OperatorGenerate{}
normalOperator, _ := generator.GetByNote(note)
_, ok := normalOperator.(*NormalOperator)
t.True(ok, "type is not *NormalOperator")
normalOperator, _ := generator.GetByNote(note, nil)
_, ok := normalOperator.(*NormalJapaneseOperator)
t.True(ok, "type is not *NormalJapaneseOperator")

note = AnkiNote{
ModelName: "Japanese (recognition&recall) 動詞篇",
}
generator = OperatorGenerate{}
verbOperator, _ := generator.GetByNote(note)
verbOperator, _ := generator.GetByNote(note, nil)
_, ok = verbOperator.(*VerbOperator)
t.True(ok, "type is not *VerbOperator")

note = AnkiNote{
ModelName: "Japanese (recognition&recall) 形容詞",
}
generator = OperatorGenerate{}
adjOperator, _ := generator.GetByNote(note)
adjOperator, _ := generator.GetByNote(note, nil)
_, ok = adjOperator.(*AdjOperator)
t.True(ok, "type is not *AdjOperator")
}
127 changes: 113 additions & 14 deletions domain/operator.go
@@ -1,25 +1,123 @@
package domain

import "fmt"

type Operator interface {
Do() error
}

type NormalOperator struct {
Note AnkiNote
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
type NormalJapaneseOperator struct {
originNote AnkiNote
noteFields struct {
express string
meaning string
reading string
japaneseToSound string
japaneseSentence string
japaneseSentenceToSound string
japaneseSentenceToChinese string
japaneseNote string
japaneseToChineseNote string
answerNote string
}
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
rememberVocabularyList []string
}

type normalNoteField struct {
express string
meaning string
reading string
japaneseToSound string
japaneseSentence string
japaneseSentenceToSound string
japaneseSentenceToChinese string
japaneseNote string
japaneseToChineseNote string
answerNote string
}

func (f normalNoteField) FieldDataMap() map[string]FieldData {
return map[string]FieldData{
"Expression": {f.express, 0},
"Meaning": {f.meaning, 1},
"Reading": {f.reading, 2},
"Japanese-ToSound": {f.japaneseToSound, 3},
"JapaneseSentence": {f.japaneseSentence, 4},
"JapaneseSentence-ToSound": {f.japaneseSentenceToSound, 5},
"JapaneseSentence-ToChinese": {f.japaneseSentenceToChinese, 6},
"Japanese-Note": {f.japaneseNote, 7},
"Japanese-ToChineseNote": {f.japaneseToChineseNote, 8},
"Answer-Note": {f.answerNote, 9},
}
}

func NewNormalOperator(note AnkiNote, gpter GPTer, textToSpeecher TextToSpeecher, ankier Ankier, rememberVocabularyList []string) *NormalJapaneseOperator {

noteFields := normalNoteField{
express: note.Fields["Expression"].Value,
meaning: note.Fields["Meaning"].Value,
reading: note.Fields["Reading"].Value,
japaneseToSound: note.Fields["Japanese-ToSound"].Value,
japaneseSentence: note.Fields["JapaneseSentence"].Value,
japaneseSentenceToSound: note.Fields["JapaneseSentence-ToSound"].Value,
japaneseSentenceToChinese: note.Fields["JapaneseSentence-ToChinese"].Value,
japaneseNote: note.Fields["Japanese-Note"].Value,
japaneseToChineseNote: note.Fields["Japanese-ToChineseNote"].Value,
answerNote: note.Fields["Answer-Note"].Value,
}
return &NormalJapaneseOperator{
originNote: note,
noteFields: noteFields,
gpter: gpter,
textToSpeecher: textToSpeecher,
ankier: ankier,
rememberVocabularyList: rememberVocabularyList,
}
}

func (n *NormalOperator) Do() error {
func (n *NormalJapaneseOperator) Do() error {
expressFilePath, _ := n.textToSpeecher.GetJapaneseSound(n.noteFields.express)
sentence, hiraganaSentence, chineseSentence, _ := n.gpter.MakeJapaneseSentence(n.noteFields.express, n.noteFields.meaning, n.rememberVocabularyList)
sentenceFilePath, _ := n.textToSpeecher.GetJapaneseSound(sentence)
field := normalNoteField{
express: n.noteFields.express,
meaning: n.noteFields.meaning,
reading: n.noteFields.reading,
japaneseToSound: fmt.Sprintf("[sound:%s.mp3]", n.noteFields.express),
japaneseSentence: hiraganaSentence,
japaneseSentenceToSound: fmt.Sprintf("[sound:%s.mp3]", sentence),
japaneseSentenceToChinese: chineseSentence,
japaneseNote: n.noteFields.japaneseNote,
japaneseToChineseNote: n.noteFields.japaneseToChineseNote,
answerNote: n.noteFields.answerNote,
}
n.originNote.Fields = field.FieldDataMap()
_ = n.ankier.UpdateNoteById(n.originNote.Id, n.originNote, []Audio{
{
Path: expressFilePath,
Filename: fmt.Sprintf("%s.mp3", n.noteFields.express),
Fields: []string{"Japanese-ToSound"},
},
{
Path: sentenceFilePath,
Filename: fmt.Sprintf("%s.mp3", sentence),
Fields: []string{"JapaneseSentence-ToSound"},
},
})
n.ankier.AddNoteTagFromNoteId(n.originNote.Id, AnkiDoneTagName)
n.ankier.DeleteNoteTagFromNoteId(n.originNote.Id, AnkiTodoTagName)
return nil
}

type VerbOperator struct {
Note AnkiNote
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
Note AnkiNote
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
rememberVocabularyList []string
}

func (v *VerbOperator) Do() error {
Expand All @@ -28,10 +126,11 @@ func (v *VerbOperator) Do() error {
}

type AdjOperator struct {
Note AnkiNote
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
Note AnkiNote
gpter GPTer
textToSpeecher TextToSpeecher
ankier Ankier
rememberVocabularyList []string
}

func (a *AdjOperator) Do() error {
Expand Down

0 comments on commit 8a681a8

Please sign in to comment.