Files
open-im-server/internal/rpc/third/third.go
T

132 lines
4.2 KiB
Go
Raw Normal View History

2023-07-13 17:07:42 +08:00
// Copyright © 2023 OpenIM. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2023-06-30 09:45:02 +08:00
package third
import (
"context"
2023-07-12 15:31:24 +08:00
"fmt"
2024-04-19 22:23:08 +08:00
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/cache/redis"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/database/mgo"
"github.com/openimsdk/open-im-server/v3/pkg/localcache"
"time"
"github.com/openimsdk/open-im-server/v3/pkg/common/storage/controller"
"github.com/openimsdk/open-im-server/v3/pkg/rpcclient"
2024-04-19 22:23:08 +08:00
"github.com/openimsdk/protocol/third"
"github.com/openimsdk/tools/db/mongoutil"
"github.com/openimsdk/tools/db/redisutil"
"github.com/openimsdk/tools/discovery"
"github.com/openimsdk/tools/s3"
"github.com/openimsdk/tools/s3/cos"
2024-07-16 10:46:21 +08:00
"github.com/openimsdk/tools/s3/kodo"
2024-04-19 22:23:08 +08:00
"github.com/openimsdk/tools/s3/minio"
"github.com/openimsdk/tools/s3/oss"
2024-03-06 15:58:05 +08:00
"google.golang.org/grpc"
2023-06-30 09:45:02 +08:00
)
2024-04-19 22:23:08 +08:00
type thirdServer struct {
third.UnimplementedThirdServer
2024-10-30 17:12:33 +08:00
thirdDatabase controller.ThirdDatabase
s3dataBase controller.S3Database
userRpcClient rpcclient.UserRpcClient
defaultExpire time.Duration
config *Config
minio *minio.Minio
2024-04-19 22:23:08 +08:00
}
2024-04-19 22:23:08 +08:00
type Config struct {
RpcConfig config.Third
RedisConfig config.Redis
MongodbConfig config.Mongo
NotificationConfig config.Notification
Share config.Share
MinioConfig config.Minio
LocalCacheConfig config.LocalCache
2024-05-14 18:21:36 +08:00
Discovery config.Discovery
2024-04-19 22:23:08 +08:00
}
func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryRegistry, server *grpc.Server) error {
mgocli, err := mongoutil.NewMongoDB(ctx, config.MongodbConfig.Build())
if err != nil {
return err
}
rdb, err := redisutil.NewRedisClient(ctx, config.RedisConfig.Build())
if err != nil {
return err
}
2024-04-19 22:23:08 +08:00
logdb, err := mgo.NewLogMongo(mgocli.GetDB())
if err != nil {
return err
}
2024-04-19 22:23:08 +08:00
s3db, err := mgo.NewS3Mongo(mgocli.GetDB())
if err != nil {
return err
}
2024-10-25 16:50:58 +08:00
// Select the oss method according to the profile policy
2024-04-19 22:23:08 +08:00
enable := config.RpcConfig.Object.Enable
2024-07-16 10:46:21 +08:00
var (
o s3.Interface
minioCli *minio.Minio
)
switch enable {
2023-07-12 15:31:24 +08:00
case "minio":
2024-07-16 10:46:21 +08:00
minioCli, err = minio.NewMinio(ctx, redis.NewMinioCache(rdb), *config.MinioConfig.Build())
o = minioCli
2023-07-12 15:31:24 +08:00
case "cos":
2024-04-19 22:23:08 +08:00
o, err = cos.NewCos(*config.RpcConfig.Object.Cos.Build())
2023-07-12 15:31:24 +08:00
case "oss":
2024-04-19 22:23:08 +08:00
o, err = oss.NewOSS(*config.RpcConfig.Object.Oss.Build())
2024-07-15 11:10:04 +08:00
case "kodo":
o, err = kodo.NewKodo(*config.RpcConfig.Object.Kodo.Build())
2023-07-12 15:31:24 +08:00
default:
err = fmt.Errorf("invalid object enable: %s", enable)
}
if err != nil {
2023-06-30 09:45:02 +08:00
return err
}
localcache.InitLocalCache(&config.LocalCacheConfig)
2023-06-30 09:45:02 +08:00
third.RegisterThirdServer(server, &thirdServer{
2024-10-30 17:12:33 +08:00
thirdDatabase: controller.NewThirdDatabase(redis.NewThirdCache(rdb), logdb),
2024-12-07 12:11:12 +08:00
userRpcClient: rpcclient.NewUserRpcClient(client, config.Discovery.RpcService.User, config.Share.IMAdminUserID),
2024-10-30 17:12:33 +08:00
s3dataBase: controller.NewS3Database(rdb, o, s3db),
defaultExpire: time.Hour * 24 * 7,
config: config,
minio: minioCli,
2023-06-30 09:45:02 +08:00
})
return nil
}
2024-07-16 10:46:21 +08:00
func (t *thirdServer) getMinioImageThumbnailKey(ctx context.Context, name string) (string, error) {
return t.minio.GetImageThumbnailKey(ctx, name)
}
2023-07-13 16:51:52 +08:00
func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTokenReq) (resp *third.FcmUpdateTokenResp, err error) {
2023-06-30 09:45:02 +08:00
err = t.thirdDatabase.FcmUpdateToken(ctx, req.Account, int(req.PlatformID), req.FcmToken, req.ExpireTime)
if err != nil {
return nil, err
}
return &third.FcmUpdateTokenResp{}, nil
}
2023-07-13 16:51:52 +08:00
func (t *thirdServer) SetAppBadge(ctx context.Context, req *third.SetAppBadgeReq) (resp *third.SetAppBadgeResp, err error) {
2023-06-30 09:45:02 +08:00
err = t.thirdDatabase.SetAppBadge(ctx, req.UserID, int(req.AppUnreadCount))
if err != nil {
return nil, err
}
return &third.SetAppBadgeResp{}, nil
}