package repository import ( "context" "github.com/gochat/gochat/internal/model" "gorm.io/gorm" ) // CaptainDocumentRepo provides data access for CaptainDocument. type CaptainDocumentRepo struct { db *gorm.DB } func NewCaptainDocumentRepo(db *gorm.DB) *CaptainDocumentRepo { return &CaptainDocumentRepo{db: db} } func (r *CaptainDocumentRepo) Create(ctx context.Context, doc *model.CaptainDocument) error { return r.db.WithContext(ctx).Create(doc).Error } func (r *CaptainDocumentRepo) GetByID(ctx context.Context, id uint) (*model.CaptainDocument, error) { var doc model.CaptainDocument if err := r.db.WithContext(ctx).First(&doc, id).Error; err != nil { return nil, err } return &doc, nil } func (r *CaptainDocumentRepo) Update(ctx context.Context, doc *model.CaptainDocument) error { return r.db.WithContext(ctx).Save(doc).Error } func (r *CaptainDocumentRepo) Delete(ctx context.Context, id uint) error { return r.db.WithContext(ctx).Delete(&model.CaptainDocument{}, id).Error } func (r *CaptainDocumentRepo) ListByAssistant(ctx context.Context, assistantID uint, offset, limit int) ([]model.CaptainDocument, int64, error) { var docs []model.CaptainDocument var count int64 db := r.db.WithContext(ctx).Model(&model.CaptainDocument{}).Where("assistant_id = ?", assistantID) db.Count(&count) if err := db.Offset(offset).Limit(limit).Find(&docs).Error; err != nil { return nil, 0, err } return docs, count, nil } func (r *CaptainDocumentRepo) FindByExternalLink(ctx context.Context, assistantID uint, externalLink string) (*model.CaptainDocument, error) { var doc model.CaptainDocument if err := r.db.WithContext(ctx).Where("assistant_id = ? AND external_link = ?", assistantID, externalLink).First(&doc).Error; err != nil { return nil, err } return &doc, nil } // FindByStatus retrieves documents matching a specific status. func (r *CaptainDocumentRepo) FindByStatus(ctx context.Context, assistantID uint, status model.DocumentStatus, offset, limit int) ([]model.CaptainDocument, int64, error) { var docs []model.CaptainDocument var count int64 db := r.db.WithContext(ctx).Model(&model.CaptainDocument{}).Where("assistant_id = ? AND status = ?", assistantID, status) db.Count(&count) if err := db.Offset(offset).Limit(limit).Find(&docs).Error; err != nil { return nil, 0, err } return docs, count, nil }