79 lines
2.7 KiB
Go
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
|
|
}
|