diff --git a/cmd/business/main.go b/cmd/business/main.go index 8852cae..35ad187 100644 --- a/cmd/business/main.go +++ b/cmd/business/main.go @@ -18,7 +18,7 @@ import ( ) func main() { - config.Init() + //config.Init() db.Init() server := grpc.NewServer(grpc.UnaryInterceptor(interceptor.NewInterceptor("business_interceptor", urlwhitelist.Business))) diff --git a/go.mod b/go.mod index 9464f5f..970062a 100644 --- a/go.mod +++ b/go.mod @@ -12,9 +12,9 @@ require ( github.com/jinzhu/gorm v1.9.16 github.com/json-iterator/go v1.1.12 go.uber.org/zap v1.21.0 - google.golang.org/genproto v0.0.0-20211207154714-918901c715cf - google.golang.org/grpc v1.42.0 - google.golang.org/protobuf v1.28.0 + google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 + google.golang.org/grpc v1.50.1 + google.golang.org/protobuf v1.28.1 gopkg.in/natefinch/lumberjack.v2 v2.0.0 k8s.io/api v0.25.1 k8s.io/apimachinery v0.25.1 @@ -35,8 +35,10 @@ require ( github.com/go-playground/universal-translator v0.17.0 // indirect github.com/go-playground/validator/v10 v10.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.0.0 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/gofuzz v1.1.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/leodido/go-urn v1.2.0 // indirect @@ -50,13 +52,14 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect - golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect - golang.org/x/text v0.3.7 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/term v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 7b31875..64d13d5 100644 --- a/go.sum +++ b/go.sum @@ -154,6 +154,8 @@ github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -205,6 +207,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -237,6 +240,8 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 h1:kr3j8iIMR4ywO/O0rvksXaJvauGGCMg2zAZIiNZ9uIQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0/go.mod h1:ummNFgdgLhhX7aIiy35vVmQNS0rWXknfPE0qe6fmFXg= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -450,6 +455,8 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -467,6 +474,8 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -538,9 +547,13 @@ golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -551,6 +564,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -711,6 +726,8 @@ google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211207154714-918901c715cf h1:PSEM+IQFb9xdsj2CGhfqUTfsZvF8DScCVP1QZb2IiTQ= google.golang.org/genproto v0.0.0-20211207154714-918901c715cf/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55 h1:U1u4KB2kx6KR/aJDjQ97hZ15wQs8ZPvDcGcRynBhkvg= +google.golang.org/genproto v0.0.0-20221018160656-63c7b68cfc55/go.mod h1:45EK0dUbEZ2NHjCeAd2LXmyjAgGUGrpGROgjhC3ADck= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -738,7 +755,11 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 h1:TLkBREm4nIsEcexnCjgQd5GQWaHcqMzwQV0TX9pq8S0= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0/go.mod h1:DNq5QpG7LJqD2AamLZ7zvKE0DEpVl2BSEVjFycAAjRY= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -754,6 +775,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/business/api/business_ext.go b/internal/business/api/business_ext.go index 3bfa466..638ce19 100644 --- a/internal/business/api/business_ext.go +++ b/internal/business/api/business_ext.go @@ -10,14 +10,15 @@ import ( type BusinessExtServer struct{} func (s *BusinessExtServer) SignIn(ctx context.Context, req *pb.SignInReq) (*pb.SignInResp, error) { - isNew, userId, token, err := app.AuthApp.SignIn(ctx, req.PhoneNumber, req.Code, req.DeviceId) + isNew, userId, token, masterId, err := app.AuthApp.SignIn(ctx, req.PhoneNumber, req.Code, req.MasterId, req.DeviceId) if err != nil { return nil, err } return &pb.SignInResp{ - IsNew: isNew, - UserId: userId, - Token: token, + IsNew: isNew, + UserId: userId, + Token: token, + MasterId: masterId, }, nil } diff --git a/internal/business/api/business_ext_test.go b/internal/business/api/business_ext_test.go index 9c3eca6..eac9f5b 100644 --- a/internal/business/api/business_ext_test.go +++ b/internal/business/api/business_ext_test.go @@ -13,7 +13,7 @@ import ( ) func getBusinessExtClient() pb.BusinessExtClient { - conn, err := grpc.Dial("111.229.238.28:50200", grpc.WithInsecure()) + conn, err := grpc.Dial("im-rpc-business.izhyin.com:8000", grpc.WithInsecure()) if err != nil { fmt.Println(err) return nil @@ -24,7 +24,7 @@ func getBusinessExtClient() pb.BusinessExtClient { func getCtx() context.Context { token := "0" return metadata.NewOutgoingContext(context.TODO(), metadata.Pairs( - "user_id", "3", + "user_id", "1", "device_id", "1", "token", token, "request_id", strconv.FormatInt(time.Now().UnixNano(), 10))) @@ -32,9 +32,9 @@ func getCtx() context.Context { func TestUserExtServer_SignIn(t *testing.T) { resp, err := getBusinessExtClient().SignIn(getCtx(), &pb.SignInReq{ - PhoneNumber: "18229775316", - Code: "1", + PhoneNumber: "18229775311", DeviceId: 1, + MasterId: 123456, }) if err != nil { fmt.Println(err) @@ -43,7 +43,15 @@ func TestUserExtServer_SignIn(t *testing.T) { } func TestUserExtServer_GetUser(t *testing.T) { - resp, err := getBusinessExtClient().GetUser(getCtx(), &pb.GetUserReq{UserId: 1}) + resp, err := getBusinessExtClient().GetUser(getCtx(), &pb.GetUserReq{UserId: 2}) + if err != nil { + fmt.Println(err) + } + fmt.Printf("%+v\n", resp) +} + +func TestUserExtServer_SearchUser(t *testing.T) { + resp, err := getBusinessExtClient().SearchUser(getCtx(), &pb.SearchUserReq{Key: "18229"}) if err != nil { fmt.Println(err) } diff --git a/internal/business/api/business_int_test.go b/internal/business/api/business_int_test.go index cc0de5a..c5e501e 100644 --- a/internal/business/api/business_int_test.go +++ b/internal/business/api/business_int_test.go @@ -9,7 +9,8 @@ import ( ) func getBusinessIntClient() pb.BusinessIntClient { - conn, err := grpc.Dial("localhost:50300", grpc.WithInsecure()) + //conn, err := grpc.Dial("localhost:50300", grpc.WithInsecure()) + conn, err := grpc.Dial("im-rpc-business.izhyin.com:8000", grpc.WithInsecure()) if err != nil { fmt.Println(err) return nil @@ -19,7 +20,7 @@ func getBusinessIntClient() pb.BusinessIntClient { func TestUserIntServer_Auth(t *testing.T) { _, err := getBusinessIntClient().Auth(getCtx(), &pb.AuthReq{ - UserId: 3, + UserId: 2, DeviceId: 1, Token: "0", }) diff --git a/internal/business/app/auth_app.go b/internal/business/app/auth_app.go index b24bc22..f73c775 100644 --- a/internal/business/app/auth_app.go +++ b/internal/business/app/auth_app.go @@ -10,8 +10,8 @@ type authApp struct{} var AuthApp = new(authApp) // SignIn 长连接登录 -func (*authApp) SignIn(ctx context.Context, phoneNumber, code string, deviceId int64) (bool, int64, string, error) { - return service.AuthService.SignIn(ctx, phoneNumber, code, deviceId) +func (*authApp) SignIn(ctx context.Context, phoneNumber, code string, masterId int, deviceId int64) (bool, int64, string, int, error) { + return service.AuthService.SignIn(ctx, phoneNumber, code, masterId, deviceId) } // Auth 验证用户是否登录 diff --git a/internal/business/domain/user/model/user.go b/internal/business/domain/user/model/user.go index 2a30327..899c82b 100644 --- a/internal/business/domain/user/model/user.go +++ b/internal/business/domain/user/model/user.go @@ -15,6 +15,7 @@ type User struct { Extra string // 附加属性 CreateTime time.Time // 创建时间 UpdateTime time.Time // 更新时间 + MasterId int // 站长id } func (u *User) ToProto() *pb.User { @@ -30,5 +31,6 @@ func (u *User) ToProto() *pb.User { Extra: u.Extra, CreateTime: u.CreateTime.Unix(), UpdateTime: u.UpdateTime.Unix(), + MasterId: u.MasterId, } } diff --git a/internal/business/domain/user/repo/user_dao_test.go b/internal/business/domain/user/repo/user_dao_test.go index 779c3ad..bafcee2 100644 --- a/internal/business/domain/user/repo/user_dao_test.go +++ b/internal/business/domain/user/repo/user_dao_test.go @@ -39,6 +39,6 @@ func TestUserDao_GetByPhoneNumber(t *testing.T) { } func TestUserDao_Search(t *testing.T) { - users, err := UserDao.Search("哈哈哈") + users, err := UserDao.Search("18229") fmt.Printf("%+v\n %+v\n ", users, err) } diff --git a/internal/business/domain/user/service/auth.go b/internal/business/domain/user/service/auth.go index b14deaa..cdb8ed1 100644 --- a/internal/business/domain/user/service/auth.go +++ b/internal/business/domain/user/service/auth.go @@ -7,6 +7,7 @@ import ( "gim/pkg/gerrors" "gim/pkg/pb" "gim/pkg/rpc" + "gim/pkg/util" "time" ) @@ -15,48 +16,49 @@ type authService struct{} var AuthService = new(authService) // SignIn 登录 -func (*authService) SignIn(ctx context.Context, phoneNumber, code string, deviceId int64) (bool, int64, string, error) { +func (*authService) SignIn(ctx context.Context, phoneNumber, code string, masterId int, deviceId int64) (bool, int64, string, int, error) { if !Verify(phoneNumber, code) { - return false, 0, "", gerrors.ErrBadCode + return false, 0, "", 0, gerrors.ErrBadCode } user, err := repo.UserRepo.GetByPhoneNumber(phoneNumber) if err != nil { - return false, 0, "", err + return false, 0, "", 0, err } var isNew = false if user == nil { user = &model.User{ PhoneNumber: phoneNumber, + MasterId: masterId, CreateTime: time.Now(), UpdateTime: time.Now(), } err := repo.UserRepo.Save(user) if err != nil { - return false, 0, "", err + return false, 0, "", 0, err } isNew = true } resp, err := rpc.GetLogicIntClient().GetDevice(ctx, &pb.GetDeviceReq{DeviceId: deviceId}) if err != nil { - return false, 0, "", err + return false, 0, "", 0, err } // 方便测试 - token := "0" - //token := util.RandString(40) + //token := "0" + token := util.RandString(40) err = repo.AuthRepo.Set(user.Id, resp.Device.DeviceId, model.Device{ Type: resp.Device.Type, Token: token, Expire: time.Now().AddDate(0, 3, 0).Unix(), }) if err != nil { - return false, 0, "", err + return false, 0, "", 0, err } - return isNew, user.Id, token, nil + return isNew, user.Id, token, masterId, nil } func Verify(phoneNumber, code string) bool { diff --git a/internal/logic/api/logic_ext_test.go b/internal/logic/api/logic_ext_test.go index d0ca751..07b3434 100644 --- a/internal/logic/api/logic_ext_test.go +++ b/internal/logic/api/logic_ext_test.go @@ -15,7 +15,7 @@ import ( ) func getLogicExtClient() pb.LogicExtClient { - conn, err := grpc.Dial("111.229.238.28:50000", grpc.WithInsecure()) + conn, err := grpc.Dial("im-rpc-logic.izhyin.com:8003", grpc.WithInsecure()) if err != nil { fmt.Println(err) return nil diff --git a/pkg/pb/business.ext.pb.go b/pkg/pb/business.ext.pb.go index 89efea2..5f9c234 100644 --- a/pkg/pb/business.ext.pb.go +++ b/pkg/pb/business.ext.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: business.ext.proto +// source: business.ext.proto_back package pb @@ -32,6 +32,7 @@ type SignInReq struct { PhoneNumber string `protobuf:"bytes,1,opt,name=phone_number,json=phoneNumber,proto3" json:"phone_number,omitempty"` // 手机号 Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` // 验证码 DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 设备id + MasterId int `protobuf:"varint,4,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id } func (x *SignInReq) Reset() { @@ -87,14 +88,22 @@ func (x *SignInReq) GetDeviceId() int64 { return 0 } +func (x *SignInReq) GetMasterId() int { + if x != nil { + return x.MasterId + } + return 0 +} + type SignInResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - IsNew bool `protobuf:"varint,1,opt,name=is_new,json=isNew,proto3" json:"is_new,omitempty"` // 是否是新用户 - UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id - Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` // token + IsNew bool `protobuf:"varint,1,opt,name=is_new,json=isNew,proto3" json:"is_new,omitempty"` // 是否是新用户 + UserId int64 `protobuf:"varint,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` // 用户id + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` // token + MasterId int `protobuf:"varint,4,opt,name=master_id,json=masterId,proto3" json:"master_id,omitempty"` // 站长id } func (x *SignInResp) Reset() { @@ -162,6 +171,7 @@ type User struct { Extra string `protobuf:"bytes,5,opt,name=extra,proto3" json:"extra,omitempty"` // 附加字段 CreateTime int64 `protobuf:"varint,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` // 创建时间 UpdateTime int64 `protobuf:"varint,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` // 更新时间 + MasterId int `protobuf:"varint,8,opt,name=master_id,json=master_id,proto3" json:"master_id,omitempty"` // 更新时间 } func (x *User) Reset() { @@ -245,6 +255,13 @@ func (x *User) GetUpdateTime() int64 { return 0 } +func (x *User) GetMasterId() int { + if x != nil { + return x.MasterId + } + return 0 +} + type GetUserReq struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -926,5 +943,5 @@ var _BusinessExt_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "business.ext.proto", + Metadata: "business.ext.proto_back", } diff --git a/pkg/pb/business.int.pb.go b/pkg/pb/business.int.pb.go index 862945b..f6fce63 100644 --- a/pkg/pb/business.int.pb.go +++ b/pkg/pb/business.int.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: business.int.proto +// source: business.int.proto_back package pb @@ -484,5 +484,5 @@ var _BusinessInt_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "business.int.proto", + Metadata: "business.int.proto_back", } diff --git a/pkg/pb/common.ext.pb.go b/pkg/pb/common.ext.pb.go index d6e8601..120feaa 100644 --- a/pkg/pb/common.ext.pb.go +++ b/pkg/pb/common.ext.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: common.ext.proto +// source: common.ext.proto_back package pb diff --git a/pkg/pb/connect.ext.pb.go b/pkg/pb/connect.ext.pb.go index 48cf870..891b272 100644 --- a/pkg/pb/connect.ext.pb.go +++ b/pkg/pb/connect.ext.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: connect.ext.proto +// source: connect.ext.proto_back package pb diff --git a/pkg/pb/connect.int.pb.go b/pkg/pb/connect.int.pb.go index e90f5b7..e4f9029 100644 --- a/pkg/pb/connect.int.pb.go +++ b/pkg/pb/connect.int.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: connect.int.proto +// source: connect.int.proto_back package pb @@ -391,5 +391,5 @@ var _ConnectInt_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "connect.int.proto", + Metadata: "connect.int.proto_back", } diff --git a/pkg/pb/logic.ext.pb.go b/pkg/pb/logic.ext.pb.go index c15939d..cc62313 100644 --- a/pkg/pb/logic.ext.pb.go +++ b/pkg/pb/logic.ext.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: logic.ext.proto +// source: logic.ext.proto_back package pb @@ -2983,5 +2983,5 @@ var _LogicExt_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "logic.ext.proto", + Metadata: "logic.ext.proto_back", } diff --git a/pkg/pb/logic.int.pb.go b/pkg/pb/logic.int.pb.go index 927436a..8892af3 100644 --- a/pkg/pb/logic.int.pb.go +++ b/pkg/pb/logic.int.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: logic.int.proto +// source: logic.int.proto_back package pb @@ -1543,5 +1543,5 @@ var _LogicInt_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "logic.int.proto", + Metadata: "logic.int.proto_back", } diff --git a/pkg/pb/push.ext.pb.go b/pkg/pb/push.ext.pb.go index 616a85a..a3d006a 100644 --- a/pkg/pb/push.ext.pb.go +++ b/pkg/pb/push.ext.pb.go @@ -2,7 +2,7 @@ // versions: // protoc-gen-go v1.26.0 // protoc v3.14.0 -// source: push.ext.proto +// source: push.ext.proto_back package pb diff --git a/pkg/proto_back/business.ext.proto b/pkg/proto_back/business.ext.proto new file mode 100644 index 0000000..eeb1b32 --- /dev/null +++ b/pkg/proto_back/business.ext.proto @@ -0,0 +1,60 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + + +service BusinessExt { + // 登录 + rpc SignIn (SignInReq) returns (SignInResp); + // 获取用户信息 + rpc GetUser (GetUserReq) returns (GetUserResp); + // 更新用户信息 + rpc UpdateUser (UpdateUserReq) returns (Empty); + // 搜索用户(这里简单数据库实现,生产环境建议使用ES) + rpc SearchUser (SearchUserReq) returns (SearchUserResp); +} + +message Empty{} + +message SignInReq { + string phone_number = 1; // 手机号 + string code = 2; // 验证码 + int64 device_id = 3; // 设备id +} +message SignInResp { + bool is_new = 1; // 是否是新用户 + int64 user_id = 2; // 用户id + string token = 3; // token +} + +message User { + int64 user_id = 1; // 用户id + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string extra = 5; // 附加字段 + int64 create_time = 6; // 创建时间 + int64 update_time = 7; // 更新时间 +} + +message GetUserReq { + int64 user_id = 1; // 用户id +} +message GetUserResp { + User user = 1; // 用户信息 +} + +message UpdateUserReq { + string nickname = 1; // 昵称 + int32 sex = 2; // 性别 + string avatar_url = 3; // 头像地址 + string extra = 4; // 附加字段 +} + +message SearchUserReq{ + string key = 1; +} +message SearchUserResp{ + repeated User users = 1; +} + diff --git a/pkg/proto_back/business.int.proto b/pkg/proto_back/business.int.proto new file mode 100644 index 0000000..afd49b5 --- /dev/null +++ b/pkg/proto_back/business.int.proto @@ -0,0 +1,45 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + + +service BusinessInt { + // 权限校验 + rpc Auth (AuthReq) returns (Empty); + // 批量获取用户信息 + rpc GetUser (GetUserReq) returns (GetUserResp); + // 批量获取用户信息 + rpc GetUsers (GetUsersReq) returns (GetUsersResp); +} + +message Empty{} + +message User { + int64 user_id = 1; // 用户id + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string extra = 5; // 附加字段 + int64 create_time = 6; // 创建时间 + int64 update_time = 7; // 更新时间 +} + +message GetUserReq { + int64 user_id = 1; // 用户id +} +message GetUserResp { + User user = 1; // 用户信息 +} + +message AuthReq { + int64 user_id = 1; + int64 device_id = 2; + string token = 3; +} + +message GetUsersReq { + map user_ids = 1; // 用户id +} +message GetUsersResp { + map users = 1; // 用户信息 +} diff --git a/pkg/proto_back/common.ext.proto b/pkg/proto_back/common.ext.proto new file mode 100644 index 0000000..62448cb --- /dev/null +++ b/pkg/proto_back/common.ext.proto @@ -0,0 +1,5 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +message Empty{} \ No newline at end of file diff --git a/pkg/proto_back/connect.ext.proto b/pkg/proto_back/connect.ext.proto new file mode 100644 index 0000000..92f01e6 --- /dev/null +++ b/pkg/proto_back/connect.ext.proto @@ -0,0 +1,174 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +enum PackageType { + PT_UNKNOWN = 0; // 未知 + PT_SIGN_IN = 1; // 设备登录请求 + PT_SYNC = 2; // 消息同步触发 + PT_HEARTBEAT = 3; // 心跳 + PT_MESSAGE = 4; // 消息投递 + PT_SUBSCRIBE_ROOM = 5; // 订阅房间 +} + +/************************************消息体定义开始************************************/ +// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 +message Message { + Sender sender = 1; // 发送者 + ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group + int64 receiver_id = 3; // 用户id或者群组id + repeated int64 to_user_ids = 4; // 需要@的用户id列表 + MessageType message_type = 5; // 消息类型 + bytes message_content = 6; // 消息内容 + int64 seq = 7; // 用户消息发送序列号 + int64 send_time = 8; // 消息发送时间戳,精确到毫秒 + MessageStatus status = 9; // 消息状态 +} + +message Sender { + SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 + int64 sender_id = 2; // 发送者id + int64 device_id = 3; // 发送者设备id + string avatar_url = 4; // 昵称 + string nickname = 5; // 头像 + string extra = 6; // 扩展字段 +} + +// 消息类型 +enum MessageType { + MT_UNKNOWN = 0; // 未知 + MT_TEXT = 1; // 文本 + MT_FACE = 2; // 表情 + MT_VOICE = 3; // 语音消息 + MT_IMAGE = 4; // 图片 + MT_FILE = 5; // 文件 + MT_LOCATION = 6; // 地理位置 + MT_COMMAND = 7; // 指令推送 + MT_CUSTOM = 8; // 自定义 +} + +// 文本消息 +message Text { + string text = 1; // 文本消息内容 +} + +// 表情消息 +message Face { + int64 face_id = 1; + string face_url = 2; +} + +// 语音消息 +message Voice { + string id = 1; // 语音包id + int32 size = 2; // 语音包大小 + int32 duration = 3; // 语音时长 + string url = 4; // 语音文件URL +} + +// 图片消息 +message Image { + string id = 1; // 图片id + int32 width = 2; // 图片宽度 + int32 height = 3; // 图片长度 + string url = 4; // 图片URL + string thumbnail_url = 5; // 图片缩略图url +} + +// 文件消息 +message File { + int64 id = 12; // 文件id + string name = 13; // 文件名 + int64 size = 14; // 文件大小 + string url = 15; // 文件url +} + +// 地理位置消息 +message Location { + string desc = 1; // 描述 + double latitude = 2; // 经度 + double longitude = 3; // 纬度 +} + +// Command 指令推送,1000以下,IM内部用,1000以上,留给业务用 +message Command { + int32 code = 1; // 指令码 + bytes data = 2; // 数据内容 +} + +// 自定义消息 +message Custom { + string data = 1; // 自定义数据 +} + +/************************************消息体定义结束************************************/ + +// 上行数据 +message Input { + PackageType type = 1; // 包的类型 + int64 request_id = 2; // 请求id + bytes data = 3; // 数据 +} + +// 下行数据 +message Output { + PackageType type = 1; // 包的类型 + int64 request_id = 2; // 请求id + int32 code = 3; // 错误码 + string message = 4; // 错误信息 + bytes data = 5; // 数据 +} + +// 设备登录,package_type:1 +message SignInInput { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + string token = 3; // 秘钥 +} + +// 消息同步请求,package_type:2 +message SyncInput { + int64 seq = 1; // 客户端已经同步的序列号 +} +// 消息同步响应,package_type:2 +message SyncOutput { + repeated Message messages = 1; // 消息列表 + bool has_more = 2; // 是否有更多数据 +} + +// 订阅房间请求 +message SubscribeRoomInput { + int64 room_id = 1; // 房间ID,如果为0,取消房间订阅 + int64 seq = 2; // 消息消息序列号, +} + +enum ReceiverType { + RT_UNKNOWN = 0; // 未知 + RT_USER = 1; // 用户 + RT_GROUP = 2; // 群组 + RT_ROOM = 3; // 房间 +} + +// 消息投递,package_type:4 +message MessageSend { + Message message = 1; // 消息 +} + +enum SenderType { + ST_UNKNOWN = 0; // 未知的 + ST_SYSTEM = 1; // IM系统 + ST_USER = 2; // 用户 + ST_BUSINESS = 3; // 业务方 +} + +enum MessageStatus { + MS_UNKNOWN = 0; // 未知的 + MS_NORMAL = 1; // 正常的 + MS_RECALL = 2; // 撤回 +} + +// 投递消息回执,package_type:4 +message MessageACK { + int64 device_ack = 2; // 设备收到消息的确认号 + int64 receive_time = 3; // 消息接收时间戳,精确到毫秒 +} diff --git a/pkg/proto_back/connect.int.proto b/pkg/proto_back/connect.int.proto new file mode 100644 index 0000000..a2e0719 --- /dev/null +++ b/pkg/proto_back/connect.int.proto @@ -0,0 +1,83 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +service ConnectInt { + // 消息投递 + rpc DeliverMessage (DeliverMessageReq) returns (Empty); +} +message Empty{} +enum SenderType { + ST_UNKNOWN = 0; // 未知的 + ST_SYSTEM = 1; // IM系统 + ST_USER = 2; // 用户 + ST_BUSINESS = 3; // 业务方 +} +message Sender { + SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 + int64 sender_id = 2; // 发送者id + int64 device_id = 3; // 发送者设备id + string avatar_url = 4; // 昵称 + string nickname = 5; // 头像 + string extra = 6; // 扩展字段 +} +enum ReceiverType { + RT_UNKNOWN = 0; // 未知 + RT_USER = 1; // 用户 + RT_GROUP = 2; // 群组 + RT_ROOM = 3; // 房间 +} + +// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 +message Message { + Sender sender = 1; // 发送者 + ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group + int64 receiver_id = 3; // 用户id或者群组id + repeated int64 to_user_ids = 4; // 需要@的用户id列表 + MessageType message_type = 5; // 消息类型 + bytes message_content = 6; // 消息内容 + int64 seq = 7; // 用户消息发送序列号 + int64 send_time = 8; // 消息发送时间戳,精确到毫秒 + MessageStatus status = 9; // 消息状态 +} +enum MessageStatus { + MS_UNKNOWN = 0; // 未知的 + MS_NORMAL = 1; // 正常的 + MS_RECALL = 2; // 撤回 +} + + +// 消息类型 +enum MessageType { + MT_UNKNOWN = 0; // 未知 + MT_TEXT = 1; // 文本 + MT_FACE = 2; // 表情 + MT_VOICE = 3; // 语音消息 + MT_IMAGE = 4; // 图片 + MT_FILE = 5; // 文件 + MT_LOCATION = 6; // 地理位置 + MT_COMMAND = 7; // 指令推送 + MT_CUSTOM = 8; // 自定义 +} + + +// 消息投递,package_type:4 +message MessageSend { + Message message = 1; // 消息 +} +message DeliverMessageReq { + int64 device_id = 1; // 设备id + MessageSend message_send = 2; // 数据 +} + +// 房间推送 +message PushRoomMsg{ + int64 room_id = 1; // 设备id + MessageSend message_send = 2; // 数据 +} + +// 房间推送 +message PushAllMsg{ + MessageSend message_send = 2; // 数据 +} + diff --git a/pkg/proto_back/logic.ext.proto b/pkg/proto_back/logic.ext.proto new file mode 100644 index 0000000..e6fa480 --- /dev/null +++ b/pkg/proto_back/logic.ext.proto @@ -0,0 +1,212 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +message Empty{} + +service LogicExt { + // 注册设备 + rpc RegisterDevice (RegisterDeviceReq) returns (RegisterDeviceResp); + + // 发送消息 + rpc SendMessage (SendMessageReq) returns (SendMessageResp); + // 推送消息到房间 + rpc PushRoom(PushRoomReq)returns(Empty); + + // 添加好友 + rpc AddFriend (AddFriendReq) returns (Empty); + // 同意添加好友 + rpc AgreeAddFriend (AgreeAddFriendReq) returns (Empty); + // 设置好友信息 + rpc SetFriend (SetFriendReq) returns (SetFriendResp); + // 获取好友列表 + rpc GetFriends (Empty) returns (GetFriendsResp); + + // 创建群组 + rpc CreateGroup (CreateGroupReq) returns (CreateGroupResp); + // 更新群组 + rpc UpdateGroup (UpdateGroupReq) returns (Empty); + // 获取群组信息 + rpc GetGroup (GetGroupReq) returns (GetGroupResp); + // 获取用户加入的所有群组 + rpc GetGroups (Empty) returns (GetGroupsResp); + + // 添加群组成员 + rpc AddGroupMembers (AddGroupMembersReq) returns (AddGroupMembersResp); + // 更新群组成员信息 + rpc UpdateGroupMember (UpdateGroupMemberReq) returns (Empty); + // 添加群组成员 + rpc DeleteGroupMember (DeleteGroupMemberReq) returns (Empty); + // 获取群组成员 + rpc GetGroupMembers (GetGroupMembersReq) returns (GetGroupMembersResp); +} + +message RegisterDeviceReq { + int32 type = 2; // 设备类型 + string brand = 3; // 厂商 + string model = 4; // 机型 + string system_version = 5; // 系统版本 + string sdk_version = 6; // sdk版本号 +} +message RegisterDeviceResp { + int64 device_id = 1; // 设备id +} +enum ReceiverType { + RT_UNKNOWN = 0; // 未知 + RT_USER = 1; // 用户 + RT_GROUP = 2; // 群组 + RT_ROOM = 3; // 房间 +} +message SendMessageReq { + ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group + int64 receiver_id = 2; // 用户id或者群组id + repeated int64 to_user_ids = 3; // 需要@的用户id列表 + MessageType message_type = 4; // 消息类型 + bytes message_content = 5; // 消息内容 + int64 send_time = 6; // 消息发送时间戳,精确到毫秒 + bool is_persist = 7; // 是否将消息持久化到数据库 +} +message SendMessageResp { + int64 seq = 1; // 消息序列号 +} +// 消息类型 +enum MessageType { + MT_UNKNOWN = 0; // 未知 + MT_TEXT = 1; // 文本 + MT_FACE = 2; // 表情 + MT_VOICE = 3; // 语音消息 + MT_IMAGE = 4; // 图片 + MT_FILE = 5; // 文件 + MT_LOCATION = 6; // 地理位置 + MT_COMMAND = 7; // 指令推送 + MT_CUSTOM = 8; // 自定义 +} +message PushRoomReq{ + int64 room_id = 1; // 房间id + MessageType message_type = 2; // 消息类型 + bytes message_content = 3; // 消息内容 + int64 send_time = 4; // 消息发送时间戳,精确到毫秒 + bool is_persist = 5; // 是否将消息持久化 + bool is_priority = 6; // 是否优先推送 +} + +message AddFriendReq { + int64 friend_id = 1; // 用户id + string remarks = 2; // 备注 + string description = 3; // 描述 +} + +message AgreeAddFriendReq { + int64 user_id = 1; // 用户id + string remarks = 2; // 备注 +} + +message SetFriendReq { + int64 friend_id = 1; // 好友id + string remarks = 2; // 备注 + string extra = 8; // 附加字段 +} +message SetFriendResp { + int64 friend_id = 1; // 好友id + string remarks = 2; // 备注 + string extra = 8; // 附加字段 +} + +message Friend { + int64 user_id = 1; // 用户id + string phone_number = 2; // 电话号码 + string nickname = 3; // 昵称 + int32 sex = 4; // 性别 + string avatar_url = 5; // 头像地址 + string user_extra = 6; // 用户附加字段 + string remarks = 7; // 备注 + string extra = 8; // 附加字段 +} +message GetFriendsResp { + repeated Friend friends = 1; +} + +message CreateGroupReq { + string name = 1; // 名称 + string avatar_url = 2; // 头像 + string introduction = 3; // 简介 + string extra = 4; // 附加字段 + repeated int64 member_ids = 5; // 群组成员ID列表 +} +message CreateGroupResp { + int64 group_id = 1; // 群组id +} + +message UpdateGroupReq { + int64 group_id = 1; // 群组id + string avatar_url = 2; // 头像 + string name = 3; // 名称 + string introduction = 4; // 简介 + string extra = 5; // 附加字段 +} + +message GetGroupReq { + int64 group_id = 1; +} +message GetGroupResp { + Group group = 1; +} + +message Group { + int64 group_id = 1; // 群组id + string name = 2; // 名称 + string avatar_url = 3; // 头像 + string introduction = 4; // 简介 + int32 user_mum = 5; // 用户数 + string extra = 6; // 附加字段 + int64 create_time = 7; // 创建时间 + int64 update_time = 8; // 更新时间 +} + +message GetGroupsResp { + repeated Group groups = 1; +} + +message AddGroupMembersReq { + int64 group_id = 1; // 群组id + repeated int64 user_ids = 2; // 用户id列表 +} +message AddGroupMembersResp { + repeated int64 user_ids = 1; // 已经在群组的用户id列表 +} + +enum MemberType { + GMT_UNKNOWN = 0; // 未知 + GMT_ADMIN = 1; // 管理员 + GMT_MEMBER = 2; // 成员 +} + +message UpdateGroupMemberReq { + int64 group_id = 1; // 群组id + int64 user_id = 2; // 用户id + MemberType member_type = 3; // 成员类型 + string remarks = 4; // 备注 + string extra = 5; // 附加字段 +} + +message DeleteGroupMemberReq { + int64 group_id = 1; // 群组id + int64 user_id = 2; // 用户id +} + +message GetGroupMembersReq { + int64 group_id = 1; +} +message GetGroupMembersResp { + repeated GroupMember members = 1; +} +message GroupMember { + int64 user_id = 1; + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string user_extra = 5; // 用户附加字段 + MemberType member_type = 6; // 成员类型 + string remarks = 7; // 备注 + string extra = 8; // 群组成员附加字段 +} \ No newline at end of file diff --git a/pkg/proto_back/logic.int.proto b/pkg/proto_back/logic.int.proto new file mode 100644 index 0000000..c9f8a31 --- /dev/null +++ b/pkg/proto_back/logic.int.proto @@ -0,0 +1,177 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +message Empty{} + +service LogicInt { + // 登录 + rpc ConnSignIn (ConnSignInReq) returns (Empty); + // 消息同步 + rpc Sync (SyncReq) returns (SyncResp); + // 设备收到消息回执 + rpc MessageACK (MessageACKReq) returns (Empty); + // 设备离线 + rpc Offline (OfflineReq) returns (Empty); + // 订阅房间 + rpc SubscribeRoom(SubscribeRoomReq)returns(Empty); + // 发送消息 + rpc SendMessage (SendMessageReq) returns (SendMessageResp); + // 推送消息到房间 + rpc PushRoom(PushRoomReq)returns(Empty); + // 全服推送 + rpc PushAll(PushAllReq)returns(Empty); + + // 获取设备信息 + rpc GetDevice (GetDeviceReq) returns (GetDeviceResp); + // 服务停止 + rpc ServerStop (ServerStopReq) returns (Empty); +} + +message PushRoomReq{ + int64 room_id = 1; // 房间id + MessageType message_type = 2; // 消息类型 + bytes message_content = 3; // 消息内容 + int64 send_time = 4; // 消息发送时间戳,精确到毫秒 + bool is_persist = 5; // 是否将消息持久化 + bool is_priority = 6; // 是否优先推送 +} + +message SendMessageResp { + int64 seq = 1; // 消息序列号 +} + +message SendMessageReq { + ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group + int64 receiver_id = 2; // 用户id或者群组id + repeated int64 to_user_ids = 3; // 需要@的用户id列表 + MessageType message_type = 4; // 消息类型 + bytes message_content = 5; // 消息内容 + int64 send_time = 6; // 消息发送时间戳,精确到毫秒 + bool is_persist = 7; // 是否将消息持久化到数据库 +} + +enum ReceiverType { + RT_UNKNOWN = 0; // 未知 + RT_USER = 1; // 用户 + RT_GROUP = 2; // 群组 + RT_ROOM = 3; // 房间 +} + +// 消息类型 +enum MessageType { + MT_UNKNOWN = 0; // 未知 + MT_TEXT = 1; // 文本 + MT_FACE = 2; // 表情 + MT_VOICE = 3; // 语音消息 + MT_IMAGE = 4; // 图片 + MT_FILE = 5; // 文件 + MT_LOCATION = 6; // 地理位置 + MT_COMMAND = 7; // 指令推送 + MT_CUSTOM = 8; // 自定义 +} + +enum SenderType { + ST_UNKNOWN = 0; // 未知的 + ST_SYSTEM = 1; // IM系统 + ST_USER = 2; // 用户 + ST_BUSINESS = 3; // 业务方 +} + +message Sender { + SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 + int64 sender_id = 2; // 发送者id + int64 device_id = 3; // 发送者设备id + string avatar_url = 4; // 昵称 + string nickname = 5; // 头像 + string extra = 6; // 扩展字段 +} + +// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 +message Message { + Sender sender = 1; // 发送者 + ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group + int64 receiver_id = 3; // 用户id或者群组id + repeated int64 to_user_ids = 4; // 需要@的用户id列表 + MessageType message_type = 5; // 消息类型 + bytes message_content = 6; // 消息内容 + int64 seq = 7; // 用户消息发送序列号 + int64 send_time = 8; // 消息发送时间戳,精确到毫秒 + MessageStatus status = 9; // 消息状态 +} +enum MessageStatus { + MS_UNKNOWN = 0; // 未知的 + MS_NORMAL = 1; // 正常的 + MS_RECALL = 2; // 撤回 +} + +message ConnSignInReq { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + string token = 3; // 秘钥 + string conn_addr = 4; // 服务器地址 + string client_addr = 5; // 客户端地址 +} + +message SyncReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 seq = 3; // 客户端已经同步的序列号 +} +message SyncResp { + repeated Message messages = 1; // 消息列表 + bool has_more = 2; // 是否有更多数据 +} + +message MessageACKReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 device_ack = 3; // 设备收到消息的确认号 + int64 receive_time = 4; // 消息接收时间戳,精确到毫秒 +} + +message OfflineReq { + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + string client_addr = 3; // 客户端地址 +} + +message SubscribeRoomReq{ + int64 user_id = 1; // 用户id + int64 device_id = 2; // 设备id + int64 room_id = 3; // 房间id + int64 seq = 4; // 消息序列号 + string conn_addr = 5; // 服务器地址 +} + +message PushAllReq{ + MessageType message_type = 1; // 消息类型 + bytes message_content = 2; // 消息内容 + int64 send_time = 3; // 消息发送时间戳,精确到毫秒 +} + +message GetDeviceReq { + int64 device_id = 1; +} +message GetDeviceResp { + Device device = 1; +} + +message Device { + int64 device_id = 1; // 设备id + int64 user_id = 2; // 用户id + int32 type = 3; // 设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web + string brand = 4; // 手机厂商 + string model = 5; // 机型 + string system_version = 6; // 系统版本 + string sdk_version = 7; // SDK版本 + int32 status = 8; // 在线状态,0:不在线;1:在线 + string conn_addr = 9; // 服务端连接地址 + string client_addr = 10; // 客户端地址 + int64 create_time = 11; // 创建时间 + int64 update_time = 12; // 更新时间 +} + +message ServerStopReq { + string conn_addr = 1; +} diff --git a/pkg/proto_back/push.ext.proto b/pkg/proto_back/push.ext.proto new file mode 100644 index 0000000..72d3c2a --- /dev/null +++ b/pkg/proto_back/push.ext.proto @@ -0,0 +1,71 @@ +syntax = "proto3"; +package pb; +option go_package = "gim/pkg/pb/"; + +enum PushCode { + PC_ADD_DEFAULT = 0; + + PC_ADD_FRIEND = 100; // 添加好友请求 + PC_AGREE_ADD_FRIEND = 101; // 同意添加好友 + + PC_UPDATE_GROUP = 110; // 更新群组 + + PC_ADD_GROUP_MEMBERS = 120; // 添加群组成员 + PC_REMOVE_GROUP_MEMBER = 121; // 移除群组成员 + +} + +// 推送码 PC_ADD_FRIEND = 100 +message AddFriendPush { + int64 friend_id = 1; // 好友id + string nickname = 2; // 昵称 + string avatar_url = 3; // 头像 + string description = 4; // 描述 +} + +// 推送码 PC_AGREE_ADD_FRIEND = 101 +message AgreeAddFriendPush { + int64 friend_id = 1; // 好友id + string nickname = 2; // 昵称 + string avatar_url = 3; // 头像 +} + +// 更新群组 PC_UPDATE_GROUP = 110 +message UpdateGroupPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + string name = 3; // 群组名称 + string avatar_url = 4; // 群组头像 + string introduction = 5; // 群组简介 + string extra = 6; // 附加字段 +} + +// 添加群组成员 PC_AGREE_ADD_GROUPS = 120 +message AddGroupMembersPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + repeated GroupMember members = 3; // 群组成员 +} + +// 删除群组成员 PC_REMOVE_GROUP_MEMBER = 121 +message RemoveGroupMemberPush { + int64 opt_id = 1; // 操作人用户id + string opt_name = 2; // 操作人昵称 + int64 deleted_user_id = 3; // 被删除的成员id +} + +enum MemberType { + GMT_UNKNOWN = 0; // 未知 + GMT_ADMIN = 1; // 管理员 + GMT_MEMBER = 2; // 成员 +} +message GroupMember { + int64 user_id = 1; + string nickname = 2; // 昵称 + int32 sex = 3; // 性别 + string avatar_url = 4; // 头像地址 + string user_extra = 5; // 用户附加字段 + MemberType member_type = 6; // 成员类型 + string remarks = 7; // 备注 + string extra = 8; // 群组成员附加字段 +} \ No newline at end of file