首页 > 其他分享 >Kratos 项目实战(模块管理)

Kratos 项目实战(模块管理)

时间:2023-01-30 16:46:06浏览次数:44  
标签:实战 int32 domain Kratos context ctx module Module 模块

一.创建项目

1.1创建项目

在Linuxshare/cloud_center/目录下创建module项目

kratos new module -r https://gitee.com/go-kratos/kratos-layout.git

 

进入到module删除多余的文件

 

 

 internal/data/greeter.go,internal/biz/greeter.go这个也删除掉

1.2创建module的proto

syntax = "proto3";

package api.module.v1;
import "google/protobuf/empty.proto";

option go_package = "module/api/module/v1;v1";


service Module {
rpc CreateModule (CreateModuleRequest) returns (CreateModuleReply);
rpc UpdateModule (UpdateModuleRequest) returns (google.protobuf.Empty);
rpc DeleteModule (DeleteModuleRequest) returns (google.protobuf.Empty);
rpc GetModule (GetModuleRequest) returns (CreateModuleReply);
rpc ListModule (PageInfo) returns (ListModuleReply);
}
// 分页
message PageInfo{
uint32 pn = 1;
uint32 pSize = 2;
}

message CreateModuleRequest {
int32 modCompanyid=1;
int32 modDepartid=2;
int32 modProid=3;
int32 modParentsid=4;
string modName=5;
string modAliasname=6;
string modUrl=7;
int32 modState=8;
string modIco=9;
int32 modOptid=10;
int32 modSourceId=11;
int32 authLevel=12;
}
message CreateModuleReply {
int32 modId=1;
int32 modCompanyid=2;
int32 modDepartid=3;
int32 modProid=4;
int32 modParentsid=5;
string modName=6;
string modAliasname=7;
string modUrl=8;
int32 modState=9;
string modIco=10;
int32 modOptid=11;
int32 modSourceId=12;
int32 authLevel=13;
}

message UpdateModuleRequest {
int32 modId=1;
int32 modCompanyid=2;
int32 modDepartid=3;
int32 modProid=4;
int32 modParentsid=5;
string modName=6;
string modAliasname=7;
string modUrl=8;
int32 modState=9;
string modIco=10;
int32 modOptid=11;
int32 modSourceId=12;
int32 authLevel=13;
}
message UpdateModuleReply {}

message DeleteModuleRequest {
int32 modId=1;
}

message GetModuleRequest {
int32 modId=1;
}
message GetModuleReply {}

message ListModuleRequest {}
message ListModuleReply {
int32 total = 1;
repeated CreateModuleReply data = 2;
}

创建完后,使用make api 生成proto

 

 

 1.2.3生成错误的error_reason.proto

代码如下:

syntax = "proto3";

// 定义包名
package api.kratos.v1;
import "errors/errors.proto";

// 多语言特定包名,用于源代码引用
option go_package = "module/api/module/v1;v1";

enum ErrorReason {
// 设置缺省错误码
option (errors.default_code) = 500;

// 为某个枚举单独设置错误码
USER_NOT_FOUND = 0 [(errors.code) = 404];

CONTENT_MISSING = 1 [(errors.code) = 400];
使用make errors 生成错误的proto 使用之前先在makefile 添加下代码
.PHONY: errors
# generate api proto
errors:
protoc --proto_path=. \
--proto_path=./third_party \
--go_out=paths=source_relative:. \
--go-errors_out=paths=source_relative:. \
$(API_PROTO_FILES)
然后就可以使用make errors 了
二.修改配置文件
修改configs下的config.yaml修改后的内容如下

 


建立注册配置文件registry.yaml

 

 

三.具体实现

3.1创建biz层代码

 

 

代码如下:

package biz

import (
"context"
"github.com/go-kratos/kratos/v2/log"
"module/internal/domain"
)

type ModuleRepo interface {
CreateModule(context.Context, *domain.Module) (*domain.Module, error)
UpdateModule(ctx context.Context, module *domain.Module) (bool, error)
DeleteModule(ctx context.Context, id int32) (bool, error)
GetModule(ctx context.Context, id int32) (*domain.Module, error)
ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error)
}

type ModuleUsecase struct {
repo ModuleRepo
log *log.Helper
}

// NewModuleUsecase .
func NewModuleUsecase(repo ModuleRepo, logger log.Logger) *ModuleUsecase {
return &ModuleUsecase{
repo: repo,
log: log.NewHelper(logger),
}
}

// Create .
func (m *ModuleUsecase) Create(ctx context.Context, module *domain.Module) (*domain.Module, error) {
return m.repo.CreateModule(ctx, module)
}

// UpdateModule .
func (m *ModuleUsecase) UpdateModule(ctx context.Context, module *domain.Module) (bool, error) {
return m.repo.UpdateModule(ctx, module)
}

// DeleteModule .
func (m *ModuleUsecase) DeleteModule(ctx context.Context, id int32) (bool, error) {
return m.repo.DeleteModule(ctx, id)
}

//GetModule .
func (m *ModuleUsecase) GetModule(ctx context.Context, id int32) (*domain.Module, error) {
return m.repo.GetModule(ctx, id)
}

// ListModule.
func (m *ModuleUsecase) ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error) {
return m.repo.ListModule(ctx, pageNum, pageSize)
}
在biz.go添加如下配置

 


 3.2创建service层

 

 service层的代码如下:

package biz

import (
"context"
"github.com/go-kratos/kratos/v2/log"
"module/internal/domain"
)

type ModuleRepo interface {
CreateModule(context.Context, *domain.Module) (*domain.Module, error)
UpdateModule(ctx context.Context, module *domain.Module) (bool, error)
DeleteModule(ctx context.Context, id int32) (bool, error)
GetModule(ctx context.Context, id int32) (*domain.Module, error)
ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error)
}

type ModuleUsecase struct {
repo ModuleRepo
log *log.Helper
}

// NewModuleUsecase .
func NewModuleUsecase(repo ModuleRepo, logger log.Logger) *ModuleUsecase {
return &ModuleUsecase{
repo: repo,
log: log.NewHelper(logger),
}
}

// Create .
func (m *ModuleUsecase) Create(ctx context.Context, module *domain.Module) (*domain.Module, error) {
return m.repo.CreateModule(ctx, module)
}

// UpdateModule .
func (m *ModuleUsecase) UpdateModule(ctx context.Context, module *domain.Module) (bool, error) {
return m.repo.UpdateModule(ctx, module)
}

// DeleteModule .
func (m *ModuleUsecase) DeleteModule(ctx context.Context, id int32) (bool, error) {
return m.repo.DeleteModule(ctx, id)
}

//GetModule .
func (m *ModuleUsecase) GetModule(ctx context.Context, id int32) (*domain.Module, error) {
return m.repo.GetModule(ctx, id)
}

// ListModule.
func (m *ModuleUsecase) ListModule(ctx context.Context, pageNum, pageSize int) ([]*domain.Module, int, error) {
return m.repo.ListModule(ctx, pageNum, pageSize)
}



标签:实战,int32,domain,Kratos,context,ctx,module,Module,模块
From: https://www.cnblogs.com/lisus2000/p/17076436.html

相关文章