首页 > 其他分享 >go-zero docker-compose 搭建课件服务(三):编写courseware api服务

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

时间:2022-10-17 16:35:16浏览次数:85  
标签:compose svcCtx courseware ctx zero api go

0、转载

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

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
}

标签:compose,svcCtx,courseware,ctx,zero,api,go
From: https://blog.51cto.com/u_13929949/5763472

相关文章

  • go-zero docker-compose搭建课件服务(四):生成Dockerfile
    0、转载go-zerodocker-compose搭建课件服务(四):生成Dockerfile并在docker-compose中启动0.1源码地址https://github.com/liuyuede123/go-zero-courseware1、目前的目录......
  • MySQL-8.0版本的docker-compose安装脚本(单实例)
    1.需求场景在开发和测试环境中,或者研究型的环境,对于数据库的安全和稳定性可以稍低一些,那么我们可以通过docker快速部署MySQL服务,降低部署的时间成本。2.脚本2.1目录......
  • docker-compose 实现minio分布式存储服务
    minio是一个非常流行的高性能存储服务,云服务器使用得非常多。现在minio的更新非常迅速,三天两头就会更新版本,为了学习minio,了解最近特性,使用docker进行部署安装就非常方便。......
  • LeetCode 1116. Print Zero Even Odd
    原题链接在这里:https://leetcode.com/problems/print-zero-even-odd/题目:Youhaveafunction printNumber thatcanbecalledwithanintegerparameterandprints......
  • docker-compose 启动 java 容器时报错 library initialization failed - unable to al
    问题:docker-compose启动java容器时报错libraryinitializationfailed-unabletoallocatefiledescriptortable-outofmemoryPickedupJAVA_TOOL_OPTIONS:......
  • 阿里云+腾讯云Composer 全量镜像
    今天使用composer时,发现有人说阿里云composer镜像不更新了(未经确认),为以防万一找到了腾讯云composer全量镜像阿里云https://developer.aliyun.com/composer腾讯云htt......
  • Ubuntu20.04卸载composer
    第一步:sudoapt-getremovecomposer第二步:sudoapt-getremove--auto-removecomposer卸载相关composersudoapt-getpurgecomposer删除文件及配置`sudoapt-......
  • Android开发 Jetpack_Compose_2 页面预览@Preview
    前言在学习jetpackcompose如何编写ui之前,我认为还是应该先了解与Androidstudio配合的页面预览@Preview。这样就可以立刻看到UI效果,从而方便后续学习验证代码。所......
  • Docker | Compose创建mysql容器
    本文通过DockerCompose来创建mysql容器在linux服务器上创建文件,用于管理容器mkdirdocker-mysqlcddocker-mysqlvimdocker-compose.yml#写入如下内容docker-c......
  • CentOS 7.9 安装 docker-compose
    一、CentOS7.9安装docker-compose地址https://github.com/docker/composehttps://github.com/docker/compose/releases/download/v2.1.0/docker-compose-linux-x86_......