Skip to content

Commit

Permalink
Feat: add searching target words api
Browse files Browse the repository at this point in the history
  • Loading branch information
junho100 committed Nov 20, 2024
1 parent 1d7233c commit 2939e08
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 5 deletions.
4 changes: 4 additions & 0 deletions dto/lab.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,7 @@ type CreateTestHistoryDtoResult struct {
Word string `json:"word"`
IsCorrect bool `json:"is_correct"`
}

type GetTargetWordsResponse struct {
Words []string `json:"words"`
}
22 changes: 22 additions & 0 deletions handler/lab.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func NewLabHandler(router *gin.Engine, labModel model.LabModel, slackUtil util.S
router.POST("/api/labs/cue", labHandler.CreateCueHistory)
router.POST("/api/labs/start-test", labHandler.StartLab)
router.POST("/api/labs/test", labHandler.CreateTestHistory)
router.GET("/api/labs/cue", labHandler.GetTargetWords)
}

func (h *LabHandler) CreateBreathingHistory(c *gin.Context) {
Expand Down Expand Up @@ -116,3 +117,24 @@ func (h *LabHandler) CreateTestHistory(c *gin.Context) {

c.JSON(http.StatusCreated, nil)
}

func (h *LabHandler) GetTargetWords(c *gin.Context) {
idForLogin := c.Query("id")

lab, err := h.labModel.GetLabBySubjectIdForLogin(idForLogin)
if err != nil {
c.JSON(http.StatusNotFound, nil)
return
}

words, err := h.labModel.GetTargetWordsByLabId(lab.ID)
if err != nil {
c.JSON(http.StatusNotFound, nil)
return
}

getTargetWordsResponse := dto.GetTargetWordsResponse{
Words: words,
}
c.JSON(http.StatusOK, getTargetWordsResponse)
}
30 changes: 25 additions & 5 deletions model/lab.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type LabModel interface {
CreatePreTest(labID uint) error
GetLabTestByIdForLogin(idForLogin string) (*entity.LabTest, error)
CreateTestHistory(createTestHistoryDto dto.CreateTestHistoryDto) error
GetTargetWordsByLabId(labID uint) ([]string, error)
}

type labModel struct {
Expand Down Expand Up @@ -48,15 +49,17 @@ func (m *labModel) CreateBreathingHistory(idForLogin string, averageVolume int,
}

func (m *labModel) GetLabBySubjectIdForLogin(idForLogin string) (*entity.Lab, error) {
lab := &entity.Lab{}
lab := entity.Lab{}

if err := m.db.Joins("Subject", m.db.Where(&entity.Subject{
IdForLogin: idForLogin,
})).First(lab).Error; err != nil {
if err := m.db.
Preload("Subject").
Joins("Subject").
Where("Subject.id_for_login = ?", idForLogin).
First(&lab).Error; err != nil {
return nil, err
}

return lab, nil
return &lab, nil
}

func (m *labModel) CreateCueHistory(idForLogin string, timestamp time.Time, targetWord string) error {
Expand Down Expand Up @@ -217,3 +220,20 @@ func (m *labModel) PickCueTargetWords(corrects []*entity.LabTestHistory, numberO

return results
}

func (m *labModel) GetTargetWordsByLabId(labID uint) ([]string, error) {
var targetWords []entity.LabCueTargetWord

if err := m.db.Where(&entity.LabCueTargetWord{
LabID: labID,
}).Find(&targetWords).Error; err != nil {
return nil, err
}

targetWordsString := make([]string, len(targetWords))
for i, v := range targetWords {
targetWordsString[i] = v.Word
}

return targetWordsString, nil
}

0 comments on commit 2939e08

Please sign in to comment.