diff --git a/code/app/app-go/.codex/finance_migration_check.go b/code/app/app-go/.codex/finance_migration_check.go new file mode 100644 index 00000000..ac1cef0e --- /dev/null +++ b/code/app/app-go/.codex/finance_migration_check.go @@ -0,0 +1,106 @@ +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/jackc/pgx/v5" +) + +func main() { + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + appConn, err := pgx.Connect(ctx, "postgres://postgres:zhang520..@117.72.182.135:5432/app?sslmode=disable") + must(err) + defer appConn.Close(ctx) + + allappConn, err := pgx.Connect(ctx, "postgres://postgres:zhang520..@117.72.182.135:5432/allapp?sslmode=disable") + must(err) + defer allappConn.Close(ctx) + + fmt.Println("app.finance_record joined with categories:") + rows, err := appConn.Query(ctx, ` + select r.id, r.space_id, r.category_id, c.name, c.icon, c.type, r.amount, r.remark, + r.record_time, r.create_by, r.create_time, r.update_by, r.update_time + from finance_record r + join finance_category_space c on c.id = r.category_id + order by r.id + `) + must(err) + defer rows.Close() + for rows.Next() { + var id, spaceID, categoryID, createBy, updateBy int64 + var name, icon string + var typ int16 + var amount string + var remark *string + var recordTime *time.Time + var createTime, updateTime *time.Time + must(rows.Scan(&id, &spaceID, &categoryID, &name, &icon, &typ, &amount, &remark, &recordTime, &createBy, &createTime, &updateBy, &updateTime)) + fmt.Printf("- id=%d space=%d cat=%d %s/%s/type=%d amount=%s remark=%v record=%v create_by=%d update_by=%d\n", id, spaceID, categoryID, name, icon, typ, amount, remark, datePtr(recordTime), createBy, updateBy) + } + must(rows.Err()) + + fmt.Println("\napp spaces:") + printRows(ctx, appConn, `select id, name, invite_code, owner_id from space order by id`) + + fmt.Println("\nallapp families:") + printRows(ctx, allappConn, `select id, name, invite_code, owner_id from b_family order by id`) + + fmt.Println("\ncategory name/type/icon matches:") + rows, err = appConn.Query(ctx, ` + select distinct c.name, c.icon, c.type + from finance_record r + join finance_category_space c on c.id = r.category_id + order by c.type, c.name, c.icon + `) + must(err) + defer rows.Close() + for rows.Next() { + var name, icon string + var typ int16 + must(rows.Scan(&name, &icon, &typ)) + var id int64 + err := allappConn.QueryRow(ctx, ` + select id from b_finance_category + where name = $1 and icon = $2 and type = $3 + order by id + limit 1 + `, name, icon, typ).Scan(&id) + if err != nil { + fmt.Printf("- %s/%s/type=%d -> NO MATCH (%v)\n", name, icon, typ, err) + continue + } + fmt.Printf("- %s/%s/type=%d -> allapp category id=%d\n", name, icon, typ, id) + } + must(rows.Err()) +} + +func printRows(ctx context.Context, conn *pgx.Conn, sql string) { + rows, err := conn.Query(ctx, sql) + must(err) + defer rows.Close() + for rows.Next() { + vals, err := rows.Values() + must(err) + fmt.Printf("- %v\n", vals) + } + must(rows.Err()) +} + +func datePtr(t *time.Time) any { + if t == nil { + return nil + } + return t.Format("2006-01-02") +} + +func must(err error) { + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/git_pull_master.bat b/git_pull_master.bat new file mode 100644 index 00000000..12121cb5 --- /dev/null +++ b/git_pull_master.bat @@ -0,0 +1,23 @@ +@echo off +setlocal + +cd /d "%~dp0" + +echo Current directory: +cd +echo. + +echo Running: git pull origin master +git pull origin master +if errorlevel 1 goto error + +echo. +echo Done. +pause +exit /b 0 + +:error +echo. +echo Failed. See the message above. +pause +exit /b 1