From 6570ac8ae74d95d67b4ecf53d2bf336a2c9d2841 Mon Sep 17 00:00:00 2001 From: broemp Date: Thu, 17 Aug 2023 12:53:43 +0200 Subject: [PATCH 1/2] init discord bot --- .env.example | 5 +- Dockerfile | 3 +- bots/discord/discord_bot.go | 82 +++++++++++++++++++++++++++ main.go => cmd/broempSignal.go | 5 ++ db/migration/000001_init_shema.up.sql | 1 + db/query/user.sql | 9 +++ db/sqlc/models.go | 1 + db/sqlc/user.sql.go | 38 +++++++++++-- db/sqlc/user_test.go | 15 +++++ docker-compose.yml | 4 +- {broempSignal => invite}/friends.go | 2 +- {broempSignal => invite}/invite.go | 2 +- {broempSignal => invite}/verify.go | 2 +- util/config.go | 7 ++- 14 files changed, 162 insertions(+), 14 deletions(-) create mode 100644 bots/discord/discord_bot.go rename main.go => cmd/broempSignal.go (79%) rename {broempSignal => invite}/friends.go (89%) rename {broempSignal => invite}/invite.go (87%) rename {broempSignal => invite}/verify.go (87%) diff --git a/.env.example b/.env.example index 32a95e7..e6e9b43 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,8 @@ -#API Settings +#Discord Settings DISCORD_TOKEN=CHANGE_ME +DISCORD_GUILD_ID=CHANGE_ME + +#Telegram Settings TELEGRAM_TOKEN=CHANGE_ME #DB Settings diff --git a/Dockerfile b/Dockerfile index 53242cc..74ace0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,8 +7,9 @@ RUN go mod download COPY . . -RUN CGO_ENABLED=0 go build -o /broempSignal main.go +RUN CGO_ENABLED=0 go build -o /broempSignal cmd/broempSignal.go FROM alpine WORKDIR /app COPY --from=BUILD /broempSignal . +CMD ["/app/broempSignal"] diff --git a/bots/discord/discord_bot.go b/bots/discord/discord_bot.go new file mode 100644 index 0000000..3dba34d --- /dev/null +++ b/bots/discord/discord_bot.go @@ -0,0 +1,82 @@ +package discord + +import ( + "log" + + "github.com/bwmarrin/discordgo" +) + +var s *discordgo.Session + +func InitDiscord(discordToken string, discordGuildId string) { + log.Println("Starting Discord Bot") + var err error + s, err = discordgo.New("Bot " + discordToken) + if err != nil { + log.Fatal("Couldn't create Discord session: ", err) + } + s.Open() + registerCommands(s, discordGuildId) +} + +// TODO: Refactor commands + +var ( + integerOptionMinValue = 100000.0 + commands = []*discordgo.ApplicationCommand{ + { + Name: "ping", + Description: "Replies with pong", + }, + { + Name: "afk", + Description: "Report someone as afk", + Options: []*discordgo.ApplicationCommandOption{ + { + Name: "User", + Description: "User who is afk", + Required: true, + Type: discordgo.ApplicationCommandOptionUser, + }, + }, + }, + } + + commandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){ + "ping": func(s *discordgo.Session, i *discordgo.InteractionCreate) { + s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ + Type: discordgo.InteractionResponseChannelMessageWithSource, + Data: &discordgo.InteractionResponseData{ + Content: "Pong!", + }, + }) + }, + } +) + +func registerCommands(s *discordgo.Session, discordGuildId string) { + log.Println("Registering commands") + + s.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) { + if h, ok := commandHandlers[i.ApplicationCommandData().Name]; ok { + h(s, i) + } + }) + + _, err := s.ApplicationCommandBulkOverwrite(s.State.User.ID, discordGuildId, commands) + if err != nil { + log.Fatal("Couldn't register commands: ", err) + } +} + +func CloseDiscord() { + log.Println("Closing Discord") + s.Close() +} + +// TODO make embed or retain old accepts +func updateInteraction(interaction *discordgo.Interaction, msg string) { + s.InteractionResponseEdit(interaction, &discordgo.WebhookEdit{ + Content: &msg, + }) +} diff --git a/main.go b/cmd/broempSignal.go similarity index 79% rename from main.go rename to cmd/broempSignal.go index 84581a6..7dcb4b4 100644 --- a/main.go +++ b/cmd/broempSignal.go @@ -7,6 +7,7 @@ import ( _ "github.com/lib/pq" "github.com/broemp/broempSignal/api" + "github.com/broemp/broempSignal/bots/discord" db "github.com/broemp/broempSignal/db/sqlc" "github.com/broemp/broempSignal/util" ) @@ -29,4 +30,8 @@ func main() { if err != nil { log.Fatal("Cannot start server:", err) } + + if config.DiscordToken != "" { + discord.InitDiscord(config.DiscordToken, config.DiscordGuildId) + } } diff --git a/db/migration/000001_init_shema.up.sql b/db/migration/000001_init_shema.up.sql index 18bd4a2..e3da85f 100644 --- a/db/migration/000001_init_shema.up.sql +++ b/db/migration/000001_init_shema.up.sql @@ -3,6 +3,7 @@ CREATE TABLE "user" ( "username" varchar NOT NULL, "discordid" bigint NOT NULL, "telegramid" bigint, + "afk" int NOT NULL DEFAULT 0, "created_at" timestamp DEFAULT (now()) ); diff --git a/db/query/user.sql b/db/query/user.sql index 9074255..b994846 100644 --- a/db/query/user.sql +++ b/db/query/user.sql @@ -30,3 +30,12 @@ SELECT * from "user" ORDER BY userid LIMIT $1 OFFSET $2; + +-- name: GetAFKCount :one +SELECT afk from "user" +WHERE discordid = $1; + +-- name: IncrementAFKCount :exec +UPDATE "user" SET afk = afk +1 +WHERE discordid = $1 +RETURNING afk; diff --git a/db/sqlc/models.go b/db/sqlc/models.go index 34b4baf..56b669a 100644 --- a/db/sqlc/models.go +++ b/db/sqlc/models.go @@ -34,5 +34,6 @@ type User struct { Username string `json:"username"` Discordid int64 `json:"discordid"` Telegramid sql.NullInt64 `json:"telegramid"` + Afk int32 `json:"afk"` CreatedAt sql.NullTime `json:"created_at"` } diff --git a/db/sqlc/user.sql.go b/db/sqlc/user.sql.go index 6a6c22d..f7a07df 100644 --- a/db/sqlc/user.sql.go +++ b/db/sqlc/user.sql.go @@ -15,7 +15,7 @@ INSERT INTO "user" ( username, discordid, telegramid ) VALUES ( $1, $2, $3 -) RETURNING userid, username, discordid, telegramid, created_at +) RETURNING userid, username, discordid, telegramid, afk, created_at ` type CreateUserParams struct { @@ -32,6 +32,7 @@ func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, e &i.Username, &i.Discordid, &i.Telegramid, + &i.Afk, &i.CreatedAt, ) return i, err @@ -47,8 +48,20 @@ func (q *Queries) DeleteUser(ctx context.Context, userid int64) error { return err } +const getAFKCount = `-- name: GetAFKCount :one +SELECT afk from "user" +WHERE discordid = $1 +` + +func (q *Queries) GetAFKCount(ctx context.Context, discordid int64) (int32, error) { + row := q.db.QueryRowContext(ctx, getAFKCount, discordid) + var afk int32 + err := row.Scan(&afk) + return afk, err +} + const getUser = `-- name: GetUser :one -SELECT userid, username, discordid, telegramid, created_at from "user" +SELECT userid, username, discordid, telegramid, afk, created_at from "user" WHERE userid = $1 ` @@ -60,13 +73,14 @@ func (q *Queries) GetUser(ctx context.Context, userid int64) (User, error) { &i.Username, &i.Discordid, &i.Telegramid, + &i.Afk, &i.CreatedAt, ) return i, err } const getUserByDiscordId = `-- name: GetUserByDiscordId :one -SELECT userid, username, discordid, telegramid, created_at FROM "user" +SELECT userid, username, discordid, telegramid, afk, created_at FROM "user" WHERE discordid = $1 ` @@ -78,13 +92,14 @@ func (q *Queries) GetUserByDiscordId(ctx context.Context, discordid int64) (User &i.Username, &i.Discordid, &i.Telegramid, + &i.Afk, &i.CreatedAt, ) return i, err } const getUserByTelegramId = `-- name: GetUserByTelegramId :one -SELECT userid, username, discordid, telegramid, created_at FROM "user" +SELECT userid, username, discordid, telegramid, afk, created_at FROM "user" WHERE telegramid = $1 ` @@ -96,13 +111,25 @@ func (q *Queries) GetUserByTelegramId(ctx context.Context, telegramid sql.NullIn &i.Username, &i.Discordid, &i.Telegramid, + &i.Afk, &i.CreatedAt, ) return i, err } +const incrementAFKCount = `-- name: IncrementAFKCount :exec +UPDATE "user" SET afk = afk +1 +WHERE discordid = $1 +RETURNING afk +` + +func (q *Queries) IncrementAFKCount(ctx context.Context, discordid int64) error { + _, err := q.db.ExecContext(ctx, incrementAFKCount, discordid) + return err +} + const listUsers = `-- name: ListUsers :many -SELECT userid, username, discordid, telegramid, created_at from "user" +SELECT userid, username, discordid, telegramid, afk, created_at from "user" ORDER BY userid LIMIT $1 OFFSET $2 @@ -127,6 +154,7 @@ func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, e &i.Username, &i.Discordid, &i.Telegramid, + &i.Afk, &i.CreatedAt, ); err != nil { return nil, err diff --git a/db/sqlc/user_test.go b/db/sqlc/user_test.go index 23770e2..2e4a4a5 100644 --- a/db/sqlc/user_test.go +++ b/db/sqlc/user_test.go @@ -94,3 +94,18 @@ func TestUpdateTelegramId(t *testing.T) { require.Equal(t, user1.Discordid, user2.Discordid) require.WithinDuration(t, user1.CreatedAt.Time, user2.CreatedAt.Time, time.Second) } + +func TestIncrementAFKCount(t *testing.T) { + var num int32 = 0 + user1 := createRandomUser(t) + afk, err := testQueries.GetAFKCount(context.Background(), user1.Discordid) + require.NoError(t, err) + require.Equal(t, num, afk) + num++ + err = testQueries.IncrementAFKCount(context.Background(), user1.Discordid) + require.NoError(t, err) + afk2, err := testQueries.GetAFKCount(context.Background(), user1.Discordid) + require.NoError(t, err) + + require.Equal(t, num, afk2) +} diff --git a/docker-compose.yml b/docker-compose.yml index eebf45d..f59d725 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,9 +7,9 @@ services: restart: always environment: # Discord Bot Token https://discord.com/developers/applications - - DISCORD_API_KEY= + - DISCORD_TOKEN= # Telegram Bot Token https://telegram.me/BotFather - - TELEGRAM_API_KEY= + - TELEGRAM_TOKEN= #DB Settings - DB_DRIVER=postgres - DB_SOURCE=postgresql://{USER}:{PASSWORD}@{IP}:{PORT}/broempSignal?sslmode=disable diff --git a/broempSignal/friends.go b/invite/friends.go similarity index 89% rename from broempSignal/friends.go rename to invite/friends.go index dce2105..be098f9 100644 --- a/broempSignal/friends.go +++ b/invite/friends.go @@ -1,4 +1,4 @@ -package broempsignal +package invite func addFriend(userid, friendid string) error { return nil diff --git a/broempSignal/invite.go b/invite/invite.go similarity index 87% rename from broempSignal/invite.go rename to invite/invite.go index 02da17c..4a7ceca 100644 --- a/broempSignal/invite.go +++ b/invite/invite.go @@ -1,4 +1,4 @@ -package broempsignal +package invite func inviteAllFriends() { } diff --git a/broempSignal/verify.go b/invite/verify.go similarity index 87% rename from broempSignal/verify.go rename to invite/verify.go index ee903ca..308085b 100644 --- a/broempSignal/verify.go +++ b/invite/verify.go @@ -1,4 +1,4 @@ -package broempsignal +package invite func register(discordID string) error { return nil diff --git a/util/config.go b/util/config.go index dcdd9dc..1d26a17 100644 --- a/util/config.go +++ b/util/config.go @@ -12,9 +12,12 @@ type Config struct { // Server Settings ServerAddress string `mapstructure:"SERVER_ADDRESS"` - // API Keys - DiscordToken string `mapstructure:"DISCORD_TOKEN"` + // Telegram Settings TelegramToken string `mapstructure:"TELEGRAM_TOKEN"` + + // Discord Settings + DiscordToken string `mapstructure:"DISCORD_TOKEN"` + DiscordGuildId string `mapstructure:"DISCORD_GUILD_ID"` } // LoadConfig reads configuration file/enviroment From bdeff3ede40934f279d553100c9c133887f22d1f Mon Sep 17 00:00:00 2001 From: broemp Date: Fri, 18 Aug 2023 17:49:54 +0200 Subject: [PATCH 2/2] remove discord bot and add api endpoint for discord bot --- .env.example | 10 +-- api/afk.go | 62 +++++++++++++++++ api/server.go | 6 +- bots/discord/discord_bot.go | 82 ---------------------- cmd/broempSignal.go | 6 -- db/migration/000001_init_shema.down.sql | 3 +- db/migration/000001_init_shema.up.sql | 30 ++++++--- db/query/afk.sql | 14 ++++ db/query/user.sql | 21 ++---- db/sqlc/afk.sql.go | 50 ++++++++++++++ db/sqlc/afk_test.go | 31 +++++++++ db/sqlc/group_test.go | 28 ++++++++ db/sqlc/models.go | 10 ++- db/sqlc/user.sql.go | 90 ++++++------------------- db/sqlc/user_test.go | 36 ++-------- go.mod | 13 ++-- go.sum | 12 ++-- 17 files changed, 262 insertions(+), 242 deletions(-) create mode 100644 api/afk.go delete mode 100644 bots/discord/discord_bot.go create mode 100644 db/query/afk.sql create mode 100644 db/sqlc/afk.sql.go create mode 100644 db/sqlc/afk_test.go create mode 100644 db/sqlc/group_test.go diff --git a/.env.example b/.env.example index e6e9b43..0eab1d1 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,4 @@ -#Discord Settings -DISCORD_TOKEN=CHANGE_ME -DISCORD_GUILD_ID=CHANGE_ME - -#Telegram Settings -TELEGRAM_TOKEN=CHANGE_ME - -#DB Settings -DB_DRIVER=postgres +#DB Settings DB_DRIVER=postgres DB_SOURCE=postgresql://{USER}:{PASSWORD}@{IP}:{PORT}/broempSignal?sslmode=disable #Server Settings diff --git a/api/afk.go b/api/afk.go new file mode 100644 index 0000000..3e44f8e --- /dev/null +++ b/api/afk.go @@ -0,0 +1,62 @@ +package api + +import ( + "database/sql" + "net/http" + + "github.com/gin-gonic/gin" +) + +type afkRequest struct { + User int64 `json:"user" binding:"required"` +} + +func (server *Server) createAFK(ctx *gin.Context) { + var req afkRequest + if err := ctx.ShouldBindJSON(&req); err != nil { + ctx.JSON(http.StatusBadRequest, errorResponse(err)) + return + } + + afk, err := server.store.CreateAFK(ctx, sql.NullInt64{Int64: req.User, Valid: true}) + if err != nil { + ctx.JSON(http.StatusInternalServerError, errorResponse(err)) + return + } + + ctx.JSON(http.StatusOK, afk) +} + +type listAFKRequest struct { + User int64 `uri:"id" binding:"required"` +} + +func (server *Server) listAFK(ctx *gin.Context) { + var req listAFKRequest + if err := ctx.ShouldBindUri(&req); err != nil { + ctx.JSON(http.StatusBadRequest, errorResponse(err)) + return + } + afk, err := server.store.ListAFK(ctx, sql.NullInt64{Int64: req.User, Valid: true}) + if err != nil { + ctx.JSON(http.StatusInternalServerError, errorResponse(err)) + return + } + + ctx.JSON(http.StatusOK, afk) +} + +func (server *Server) countAFK(ctx *gin.Context) { + var req listAFKRequest + if err := ctx.ShouldBindUri(&req); err != nil { + ctx.JSON(http.StatusBadRequest, errorResponse(err)) + return + } + afk, err := server.store.GetAFKCount(ctx, sql.NullInt64{Int64: req.User, Valid: true}) + if err != nil { + ctx.JSON(http.StatusInternalServerError, errorResponse(err)) + return + } + + ctx.JSON(http.StatusOK, afk) +} diff --git a/api/server.go b/api/server.go index 850be75..c7ea561 100644 --- a/api/server.go +++ b/api/server.go @@ -19,7 +19,11 @@ func NewServer(store *db.Store) *Server { router.POST("/users", server.createUser) router.GET("/users/:id", server.getUser) router.GET("/users/", server.listUser) - // router.GET("/users/discord/:discordid", server.getDiscordUser) + + // AFK endpoint + router.POST("/afk/create", server.createAFK) + router.GET("/afk/list/:id", server.listAFK) + router.GET("/afk/count/:id", server.countAFK) server.router = router return server diff --git a/bots/discord/discord_bot.go b/bots/discord/discord_bot.go deleted file mode 100644 index 3dba34d..0000000 --- a/bots/discord/discord_bot.go +++ /dev/null @@ -1,82 +0,0 @@ -package discord - -import ( - "log" - - "github.com/bwmarrin/discordgo" -) - -var s *discordgo.Session - -func InitDiscord(discordToken string, discordGuildId string) { - log.Println("Starting Discord Bot") - var err error - s, err = discordgo.New("Bot " + discordToken) - if err != nil { - log.Fatal("Couldn't create Discord session: ", err) - } - s.Open() - registerCommands(s, discordGuildId) -} - -// TODO: Refactor commands - -var ( - integerOptionMinValue = 100000.0 - commands = []*discordgo.ApplicationCommand{ - { - Name: "ping", - Description: "Replies with pong", - }, - { - Name: "afk", - Description: "Report someone as afk", - Options: []*discordgo.ApplicationCommandOption{ - { - Name: "User", - Description: "User who is afk", - Required: true, - Type: discordgo.ApplicationCommandOptionUser, - }, - }, - }, - } - - commandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){ - "ping": func(s *discordgo.Session, i *discordgo.InteractionCreate) { - s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ - Type: discordgo.InteractionResponseChannelMessageWithSource, - Data: &discordgo.InteractionResponseData{ - Content: "Pong!", - }, - }) - }, - } -) - -func registerCommands(s *discordgo.Session, discordGuildId string) { - log.Println("Registering commands") - - s.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) { - if h, ok := commandHandlers[i.ApplicationCommandData().Name]; ok { - h(s, i) - } - }) - - _, err := s.ApplicationCommandBulkOverwrite(s.State.User.ID, discordGuildId, commands) - if err != nil { - log.Fatal("Couldn't register commands: ", err) - } -} - -func CloseDiscord() { - log.Println("Closing Discord") - s.Close() -} - -// TODO make embed or retain old accepts -func updateInteraction(interaction *discordgo.Interaction, msg string) { - s.InteractionResponseEdit(interaction, &discordgo.WebhookEdit{ - Content: &msg, - }) -} diff --git a/cmd/broempSignal.go b/cmd/broempSignal.go index 7dcb4b4..882e9ae 100644 --- a/cmd/broempSignal.go +++ b/cmd/broempSignal.go @@ -7,7 +7,6 @@ import ( _ "github.com/lib/pq" "github.com/broemp/broempSignal/api" - "github.com/broemp/broempSignal/bots/discord" db "github.com/broemp/broempSignal/db/sqlc" "github.com/broemp/broempSignal/util" ) @@ -25,13 +24,8 @@ func main() { store := db.NewStore(conn) server := api.NewServer(store) - err = server.Start(config.ServerAddress) if err != nil { log.Fatal("Cannot start server:", err) } - - if config.DiscordToken != "" { - discord.InitDiscord(config.DiscordToken, config.DiscordGuildId) - } } diff --git a/db/migration/000001_init_shema.down.sql b/db/migration/000001_init_shema.down.sql index 800be4f..2582a22 100644 --- a/db/migration/000001_init_shema.down.sql +++ b/db/migration/000001_init_shema.down.sql @@ -1,4 +1,5 @@ -DROP TABLE IF EXISTS group; +DROP TABLE IF EXISTS afk; DROP TABLE IF EXISTS hoepperCount; DROP TABLE IF EXISTS invite; +DROP TABLE IF EXISTS group; DROP TABLE IF EXISTS user; diff --git a/db/migration/000001_init_shema.up.sql b/db/migration/000001_init_shema.up.sql index e3da85f..dc375d6 100644 --- a/db/migration/000001_init_shema.up.sql +++ b/db/migration/000001_init_shema.up.sql @@ -1,34 +1,38 @@ CREATE TABLE "user" ( - "userid" BIGSERIAL PRIMARY KEY, + "discordid" bigint PRIMARY KEY, "username" varchar NOT NULL, - "discordid" bigint NOT NULL, "telegramid" bigint, - "afk" int NOT NULL DEFAULT 0, "created_at" timestamp DEFAULT (now()) ); CREATE TABLE "group" ( "groupid" BIGSERIAL PRIMARY KEY, - "hostid" bigserial NOT NULL, + "hostid" bigint NOT NULL, "active" bool DEFAULT true, "created_at" timestamp DEFAULT (now()) ); CREATE TABLE "invite" ( "groupid" bigserial, - "guestid" bigserial, + "guestid" bigint, "accepted" bool DEFAULT null, "created_at" timestamp DEFAULT (now()), PRIMARY KEY ("groupid", "guestid") ); CREATE TABLE "hoepperCount" ( - "hoepper" bigserial, - "victim" bigserial, + "hoepper" bigint, + "victim" bigint, "hoepperCount" integer, PRIMARY KEY ("hoepper", "victim") ); +CREATE TABLE "afk" ( + "afkid" BIGSERIAL PRIMARY KEY, + "userid" bigint, + "created_at" timestamp DEFAULT (now()) +); + CREATE INDEX ON "user" ("discordid"); CREATE INDEX ON "group" ("groupid"); @@ -43,14 +47,18 @@ CREATE INDEX ON "hoepperCount" ("hoepper"); CREATE INDEX ON "hoepperCount" ("victim"); +CREATE INDEX ON "afk" ("userid"); + COMMENT ON COLUMN "invite"."accepted" IS 'null = waiting, false=declined, true=accepted'; -ALTER TABLE "group" ADD FOREIGN KEY ("hostid") REFERENCES "user" ("userid"); +ALTER TABLE "group" ADD FOREIGN KEY ("hostid") REFERENCES "user" ("discordid"); ALTER TABLE "invite" ADD FOREIGN KEY ("groupid") REFERENCES "group" ("groupid"); -ALTER TABLE "invite" ADD FOREIGN KEY ("guestid") REFERENCES "user" ("userid"); +ALTER TABLE "invite" ADD FOREIGN KEY ("guestid") REFERENCES "user" ("discordid"); + +ALTER TABLE "hoepperCount" ADD FOREIGN KEY ("hoepper") REFERENCES "user" ("discordid"); -ALTER TABLE "hoepperCount" ADD FOREIGN KEY ("hoepper") REFERENCES "user" ("userid"); +ALTER TABLE "hoepperCount" ADD FOREIGN KEY ("victim") REFERENCES "user" ("discordid"); -ALTER TABLE "hoepperCount" ADD FOREIGN KEY ("victim") REFERENCES "user" ("userid"); +ALTER TABLE "afk" ADD FOREIGN KEY ("userid") REFERENCES "user" ("discordid"); diff --git a/db/query/afk.sql b/db/query/afk.sql new file mode 100644 index 0000000..a837551 --- /dev/null +++ b/db/query/afk.sql @@ -0,0 +1,14 @@ +-- name: CreateAFK :one +INSERT INTO "afk" ( + userid +) VALUES ( + $1 +) RETURNING *; + +-- name: ListAFK :one +SELECT * from "afk" +WHERE userid = $1; + +-- name: GetAFKCount :one +SELECT count(*) from "afk" +WHERE userid = $1; diff --git a/db/query/user.sql b/db/query/user.sql index b994846..1c4e410 100644 --- a/db/query/user.sql +++ b/db/query/user.sql @@ -1,15 +1,11 @@ -- name: CreateUser :one INSERT INTO "user" ( - username, discordid, telegramid + discordid, username, telegramid ) VALUES ( $1, $2, $3 ) RETURNING *; -- name: GetUser :one -SELECT * from "user" -WHERE userid = $1; - --- name: GetUserByDiscordId :one SELECT * FROM "user" WHERE discordid = $1; @@ -19,23 +15,14 @@ WHERE telegramid = $1; -- name: DeleteUser :exec DELETE FROM "user" -WHERE userid = $1; +WHERE discordid = $1; -- name: UpdateTelegramId :exec UPDATE "user" SET telegramid = $2 -WHERE userid = $1; +WHERE discordid = $1; -- name: ListUsers :many SELECT * from "user" -ORDER BY userid +ORDER BY discordid LIMIT $1 OFFSET $2; - --- name: GetAFKCount :one -SELECT afk from "user" -WHERE discordid = $1; - --- name: IncrementAFKCount :exec -UPDATE "user" SET afk = afk +1 -WHERE discordid = $1 -RETURNING afk; diff --git a/db/sqlc/afk.sql.go b/db/sqlc/afk.sql.go new file mode 100644 index 0000000..1a8cf6e --- /dev/null +++ b/db/sqlc/afk.sql.go @@ -0,0 +1,50 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.19.1 +// source: afk.sql + +package db + +import ( + "context" + "database/sql" +) + +const createAFK = `-- name: CreateAFK :one +INSERT INTO "afk" ( + userid +) VALUES ( + $1 +) RETURNING afkid, userid, created_at +` + +func (q *Queries) CreateAFK(ctx context.Context, userid sql.NullInt64) (Afk, error) { + row := q.db.QueryRowContext(ctx, createAFK, userid) + var i Afk + err := row.Scan(&i.Afkid, &i.Userid, &i.CreatedAt) + return i, err +} + +const getAFKCount = `-- name: GetAFKCount :one +SELECT count(*) from "afk" +WHERE userid = $1 +` + +func (q *Queries) GetAFKCount(ctx context.Context, userid sql.NullInt64) (int64, error) { + row := q.db.QueryRowContext(ctx, getAFKCount, userid) + var count int64 + err := row.Scan(&count) + return count, err +} + +const listAFK = `-- name: ListAFK :one +SELECT afkid, userid, created_at from "afk" +WHERE userid = $1 +` + +func (q *Queries) ListAFK(ctx context.Context, userid sql.NullInt64) (Afk, error) { + row := q.db.QueryRowContext(ctx, listAFK, userid) + var i Afk + err := row.Scan(&i.Afkid, &i.Userid, &i.CreatedAt) + return i, err +} diff --git a/db/sqlc/afk_test.go b/db/sqlc/afk_test.go new file mode 100644 index 0000000..b7fa1fa --- /dev/null +++ b/db/sqlc/afk_test.go @@ -0,0 +1,31 @@ +package db + +import ( + "context" + "database/sql" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCreateAFK(t *testing.T) { + user := createRandomUser(t) + afk, err := testQueries.CreateAFK(context.Background(), sql.NullInt64{Int64: user.Discordid, Valid: true}) + + require.NoError(t, err) + require.NotEmpty(t, afk) +} + +func TestGetAFK(t *testing.T) { + user := createRandomUser(t) + i := sql.NullInt64{Int64: 0, Valid: true} + for i.Int64 <= 5 { + afk, err := testQueries.CreateAFK(context.Background(), sql.NullInt64{Int64: user.Discordid, Valid: true}) + require.NoError(t, err) + require.NotEmpty(t, afk) + i.Int64++ + } + num, err := testQueries.GetAFKCount(context.Background(), sql.NullInt64{Int64: user.Discordid, Valid: true}) + require.NoError(t, err) + require.Equal(t, i.Int64, num) +} diff --git a/db/sqlc/group_test.go b/db/sqlc/group_test.go new file mode 100644 index 0000000..e00d85e --- /dev/null +++ b/db/sqlc/group_test.go @@ -0,0 +1,28 @@ +package db + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestCreateGroup(t *testing.T) { + user := createRandomUser(t) + + group, err := testQueries.CreateGroup(context.Background(), user.Discordid) + require.NoError(t, err) + require.NotEmpty(t, group) +} + +func TestGetGroupByHost(t *testing.T) { + user := createRandomUser(t) + + group, err := testQueries.CreateGroup(context.Background(), user.Discordid) + require.NoError(t, err) + require.NotEmpty(t, group) + + group2, err := testQueries.GetGroupByHost(context.Background(), user.Discordid) + require.NoError(t, err) + require.Equal(t, group, group2) +} diff --git a/db/sqlc/models.go b/db/sqlc/models.go index 56b669a..05783a9 100644 --- a/db/sqlc/models.go +++ b/db/sqlc/models.go @@ -8,6 +8,12 @@ import ( "database/sql" ) +type Afk struct { + Afkid int64 `json:"afkid"` + Userid sql.NullInt64 `json:"userid"` + CreatedAt sql.NullTime `json:"created_at"` +} + type Group struct { Groupid int64 `json:"groupid"` Hostid int64 `json:"hostid"` @@ -30,10 +36,8 @@ type Invite struct { } type User struct { - Userid int64 `json:"userid"` - Username string `json:"username"` Discordid int64 `json:"discordid"` + Username string `json:"username"` Telegramid sql.NullInt64 `json:"telegramid"` - Afk int32 `json:"afk"` CreatedAt sql.NullTime `json:"created_at"` } diff --git a/db/sqlc/user.sql.go b/db/sqlc/user.sql.go index f7a07df..70eefca 100644 --- a/db/sqlc/user.sql.go +++ b/db/sqlc/user.sql.go @@ -12,27 +12,25 @@ import ( const createUser = `-- name: CreateUser :one INSERT INTO "user" ( - username, discordid, telegramid + discordid, username, telegramid ) VALUES ( $1, $2, $3 -) RETURNING userid, username, discordid, telegramid, afk, created_at +) RETURNING discordid, username, telegramid, created_at ` type CreateUserParams struct { - Username string `json:"username"` Discordid int64 `json:"discordid"` + Username string `json:"username"` Telegramid sql.NullInt64 `json:"telegramid"` } func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) { - row := q.db.QueryRowContext(ctx, createUser, arg.Username, arg.Discordid, arg.Telegramid) + row := q.db.QueryRowContext(ctx, createUser, arg.Discordid, arg.Username, arg.Telegramid) var i User err := row.Scan( - &i.Userid, - &i.Username, &i.Discordid, + &i.Username, &i.Telegramid, - &i.Afk, &i.CreatedAt, ) return i, err @@ -40,66 +38,33 @@ func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, e const deleteUser = `-- name: DeleteUser :exec DELETE FROM "user" -WHERE userid = $1 -` - -func (q *Queries) DeleteUser(ctx context.Context, userid int64) error { - _, err := q.db.ExecContext(ctx, deleteUser, userid) - return err -} - -const getAFKCount = `-- name: GetAFKCount :one -SELECT afk from "user" WHERE discordid = $1 ` -func (q *Queries) GetAFKCount(ctx context.Context, discordid int64) (int32, error) { - row := q.db.QueryRowContext(ctx, getAFKCount, discordid) - var afk int32 - err := row.Scan(&afk) - return afk, err +func (q *Queries) DeleteUser(ctx context.Context, discordid int64) error { + _, err := q.db.ExecContext(ctx, deleteUser, discordid) + return err } const getUser = `-- name: GetUser :one -SELECT userid, username, discordid, telegramid, afk, created_at from "user" -WHERE userid = $1 -` - -func (q *Queries) GetUser(ctx context.Context, userid int64) (User, error) { - row := q.db.QueryRowContext(ctx, getUser, userid) - var i User - err := row.Scan( - &i.Userid, - &i.Username, - &i.Discordid, - &i.Telegramid, - &i.Afk, - &i.CreatedAt, - ) - return i, err -} - -const getUserByDiscordId = `-- name: GetUserByDiscordId :one -SELECT userid, username, discordid, telegramid, afk, created_at FROM "user" +SELECT discordid, username, telegramid, created_at FROM "user" WHERE discordid = $1 ` -func (q *Queries) GetUserByDiscordId(ctx context.Context, discordid int64) (User, error) { - row := q.db.QueryRowContext(ctx, getUserByDiscordId, discordid) +func (q *Queries) GetUser(ctx context.Context, discordid int64) (User, error) { + row := q.db.QueryRowContext(ctx, getUser, discordid) var i User err := row.Scan( - &i.Userid, - &i.Username, &i.Discordid, + &i.Username, &i.Telegramid, - &i.Afk, &i.CreatedAt, ) return i, err } const getUserByTelegramId = `-- name: GetUserByTelegramId :one -SELECT userid, username, discordid, telegramid, afk, created_at FROM "user" +SELECT discordid, username, telegramid, created_at FROM "user" WHERE telegramid = $1 ` @@ -107,30 +72,17 @@ func (q *Queries) GetUserByTelegramId(ctx context.Context, telegramid sql.NullIn row := q.db.QueryRowContext(ctx, getUserByTelegramId, telegramid) var i User err := row.Scan( - &i.Userid, - &i.Username, &i.Discordid, + &i.Username, &i.Telegramid, - &i.Afk, &i.CreatedAt, ) return i, err } -const incrementAFKCount = `-- name: IncrementAFKCount :exec -UPDATE "user" SET afk = afk +1 -WHERE discordid = $1 -RETURNING afk -` - -func (q *Queries) IncrementAFKCount(ctx context.Context, discordid int64) error { - _, err := q.db.ExecContext(ctx, incrementAFKCount, discordid) - return err -} - const listUsers = `-- name: ListUsers :many -SELECT userid, username, discordid, telegramid, afk, created_at from "user" -ORDER BY userid +SELECT discordid, username, telegramid, created_at from "user" +ORDER BY discordid LIMIT $1 OFFSET $2 ` @@ -150,11 +102,9 @@ func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, e for rows.Next() { var i User if err := rows.Scan( - &i.Userid, - &i.Username, &i.Discordid, + &i.Username, &i.Telegramid, - &i.Afk, &i.CreatedAt, ); err != nil { return nil, err @@ -172,15 +122,15 @@ func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, e const updateTelegramId = `-- name: UpdateTelegramId :exec UPDATE "user" SET telegramid = $2 -WHERE userid = $1 +WHERE discordid = $1 ` type UpdateTelegramIdParams struct { - Userid int64 `json:"userid"` + Discordid int64 `json:"discordid"` Telegramid sql.NullInt64 `json:"telegramid"` } func (q *Queries) UpdateTelegramId(ctx context.Context, arg UpdateTelegramIdParams) error { - _, err := q.db.ExecContext(ctx, updateTelegramId, arg.Userid, arg.Telegramid) + _, err := q.db.ExecContext(ctx, updateTelegramId, arg.Discordid, arg.Telegramid) return err } diff --git a/db/sqlc/user_test.go b/db/sqlc/user_test.go index 2e4a4a5..921dd7d 100644 --- a/db/sqlc/user_test.go +++ b/db/sqlc/user_test.go @@ -26,7 +26,7 @@ func createRandomUser(t *testing.T) User { require.Equal(t, arg.Discordid, user.Discordid) require.Equal(t, arg.Telegramid, user.Telegramid) - require.NotZero(t, user.Userid) + require.NotZero(t, user.Discordid) require.NotZero(t, user.CreatedAt) return user @@ -38,7 +38,7 @@ func TestCreateUser(t *testing.T) { func TestGetUser(t *testing.T) { user1 := createRandomUser(t) - user2, err := testQueries.GetUser(context.Background(), user1.Userid) + user2, err := testQueries.GetUser(context.Background(), user1.Discordid) require.NoError(t, err) require.NotEmpty(t, user2) @@ -47,15 +47,6 @@ func TestGetUser(t *testing.T) { require.WithinDuration(t, user1.CreatedAt.Time, user2.CreatedAt.Time, time.Second) } -func TestGetUserByDiscordId(t *testing.T) { - user1 := createRandomUser(t) - user2, err := testQueries.GetUserByDiscordId(context.Background(), user1.Discordid) - - require.NoError(t, err) - require.NotEmpty(t, user2) - require.Equal(t, user1, user2) -} - func TestGetUserByTelegramId(t *testing.T) { user1 := createRandomUser(t) user2, err := testQueries.GetUserByTelegramId(context.Background(), user1.Telegramid) @@ -67,10 +58,10 @@ func TestGetUserByTelegramId(t *testing.T) { func TestDeleteUser(t *testing.T) { user1 := createRandomUser(t) - err := testQueries.DeleteUser(context.Background(), user1.Userid) + err := testQueries.DeleteUser(context.Background(), user1.Discordid) require.NoError(t, err) - user2, err := testQueries.GetUser(context.Background(), user1.Userid) + user2, err := testQueries.GetUser(context.Background(), user1.Discordid) require.Error(t, err) require.EqualError(t, err, sql.ErrNoRows.Error()) require.Empty(t, user2) @@ -79,13 +70,13 @@ func TestDeleteUser(t *testing.T) { func TestUpdateTelegramId(t *testing.T) { user1 := createRandomUser(t) arg := UpdateTelegramIdParams{ - Userid: user1.Userid, + Discordid: user1.Discordid, Telegramid: sql.NullInt64{Int64: util.RandomId(), Valid: true}, } err := testQueries.UpdateTelegramId(context.Background(), arg) require.NoError(t, err) - user2, err := testQueries.GetUser(context.Background(), user1.Userid) + user2, err := testQueries.GetUser(context.Background(), user1.Discordid) require.NoError(t, err) require.NotEmpty(t, user2) @@ -94,18 +85,3 @@ func TestUpdateTelegramId(t *testing.T) { require.Equal(t, user1.Discordid, user2.Discordid) require.WithinDuration(t, user1.CreatedAt.Time, user2.CreatedAt.Time, time.Second) } - -func TestIncrementAFKCount(t *testing.T) { - var num int32 = 0 - user1 := createRandomUser(t) - afk, err := testQueries.GetAFKCount(context.Background(), user1.Discordid) - require.NoError(t, err) - require.Equal(t, num, afk) - num++ - err = testQueries.IncrementAFKCount(context.Background(), user1.Discordid) - require.NoError(t, err) - afk2, err := testQueries.GetAFKCount(context.Background(), user1.Discordid) - require.NoError(t, err) - - require.Equal(t, num, afk2) -} diff --git a/go.mod b/go.mod index 4abdfc7..d41273d 100644 --- a/go.mod +++ b/go.mod @@ -2,22 +2,24 @@ module github.com/broemp/broempSignal go 1.20 -require github.com/lib/pq v1.10.9 +require ( + github.com/gin-gonic/gin v1.9.1 + github.com/lib/pq v1.10.9 + github.com/spf13/viper v1.16.0 + github.com/stretchr/testify v1.8.4 +) require ( - github.com/bwmarrin/discordgo v0.27.1 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/gin-gonic/gin v1.9.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/gorilla/websocket v1.4.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect @@ -33,9 +35,6 @@ require ( github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.16.0 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/stretchr/testify v1.8.4 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect diff --git a/go.sum b/go.sum index a785631..5826282 100644 --- a/go.sum +++ b/go.sum @@ -38,8 +38,6 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY= -github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= @@ -63,6 +61,7 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= @@ -74,6 +73,7 @@ github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SU github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= @@ -120,6 +120,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -139,8 +140,6 @@ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= @@ -157,8 +156,10 @@ github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZX github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -182,6 +183,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= @@ -194,7 +196,6 @@ github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -519,6 +520,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=