84 lines
2.7 KiB
Go
84 lines
2.7 KiB
Go
package issuereporting
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
dbgen "github.com/SamuelTariku/FortuneBet-Backend/gen/db"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/repository"
|
|
)
|
|
|
|
type Service struct {
|
|
repo repository.ReportedIssueRepository
|
|
}
|
|
|
|
func New(repo repository.ReportedIssueRepository) *Service {
|
|
return &Service{repo: repo}
|
|
}
|
|
|
|
func (s *Service) CreateReportedIssue(ctx context.Context, issue domain.ReportedIssue) (domain.ReportedIssue, error) {
|
|
params := dbgen.CreateReportedIssueParams{
|
|
// Map fields from domain.ReportedIssue to dbgen.CreateReportedIssueParams here.
|
|
// Example:
|
|
// Title: issue.Title,
|
|
// Description: issue.Description,
|
|
// CustomerID: issue.CustomerID,
|
|
// Status: issue.Status,
|
|
// Add other fields as necessary.
|
|
}
|
|
dbIssue, err := s.repo.CreateReportedIssue(ctx, params)
|
|
if err != nil {
|
|
return domain.ReportedIssue{}, err
|
|
}
|
|
// Map dbgen.ReportedIssue to domain.ReportedIssue
|
|
reportedIssue := domain.ReportedIssue{
|
|
ID: dbIssue.ID,
|
|
Subject: dbIssue.Subject,
|
|
Description: dbIssue.Description,
|
|
CustomerID: dbIssue.CustomerID,
|
|
Status: dbIssue.Status,
|
|
CreatedAt: dbIssue.CreatedAt.Time,
|
|
UpdatedAt: dbIssue.UpdatedAt.Time,
|
|
// Add other fields as necessary
|
|
}
|
|
return reportedIssue, nil
|
|
}
|
|
|
|
func (s *Service) GetIssuesForCustomer(ctx context.Context, customerID int64, limit, offset int) ([]domain.ReportedIssue, error) {
|
|
dbIssues, err := s.repo.ListReportedIssuesByCustomer(ctx, customerID, int32(limit), int32(offset))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
reportedIssues := make([]domain.ReportedIssue, len(dbIssues))
|
|
for i, dbIssue := range dbIssues {
|
|
reportedIssues[i] = domain.ReportedIssue{
|
|
ID: dbIssue.ID,
|
|
Subject: dbIssue.Subject,
|
|
Description: dbIssue.Description,
|
|
CustomerID: dbIssue.CustomerID,
|
|
Status: dbIssue.Status,
|
|
CreatedAt: dbIssue.CreatedAt.Time,
|
|
UpdatedAt: dbIssue.UpdatedAt.Time,
|
|
// Add other fields as necessary
|
|
}
|
|
}
|
|
return reportedIssues, nil
|
|
}
|
|
|
|
func (s *Service) GetAllIssues(ctx context.Context, limit, offset int) ([]dbgen.ReportedIssue, error) {
|
|
return s.repo.ListReportedIssues(ctx, int32(limit), int32(offset))
|
|
}
|
|
|
|
func (s *Service) UpdateIssueStatus(ctx context.Context, issueID int64, status string) error {
|
|
validStatuses := map[string]bool{"pending": true, "in_progress": true, "resolved": true, "rejected": true}
|
|
if !validStatuses[status] {
|
|
return errors.New("invalid status")
|
|
}
|
|
return s.repo.UpdateReportedIssueStatus(ctx, issueID, status)
|
|
}
|
|
|
|
func (s *Service) DeleteIssue(ctx context.Context, issueID int64) error {
|
|
return s.repo.DeleteReportedIssue(ctx, issueID)
|
|
}
|