package repository import ( "context" "gitlab.com/mbugroup/lti-api.git/internal/common/repository" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" "gorm.io/gorm" ) type ExpenseRepository interface { repository.BaseRepository[entity.Expense] IdExists(ctx context.Context, id uint) (bool, error) GetNextSequence(ctx context.Context) (int, error) GetWithSupplier(ctx context.Context, id uint64) (*entity.Expense, error) } type ExpenseRepositoryImpl struct { *repository.BaseRepositoryImpl[entity.Expense] } func NewExpenseRepository(db *gorm.DB) ExpenseRepository { return &ExpenseRepositoryImpl{ BaseRepositoryImpl: repository.NewBaseRepository[entity.Expense](db), } } func (r *ExpenseRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) { return repository.Exists[entity.Expense](ctx, r.DB(), id) } func (r *ExpenseRepositoryImpl) GetNextSequence(ctx context.Context) (int, error) { var sequence int err := r.DB().Raw("SELECT nextval('expenses_ref_seq')").Scan(&sequence).Error if err != nil { return 0, err } return sequence, nil } func (r *ExpenseRepositoryImpl) GetWithSupplier(ctx context.Context, id uint64) (*entity.Expense, error) { var expense entity.Expense err := r.DB().WithContext(ctx). Where("id = ?", id). Preload("Supplier"). First(&expense).Error if err != nil { return nil, err } return &expense, nil }