Pārlūkot izejas kodu

增加openapi接口,获取联系人

DESKTOP-53URE31\USER 8 mēneši atpakaļ
vecāks
revīzija
71072c88d7

+ 2 - 1
desc/all.api

@@ -10,4 +10,5 @@ import "./wechat/sop_task.api"
 import "./wechat/sop_stage.api"
 import "./wechat/sop_node.api"
 import "./wechat/message_records.api"
-import "./wechat/chatroom_member.api"
+import "./wechat/chatroom_member.api"
+import "./openapi/contact.api"

+ 24 - 0
desc/openapi/contact.api

@@ -0,0 +1,24 @@
+import "../base.api"
+import "../wechat/contact.api"
+
+type (
+    WxidReq {
+        Wxid string `json:"wxid"`
+    }
+)
+
+
+@server(
+    group: openapi
+    prefix: /openapi
+)
+
+service Wechat {
+    // 通过wxid获取联系人信息
+    @handler openapiGetContactByWxid
+    post /contact/getContactByWxid (WxidReq) returns (ContactInfoResp)
+
+    // 获取联系人列表
+    @handler openapiGetContactList
+    post /contact/getContactList (WxidReq) returns (ContactListResp)
+}

+ 0 - 4
go.sum

@@ -362,7 +362,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
@@ -393,7 +392,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
 github.com/nicksnyder/go-i18n/v2 v2.4.0 h1:3IcvPOAvnCKwNm0TB0dLDTuawWEj+ax/RERNC+diLMM=
 github.com/nicksnyder/go-i18n/v2 v2.4.0/go.mod h1:nxYSZE9M0bf3Y70gPQjN9ha7XNHX7gMc814+6wVyEI4=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8=
 github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
@@ -472,8 +470,6 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
 github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
 github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
-github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=

+ 44 - 0
internal/handler/openapi/openapi_get_contact_by_wxid_handler.go

@@ -0,0 +1,44 @@
+package openapi
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/openapi"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /openapi/contact/getContactByWxid openapi OpenapiGetContactByWxid
+//
+// 通过wxid获取联系人信息
+//
+// 通过wxid获取联系人信息
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: WxidReq
+//
+// Responses:
+//  200: ContactInfoResp
+
+func OpenapiGetContactByWxidHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.WxidReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := openapi.NewOpenapiGetContactByWxidLogic(r.Context(), svcCtx)
+		resp, err := l.OpenapiGetContactByWxid(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 44 - 0
internal/handler/openapi/openapi_get_contact_list_handler.go

@@ -0,0 +1,44 @@
+package openapi
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/openapi"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+)
+
+// swagger:route post /openapi/contact/getContactList openapi OpenapiGetContactList
+//
+// 获取联系人列表
+//
+// 获取联系人列表
+//
+// Parameters:
+//  + name: body
+//    require: true
+//    in: body
+//    type: WxidReq
+//
+// Responses:
+//  200: ContactListResp
+
+func OpenapiGetContactListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		var req types.WxidReq
+		if err := httpx.Parse(r, &req, true); err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+			return
+		}
+
+		l := openapi.NewOpenapiGetContactListLogic(r.Context(), svcCtx)
+		resp, err := l.OpenapiGetContactList(&req)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 17 - 0
internal/handler/routes.go

@@ -14,6 +14,7 @@ import (
 	label "wechat-api/internal/handler/label"
 	label_relationship "wechat-api/internal/handler/label_relationship"
 	message_records "wechat-api/internal/handler/message_records"
+	openapi "wechat-api/internal/handler/openapi"
 	sop_node "wechat-api/internal/handler/sop_node"
 	sop_stage "wechat-api/internal/handler/sop_stage"
 	sop_task "wechat-api/internal/handler/sop_task"
@@ -480,4 +481,20 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 		),
 		rest.WithJwt(serverCtx.Config.Auth.AccessSecret),
 	)
+
+	server.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodPost,
+				Path:    "/contact/getContactByWxid",
+				Handler: openapi.OpenapiGetContactByWxidHandler(serverCtx),
+			},
+			{
+				Method:  http.MethodPost,
+				Path:    "/contact/getContactList",
+				Handler: openapi.OpenapiGetContactListHandler(serverCtx),
+			},
+		},
+		rest.WithPrefix("/openapi"),
+	)
 }

+ 65 - 0
internal/logic/openapi/openapi_get_contact_by_wxid_logic.go

