30 lines
650 B
Go
30 lines
650 B
Go
package document_repo
|
|
|
|
import (
|
|
"github.com/XingfenD/yoresee_doc/internal/model"
|
|
)
|
|
|
|
func (r *DocumentRepository) MGetByIDs(ids []int64) ([]*model.Document, error) {
|
|
if len(ids) == 0 {
|
|
return []*model.Document{}, nil
|
|
}
|
|
|
|
var docs []*model.Document
|
|
if err := r.db.Model(&model.Document{}).Where("id IN ?", ids).Find(&docs).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
docMap := make(map[int64]*model.Document, len(docs))
|
|
for _, doc := range docs {
|
|
docMap[doc.ID] = doc
|
|
}
|
|
|
|
ordered := make([]*model.Document, 0, len(ids))
|
|
for _, id := range ids {
|
|
if doc, ok := docMap[id]; ok {
|
|
ordered = append(ordered, doc)
|
|
}
|
|
}
|
|
return ordered, nil
|
|
}
|