mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-05-19 10:54:17 +08:00
Error code standardization
This commit is contained in:
parent
2b1868f558
commit
2e19e3109e
@ -23,8 +23,8 @@ type DBFriend struct {
|
|||||||
*table.FriendModel
|
*table.FriendModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBFriend(friend *controller.Friend) *DBFriend {
|
func NewDBFriend(friend *table.FriendModel) *DBFriend {
|
||||||
return &DBFriend{Friend: friend}
|
return &DBFriend{FriendModel: friend}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBFriend struct {
|
type PBFriend struct {
|
||||||
@ -35,6 +35,14 @@ func NewPBFriend(friendInfo *sdk.FriendInfo) *PBFriend {
|
|||||||
return &PBFriend{FriendInfo: friendInfo}
|
return &PBFriend{FriendInfo: friendInfo}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (*PBFriend) PB2DB(friends []*sdk.FriendInfo) (DBFriends []*table.FriendModel, err error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*DBFriend) DB2PB(friends []*table.FriendModel) (PBFriends []*sdk.FriendInfo, err error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (db *DBFriend) Convert() (*sdk.FriendInfo, error) {
|
func (db *DBFriend) Convert() (*sdk.FriendInfo, error) {
|
||||||
pbFriend := &sdk.FriendInfo{FriendUser: &sdk.UserInfo{}}
|
pbFriend := &sdk.FriendInfo{FriendUser: &sdk.UserInfo{}}
|
||||||
utils.CopyStructFields(pbFriend, db)
|
utils.CopyStructFields(pbFriend, db)
|
||||||
@ -49,8 +57,8 @@ func (db *DBFriend) Convert() (*sdk.FriendInfo, error) {
|
|||||||
return pbFriend, nil
|
return pbFriend, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBFriend) Convert() (*relation.Friend, error) {
|
func (pb *PBFriend) Convert() (*table.FriendModel, error) {
|
||||||
dbFriend := &relation.Friend{}
|
dbFriend := &table.FriendModel{}
|
||||||
utils.CopyStructFields(dbFriend, pb)
|
utils.CopyStructFields(dbFriend, pb)
|
||||||
dbFriend.FriendUserID = pb.FriendUser.UserID
|
dbFriend.FriendUserID = pb.FriendUser.UserID
|
||||||
dbFriend.CreateTime = utils.UnixSecondToTime(pb.CreateTime)
|
dbFriend.CreateTime = utils.UnixSecondToTime(pb.CreateTime)
|
||||||
@ -58,11 +66,11 @@ func (pb *PBFriend) Convert() (*relation.Friend, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DBFriendRequest struct {
|
type DBFriendRequest struct {
|
||||||
*relation.FriendRequest
|
*table.FriendRequestModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBFriendRequest(friendRequest *relation.FriendRequest) *DBFriendRequest {
|
func NewDBFriendRequest(friendRequest *table.FriendRequestModel) *DBFriendRequest {
|
||||||
return &DBFriendRequest{FriendRequest: friendRequest}
|
return &DBFriendRequest{FriendRequestModel: friendRequest}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBFriendRequest struct {
|
type PBFriendRequest struct {
|
||||||
@ -73,8 +81,16 @@ func NewPBFriendRequest(friendRequest *sdk.FriendRequest) *PBFriendRequest {
|
|||||||
return &PBFriendRequest{FriendRequest: friendRequest}
|
return &PBFriendRequest{FriendRequest: friendRequest}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBFriendRequest) Convert() (*relation.FriendRequest, error) {
|
func (*PBFriendRequest) PB2DB(friendRequests []*sdk.FriendRequest) (DBFriendRequests []*table.FriendRequestModel, err error) {
|
||||||
dbFriendRequest := &relation.FriendRequest{}
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*DBFriendRequest) DB2PB(friendRequests []*table.FriendRequestModel) (PBFriendRequests []*sdk.FriendRequest, err error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pb *PBFriendRequest) Convert() (*table.FriendRequestModel, error) {
|
||||||
|
dbFriendRequest := &table.FriendRequestModel{}
|
||||||
utils.CopyStructFields(dbFriendRequest, pb)
|
utils.CopyStructFields(dbFriendRequest, pb)
|
||||||
dbFriendRequest.CreateTime = utils.UnixSecondToTime(int64(pb.CreateTime))
|
dbFriendRequest.CreateTime = utils.UnixSecondToTime(int64(pb.CreateTime))
|
||||||
dbFriendRequest.HandleTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
dbFriendRequest.HandleTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
||||||
@ -106,6 +122,15 @@ type DBBlack struct {
|
|||||||
*relation.Black
|
*relation.Black
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (*PBBlack) PB2DB(friendRequests []*sdk.BlackInfo) (DBFriendRequests []*table., err error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*DBBlack) DB2PB(friendRequests []*table.FriendRequestModel) (PBFriendRequests []*sdk.FriendRequest, err error) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func NewDBBlack(black *relation.Black) *DBBlack {
|
func NewDBBlack(black *relation.Black) *DBBlack {
|
||||||
return &DBBlack{Black: black}
|
return &DBBlack{Black: black}
|
||||||
}
|
}
|
||||||
@ -137,11 +162,11 @@ func (db *DBBlack) Convert() (*sdk.BlackInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DBGroup struct {
|
type DBGroup struct {
|
||||||
*relation.Group
|
*table.GroupModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBGroup(group *relation.Group) *DBGroup {
|
func NewDBGroup(group *table.GroupModel) *DBGroup {
|
||||||
return &DBGroup{Group: group}
|
return &DBGroup{GroupModel: group}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBGroup struct {
|
type PBGroup struct {
|
||||||
@ -152,8 +177,8 @@ func NewPBGroup(groupInfo *sdk.GroupInfo) *PBGroup {
|
|||||||
return &PBGroup{GroupInfo: groupInfo}
|
return &PBGroup{GroupInfo: groupInfo}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBGroup) Convert() *relation.Group {
|
func (pb *PBGroup) Convert() *table.GroupModel {
|
||||||
dst := &relation.Group{}
|
dst := &table.GroupModel{}
|
||||||
_ = utils.CopyStructFields(dst, pb)
|
_ = utils.CopyStructFields(dst, pb)
|
||||||
return dst
|
return dst
|
||||||
}
|
}
|
||||||
@ -180,11 +205,11 @@ func (db *DBGroup) Convert() (*sdk.GroupInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DBGroupMember struct {
|
type DBGroupMember struct {
|
||||||
*relation.GroupMember
|
*table.GroupMemberModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBGroupMember(groupMember *relation.GroupMember) *DBGroupMember {
|
func NewDBGroupMember(groupMember *table.GroupMemberModel) *DBGroupMember {
|
||||||
return &DBGroupMember{GroupMember: groupMember}
|
return &DBGroupMember{GroupMemberModel: groupMember}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBGroupMember struct {
|
type PBGroupMember struct {
|
||||||
@ -195,8 +220,8 @@ func NewPBGroupMember(groupMemberFullInfo *sdk.GroupMemberFullInfo) *PBGroupMemb
|
|||||||
return &PBGroupMember{GroupMemberFullInfo: groupMemberFullInfo}
|
return &PBGroupMember{GroupMemberFullInfo: groupMemberFullInfo}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBGroupMember) Convert() (*relation.GroupMember, error) {
|
func (pb *PBGroupMember) Convert() (*table.GroupMemberModel, error) {
|
||||||
dst := &relation.GroupMember{}
|
dst := &table.GroupMemberModel{}
|
||||||
utils.CopyStructFields(dst, pb)
|
utils.CopyStructFields(dst, pb)
|
||||||
dst.JoinTime = utils.UnixSecondToTime(int64(pb.JoinTime))
|
dst.JoinTime = utils.UnixSecondToTime(int64(pb.JoinTime))
|
||||||
dst.MuteEndTime = utils.UnixSecondToTime(int64(pb.MuteEndTime))
|
dst.MuteEndTime = utils.UnixSecondToTime(int64(pb.MuteEndTime))
|
||||||
@ -224,11 +249,11 @@ func (db *DBGroupMember) Convert() (*sdk.GroupMemberFullInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DBGroupRequest struct {
|
type DBGroupRequest struct {
|
||||||
*relation.GroupRequest
|
*table.GroupRequestModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBGroupRequest(groupRequest *relation.GroupRequest) *DBGroupRequest {
|
func NewDBGroupRequest(groupRequest *table.GroupRequestModel) *DBGroupRequest {
|
||||||
return &DBGroupRequest{GroupRequest: groupRequest}
|
return &DBGroupRequest{GroupRequestModel: groupRequest}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBGroupRequest struct {
|
type PBGroupRequest struct {
|
||||||
@ -239,8 +264,8 @@ func NewPBGroupRequest(groupRequest *sdk.GroupRequest) *PBGroupRequest {
|
|||||||
return &PBGroupRequest{GroupRequest: groupRequest}
|
return &PBGroupRequest{GroupRequest: groupRequest}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBGroupRequest) Convert() (*relation.GroupRequest, error) {
|
func (pb *PBGroupRequest) Convert() (*table.GroupRequestModel, error) {
|
||||||
dst := &relation.GroupRequest{}
|
dst := &table.GroupRequestModel{}
|
||||||
utils.CopyStructFields(dst, pb)
|
utils.CopyStructFields(dst, pb)
|
||||||
dst.ReqTime = utils.UnixSecondToTime(int64(pb.ReqTime))
|
dst.ReqTime = utils.UnixSecondToTime(int64(pb.ReqTime))
|
||||||
dst.HandledTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
dst.HandledTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
||||||
@ -255,11 +280,11 @@ func (db *DBGroupRequest) Convert() (*sdk.GroupRequest, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DBUser struct {
|
type DBUser struct {
|
||||||
*relation.User
|
*table.UserModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBUser(user *relation.User) *DBUser {
|
func NewDBUser(user *table.UserModel) *DBUser {
|
||||||
return &DBUser{User: user}
|
return &DBUser{UserModel: user}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBUser struct {
|
type PBUser struct {
|
||||||
@ -270,7 +295,7 @@ func NewPBUser(userInfo *sdk.UserInfo) *PBUser {
|
|||||||
return &PBUser{UserInfo: userInfo}
|
return &PBUser{UserInfo: userInfo}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*PBUser) PB2DB(users []*sdk.UserInfo) (DBUsers []*relation.User, err error) {
|
func (*PBUser) PB2DB(users []*sdk.UserInfo) (DBUsers []*table.UserModel, err error) {
|
||||||
for _, v := range users {
|
for _, v := range users {
|
||||||
u, err := NewPBUser(v).Convert()
|
u, err := NewPBUser(v).Convert()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -281,7 +306,7 @@ func (*PBUser) PB2DB(users []*sdk.UserInfo) (DBUsers []*relation.User, err error
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBUser) DB2PB(users []*relation.User) (PBUsers []*sdk.UserInfo, err error) {
|
func (*DBUser) DB2PB(users []*table.UserModel) (PBUsers []*sdk.UserInfo, err error) {
|
||||||
for _, v := range users {
|
for _, v := range users {
|
||||||
u, err := NewDBUser(v).Convert()
|
u, err := NewDBUser(v).Convert()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -292,8 +317,8 @@ func (*DBUser) DB2PB(users []*relation.User) (PBUsers []*sdk.UserInfo, err error
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBUser) Convert() (*relation.User, error) {
|
func (pb *PBUser) Convert() (*table.UserModel, error) {
|
||||||
dst := &relation.User{}
|
dst := &table.UserModel{}
|
||||||
utils.CopyStructFields(dst, pb)
|
utils.CopyStructFields(dst, pb)
|
||||||
dst.Birth = utils.UnixSecondToTime(pb.Birthday)
|
dst.Birth = utils.UnixSecondToTime(pb.Birthday)
|
||||||
dst.CreateTime = utils.UnixSecondToTime(int64(pb.CreateTime))
|
dst.CreateTime = utils.UnixSecondToTime(int64(pb.CreateTime))
|
||||||
|
@ -1,58 +1,52 @@
|
|||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/db/table"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Black struct {
|
type BlackGorm struct {
|
||||||
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
|
DB *gorm.DB
|
||||||
BlockUserID string `gorm:"column:block_user_id;primary_key;size:64"`
|
|
||||||
CreateTime time.Time `gorm:"column:create_time"`
|
|
||||||
AddSource int32 `gorm:"column:add_source"`
|
|
||||||
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
|
||||||
Ex string `gorm:"column:ex;size:1024"`
|
|
||||||
DB *gorm.DB `gorm:"-"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBlack(db *gorm.DB) *Black {
|
func NewBlackGorm(db *gorm.DB) *BlackGorm {
|
||||||
var black Black
|
var black BlackGorm
|
||||||
black.DB = db
|
black.DB = db
|
||||||
return &black
|
return &black
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) Create(ctx context.Context, blacks []*Black) (err error) {
|
func (b *BlackGorm) Create(ctx context.Context, blacks []*table.BlackModel) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(b.DB.Create(&blacks).Error, "")
|
return utils.Wrap(b.DB.Model(&table.BlackModel{}).Create(&blacks).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) Delete(ctx context.Context, blacks []*Black) (err error) {
|
func (b *BlackGorm) Delete(ctx context.Context, blacks []*table.BlackModel) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(GroupMemberDB.Delete(blacks).Error, "")
|
return utils.Wrap(b.DB.Model(&table.BlackModel{}).Delete(blacks).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]interface{}) (err error) {
|
func (b *BlackGorm) UpdateByMap(ctx context.Context, ownerUserID, blockUserID string, args map[string]interface{}) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blockUserID", blockUserID, "args", args)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blockUserID", blockUserID, "args", args)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(b.DB.Where("block_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Updates(args).Error, "")
|
return utils.Wrap(b.DB.Model(&table.BlackModel{}).Where("block_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Updates(args).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) Update(ctx context.Context, blacks []*Black) (err error) {
|
func (b *BlackGorm) Update(ctx context.Context, blacks []*table.BlackModel) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(b.DB.Updates(&blacks).Error, "")
|
return utils.Wrap(b.DB.Model(&table.BlackModel{}).Updates(&blacks).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) Find(ctx context.Context, blacks []*Black) (blackList []*Black, err error) {
|
func (b *BlackGorm) Find(ctx context.Context, blacks []*table.BlackModel) (blackList []*table.BlackModel, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks, "blackList", blackList)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "blacks", blacks, "blackList", blackList)
|
||||||
}()
|
}()
|
||||||
@ -60,25 +54,25 @@ func (b *Black) Find(ctx context.Context, blacks []*Black) (blackList []*Black,
|
|||||||
for _, black := range blacks {
|
for _, black := range blacks {
|
||||||
where = append(where, []interface{}{black.OwnerUserID, black.BlockUserID})
|
where = append(where, []interface{}{black.OwnerUserID, black.BlockUserID})
|
||||||
}
|
}
|
||||||
return blackList, utils.Wrap(GroupMemberDB.Where("(owner_user_id, block_user_id) in ?", where).Find(&blackList).Error, "")
|
return blackList, utils.Wrap(b.DB.Model(&table.BlackModel{}).Where("(owner_user_id, block_user_id) in ?", where).Find(&blackList).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) Take(ctx context.Context, ownerUserID, blockUserID string) (black *Black, err error) {
|
func (b *BlackGorm) Take(ctx context.Context, ownerUserID, blockUserID string) (black *table.BlackModel, err error) {
|
||||||
black = &Black{}
|
black = &table.BlackModel{}
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blockUserID", blockUserID, "black", *black)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blockUserID", blockUserID, "black", *black)
|
||||||
}()
|
}()
|
||||||
return black, utils.Wrap(b.DB.Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error, "")
|
return black, utils.Wrap(b.DB.Model(&table.BlackModel{}).Where("owner_user_id = ? and block_user_id = ?", ownerUserID, blockUserID).Take(black).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Black) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*Black, total int64, err error) {
|
func (b *BlackGorm) FindOwnerBlacks(ctx context.Context, ownerUserID string, pageNumber, showNumber int32) (blacks []*table.BlackModel, total int64, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blacks", blacks)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "blacks", blacks)
|
||||||
}()
|
}()
|
||||||
err = b.DB.Model(b).Count(&total).Error
|
err = b.DB.Model(&table.BlackModel{}).Model(b).Count(&total).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, utils.Wrap(err, "")
|
return nil, 0, utils.Wrap(err, "")
|
||||||
}
|
}
|
||||||
err = utils.Wrap(b.DB.Limit(int(showNumber)).Offset(int(pageNumber*showNumber)).Find(&blacks).Error, "")
|
err = utils.Wrap(b.DB.Model(&table.BlackModel{}).Limit(int(showNumber)).Offset(int(pageNumber*showNumber)).Find(&blacks).Error, "")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -104,3 +104,12 @@ type UserModel struct {
|
|||||||
GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"`
|
GlobalRecvMsgOpt int32 `gorm:"column:global_recv_msg_opt"`
|
||||||
status int32 `gorm:"column:status"`
|
status int32 `gorm:"column:status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type BlackModel struct {
|
||||||
|
OwnerUserID string `gorm:"column:owner_user_id;primary_key;size:64"`
|
||||||
|
BlockUserID string `gorm:"column:block_user_id;primary_key;size:64"`
|
||||||
|
CreateTime time.Time `gorm:"column:create_time"`
|
||||||
|
AddSource int32 `gorm:"column:add_source"`
|
||||||
|
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
|
||||||
|
Ex string `gorm:"column:ex;size:1024"`
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user