66 lines
1.6 KiB
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
|
||
|
}
|