gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/acs/v1/api.go (about)

     1  // Package acs code generated by oapi sdk gen
     2  /*
     3   * MIT License
     4   *
     5   * Copyright (c) 2022 Lark Technologies Pte. Ltd.
     6   *
     7   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
     8   *
     9   * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
    10   *
    11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    12   */
    13  
    14  package larkacs
    15  
    16  import (
    17  	"bytes"
    18  	"context"
    19  	"net/http"
    20  
    21  	"gitee.com/larksuite/oapi-sdk-go/v3/core"
    22  )
    23  
    24  func NewService(config *larkcore.Config) *AcsService {
    25  	a := &AcsService{config: config}
    26  	a.AccessRecord = &accessRecord{service: a}
    27  	a.AccessRecordAccessPhoto = &accessRecordAccessPhoto{service: a}
    28  	a.Device = &device{service: a}
    29  	a.User = &user{service: a}
    30  	a.UserFace = &userFace{service: a}
    31  	return a
    32  }
    33  
    34  type AcsService struct {
    35  	config                  *larkcore.Config
    36  	AccessRecord            *accessRecord            // 门禁记录
    37  	AccessRecordAccessPhoto *accessRecordAccessPhoto // 识别图片
    38  	Device                  *device                  // 门禁设备
    39  	User                    *user                    // 用户
    40  	UserFace                *userFace                // 人脸图片
    41  }
    42  
    43  type accessRecord struct {
    44  	service *AcsService
    45  }
    46  type accessRecordAccessPhoto struct {
    47  	service *AcsService
    48  }
    49  type device struct {
    50  	service *AcsService
    51  }
    52  type user struct {
    53  	service *AcsService
    54  }
    55  type userFace struct {
    56  	service *AcsService
    57  }
    58  
    59  // 获取门禁记录列表
    60  //
    61  // - 用户在门禁考勤机上成功开门或打卡后,智能门禁应用都会生成一条门禁记录。;;该接口返回满足查询参数的识别记录
    62  //
    63  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/access_record/list
    64  //
    65  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/list_accessRecord.go
    66  func (a *accessRecord) List(ctx context.Context, req *ListAccessRecordReq, options ...larkcore.RequestOptionFunc) (*ListAccessRecordResp, error) {
    67  	// 发起请求
    68  	apiReq := req.apiReq
    69  	apiReq.ApiPath = "/open-apis/acs/v1/access_records"
    70  	apiReq.HttpMethod = http.MethodGet
    71  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
    72  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
    73  	if err != nil {
    74  		return nil, err
    75  	}
    76  	// 反序列响应结果
    77  	resp := &ListAccessRecordResp{ApiResp: apiResp}
    78  	err = apiResp.JSONUnmarshalBody(resp)
    79  	if err != nil {
    80  		return nil, err
    81  	}
    82  	return resp, err
    83  }
    84  func (a *accessRecord) ListByIterator(ctx context.Context, req *ListAccessRecordReq, options ...larkcore.RequestOptionFunc) (*ListAccessRecordIterator, error) {
    85  	return &ListAccessRecordIterator{
    86  		ctx:      ctx,
    87  		req:      req,
    88  		listFunc: a.List,
    89  		options:  options,
    90  		limit:    req.Limit}, nil
    91  }
    92  
    93  // 下载人脸识别图片
    94  //
    95  // - 用户在门禁考勤机上成功开门或打卡后,智能门禁应用都会生成一条门禁记录,对于使用人脸识别方式进行开门的识别记录,还会有抓拍图。;;可以用该接口下载开门时的人脸识别照片
    96  //
    97  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/access_record-access_photo/get
    98  //
    99  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/get_accessRecordAccessPhoto.go
   100  func (a *accessRecordAccessPhoto) Get(ctx context.Context, req *GetAccessRecordAccessPhotoReq, options ...larkcore.RequestOptionFunc) (*GetAccessRecordAccessPhotoResp, error) {
   101  	// 发起请求
   102  	apiReq := req.apiReq
   103  	apiReq.ApiPath = "/open-apis/acs/v1/access_records/:access_record_id/access_photo"
   104  	apiReq.HttpMethod = http.MethodGet
   105  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   106  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
   107  	if err != nil {
   108  		return nil, err
   109  	}
   110  	// 反序列响应结果
   111  	resp := &GetAccessRecordAccessPhotoResp{ApiResp: apiResp}
   112  	// 如果是下载,则设置响应结果
   113  	if apiResp.StatusCode == http.StatusOK {
   114  		resp.File = bytes.NewBuffer(apiResp.RawBody)
   115  		resp.FileName = larkcore.FileNameByHeader(apiResp.Header)
   116  		return resp, err
   117  	}
   118  	err = apiResp.JSONUnmarshalBody(resp)
   119  	if err != nil {
   120  		return nil, err
   121  	}
   122  	return resp, err
   123  }
   124  
   125  // 获取设备列表
   126  //
   127  // - 使用该接口获取租户内所有设备
   128  //
   129  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/device/list
   130  //
   131  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/list_device.go
   132  func (d *device) List(ctx context.Context, options ...larkcore.RequestOptionFunc) (*ListDeviceResp, error) {
   133  	// 发起请求
   134  	apiReq := &larkcore.ApiReq{
   135  		PathParams:  larkcore.PathParams{},
   136  		QueryParams: larkcore.QueryParams{},
   137  	}
   138  	apiReq.ApiPath = "/open-apis/acs/v1/devices"
   139  	apiReq.HttpMethod = http.MethodGet
   140  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   141  	apiResp, err := larkcore.Request(ctx, apiReq, d.service.config, options...)
   142  	if err != nil {
   143  		return nil, err
   144  	}
   145  	// 反序列响应结果
   146  	resp := &ListDeviceResp{ApiResp: apiResp}
   147  	err = apiResp.JSONUnmarshalBody(resp)
   148  	if err != nil {
   149  		return nil, err
   150  	}
   151  	return resp, err
   152  }
   153  
   154  // 获取单个用户信息
   155  //
   156  // - 该接口用于获取智能门禁中单个用户的信息。
   157  //
   158  // - 只能获取已加入智能门禁权限组的用户
   159  //
   160  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/user/get
   161  //
   162  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/get_user.go
   163  func (u *user) Get(ctx context.Context, req *GetUserReq, options ...larkcore.RequestOptionFunc) (*GetUserResp, error) {
   164  	// 发起请求
   165  	apiReq := req.apiReq
   166  	apiReq.ApiPath = "/open-apis/acs/v1/users/:user_id"
   167  	apiReq.HttpMethod = http.MethodGet
   168  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   169  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   170  	if err != nil {
   171  		return nil, err
   172  	}
   173  	// 反序列响应结果
   174  	resp := &GetUserResp{ApiResp: apiResp}
   175  	err = apiResp.JSONUnmarshalBody(resp)
   176  	if err != nil {
   177  		return nil, err
   178  	}
   179  	return resp, err
   180  }
   181  
   182  // 获取用户列表
   183  //
   184  // - 使用该接口获取智能门禁中所有用户信息
   185  //
   186  // - 只能获取已加入智能门禁权限组的用户
   187  //
   188  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/user/list
   189  //
   190  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/list_user.go
   191  func (u *user) List(ctx context.Context, req *ListUserReq, options ...larkcore.RequestOptionFunc) (*ListUserResp, error) {
   192  	// 发起请求
   193  	apiReq := req.apiReq
   194  	apiReq.ApiPath = "/open-apis/acs/v1/users"
   195  	apiReq.HttpMethod = http.MethodGet
   196  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   197  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   198  	if err != nil {
   199  		return nil, err
   200  	}
   201  	// 反序列响应结果
   202  	resp := &ListUserResp{ApiResp: apiResp}
   203  	err = apiResp.JSONUnmarshalBody(resp)
   204  	if err != nil {
   205  		return nil, err
   206  	}
   207  	return resp, err
   208  }
   209  func (u *user) ListByIterator(ctx context.Context, req *ListUserReq, options ...larkcore.RequestOptionFunc) (*ListUserIterator, error) {
   210  	return &ListUserIterator{
   211  		ctx:      ctx,
   212  		req:      req,
   213  		listFunc: u.List,
   214  		options:  options,
   215  		limit:    req.Limit}, nil
   216  }
   217  
   218  // 修改用户部分信息
   219  //
   220  // - 飞书智能门禁在人脸识别成功后会有韦根信号输出,输出用户的卡号。;对于使用韦根协议的门禁系统,企业可使用该接口录入用户卡号。
   221  //
   222  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/user/patch
   223  //
   224  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/patch_user.go
   225  func (u *user) Patch(ctx context.Context, req *PatchUserReq, options ...larkcore.RequestOptionFunc) (*PatchUserResp, error) {
   226  	// 发起请求
   227  	apiReq := req.apiReq
   228  	apiReq.ApiPath = "/open-apis/acs/v1/users/:user_id"
   229  	apiReq.HttpMethod = http.MethodPatch
   230  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   231  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   232  	if err != nil {
   233  		return nil, err
   234  	}
   235  	// 反序列响应结果
   236  	resp := &PatchUserResp{ApiResp: apiResp}
   237  	err = apiResp.JSONUnmarshalBody(resp)
   238  	if err != nil {
   239  		return nil, err
   240  	}
   241  	return resp, err
   242  }
   243  
   244  // 下载人脸图片
   245  //
   246  // - 对于已经录入人脸图片的用户,可以使用该接口下载用户人脸图片
   247  //
   248  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/user-face/get
   249  //
   250  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/get_userFace.go
   251  func (u *userFace) Get(ctx context.Context, req *GetUserFaceReq, options ...larkcore.RequestOptionFunc) (*GetUserFaceResp, error) {
   252  	// 发起请求
   253  	apiReq := req.apiReq
   254  	apiReq.ApiPath = "/open-apis/acs/v1/users/:user_id/face"
   255  	apiReq.HttpMethod = http.MethodGet
   256  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   257  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   258  	if err != nil {
   259  		return nil, err
   260  	}
   261  	// 反序列响应结果
   262  	resp := &GetUserFaceResp{ApiResp: apiResp}
   263  	// 如果是下载,则设置响应结果
   264  	if apiResp.StatusCode == http.StatusOK {
   265  		resp.File = bytes.NewBuffer(apiResp.RawBody)
   266  		resp.FileName = larkcore.FileNameByHeader(apiResp.Header)
   267  		return resp, err
   268  	}
   269  	err = apiResp.JSONUnmarshalBody(resp)
   270  	if err != nil {
   271  		return nil, err
   272  	}
   273  	return resp, err
   274  }
   275  
   276  // 上传人脸图片
   277  //
   278  // - 用户需要录入人脸图片才可以使用门禁考勤机。使用该 API 上传门禁用户的人脸图片。
   279  //
   280  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/acs-v1/user-face/update
   281  //
   282  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/acsv1/update_userFace.go
   283  func (u *userFace) Update(ctx context.Context, req *UpdateUserFaceReq, options ...larkcore.RequestOptionFunc) (*UpdateUserFaceResp, error) {
   284  	options = append(options, larkcore.WithFileUpload())
   285  	// 发起请求
   286  	apiReq := req.apiReq
   287  	apiReq.ApiPath = "/open-apis/acs/v1/users/:user_id/face"
   288  	apiReq.HttpMethod = http.MethodPut
   289  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   290  	apiResp, err := larkcore.Request(ctx, apiReq, u.service.config, options...)
   291  	if err != nil {
   292  		return nil, err
   293  	}
   294  	// 反序列响应结果
   295  	resp := &UpdateUserFaceResp{ApiResp: apiResp}
   296  	err = apiResp.JSONUnmarshalBody(resp)
   297  	if err != nil {
   298  		return nil, err
   299  	}
   300  	return resp, err
   301  }