package db import ( "fmt" "gestion/models" "log" ) func (d *Database) GetDeliveryIssues(status string) ([]models.DeliveryIssue, error) { query := ` SELECT id, command_id, issue_type, description, status, reported_by, COALESCE(resolved_by, ''), COALESCE(resolution, ''), created_at, updated_at FROM delivery_issues ` var args []interface{} if status != "" { query += " WHERE status = $1" args = append(args, status) } query += " ORDER BY created_at DESC" rows, err := d.Query(query, args...) if err != nil { return nil, fmt.Errorf("erreur récupération problèmes: %w", err) } defer rows.Close() var issues []models.DeliveryIssue for rows.Next() { var issue models.DeliveryIssue err := rows.Scan( &issue.ID, &issue.CommandID, &issue.IssueType, &issue.Description, &issue.Status, &issue.ReportedBy, &issue.ResolvedBy, &issue.Resolution, &issue.CreatedAt, &issue.UpdatedAt, ) if err != nil { return nil, fmt.Errorf("erreur scan problème: %w", err) } issues = append(issues, issue) } return issues, nil } // CreateDeliveryIssue crée un nouveau problème func (d *Database) CreateDeliveryIssue(commandID int, issueType, description, reportedBy string) (*models.DeliveryIssue, error) { query := ` INSERT INTO delivery_issues (command_id, issue_type, description, status, reported_by, created_at, updated_at) VALUES ($1, $2, $3, 'open', $4, NOW(), NOW()) RETURNING id, command_id, issue_type, description, status, reported_by, created_at, updated_at ` var issue models.DeliveryIssue err := d.QueryRow(query, commandID, issueType, description, reportedBy).Scan( &issue.ID, &issue.CommandID, &issue.IssueType, &issue.Description, &issue.Status, &issue.ReportedBy, &issue.CreatedAt, &issue.UpdatedAt, ) if err != nil { return nil, fmt.Errorf("erreur création problème: %w", err) } log.Printf("✅ Problème créé: ID=%d, Type=%s, Commande=%d", issue.ID, issueType, commandID) return &issue, nil } // UpdateDeliveryIssue met à jour un problème func (d *Database) UpdateDeliveryIssue(issueID int, status, resolution, resolvedBy string) error { query := ` UPDATE delivery_issues SET status = $1, resolution = $2, resolved_by = $3, updated_at = NOW() WHERE id = $4 ` result, err := d.Exec(query, status, resolution, resolvedBy, issueID) if err != nil { return fmt.Errorf("erreur mise à jour problème: %w", err) } rowsAffected, _ := result.RowsAffected() if rowsAffected == 0 { return fmt.Errorf("problème non trouvé") } log.Printf("✅ Problème %d mis à jour: status=%s", issueID, status) return nil }