friends/database/3ds/get_friend_persistent_infos.go
2025-02-15 23:31:32 -05:00

74 lines
2.2 KiB
Go

package database_3ds
import (
"github.com/PretendoNetwork/friends/database"
"github.com/PretendoNetwork/nex-go/v2/types"
friends_3ds_types "github.com/PretendoNetwork/nex-protocols-go/v2/friends-3ds/types"
"github.com/lib/pq"
)
// GetFriendPersistentInfos returns the persistent information of all friends
func GetFriendPersistentInfos(user1_pid uint32, pids []uint32) (types.List[friends_3ds_types.FriendPersistentInfo], error) {
persistentInfos := types.NewList[friends_3ds_types.FriendPersistentInfo]()
rows, err := database.Manager.Query(`
SELECT pid, region, area, language, country, favorite_title, favorite_title_version, comment, comment_changed, last_online, mii_changed FROM "3ds".user_data WHERE pid=ANY($1::int[])`, pq.Array(pids))
if err != nil {
return persistentInfos, err
}
defer rows.Close()
for rows.Next() {
persistentInfo := friends_3ds_types.NewFriendPersistentInfo()
gameKey := friends_3ds_types.NewGameKey()
var pid uint32
var region uint8
var area uint8
var language uint8
var country uint8
var titleID uint64
var titleVersion uint16
var message string
var lastOnlineTime uint64
var msgUpdateTime uint64
var miiModifiedAtTime uint64
err := rows.Scan(
&pid,
&region,
&area,
&language,
&country,
&titleID,
&titleVersion,
&message,
&msgUpdateTime,
&lastOnlineTime,
&miiModifiedAtTime,
)
if err != nil {
return persistentInfos, err
}
gameKey.TitleID = types.NewUInt64(titleID)
gameKey.TitleVersion = types.NewUInt16(titleVersion)
persistentInfo.PID = types.NewPID(uint64(pid))
persistentInfo.Region = types.NewUInt8(region)
persistentInfo.Country = types.NewUInt8(country)
persistentInfo.Area = types.NewUInt8(area)
persistentInfo.Language = types.NewUInt8(language)
persistentInfo.Platform = types.NewUInt8(2) // * Always 3DS
persistentInfo.GameKey = gameKey
persistentInfo.Message = types.NewString(message)
persistentInfo.MessageUpdatedAt = types.NewDateTime(msgUpdateTime)
persistentInfo.MiiModifiedAt = types.NewDateTime(miiModifiedAtTime)
persistentInfo.LastOnline = types.NewDateTime(lastOnlineTime)
persistentInfos = append(persistentInfos, persistentInfo)
}
return persistentInfos, nil
}