关于go-zero:gozero-dockercompose-搭建课件服务三编写courseware-api服务

35次阅读

共计 4518 个字符,预计需要花费 12 分钟才能阅读完成。

0、索引

go-zero docker-compose 搭建课件服务(一):编写服务 api 和 proto

go-zero docker-compose 搭建课件服务(二):编写 courseware rpc 服务

go-zero docker-compose 搭建课件服务(三):编写 courseware api 服务

go-zero docker-compose 搭建课件服务(四):生成 Dockerfile 并在 docker-compose 中启动

go-zero docker-compose 搭建课件服务(五):欠缺 user 服务

go-zero docker-compose 搭建课件服务(六):欠缺 jwt 鉴权和返回构造

go-zero docker-compose 搭建课件服务(七):prometheus+grafana 服务监控

0.1 源码地址

https://github.com/liuyuede123/go-zero-courseware

1、生成 api 相干文件

# 到之前创立的 courseware/api 目录下
goctl api go -api courseware.api -dir . -style gozero

2、courseware/api/etc/user.yaml 下减少 rpc 配置

Name: courseware
Host: 0.0.0.0
Port: 8400

CoursewareRpc:
  Etcd:
    Hosts:
      - etcd:2379
    Key: courseware.rpc

3、courseware/api/internal/config/config.go 下减少 CoursewareRpc

package config

import (
    "github.com/zeromicro/go-zero/rest"
    "github.com/zeromicro/go-zero/zrpc"
)

type Config struct {
    rest.RestConf

    CoursewareRpc zrpc.RpcClientConf
}

3、courseware/api/internal/svc/servicecontext.go 下减少 CoursewareRpc 配置

package svc

import (
    "github.com/zeromicro/go-zero/zrpc"
    "go-zero-courseware/courseware/api/internal/config"
    "go-zero-courseware/courseware/rpc/coursewareclient"
)

type ServiceContext struct {
    Config config.Config

    CoursewareRpc coursewareclient.Courseware
}

func NewServiceContext(c config.Config) *ServiceContext {
    return &ServiceContext{
        Config:        c,
        CoursewareRpc: coursewareclient.NewCourseware(zrpc.MustNewClient(c.CoursewareRpc)),
    }
}

4、补充增删改查相干接口逻辑

courseware/api/internal/logic/coursewareaddlogic.go

package logic

import (
    "context"
    "go-zero-courseware/courseware/rpc/coursewareclient"

    "go-zero-courseware/courseware/api/internal/svc"
    "go-zero-courseware/courseware/api/internal/types"

    "github.com/zeromicro/go-zero/core/logx"
)

type CoursewareAddLogic struct {
    logx.Logger
    ctx    context.Context
    svcCtx *svc.ServiceContext
}

func NewCoursewareAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareAddLogic {
    return &CoursewareAddLogic{Logger: logx.WithContext(ctx),
        ctx:    ctx,
        svcCtx: svcCtx,
    }
}

func (l *CoursewareAddLogic) CoursewareAdd(req *types.AddRequest) (resp *types.AddResponse, err error) {
    _, err = l.svcCtx.CoursewareRpc.Add(l.ctx, &coursewareclient.AddRequest{
        Code: req.Code,
        Name: req.Name,
        Type: req.Type,
    })
    if err != nil {return nil, err}

    return &types.AddResponse{}, nil}

courseware/api/internal/logic/coursewaredeletelogic.go

package logic

import (
    "context"
    "go-zero-courseware/courseware/rpc/coursewareclient"

    "go-zero-courseware/courseware/api/internal/svc"
    "go-zero-courseware/courseware/api/internal/types"

    "github.com/zeromicro/go-zero/core/logx"
)

type CoursewareDeleteLogic struct {
    logx.Logger
    ctx    context.Context
    svcCtx *svc.ServiceContext
}

func NewCoursewareDeleteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareDeleteLogic {
    return &CoursewareDeleteLogic{Logger: logx.WithContext(ctx),
        ctx:    ctx,
        svcCtx: svcCtx,
    }
}

func (l *CoursewareDeleteLogic) CoursewareDelete(req *types.DeleteRequest) (resp *types.DeleteResponse, err error) {
    _, err = l.svcCtx.CoursewareRpc.Delete(l.ctx, &coursewareclient.DeleteRequest{Id: req.Id,})
    if err != nil {return nil, err}

    return &types.DeleteResponse{}, nil}

courseware/api/internal/logic/coursewaregetlogic.go

package logic

import (
    "context"
    "go-zero-courseware/courseware/rpc/coursewareclient"

    "go-zero-courseware/courseware/api/internal/svc"
    "go-zero-courseware/courseware/api/internal/types"

    "github.com/zeromicro/go-zero/core/logx"
)

type CoursewareGetLogic struct {
    logx.Logger
    ctx    context.Context
    svcCtx *svc.ServiceContext
}

func NewCoursewareGetLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareGetLogic {
    return &CoursewareGetLogic{Logger: logx.WithContext(ctx),
        ctx:    ctx,
        svcCtx: svcCtx,
    }
}

func (l *CoursewareGetLogic) CoursewareGet(req *types.GetRequest) (resp *types.GetResponse, err error) {
    cw, err := l.svcCtx.CoursewareRpc.Get(l.ctx, &coursewareclient.GetRequest{Id: req.Id,})
    if err != nil {return nil, err}

    return &types.GetResponse{
        Id:   cw.Id,
        Code: cw.Code,
        Name: cw.Name,
        Type: cw.Type,
    }, nil
}

courseware/api/internal/logic/coursewareupdatelogic.go

package logic

import (
    "context"
    "go-zero-courseware/courseware/rpc/coursewareclient"

    "go-zero-courseware/courseware/api/internal/svc"
    "go-zero-courseware/courseware/api/internal/types"

    "github.com/zeromicro/go-zero/core/logx"
)

type CoursewareUpdateLogic struct {
    logx.Logger
    ctx    context.Context
    svcCtx *svc.ServiceContext
}

func NewCoursewareUpdateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CoursewareUpdateLogic {
    return &CoursewareUpdateLogic{Logger: logx.WithContext(ctx),
        ctx:    ctx,
        svcCtx: svcCtx,
    }
}

func (l *CoursewareUpdateLogic) CoursewareUpdate(req *types.UpdateRequest) (resp *types.UpdateResponse, err error) {
    _, err = l.svcCtx.CoursewareRpc.Update(l.ctx, &coursewareclient.UpdateRequest{
        Id:   req.Id,
        Code: req.Code,
        Name: req.Name,
        Type: req.Type,
    })
    if err != nil {return nil, err}

    return &types.UpdateResponse{}, nil

正文完
 0