hmn/src/hmndata/discord_helper.go

66 lines
1.6 KiB
Go

package hmndata
import (
"context"
"errors"
"git.handmade.network/hmn/hmn/src/db"
"git.handmade.network/hmn/hmn/src/models"
"git.handmade.network/hmn/hmn/src/oops"
)
type DiscordUserAndStuff struct {
DiscordUser models.DiscordUser `db:"duser"`
HMNUser models.User `db:"u"`
}
func FetchDiscordUser(ctx context.Context, dbConn db.ConnOrTx, discordUserID string) (*DiscordUserAndStuff, error) {
iuser, err := db.QueryOne(ctx, dbConn, DiscordUserAndStuff{},
`
SELECT $columns
FROM
handmade_discorduser AS duser
JOIN auth_user AS u ON duser.hmn_user_id = u.id
WHERE
duser.userid = $1
`,
discordUserID,
)
if err != nil {
return nil, err
}
return iuser.(*DiscordUserAndStuff), nil
}
type DiscordMessageAndStuff struct {
Message models.DiscordMessage `db:"msg"`
Content *models.DiscordMessageContent `db:"content"`
DiscordUser *models.DiscordUser `db:"duser"`
HMNUser *models.User `db:"u"`
}
func FetchDiscordMessage(ctx context.Context, dbConn db.ConnOrTx, msgID string) (*DiscordMessageAndStuff, error) {
iresult, err := db.QueryOne(ctx, dbConn, DiscordMessageAndStuff{},
`
SELECT $columns
FROM
handmade_discordmessage AS msg
LEFT JOIN handmade_discordmessagecontent AS content ON content.message_id = msg.id
LEFT JOIN handmade_discorduser AS duser ON msg.user_id = duser.id
LEFT JOIN auth_user AS u ON duser.hmn_user_id = u.id
WHERE
msg.id = $1
`,
msgID,
)
if errors.Is(err, db.NotFound) {
return nil, db.NotFound
} else if err != nil {
return nil, oops.New(err, "failed to fetch Discord message")
}
result := iresult.(*DiscordMessageAndStuff)
return result, nil
}