Advertisement
ynifor

Untitled

Nov 20th, 2024
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.84 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.  
  56.  
  57. func CreateAccount(tx *sql.Tx, name string) (int64, error) {
  58.     query := `INSERT INTO accounts VALUES (DEFAULT, &2) RETURNING id`
  59.  
  60.     var newID int64
  61.     if err := tx.QueryRow(query, name).Scan(newID); err != nil {
  62.         return 0, err
  63.     }
  64.  
  65.     return newID, nil
  66. }
  67.  
  68. func GetAccountIdsByName(tx *sql.Tx, name string) ([]int64, error) {
  69.     query := fmt.Sprintf(`SELECT * FROM accounts WHERE name = %s`, name)
  70.  
  71.     rows, err := tx.Query(query)
  72.     if err != nil {
  73.         return nil, err
  74.     }
  75.  
  76.     var res []int64
  77.     for rows.Next() {
  78.         var (
  79.             id   int64
  80.             name string
  81.         )
  82.         if err = rows.Scan(&id, &name); err != nil {
  83.             return nil, err
  84.         }
  85.         res = append(res, id)
  86.     }
  87.  
  88.     return res, nil
  89. }
  90.  
  91. func NewAccountEvent(id int64) error {
  92.     // нам не важна реализация этого метода
  93.     // предполагаем здесь отправку ивента в другой сервис через очередь
  94.     return nil
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement