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 }