package db import ( "fmt" "gestion/models" ) func (d *Database) CreateAlert(username string) (models.AlertPolicy, error) { query := ` INSERT INTO alerte_policy (username, status) VALUES ($1, 'true') RETURNING id, username, status, created_at, updated_at ` var alert models.AlertPolicy err := d.QueryRow(query, username).Scan(&alert.ID, &alert.Username, &alert.Status, &alert.CreatedAt, &alert.UpdatedAt) if err != nil { return models.AlertPolicy{}, err } return alert, nil } func (d *Database) GetAlertPolicy(id int) (models.AlertPolicy, error) { query := ` SELECT id, username, status, created_at, updated_at FROM alerte_policy WHERE id = $1 ` var alert models.AlertPolicy err := d.QueryRow(query, id).Scan(&alert.ID, &alert.Username, &alert.Status, &alert.CreatedAt, &alert.UpdatedAt) if err != nil { return models.AlertPolicy{}, err } return alert, nil } func (d *Database) GetAllAlerts() ([]models.AlertPolicy, error) { query := ` SELECT id, username, status, created_at, updated_at FROM alerte_policy ` rows, err := d.Query(query) if err != nil { return nil, err } defer rows.Close() var alerts []models.AlertPolicy for rows.Next() { var alert models.AlertPolicy err := rows.Scan(&alert.ID, &alert.Username, &alert.Status, &alert.CreatedAt, &alert.UpdatedAt) if err != nil { return nil, err } alerts = append(alerts, alert) } return alerts, nil } func (d *Database) DeleteAlertPolicy(id int) error { query := ` DELETE FROM alerte_policy WHERE id = $1 ` _, err := d.Exec(query, id) if err != nil { return err } return nil } // EndAlert met fin à une alerte en changeant son statut à 'false' func (d *Database) EndAlert(id int) error { query := ` UPDATE alerte_policy SET status = 'false', updated_at = CURRENT_TIMESTAMP WHERE id = $1 AND status = 'true' ` result, err := d.Exec(query, id) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return fmt.Errorf("alerte non trouvée ou déjà terminée") } return nil } // ActivateAlert active une alerte en changeant son statut à 'true' func (d *Database) ActivateAlert(id int) error { query := ` UPDATE alerte_policy SET status = 'true', updated_at = CURRENT_TIMESTAMP WHERE id = $1 AND status = 'false' ` result, err := d.Exec(query, id) if err != nil { return err } rowsAffected, err := result.RowsAffected() if err != nil { return err } if rowsAffected == 0 { return fmt.Errorf("alerte non trouvée ou déjà active") } return nil } // GetActiveAlerts récupère toutes les alertes actives (status = 'true') func (d *Database) GetActiveAlerts() ([]models.AlertPolicy, error) { query := ` SELECT id, username, status, created_at, updated_at FROM alerte_policy WHERE status = 'true' ORDER BY created_at DESC ` rows, err := d.Query(query) if err != nil { return nil, err } defer rows.Close() var alerts []models.AlertPolicy for rows.Next() { var alert models.AlertPolicy err := rows.Scan(&alert.ID, &alert.Username, &alert.Status, &alert.CreatedAt, &alert.UpdatedAt) if err != nil { return nil, err } alerts = append(alerts, alert) } return alerts, nil } // GetAlertsByUsername récupère toutes les alertes d'un livreur func (d *Database) GetAlertsByUsername(username string) ([]models.AlertPolicy, error) { query := ` SELECT id, username, status, created_at, updated_at FROM alerte_policy WHERE username = $1 ORDER BY created_at DESC ` rows, err := d.Query(query, username) if err != nil { return nil, err } defer rows.Close() var alerts []models.AlertPolicy for rows.Next() { var alert models.AlertPolicy err := rows.Scan(&alert.ID, &alert.Username, &alert.Status, &alert.CreatedAt, &alert.UpdatedAt) if err != nil { return nil, err } alerts = append(alerts, alert) } return alerts, nil }