| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package model
- import (
- "errors"
- "fmt"
- "woord-core-service/global"
- "gorm.io/gorm"
- )
- var (
- ErrDictNotFound = fmt.Errorf("词库不存在")
- )
- // 词库
- type Dict struct {
- *gorm.Model
- // 词库名
- Name string
- // 单词标题
- ValueTitle string
- // 词义标题
- MeaningTitle string
- // 附加标题
- ExtraTitle string
- // 词库所有单词
- Words []Word
- // 所属用户 ID
- UserID uint
- }
- type DictResult struct {
- ID uint `json:"id"`
- Name string `json:"name"`
- ValueTitle string `json:"valueTitle"`
- MeaningTitle string `json:"meaningTitle"`
- ExtraTitle string `json:"extraTitle"`
- WordsCount uint `json:"wordsCount"`
- }
- // 列出所有词库
- func ListDicts(userID uint) ([]DictResult, error) {
- result := []DictResult{}
- if err := global.DB.Model(&Dict{}).Select("*, (?) AS words_count", global.DB.Model(&Word{}).Select("COUNT()").Where("dict_id = dicts.id")).Order("id desc").Find(&result, "user_id = ?", userID).Error; err != nil {
- return nil, err
- }
- return result, nil
- }
- // 获取词库
- func GetDict(id, userID uint) (*DictResult, error) {
- result := &DictResult{}
- if err := global.DB.Model(&Dict{}).Select("*, (?) AS words_count", global.DB.Model(&Word{}).Select("COUNT()").Where("dict_id = dicts.id")).Take(result, "id = ? AND user_id = ?", id, userID).Error; err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return nil, ErrDictNotFound
- }
- return nil, err
- }
- return result, nil
- }
- // 创建词库
- func CreateDict(name, valueTitle, meaningTitle, extraTitle string, userID uint) (*DictResult, error) {
- dict := &Dict{
- Name: name,
- ValueTitle: valueTitle,
- MeaningTitle: meaningTitle,
- ExtraTitle: extraTitle,
- UserID: userID,
- }
- if err := global.DB.Select("name", "value_title", "meaning_title", "extra_title", "user_id").Create(dict).Error; err != nil {
- return nil, err
- }
- return &DictResult{
- ID: dict.ID,
- Name: dict.Name,
- ValueTitle: dict.ValueTitle,
- MeaningTitle: dict.MeaningTitle,
- ExtraTitle: dict.ExtraTitle,
- }, nil
- }
- // 更新词库
- func UpdateDict(id uint, name, valueTitle, meaningTitle, extraTitle string) (*DictResult, error) {
- count := int64(0)
- if err := global.DB.Model(&Word{}).Where("dict_id = ?", id).Count(&count).Error; err != nil {
- return nil, err
- }
- dict := &Dict{
- Name: name,
- ValueTitle: valueTitle,
- MeaningTitle: meaningTitle,
- ExtraTitle: extraTitle,
- }
- if err := global.DB.Where("id = ?", id).Select("name", "value_title", "meaning_title", "extra_title").Updates(dict).Error; err != nil {
- return nil, err
- }
- return &DictResult{
- ID: dict.ID,
- Name: dict.Name,
- ValueTitle: dict.ValueTitle,
- MeaningTitle: dict.MeaningTitle,
- ExtraTitle: dict.ExtraTitle,
- WordsCount: uint(count),
- }, nil
- }
- // 删除词库
- func DeleteDict(id uint) error {
- return global.DB.Delete(&Dict{}, "id = ?", id).Error
- }
|