tickets.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package dbstore
  2. import (
  3. "context"
  4. "fmt"
  5. "git.linuxforward.com/byop/byop-engine/models"
  6. "gorm.io/gorm"
  7. )
  8. // CreateTicket creates a new ticket using GORM
  9. func (s *SQLiteStore) CreateTicket(ctx context.Context, ticket *models.Ticket) error {
  10. result := s.db.WithContext(ctx).Create(ticket)
  11. if result.Error != nil {
  12. return fmt.Errorf("failed to create ticket: %w", result.Error)
  13. }
  14. return nil
  15. }
  16. // GetTicketByID retrieves a ticket by ID using GORM
  17. func (s *SQLiteStore) GetTicketByID(ctx context.Context, id uint) (*models.Ticket, error) {
  18. var ticket models.Ticket
  19. result := s.db.WithContext(ctx).First(&ticket, id)
  20. if result.Error != nil {
  21. if result.Error == gorm.ErrRecordNotFound {
  22. return nil, models.NewErrNotFound(fmt.Sprintf("ticket with ID %d not found", id), result.Error)
  23. }
  24. return nil, fmt.Errorf("failed to get ticket by ID: %w", result.Error)
  25. }
  26. return &ticket, nil
  27. }
  28. // GetTickets retrieves all tickets using GORM
  29. func (s *SQLiteStore) GetTickets(ctx context.Context) ([]*models.Ticket, error) {
  30. var tickets []*models.Ticket
  31. result := s.db.WithContext(ctx).Find(&tickets)
  32. if result.Error != nil {
  33. return nil, fmt.Errorf("failed to get tickets: %w", result.Error)
  34. }
  35. return tickets, nil
  36. }
  37. // UpdateTicket updates an existing ticket using GORM
  38. func (s *SQLiteStore) UpdateTicket(ctx context.Context, ticket *models.Ticket) error {
  39. result := s.db.WithContext(ctx).Save(ticket)
  40. if result.Error != nil {
  41. return fmt.Errorf("failed to update ticket: %w", result.Error)
  42. }
  43. if result.RowsAffected == 0 {
  44. return models.NewErrNotFound(fmt.Sprintf("ticket with ID %d not found for update", ticket.ID), nil)
  45. }
  46. return nil
  47. }
  48. // CreateTicketComment creates a new ticket comment using GORM
  49. func (s *SQLiteStore) CreateTicketComment(ctx context.Context, comment *models.TicketComment) error {
  50. result := s.db.WithContext(ctx).Create(comment)
  51. if result.Error != nil {
  52. return fmt.Errorf("failed to create ticket comment: %w", result.Error)
  53. }
  54. return nil
  55. }
  56. // GetTicketComments retrieves all comments for a ticket using GORM
  57. func (s *SQLiteStore) GetTicketComments(ctx context.Context, ticketID uint) ([]*models.TicketComment, error) {
  58. var comments []*models.TicketComment
  59. result := s.db.WithContext(ctx).Where("ticket_id = ?", ticketID).Find(&comments)
  60. if result.Error != nil {
  61. return nil, fmt.Errorf("failed to get ticket comments: %w", result.Error)
  62. }
  63. return comments, nil
  64. }