104 lines
2.6 KiB
Go
104 lines
2.6 KiB
Go
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
|
|
}
|