From 08dc0d38f4ec32de4d74c76ff4a76a2a747cdd54 Mon Sep 17 00:00:00 2001 From: Roberto Esteves Date: Sat, 13 Jan 2024 17:32:31 -0300 Subject: [PATCH 1/5] database: Implement pooling and context cancel --- database/db_operations.go | 26 ++++-- database/guilds.go | 164 +++++++++++++------------------------- database/leaderboard.go | 10 ++- database/rsn.go | 37 ++++++--- database/times.go | 32 ++++++-- database/user.go | 52 +++++++++--- database/users.go | 10 ++- go.mod | 2 + go.sum | 4 + main.go | 3 +- 10 files changed, 191 insertions(+), 149 deletions(-) diff --git a/database/db_operations.go b/database/db_operations.go index 780d81c..a0b911c 100644 --- a/database/db_operations.go +++ b/database/db_operations.go @@ -7,19 +7,19 @@ import ( "reflect" "github.com/Masterminds/squirrel" - "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" ) var psql = squirrel.StatementBuilder.PlaceholderFormat(squirrel.Dollar) -var db *pgx.Conn +var pool *pgxpool.Pool -func InitDB() (*pgx.Conn, error) { - conn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL")) +func InitDB() (*pgxpool.Pool, error) { + conn, err := pgxpool.New(context.Background(), os.Getenv("DATABASE_URL")) if err != nil { return nil, fmt.Errorf("unable to connect to database: %v", err) } - db = conn // Store the connection in a package-level variable + pool = conn // Store the connection in a package-level variable return conn, nil } @@ -36,7 +36,13 @@ func SelectOne[T any](table string, filter map[string]string, result interface{} return err } - row := db.QueryRow(context.Background(), sql, args...) + conn, err := pool.Acquire(context.Background()) + defer conn.Release() + if err != nil { + return err + } + + row := conn.QueryRow(context.Background(), sql, args...) // Get type information of the result valueType := reflect.TypeOf(result).Elem() @@ -75,7 +81,13 @@ func SelectMany[T any](table string, filter map[string]string, result *[]T) erro return err } - rows, err := db.Query(context.Background(), sql, args...) + conn, err := pool.Acquire(context.Background()) + defer conn.Release() + if err != nil { + return err + } + + rows, err := conn.Query(context.Background(), sql, args...) if err != nil { return err } diff --git a/database/guilds.go b/database/guilds.go index d8fa4a0..c3d8123 100644 --- a/database/guilds.go +++ b/database/guilds.go @@ -9,7 +9,7 @@ import ( "github.com/Masterminds/squirrel" ) -func SelectGuild(f map[string]string) (models.Guild, error) { +func SelectGuild(ctx context.Context, f map[string]string) (models.Guild, error) { query := psql.Select("*").From("guilds") for key, value := range f { @@ -21,7 +21,13 @@ func SelectGuild(f map[string]string) (models.Guild, error) { return models.Guild{}, err } - row := db.QueryRow(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return models.Guild{}, err + } + defer conn.Release() + + row := conn.QueryRow(ctx, sql, args...) var guild models.Guild @@ -33,12 +39,12 @@ func SelectGuild(f map[string]string) (models.Guild, error) { return guild, nil } -func InsertGuild(g string) error { - tx, err := db.Begin(context.Background()) +func InsertGuild(ctx context.Context, g string) error { + conn, err := pool.Acquire(ctx) if err != nil { return err } - defer tx.Rollback(context.Background()) // Rollback the transaction if it hasn't been committed + defer conn.Release() query := psql.Insert("guilds").Columns("guild_id").Values(g) sql, args, err := query.ToSql() @@ -46,173 +52,115 @@ func InsertGuild(g string) error { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + tx, err := conn.Begin(ctx) if err != nil { return err } + defer tx.Rollback(ctx) - if commandTag.RowsAffected() != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) - } - - err = InitializeGuildCategories(g) + commandTagGuild, err := tx.Exec(ctx, sql, args...) if err != nil { return err } - err = InitializeGuildBosses(g) + query = psql.Insert("guild_categories"). + Columns("guild_id", "category", "message_id"). + Suffix("SELECT $1, name, '' FROM categories", g) + + sql, args, err = query.ToSql() if err != nil { return err } - err = tx.Commit(context.Background()) + commandTagCategories, err := tx.Exec(ctx, sql, args...) if err != nil { return err } - return nil -} + query = psql.Insert("guild_bosses"). + Columns("guild_id", "boss", "pb_id"). + Suffix("SELECT $1, name, '' FROM bosses", g) -func DeleteGuild(f map[string]string) error { - query := psql.Delete("guilds") - - for key, value := range f { - query = query.Where(squirrel.Eq{key: value}) + sql, args, err = query.ToSql() + if err != nil { + return err } - sql, args, err := query.ToSql() + commandTagBosses, err := tx.Exec(ctx, sql, args...) if err != nil { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + err = tx.Commit(ctx) if err != nil { return err } - if commandTag.RowsAffected() != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) + if rows := commandTagGuild.RowsAffected(); rows != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", rows) + } else if rows := commandTagCategories.RowsAffected(); rows != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", rows) + } else if rows := commandTagBosses.RowsAffected(); rows != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", rows) } return nil } -func UpdateGuild(g string, f map[string]string) error { - // .SetMap requires an empty interface map so we convert here - // As f passes parameters caught from HTTP requests, thus always string - filter := utils.StringMapToInterfaceMap(f) - - query := psql.Update("guilds").SetMap(filter).Where(squirrel.Eq{"guild_id": g}) - sql, args, err := query.ToSql() - if err != nil { - return err - } - - commandTag, err := db.Exec(context.Background(), sql, args...) - if err != nil { - return err - } +func DeleteGuild(ctx context.Context, f map[string]string) error { + query := psql.Delete("guilds") - if commandTag.RowsAffected() != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) + for key, value := range f { + query = query.Where(squirrel.Eq{key: value}) } - return nil -} - -func InitializeGuildBosses(g string) error { - sql, args, err := psql.Select("name").From("bosses").ToSql() + sql, args, err := query.ToSql() if err != nil { return err } - rows, err := db.Query(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) if err != nil { return err } + defer conn.Release() - bosses := make([]map[string]interface{}, 0) - - for rows.Next() { - var b string - // Assuming the columns are named "column1", "column2", etc. - if err := rows.Scan(&b); err != nil { - return err - } - - boss := map[string]interface{}{ - "boss": b, - "guild_id": g, - "pb_id": nil, - } - - bosses = append(bosses, boss) - } - - // Insert data into guild_bosses - query := psql.Insert("guild_bosses").Columns("boss", "guild_id", "pb_id") - - for _, v := range bosses { - query = query.Values(v["boss"], v["guild_id"], v["pb_id"]) - } - - sql, args, err = query.ToSql() + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return err } - _, err = db.Exec(context.Background(), sql, args...) - if err != nil { - return err + if commandTag.RowsAffected() != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) } return nil } -func InitializeGuildCategories(g string) error { - sql, args, err := psql.Select("name").From("categories").ToSql() +func UpdateGuild(ctx context.Context, g string, f map[string]string) error { + // .SetMap requires an empty interface map so we convert here + // As f passes parameters caught from HTTP requests, thus always string + filter := utils.StringMapToInterfaceMap(f) + + query := psql.Update("guilds").SetMap(filter).Where(squirrel.Eq{"guild_id": g}) + sql, args, err := query.ToSql() if err != nil { return err } - rows, err := db.Query(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) if err != nil { return err } + defer conn.Release() - categories := make([]map[string]interface{}, 0) - - for rows.Next() { - var c string - // Assuming the columns are named "column1", "column2", etc. - if err := rows.Scan(&c); err != nil { - return err - } - - category := map[string]interface{}{ - "guild_id": g, - "category": c, - "message_id": "", - } - - categories = append(categories, category) - } - - // Insert data into guild_bosses - query := psql.Insert("guild_categories").Columns("guild_id", "category", "message_id") - - for _, v := range categories { - query = query.Values(v["guild_id"], v["category"], v["message_id"]) - } - - sql, args, err = query.ToSql() + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return err } - _, err = db.Exec(context.Background(), sql, args...) - if err != nil { - return err + if commandTag.RowsAffected() != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) } return nil diff --git a/database/leaderboard.go b/database/leaderboard.go index c8e0549..cdc708f 100644 --- a/database/leaderboard.go +++ b/database/leaderboard.go @@ -7,7 +7,7 @@ import ( "github.com/Masterminds/squirrel" ) -func SelectLeaderboard(filter map[string]string) (models.Users, error) { +func SelectLeaderboard(ctx context.Context, filter map[string]string) (models.Users, error) { query := psql.Select("*").From("users").OrderBy("points DESC").Limit(50) for key, value := range filter { @@ -19,8 +19,14 @@ func SelectLeaderboard(filter map[string]string) (models.Users, error) { return models.Users{}, err } + conn, err := pool.Acquire(ctx) + if err != nil { + return models.Users{}, err + } + defer conn.Release() + // Executing the query - rows, err := db.Query(context.Background(), sql, args...) + rows, err := conn.Query(ctx, sql, args...) if err != nil { return models.Users{}, err } diff --git a/database/rsn.go b/database/rsn.go index 4769bdb..2f548ba 100644 --- a/database/rsn.go +++ b/database/rsn.go @@ -8,7 +8,7 @@ import ( "github.com/Masterminds/squirrel" ) -func SelectRsns(f map[string]string) ([]models.RSN, error) { +func SelectRsns(ctx context.Context, f map[string]string) ([]models.RSN, error) { query := psql.Select("*").From("rsn") for key, value := range f { @@ -17,12 +17,18 @@ func SelectRsns(f map[string]string) ([]models.RSN, error) { sql, args, err := query.ToSql() if err != nil { - return []models.RSN{}, err + return nil, err } - rows, err := db.Query(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) if err != nil { - return []models.RSN{}, err + return nil, err + } + defer conn.Release() + + rows, err := conn.Query(ctx, sql, args...) + if err != nil { + return nil, err } var rsns []models.RSN @@ -31,7 +37,7 @@ func SelectRsns(f map[string]string) ([]models.RSN, error) { for rows.Next() { var rsn models.RSN if err := rows.Scan(&rsn.UserId, &rsn.GuildId, &rsn.WomId, &rsn.RSN); err != nil { - return []models.RSN{}, err + return nil, err } rsns = append(rsns, rsn) } @@ -39,14 +45,21 @@ func SelectRsns(f map[string]string) ([]models.RSN, error) { return rsns, nil } -func InsertRsn(f map[string]string, wid string) error { +func InsertRsn(ctx context.Context, f map[string]string, wid string) error { query := psql.Insert("rsn").Columns("guild_id", "user_id", "rsn", "wom_id").Values(f["guild_id"], f["user_id"], f["rsn"], wid) sql, args, err := query.ToSql() if err != nil { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return err + } + defer conn.Release() + + + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return err } @@ -58,7 +71,7 @@ func InsertRsn(f map[string]string, wid string) error { return nil } -func DeleteRsn(f map[string]string) error { +func DeleteRsn(ctx context.Context, f map[string]string) error { query := psql.Delete("rsn") for key, value := range f { @@ -70,7 +83,13 @@ func DeleteRsn(f map[string]string) error { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return err + } + defer conn.Release() + + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return err } diff --git a/database/times.go b/database/times.go index 564bfd4..c3d7cbe 100644 --- a/database/times.go +++ b/database/times.go @@ -15,7 +15,7 @@ func SelectTime() (models.Time, error) { return time, nil } -func CheckPb(f map[string]string) (int, error) { +func CheckPb(ctx context.Context, f map[string]string) (int, error) { query := psql.Select("t.time"). From("guild_bosses gb"). Join("times t ON gb.pb_id = t.run_id"). @@ -25,7 +25,13 @@ func CheckPb(f map[string]string) (int, error) { return -1, err } - row := db.QueryRow(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return 0, err + } + defer conn.Release() + + row := conn.QueryRow(ctx, sql, args...) var pb int @@ -37,7 +43,7 @@ func CheckPb(f map[string]string) (int, error) { return pb, nil } -func InsertTime(f map[string]string) (models.Time, error) { +func InsertTime(ctx context.Context, f map[string]string) (models.Time, error) { teamIds := strings.Split(f["user_ids"], ",") timeData := map[string]interface{}{ @@ -51,7 +57,13 @@ func InsertTime(f map[string]string) (models.Time, error) { return models.Time{}, err } - row := db.QueryRow(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return models.Time{}, err + } + defer conn.Release() + + row := conn.QueryRow(ctx, sql, args...) var runId int res := models.Time{Team: []models.Teammate{}} @@ -76,7 +88,11 @@ func InsertTime(f map[string]string) (models.Time, error) { Set("pb_id", runId). Where(squirrel.Eq{"guild_id": f["guild_id"], "boss": f["boss"]}). ToSql() - commandTag, err := db.Exec(context.Background(), sql, args...) + if err != nil { + return models.Time{}, err + } + + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return models.Time{}, err } @@ -92,7 +108,11 @@ func InsertTime(f map[string]string) (models.Time, error) { } sql, args, err = query.ToSql() - _, err = db.Exec(context.Background(), sql, args...) + if err != nil { + return models.Time{}, err + } + + _, err = conn.Exec(ctx, sql, args...) if err != nil { return models.Time{}, err } diff --git a/database/user.go b/database/user.go index 645f231..7744323 100644 --- a/database/user.go +++ b/database/user.go @@ -8,7 +8,7 @@ import ( "github.com/Masterminds/squirrel" ) -func SelectUser(f map[string]string) (models.User, error) { +func SelectUser(ctx context.Context, f map[string]string) (models.User, error) { query := psql.Select("users.*").From("users") switch { @@ -19,7 +19,7 @@ func SelectUser(f map[string]string) (models.User, error) { case f["user_id"] != "": query = query.Where(squirrel.Eq{"users.user_id": f["user_id"], "users.guild_id": f["guild_id"]}) default: - return models.User{}, fmt.Errorf("No valid search key provided") + return models.User{}, fmt.Errorf("no valid search key provided") } sql, args, err := query.ToSql() @@ -27,7 +27,13 @@ func SelectUser(f map[string]string) (models.User, error) { return models.User{}, err } - row := db.QueryRow(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return models.User{}, err + } + defer conn.Release() + + row := conn.QueryRow(ctx, sql, args...) var user models.User @@ -39,12 +45,18 @@ func SelectUser(f map[string]string) (models.User, error) { return user, nil } -func InsertUser(f map[string]string, wid string) error { - tx, err := db.Begin(context.Background()) +func InsertUser(ctx context.Context, f map[string]string, wid string) error { + conn, err := pool.Acquire(ctx) + defer conn.Release() if err != nil { return err } - defer tx.Rollback(context.Background()) // Rollback the transaction if it hasn't been committed + + tx, err := conn.Begin(ctx) + if err != nil { + return err + } + defer tx.Rollback(ctx) // Rollback the transaction if it hasn't been committed query := psql.Insert("users").Columns("guild_id", "user_id").Values(f["guild_id"], f["user_id"]) sql, args, err := query.ToSql() @@ -52,29 +64,37 @@ func InsertUser(f map[string]string, wid string) error { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + commandTagUser, err := tx.Exec(ctx, sql, args...) if err != nil { return err } - if commandTag.RowsAffected() != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", commandTag.RowsAffected()) + query = psql.Insert("rsn").Columns("guild_id", "user_id", "rsn", "wom_id").Values(f["guild_id"], f["user_id"], f["rsn"], wid) + sql, args, err = query.ToSql() + if err != nil { + return err } - err = InsertRsn(f, wid) + commandTagRsn, err := tx.Exec(ctx, sql, args...) if err != nil { return err } - err = tx.Commit(context.Background()) + err = tx.Commit(ctx) if err != nil { return err } + if commandTagUser.RowsAffected() != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", commandTagUser.RowsAffected()) + } else if commandTagRsn.RowsAffected() != 1 { + return fmt.Errorf("expected 1 row to be affected, got %d", commandTagRsn.RowsAffected()) + } + return nil } -func DeleteUser(f map[string]string) error { +func DeleteUser(ctx context.Context, f map[string]string) error { query := psql.Delete("users") for key, value := range f { @@ -86,7 +106,13 @@ func DeleteUser(f map[string]string) error { return err } - commandTag, err := db.Exec(context.Background(), sql, args...) + conn, err := pool.Acquire(ctx) + if err != nil { + return err + } + defer conn.Release() + + commandTag, err := conn.Exec(ctx, sql, args...) if err != nil { return err } diff --git a/database/users.go b/database/users.go index 3a94039..72ac435 100644 --- a/database/users.go +++ b/database/users.go @@ -8,7 +8,7 @@ import ( "github.com/Masterminds/squirrel" ) -func SelectUsers(f map[string]string) (models.Users, error) { +func SelectUsers(ctx context.Context, f map[string]string) (models.Users, error) { userIds := strings.Split(f["user_ids"], ",") query := psql.Select("*").From("users").Where(squirrel.Eq{"guild_id": f["guild_id"]}).Where(squirrel.Eq{"user_id": userIds}) @@ -18,8 +18,14 @@ func SelectUsers(f map[string]string) (models.Users, error) { return models.Users{}, err } + conn, err := pool.Acquire(ctx) + if err != nil { + return models.Users{}, err + } + defer conn.Release() + // Executing the query - rows, err := db.Query(context.Background(), sql, args...) + rows, err := conn.Query(ctx, sql, args...) if err != nil { return models.Users{}, err } diff --git a/go.mod b/go.mod index 8b22057..19c5622 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect github.com/jackc/pgx/v5 v5.5.1 // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect @@ -29,6 +30,7 @@ require ( github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect golang.org/x/crypto v0.16.0 // indirect golang.org/x/net v0.19.0 // indirect + golang.org/x/sync v0.5.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect diff --git a/go.sum b/go.sum index 3e72f5d..6af3913 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/ github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgx/v5 v5.5.1 h1:5I9etrGkLrN+2XPCsi6XLlV5DITbSL/xBZdmAxFcXPI= github.com/jackc/pgx/v5 v5.5.1/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -69,6 +71,8 @@ golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/main.go b/main.go index 571080d..ded75f8 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "context" "fmt" "log" "net/http" @@ -21,7 +20,7 @@ func main() { fmt.Fprintf(os.Stderr, "Error initializing database: %v\n", err) os.Exit(1) } - defer conn.Close(context.Background()) + defer conn.Close() router := routes.NewAPIBuilder().AttachV1Routes() From ba4304098e987423a7777f993b2eea54dd3d1a87 Mon Sep 17 00:00:00 2001 From: Roberto Esteves Date: Sat, 13 Jan 2024 17:43:31 -0300 Subject: [PATCH 2/5] handlers: pass context values to database function --- handlers/guild_handler.go | 10 +++++----- handlers/leaderboard_handler.go | 2 +- handlers/rsn_handler.go | 6 +++--- handlers/time_handler.go | 4 ++-- handlers/user_handler.go | 6 +++--- handlers/users_handler.go | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/handlers/guild_handler.go b/handlers/guild_handler.go index 4796109..1934a6e 100644 --- a/handlers/guild_handler.go +++ b/handlers/guild_handler.go @@ -30,7 +30,7 @@ func GetGuild(w http.ResponseWriter, r *http.Request) { return } - guild, err := database.SelectGuild(p) + guild, err := database.SelectGuild(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error selecting guild: %v\n", err) status = http.StatusNotFound @@ -64,7 +64,7 @@ func CreateGuild(w http.ResponseWriter, r *http.Request) { return } - err = database.InsertGuild(p["guild_id"]) + err = database.InsertGuild(r.Context(), p["guild_id"]) if err != nil { fmt.Fprintf(os.Stderr, "Error creating guild: %v\n", err) status = http.StatusConflict @@ -95,7 +95,7 @@ func RemoveGuild(w http.ResponseWriter, r *http.Request) { return } - err = database.DeleteGuild(p) + err = database.DeleteGuild(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error deleting guild: %v\n", err) status = http.StatusNotFound @@ -132,7 +132,7 @@ func UpdateTimesChannel(w http.ResponseWriter, r *http.Request) { return } - err = database.UpdateGuild(g, f) + err = database.UpdateGuild(r.Context(), g, f) if err != nil { fmt.Fprintf(os.Stderr, "Error updating channel: %v\n", err) status = http.StatusNotFound @@ -170,7 +170,7 @@ func UpdateMultiplier(w http.ResponseWriter, r *http.Request) { return } - err = database.UpdateGuild(g, f) + err = database.UpdateGuild(r.Context(), g, f) if err != nil { fmt.Fprintf(os.Stderr, "Error updating multiplier: %v\n", err) status = http.StatusNotFound diff --git a/handlers/leaderboard_handler.go b/handlers/leaderboard_handler.go index 0d4665e..d584db1 100644 --- a/handlers/leaderboard_handler.go +++ b/handlers/leaderboard_handler.go @@ -30,7 +30,7 @@ func GetLeaderboard(w http.ResponseWriter, r *http.Request) { return } - leaderboard, err := database.SelectLeaderboard(p) + leaderboard, err := database.SelectLeaderboard(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error fetching users: %v\n", err) status = http.StatusNotFound diff --git a/handlers/rsn_handler.go b/handlers/rsn_handler.go index 030526f..d14d993 100644 --- a/handlers/rsn_handler.go +++ b/handlers/rsn_handler.go @@ -31,7 +31,7 @@ func GetRSN(w http.ResponseWriter, r *http.Request) { return } - rsns, err := database.SelectRsns(p) + rsns, err := database.SelectRsns(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error selecting RSN: %v\n", err) status = http.StatusNotFound @@ -73,7 +73,7 @@ func CreateRSN(w http.ResponseWriter, r *http.Request) { return } - err = database.InsertRsn(p, wid) + err = database.InsertRsn(r.Context(), p, wid) if err != nil { fmt.Fprintf(os.Stderr, "Error creating RSN: %v\n", err) // TODO: Handle 404 Not Found errors @@ -107,7 +107,7 @@ func RemoveRSN(w http.ResponseWriter, r *http.Request) { return } - err = database.DeleteRsn(p) + err = database.DeleteRsn(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error deleting RSN: %v\n", err) status = http.StatusNotFound diff --git a/handlers/time_handler.go b/handlers/time_handler.go index fa3c317..9a557e5 100644 --- a/handlers/time_handler.go +++ b/handlers/time_handler.go @@ -43,7 +43,7 @@ func CreateTime(w http.ResponseWriter, r *http.Request) { return } - pb, err := database.CheckPb(p) + pb, err := database.CheckPb(r.Context(), p) if err != nil { if pb == -1 { fmt.Fprintf(os.Stderr, "Error fetching pb: %v\n", err) @@ -62,7 +62,7 @@ func CreateTime(w http.ResponseWriter, r *http.Request) { return } - time, err := database.InsertTime(p) + time, err := database.InsertTime(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error inserting time: %v\n", err) status = http.StatusNotFound diff --git a/handlers/user_handler.go b/handlers/user_handler.go index 762318b..d9272da 100644 --- a/handlers/user_handler.go +++ b/handlers/user_handler.go @@ -40,7 +40,7 @@ func GetUser(w http.ResponseWriter, r *http.Request) { return } - user, err := database.SelectUser(p) + user, err := database.SelectUser(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error fetching user: %v\n", err) status = http.StatusNotFound @@ -82,7 +82,7 @@ func CreateUser(w http.ResponseWriter, r *http.Request) { return } - err = database.InsertUser(p, wid) + err = database.InsertUser(r.Context(), p, wid) if err != nil { fmt.Fprintf(os.Stderr, "Error inserting user: %v\n", err) status = http.StatusConflict @@ -114,7 +114,7 @@ func RemoveUser(w http.ResponseWriter, r *http.Request) { return } - err = database.DeleteUser(p) + err = database.DeleteUser(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error deleting user: %v\n", err) status = http.StatusNotFound diff --git a/handlers/users_handler.go b/handlers/users_handler.go index c136fb4..c7589be 100644 --- a/handlers/users_handler.go +++ b/handlers/users_handler.go @@ -31,7 +31,7 @@ func GetUsers(w http.ResponseWriter, r *http.Request) { return } - users, err := database.SelectUsers(p) + users, err := database.SelectUsers(r.Context(), p) if err != nil { fmt.Fprintf(os.Stderr, "Error fetching users: %v\n", err) status = http.StatusInternalServerError From de91995fe4a18efe972e620e97d1040af5f95e8c Mon Sep 17 00:00:00 2001 From: Roberto Esteves Date: Sat, 13 Jan 2024 18:41:32 -0300 Subject: [PATCH 3/5] auth: use `Authorization` header to get API key --- go.mod | 23 ++++++++--------------- go.sum | 34 +++++++++++++--------------------- middleware/authentication.go | 2 +- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 19c5622..ad2535f 100644 --- a/go.mod +++ b/go.mod @@ -2,39 +2,32 @@ module tectonic-api go 1.21.5 +require ( + github.com/Masterminds/squirrel v1.5.4 + github.com/gorilla/mux v1.8.1 + github.com/jackc/pgx/v5 v5.5.1 + github.com/swaggo/http-swagger v1.3.4 + github.com/swaggo/swag v1.16.2 +) + require ( github.com/KyleBanks/depth v1.2.1 // indirect - github.com/Masterminds/squirrel v1.5.4 // indirect - github.com/PuerkitoBio/purell v1.2.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/go-openapi/jsonpointer v0.20.2 // indirect github.com/go-openapi/jsonreference v0.20.4 // indirect github.com/go-openapi/spec v0.20.13 // indirect github.com/go-openapi/swag v0.22.7 // indirect - github.com/gorilla/mux v1.8.1 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.5.1 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect github.com/swaggo/files v1.0.1 // indirect - github.com/swaggo/http-swagger v1.3.4 // indirect - github.com/swaggo/swag v1.16.2 // indirect - github.com/urfave/cli/v2 v2.27.0 // indirect - github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e // indirect golang.org/x/crypto v0.16.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.16.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 6af3913..c1cb683 100644 --- a/go.sum +++ b/go.sum @@ -2,13 +2,8 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= -github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28= -github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= @@ -18,7 +13,6 @@ github.com/go-openapi/spec v0.20.13 h1:XJDIN+dLH6vqXgafnl5SUIMnzaChQ6QTo0/UPMbkI github.com/go-openapi/spec v0.20.13/go.mod h1:8EOhTpBoFiask8rrgwbLC3zmJfz4zsCUueRuPM6GNkw= github.com/go-openapi/swag v0.22.7 h1:JWrc1uc/P9cSomxfnsFSVWoE1FW6bNbrVPmpQYpCcR8= github.com/go-openapi/swag v0.22.7/go.mod h1:Gl91UqO+btAM0plGGxHqJcQZ1ZTy6jbmridBTsDy8A0= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -31,6 +25,9 @@ github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= @@ -38,31 +35,30 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhR github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/http-swagger v1.3.4 h1:q7t/XLx0n15H1Q9/tk3Y9L4n210XzJF5WtnDX64a5ww= github.com/swaggo/http-swagger v1.3.4/go.mod h1:9dAh0unqMBAlbp1uE2Uc2mQTxNMU/ha4UbucIg1MFkQ= github.com/swaggo/swag v1.16.2 h1:28Pp+8DkQoV+HLzLx8RGJZXNGKbFqnuvSbAAtoxiY04= github.com/swaggo/swag v1.16.2/go.mod h1:6YzXnDcpr0767iOejs318CwYkCQqyGer6BizOg03f+E= -github.com/urfave/cli/v2 v2.27.0 h1:uNs1K8JwTFL84X68j5Fjny6hfANh9nTlJ6dRtZAFAHY= -github.com/urfave/cli/v2 v2.27.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e h1:+SOyEddqYF09QP7vr7CgJ1eti3pY9Fn3LHO1M1r/0sI= -github.com/xrash/smetrics v0.0.0-20231213231151-1d8dd44e695e/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -79,8 +75,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -97,10 +91,8 @@ golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/middleware/authentication.go b/middleware/authentication.go index e10e2c9..efbceb8 100644 --- a/middleware/authentication.go +++ b/middleware/authentication.go @@ -9,7 +9,7 @@ import ( func Authentication(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Get the API key from the URL query parameters - apiKey := r.URL.Query().Get("api_key") + apiKey := r.Header.Get("Authorization") // Validate the API key (you may replace this with your own validation logic) validApiKey := os.Getenv("API_KEY") From d0ed0e0fcdedaffdc56750f1d8a0edf8073a5c9e Mon Sep 17 00:00:00 2001 From: Roberto Esteves Date: Sun, 14 Jan 2024 08:22:05 -0300 Subject: [PATCH 4/5] fix bosses select query --- database/guilds.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/guilds.go b/database/guilds.go index c3d8123..4f2aa29 100644 --- a/database/guilds.go +++ b/database/guilds.go @@ -79,7 +79,7 @@ func InsertGuild(ctx context.Context, g string) error { query = psql.Insert("guild_bosses"). Columns("guild_id", "boss", "pb_id"). - Suffix("SELECT $1, name, '' FROM bosses", g) + Suffix("SELECT $1, name, NULL FROM bosses", g) sql, args, err = query.ToSql() if err != nil { From b13708ec509a93c4f0a4a15397b3a8247d4a1f78 Mon Sep 17 00:00:00 2001 From: Roberto Esteves Date: Mon, 15 Jan 2024 14:08:02 -0300 Subject: [PATCH 5/5] apply fixes requested at review --- database/guilds.go | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/database/guilds.go b/database/guilds.go index 4f2aa29..1d68a46 100644 --- a/database/guilds.go +++ b/database/guilds.go @@ -63,30 +63,16 @@ func InsertGuild(ctx context.Context, g string) error { return err } - query = psql.Insert("guild_categories"). - Columns("guild_id", "category", "message_id"). - Suffix("SELECT $1, name, '' FROM categories", g) - - sql, args, err = query.ToSql() - if err != nil { - return err - } - - commandTagCategories, err := tx.Exec(ctx, sql, args...) - if err != nil { - return err - } - - query = psql.Insert("guild_bosses"). - Columns("guild_id", "boss", "pb_id"). - Suffix("SELECT $1, name, NULL FROM bosses", g) - - sql, args, err = query.ToSql() + sql = `INSERT INTO guild_categories(guild_id, category, message_id) + SELECT $1, name, '' FROM categories` + _, err = tx.Exec(ctx, sql, g) if err != nil { return err } - commandTagBosses, err := tx.Exec(ctx, sql, args...) + sql = `INSERT INTO guild_bosses(guild_id, boss, pb_id) + SELECT $1, name, NULL FROM bosses` + _, err = tx.Exec(ctx, sql, g) if err != nil { return err } @@ -98,10 +84,6 @@ func InsertGuild(ctx context.Context, g string) error { if rows := commandTagGuild.RowsAffected(); rows != 1 { return fmt.Errorf("expected 1 row to be affected, got %d", rows) - } else if rows := commandTagCategories.RowsAffected(); rows != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", rows) - } else if rows := commandTagBosses.RowsAffected(); rows != 1 { - return fmt.Errorf("expected 1 row to be affected, got %d", rows) } return nil