ynifor

Untitled

Nov 14th, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.83 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "database/sql"
  5.     "flag"
  6.     "log"
  7.  
  8.     _ "github.com/lib/pq"
  9. )
  10.  
  11. func main() {
  12.     var name string
  13.     flag.StringVar(&name, "name", "default", "account name")
  14.  
  15.     db, err := sql.Open("postgres", "dataSourceName") // предположим, что параметры берем из конфига, здесь это опущенно. Не считаем за ошибку
  16.     if err != nil {
  17.         db.Close()
  18.         log.Println(err)
  19.         return
  20.     }
  21.  
  22.     tx, err := db.Begin()
  23.     if err != nil {
  24.         log.Println(err)
  25.         return
  26.     }
  27.  
  28.     id, err := CreateAccount(tx, name)
  29.     if err != nil {
  30.         log.Println(err)
  31.         return
  32.     }
  33.  
  34.     if err := NewAccountEvent(id); err != nil {
  35.         log.Println(err)
  36.         return
  37.     }
  38.  
  39.     ids, err := GetAccountIdsByName(tx, name)
  40.     if err != nil {
  41.         log.Println(err)
  42.         return
  43.     }
  44.  
  45.     for _, id := range ids {
  46.         // какие-либо обновления
  47.         _ = id
  48.     }
  49.  
  50.     tx.Commit()
  51.  
  52.     db.Close()
  53. }
  54.  
  55. func CreateAccount(tx *sql.Tx, name string) (int64, error) {
  56.     query := `INSERT INTO accounts VALUES (DEFAULT, &2) RETURNING id`
  57.  
  58.     var newID int64
  59.     if err := tx.QueryRow(query, name).Scan(newID); err != nil {
  60.         return 0, err
  61.     }
  62.  
  63.     return newID, nil
  64. }
  65.  
  66. func GetAccountIdsByName(tx *sql.Tx, name string) ([]int64, error) {
  67.     query := fmt.Sprintf(`SELECT * FROM accounts WHERE name = %s`, name)
  68.  
  69.     rows, err := tx.Query(query)
  70.     if err != nil {
  71.         return nil, err
  72.     }
  73.  
  74.     var res []int64
  75.     for rows.Next() {
  76.         var (
  77.             id   int64
  78.             name string
  79.         )
  80.         if err = rows.Scan(&id, &name); err != nil {
  81.             return nil, err
  82.         }
  83.         res = append(res, id)
  84.     }
  85.  
  86.     return res, nil
  87. }
  88.  
  89. func NewAccountEvent(id int64) error {
  90.     // нам не важна реализация этого метода
  91.     // предполагаем здесь отправку ивента в другой сервис через очередь
  92.     return nil
  93. }
Add Comment
Please, Sign In to add comment