mirror of
https://github.com/tavo-wasd-gh/conex-builder.git
synced 2025-06-06 11:43:29 -06:00
lib cleanup
This commit is contained in:
parent
8d615ae418
commit
6dea68ba49
5 changed files with 61 additions and 77 deletions
18
README.org
18
README.org
|
@ -37,19 +37,13 @@ CREATE TABLE sites (
|
|||
);
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC sql :results silent
|
||||
INSERT INTO sites (folder, status, due, name, sur, email, phone, code)
|
||||
VALUES ('athos', 'up', '2025-08-31T20:26:58Z', 'John', 'Doe', 'john@doe', '8888-8888', 'CR');
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC sql
|
||||
SELECT * FROM sites;
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
| id | folder | status | due | name | sur | email | phone | code | raw |
|
||||
|----+-----------+--------+------------------------+------+-----+---------------------------------------+------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| 1 | gofitness | down | 2025-09-01 01:18:08-06 | John | Doe | sb-8kx8c32267916@personal.example.com | 5068031951 | CR | {"time": 1725175087581, "blocks": [{"id": "dGd_EGtUWN", "data": {"text": "asdfasdfasdfasdf", "level": 2}, "type": "header"}, {"id": "z9UoyyRH_4", "data": {"text": "asdfasdfasdfasdfa Hi<br>"}, "type": "paragraph"}], "version": "2.30.5"} |
|
||||
| id | folder | status | due | name | sur | email | phone | code | raw |
|
||||
|----+--------+--------+-----+------+-----+-------+-------+------+-----|
|
||||
|
||||
** Payments table
|
||||
|
||||
|
@ -68,11 +62,6 @@ CREATE TABLE payments (
|
|||
);
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC sql :results silent
|
||||
INSERT INTO payments (capture, site, amount, currency, date, status)
|
||||
VALUES ('5PS47268T4115691X', 1, 20.00, 'USD', '2024-08-30', 'COMPLETED');
|
||||
#+END_SRC
|
||||
|
||||
#+BEGIN_SRC sql
|
||||
SELECT * FROM payments;
|
||||
#+END_SRC
|
||||
|
@ -103,8 +92,7 @@ SELECT * FROM changes;
|
|||
#+END_SRC
|
||||
|
||||
#+RESULTS:
|
||||
| id | by | site | payment | col | prev | next | date |
|
||||
|----+----+------+---------+-----+------+------+------|
|
||||
|---|
|
||||
|
||||
** Types of changes
|
||||
|
||||
|
|
60
server/db.go
60
server/db.go
|
@ -38,11 +38,13 @@ func RegisterSitePayment(capture Capture, directory string, editorData json.RawM
|
|||
country string
|
||||
)
|
||||
|
||||
id = capture.PurchaseUnits[0].Payments.Captures[0].ID
|
||||
amount = capture.PurchaseUnits[0].Payments.Captures[0].Amount.Value
|
||||
currency = capture.PurchaseUnits[0].Payments.Captures[0].Amount.CurrencyCode
|
||||
pstatus = capture.PurchaseUnits[0].Payments.Captures[0].Status
|
||||
date = capture.PurchaseUnits[0].Payments.Captures[0].CreateTime
|
||||
captureData := capture.PurchaseUnits[0].Payments.Captures[0]
|
||||
|
||||
id = captureData.ID
|
||||
amount = captureData.Amount.Value
|
||||
currency = captureData.Amount.CurrencyCode
|
||||
pstatus = captureData.Status
|
||||
date = captureData.CreateTime
|
||||
wstatus = "down"
|
||||
due = date.AddDate(1, 0, 0)
|
||||
name = capture.Payer.Name.GivenName
|
||||
|
@ -52,32 +54,34 @@ func RegisterSitePayment(capture Capture, directory string, editorData json.RawM
|
|||
country = capture.Payer.Address.CountryCode
|
||||
|
||||
var pkey int
|
||||
newSite := db.QueryRow(`SELECT id FROM sites WHERE folder = $1`, directory).Scan(&pkey)
|
||||
newSite := db.QueryRow(`
|
||||
SELECT id FROM sites WHERE folder = $1
|
||||
`, directory).Scan(&pkey)
|
||||
|
||||
if newSite == sql.ErrNoRows {
|
||||
if err := db.QueryRow(
|
||||
`INSERT INTO sites (folder, status, due, name, sur, email, phone, code, raw)
|
||||
if err := db.QueryRow(`
|
||||
INSERT INTO sites (folder, status, due, name, sur, email, phone, code, raw)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
||||
RETURNING id`,
|
||||
directory, wstatus, due,
|
||||
RETURNING id
|
||||
`, directory, wstatus, due,
|
||||
name, surname, email, phone, country,
|
||||
editorData).Scan(&pkey); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBRegisterSite, err)
|
||||
}
|
||||
} else {
|
||||
if err := db.QueryRow(
|
||||
`UPDATE sites SET due = due + INTERVAL '1 year'
|
||||
if err := db.QueryRow(`
|
||||
UPDATE sites SET due = due + INTERVAL '1 year'
|
||||
WHERE id = $1
|
||||
RETURNING id`,
|
||||
pkey).Scan(&pkey); err != nil {
|
||||
RETURNING id
|
||||
`, pkey).Scan(&pkey); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBUpdateDue, err)
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := db.Exec(
|
||||
`INSERT INTO payments (capture, site, amount, currency, date, status)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)`,
|
||||
id, pkey, amount, currency, date, pstatus); err != nil {
|
||||
if _, err := db.Exec(`
|
||||
INSERT INTO payments (capture, site, amount, currency, date, status)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
`, id, pkey, amount, currency, date, pstatus); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBRegisterPayment, err)
|
||||
}
|
||||
|
||||
|
@ -97,22 +101,22 @@ func UpdateSite(by string, pkey int, editorData json.RawMessage) error {
|
|||
}()
|
||||
|
||||
var prev json.RawMessage
|
||||
if err := tx.QueryRow(
|
||||
`SELECT raw FROM sites WHERE id = $1`,
|
||||
pkey).Scan(&prev); err != nil {
|
||||
if err := tx.QueryRow(`
|
||||
SELECT raw FROM sites WHERE id = $1
|
||||
`, pkey).Scan(&prev); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBGetPrevRaw, err)
|
||||
}
|
||||
|
||||
if _, err = tx.Exec(
|
||||
`UPDATE sites SET raw = $1 WHERE id = $2`,
|
||||
editorData, pkey); err != nil {
|
||||
if _, err = tx.Exec(`
|
||||
UPDATE sites SET raw = $1 WHERE id = $2
|
||||
`, editorData, pkey); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBUpdateRaw, err)
|
||||
}
|
||||
|
||||
if _, err = tx.Exec(
|
||||
`INSERT INTO changes (by, site, payment, col, prev, next, date)
|
||||
VALUES ($1, $2, NULL, 'raw', $3, $4, CURRENT_DATE);`,
|
||||
by, pkey, prev, editorData); err != nil {
|
||||
if _, err = tx.Exec(`
|
||||
INSERT INTO changes (by, site, payment, col, prev, next, date)
|
||||
VALUES ($1, $2, NULL, 'raw', $3, $4, CURRENT_DATE);
|
||||
`, by, pkey, prev, editorData); err != nil {
|
||||
return fmt.Errorf("%s: %v", errDBChangesRaw, err)
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ package main
|
|||
|
||||
import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
|
@ -10,25 +9,25 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
msgClosingDBConn = "Msg: init.go: Closing database connection"
|
||||
msgDBConn = "Msg: init.go: Established database connection"
|
||||
errDBConn = "Fatal: init.go: Connect to database"
|
||||
errDBPing = "Fatal: init.go: Ping database"
|
||||
errClosingDBConn = "Fatal: init.go: Closing database connection"
|
||||
msgClosingDBConn = "Msg: init.go: Closing database connection"
|
||||
msgDBConn = "Msg: init.go: Established database connection"
|
||||
errDBConn = "Fatal: init.go: Connect to database"
|
||||
errDBPing = "Fatal: init.go: Ping database"
|
||||
errClosingDBConn = "Fatal: init.go: Closing database connection"
|
||||
errMissingCredentials = "Fatal: init.go: Credentials"
|
||||
)
|
||||
|
||||
var db *sql.DB
|
||||
|
||||
func initialize() {
|
||||
godotenv.Load()
|
||||
|
||||
if os.Getenv("BASE_URL") == "" ||
|
||||
os.Getenv("CLIENT_ID") == "" ||
|
||||
os.Getenv("CLIENT_SECRET") == "" ||
|
||||
os.Getenv("RETURN_URL") == "" ||
|
||||
os.Getenv("CANCEL_URL") == "" ||
|
||||
os.Getenv("PORT") == "" {
|
||||
log.Fatalf("Error 000: Missing credentials")
|
||||
fatal(nil, errMissingCredentials)
|
||||
}
|
||||
|
||||
var err error
|
||||
|
@ -38,21 +37,21 @@ func initialize() {
|
|||
" password="+os.Getenv("DB_PASS")+
|
||||
" dbname="+os.Getenv("DB_NAME"))
|
||||
if err != nil {
|
||||
log.Fatalf("%s: %v", errDBConn, err)
|
||||
fatal(err, errDBConn)
|
||||
}
|
||||
|
||||
if err := db.Ping(); err != nil {
|
||||
log.Fatalf("%s: %v", errDBPing, err)
|
||||
fatal(err, errDBPing)
|
||||
}
|
||||
|
||||
log.Println(msgDBConn)
|
||||
msg(msgDBConn)
|
||||
}
|
||||
|
||||
func shutdown() {
|
||||
if db != nil {
|
||||
log.Println(msgClosingDBConn)
|
||||
msg(msgClosingDBConn)
|
||||
if err := db.Close(); err != nil {
|
||||
log.Fatalf("%s: %v", errClosingDBConn, err)
|
||||
fatal(err, errClosingDBConn)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package main
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
@ -36,7 +35,7 @@ func main() {
|
|||
port := os.Getenv("PORT")
|
||||
|
||||
go func() {
|
||||
log.Println(msgServerStart + ": " + port + "...")
|
||||
msg(msgServerStart + ": " + port + "...")
|
||||
if err := http.ListenAndServe(":"+port, nil); err != nil {
|
||||
fatal(err, errServerStart)
|
||||
}
|
||||
|
@ -45,7 +44,11 @@ func main() {
|
|||
<-stop
|
||||
|
||||
shutdown()
|
||||
log.Println(msgServerShutdown)
|
||||
msg(msgServerShutdown)
|
||||
}
|
||||
|
||||
func msg(notice string) {
|
||||
log.Println(notice)
|
||||
}
|
||||
|
||||
func fail(w http.ResponseWriter, err error, notice string) {
|
||||
|
@ -76,28 +79,20 @@ func CreateOrderHandler(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func CaptureOrderHandler(w http.ResponseWriter, r *http.Request) {
|
||||
info, err := io.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
fail(w, err, errReadBody)
|
||||
return
|
||||
}
|
||||
var cart struct {
|
||||
Directory string `json:"directory"`
|
||||
EditorData json.RawMessage `json:"editor_data"`
|
||||
}
|
||||
err = json.Unmarshal(info, &cart)
|
||||
if err != nil {
|
||||
fail(w, err, errParseBody)
|
||||
if err := json.NewDecoder(r.Body).Decode(&cart); err != nil {
|
||||
fail(w, err, errReadBody)
|
||||
return
|
||||
}
|
||||
directory := cart.Directory
|
||||
editorData := cart.EditorData
|
||||
|
||||
path := strings.TrimPrefix(r.URL.Path, "/api/orders/")
|
||||
parts := strings.Split(path, "/")
|
||||
orderID := parts[0]
|
||||
if orderID == "" {
|
||||
fail(w, err, errGetOrderID)
|
||||
fail(w, nil, errGetOrderID)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -107,8 +102,8 @@ func CaptureOrderHandler(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := RegisterSitePayment(capture, directory, editorData); err != nil {
|
||||
fail(w, err, errRegisterSite+": "+directory)
|
||||
if err := RegisterSitePayment(capture, cart.Directory, cart.EditorData); err != nil {
|
||||
fail(w, err, errRegisterSite+": "+cart.Directory)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
@ -72,7 +71,7 @@ type Receipt struct {
|
|||
func Token() (string, error) {
|
||||
req, err := http.NewRequest("POST",
|
||||
os.Getenv("BASE_URL")+"/v1/oauth2/token",
|
||||
strings.NewReader(`grant_type=client_credentials`))
|
||||
bytes.NewBufferString(`grant_type=client_credentials`))
|
||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||
req.SetBasicAuth(os.Getenv("CLIENT_ID"), os.Getenv("CLIENT_SECRET"))
|
||||
|
||||
|
@ -85,7 +84,6 @@ func Token() (string, error) {
|
|||
var response struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(raw.Body).Decode(&response); err != nil {
|
||||
return "", fmt.Errorf("%s: %v", errTokenResp, err)
|
||||
}
|
||||
|
@ -191,11 +189,11 @@ func CaptureOrder(orderID string) (Capture, Receipt, error) {
|
|||
return Capture{}, Receipt{}, fmt.Errorf("%s: %v", errCaptureOrderResp, err)
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(bytes.NewReader(body)).Decode(&capture); err != nil {
|
||||
if err := json.Unmarshal(body, &capture); err != nil {
|
||||
return Capture{}, Receipt{}, fmt.Errorf("%s: %v", errCaptureOrderDecodeCapture, err)
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(bytes.NewReader(body)).Decode(&receipt); err != nil {
|
||||
if err := json.Unmarshal(body, &receipt); err != nil {
|
||||
return Capture{}, Receipt{}, fmt.Errorf("%s: %v", errCaptureOrderDecodeReceipt, err)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue