package history import ( "context" "fmt" "log" "math" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/errors" "penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models" ) type historyRepository interface { CountAll(context.Context) (int64, errors.Error) FindMany(ctx context.Context, page, limit int64) ([]models.History, errors.Error) Insert(context.Context, *models.History) (*models.History, errors.Error) } type Deps struct { Logger *zap.Logger Repository historyRepository } type Service struct { logger *zap.Logger repository historyRepository } func New(deps Deps) *Service { if deps.Logger == nil { log.Panicln("logger is nil on ") } if deps.Repository == nil { log.Panicln("repository is nil on ") } return &Service{ logger: deps.Logger, repository: deps.Repository, } } func (receiver *Service) GetHistoryList(ctx context.Context, pagination *models.Pagination) (*models.PaginationResponse[models.History], errors.Error) { if pagination == nil { return nil, errors.New( fmt.Errorf("pagination is nil on of : %w", errors.ErrInternalError), errors.ErrInternalError, ) } count, err := receiver.repository.CountAll(ctx) if err != nil { receiver.logger.Error("failed to count histories on of ", zap.Error(err.Extract()), ) return nil, err } if count == 0 { return &models.PaginationResponse[models.History]{TotalPages: 0, Records: []models.History{}}, nil } totalPages := int64(math.Ceil(float64(count) / float64(pagination.Limit))) histories, err := receiver.repository.FindMany(ctx, pagination.Page, pagination.Limit) if err != nil { receiver.logger.Error("failed to get historiy list on of ", zap.Error(err.Extract()), zap.Int64("page", pagination.Page), zap.Int64("limit", pagination.Limit), ) return nil, err } return &models.PaginationResponse[models.History]{ TotalPages: totalPages, Records: histories, }, nil } func (receiver *Service) CreateHistory(ctx context.Context, history *models.History) (*models.History, errors.Error) { createdHistory, err := receiver.repository.Insert(ctx, history) if err != nil { receiver.logger.Error("failed to create history on of ", zap.Error(err)) return nil, err } return createdHistory, nil }