Files
gochat/internal/repository/captain_inbox_repo.go
T

79 lines
2.7 KiB
Go

package repository
import (
"context"
"github.com/gochat/gochat/internal/model"
"gorm.io/gorm"
)
// CaptainInboxRepo provides data access for the CaptainInbox join table.
type CaptainInboxRepo struct {
db *gorm.DB
}
func NewCaptainInboxRepo(db *gorm.DB) *CaptainInboxRepo {
return &CaptainInboxRepo{db: db}
}
func (r *CaptainInboxRepo) Create(ctx context.Context, ci *model.CaptainInbox) error {
return r.db.WithContext(ctx).Create(ci).Error
}
func (r *CaptainInboxRepo) Delete(ctx context.Context, assistantID, inboxID uint) error {
return r.db.WithContext(ctx).
Where("captain_assistant_id = ? AND inbox_id = ?", assistantID, inboxID).
Delete(&model.CaptainInbox{}).Error
}
func (r *CaptainInboxRepo) DeleteByAccount(ctx context.Context, accountID, assistantID, inboxID uint) error {
return r.db.WithContext(ctx).
Where("account_id = ? AND captain_assistant_id = ? AND inbox_id = ?", accountID, assistantID, inboxID).
Delete(&model.CaptainInbox{}).Error
}
func (r *CaptainInboxRepo) ListByAssistant(ctx context.Context, assistantID uint) ([]model.CaptainInbox, error) {
var inboxes []model.CaptainInbox
if err := r.db.WithContext(ctx).Where("captain_assistant_id = ?", assistantID).Find(&inboxes).Error; err != nil {
return nil, err
}
return inboxes, nil
}
func (r *CaptainInboxRepo) ListInboxesByAssistant(ctx context.Context, accountID, assistantID uint) ([]model.Inbox, error) {
var inboxes []model.Inbox
if err := r.db.WithContext(ctx).
Joins("JOIN captain_inboxes ON captain_inboxes.inbox_id = inboxes.id").
Where("captain_inboxes.account_id = ? AND captain_inboxes.captain_assistant_id = ?", accountID, assistantID).
Order("inboxes.id DESC").
Find(&inboxes).Error; err != nil {
return nil, err
}
return inboxes, nil
}
func (r *CaptainInboxRepo) FindAccountInbox(ctx context.Context, accountID, inboxID uint) (*model.Inbox, error) {
var inbox model.Inbox
if err := r.db.WithContext(ctx).Where("account_id = ? AND id = ?", accountID, inboxID).First(&inbox).Error; err != nil {
return nil, err
}
return &inbox, nil
}
func (r *CaptainInboxRepo) FindByAssistantAndInbox(ctx context.Context, assistantID, inboxID uint) (*model.CaptainInbox, error) {
var ci model.CaptainInbox
if err := r.db.WithContext(ctx).Where("captain_assistant_id = ? AND inbox_id = ?", assistantID, inboxID).First(&ci).Error; err != nil {
return nil, err
}
return &ci, nil
}
// FindByInboxID retrieves all CaptainInbox entries for a given inbox.
func (r *CaptainInboxRepo) FindByInboxID(ctx context.Context, inboxID uint) ([]model.CaptainInbox, error) {
var inboxes []model.CaptainInbox
if err := r.db.WithContext(ctx).Where("inbox_id = ?", inboxID).Find(&inboxes).Error; err != nil {
return nil, err
}
return inboxes, nil
}