@@ -0,0 +1,65 @@
+package openapi
+
+import (
+	"context"
+
+	"wechat-api/ent/contact"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"github.com/suyuan32/simple-admin-common/utils/pointy"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type OpenapiGetContactByWxidLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewOpenapiGetContactByWxidLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OpenapiGetContactByWxidLogic {
+	return &OpenapiGetContactByWxidLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *OpenapiGetContactByWxidLogic) OpenapiGetContactByWxid(req *types.WxidReq) (resp *types.ContactInfoResp, err error) {
+
+	data, err := l.svcCtx.DB.Contact.Query().Where(contact.Wxid(req.Wxid)).First(l.ctx)
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	return &types.ContactInfoResp{
+		BaseDataInfo: types.BaseDataInfo{
+			Code: 0,
+			Msg:  errormsg.Success,
+		},
+		Data: types.ContactInfo{
+			BaseIDInfo: types.BaseIDInfo{
+				Id:        &data.ID,
+				CreatedAt: pointy.GetPointer(data.CreatedAt.UnixMilli()),
+				UpdatedAt: pointy.GetPointer(data.UpdatedAt.UnixMilli()),
+			},
+			Status:    &data.Status,
+			WxWxid:    &data.WxWxid,
+			Type:      &data.Type,
+			Wxid:      &data.Wxid,
+			Account:   &data.Account,
+			Nickname:  &data.Nickname,
+			Markname:  &data.Markname,
+			Headimg:   &data.Headimg,
+			Sex:       &data.Sex,
+			Starrole:  &data.Starrole,
+			Dontseeit: &data.Dontseeit,
+			Dontseeme: &data.Dontseeme,
+			Lag:       &data.Lag,
+			Gid:       &data.Gid,
+			Gname:     &data.Gname,
+			V3:        &data.V3,
+		},
+	}, nil
+}

+ 67 - 0
internal/logic/openapi/openapi_get_contact_list_logic.go

@@ -0,0 +1,67 @@
+package openapi
+
+import (
+	"context"
+
+	"wechat-api/ent/contact"
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+	"wechat-api/internal/utils/dberrorhandler"
+
+	"github.com/suyuan32/simple-admin-common/msg/errormsg"
+	"github.com/suyuan32/simple-admin-common/utils/pointy"
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type OpenapiGetContactListLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+}
+
+func NewOpenapiGetContactListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OpenapiGetContactListLogic {
+	return &OpenapiGetContactListLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx}
+}
+
+func (l *OpenapiGetContactListLogic) OpenapiGetContactList(req *types.WxidReq) (resp *types.ContactListResp, err error) {
+	data, err := l.svcCtx.DB.Contact.Query().Where(contact.WxWxid(req.Wxid)).All(l.ctx)
+
+	if err != nil {
+		return nil, dberrorhandler.DefaultEntError(l.Logger, err, req)
+	}
+
+	resp = &types.ContactListResp{}
+	resp.Msg = errormsg.Success
+	resp.Data.Total = uint64(len(data))
+	for _, v := range data {
+		resp.Data.Data = append(resp.Data.Data,
+			types.ContactInfo{
+				BaseIDInfo: types.BaseIDInfo{
+					Id:        &v.ID,
+					CreatedAt: pointy.GetPointer(v.CreatedAt.UnixMilli()),
+					UpdatedAt: pointy.GetPointer(v.UpdatedAt.UnixMilli()),
+				},
+				Status:    &v.Status,
+				WxWxid:    &v.WxWxid,
+				Type:      &v.Type,
+				Wxid:      &v.Wxid,
+				Account:   &v.Account,
+				Nickname:  &v.Nickname,
+				Markname:  &v.Markname,
+				Headimg:   &v.Headimg,
+				Sex:       &v.Sex,
+				Starrole:  &v.Starrole,
+				Dontseeit: &v.Dontseeit,
+				Dontseeme: &v.Dontseeme,
+				Lag:       &v.Lag,
+				Gid:       &v.Gid,
+				Gname:     &v.Gname,
+				V3:        &v.V3,
+			})
+	}
+
+	return resp, nil
+}

+ 5 - 0
internal/types/types.go

@@ -996,3 +996,8 @@ type ChatroomMemberInfoResp struct {
 	// Server information | Server数据
 	Data ChatroomMemberInfo `json:"data"`
 }
+
+// swagger:model WxidReq
+type WxidReq struct {
+	Wxid string `json:"wxid"`
+}