mirror of https://github.com/zhufuyi/sponge
187 lines
6.6 KiB
Plaintext
187 lines
6.6 KiB
Plaintext
package handler
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/go-dev-frame/sponge/pkg/copier"
|
|
"github.com/go-dev-frame/sponge/pkg/gin/middleware"
|
|
"github.com/go-dev-frame/sponge/pkg/logger"
|
|
"github.com/go-dev-frame/sponge/pkg/mgo/query"
|
|
|
|
serverNameExampleV1 "github.com/go-dev-frame/sponge/api/serverNameExample/v1"
|
|
"github.com/go-dev-frame/sponge/internal/cache"
|
|
"github.com/go-dev-frame/sponge/internal/dao"
|
|
"github.com/go-dev-frame/sponge/internal/database"
|
|
"github.com/go-dev-frame/sponge/internal/ecode"
|
|
"github.com/go-dev-frame/sponge/internal/model"
|
|
)
|
|
|
|
var _ serverNameExampleV1.UserExampleLogicer = (*userExamplePbHandler)(nil)
|
|
var _ time.Time
|
|
|
|
type userExamplePbHandler struct {
|
|
userExampleDao dao.UserExampleDao
|
|
}
|
|
|
|
// NewUserExamplePbHandler create a handler
|
|
func NewUserExamplePbHandler() serverNameExampleV1.UserExampleLogicer {
|
|
collectionName := new(model.UserExample).TableName()
|
|
return &userExamplePbHandler{
|
|
userExampleDao: dao.NewUserExampleDao(
|
|
database.GetDB().Collection(collectionName),
|
|
cache.NewUserExampleCache(database.GetCacheType()),
|
|
),
|
|
}
|
|
}
|
|
|
|
// Create a new userExample
|
|
func (h *userExamplePbHandler) Create(ctx context.Context, req *serverNameExampleV1.CreateUserExampleRequest) (*serverNameExampleV1.CreateUserExampleReply, error) {
|
|
err := req.Validate()
|
|
if err != nil {
|
|
logger.Warn("req.Validate error", logger.Err(err), logger.Any("req", req), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
|
|
userExample := &model.UserExample{}
|
|
err = copier.Copy(userExample, req)
|
|
if err != nil {
|
|
return nil, ecode.ErrCreateUserExample.Err()
|
|
}
|
|
// Note: if copier.Copy cannot assign a value to a field, add it here
|
|
|
|
err = h.userExampleDao.Create(ctx, userExample)
|
|
if err != nil {
|
|
logger.Error("Create error", logger.Err(err), logger.Any("userExample", userExample), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InternalServerError.Err()
|
|
}
|
|
|
|
return &serverNameExampleV1.CreateUserExampleReply{Id: userExample.ID.Hex()}, nil
|
|
}
|
|
|
|
// DeleteByID delete a userExample by id
|
|
func (h *userExamplePbHandler) DeleteByID(ctx context.Context, req *serverNameExampleV1.DeleteUserExampleByIDRequest) (*serverNameExampleV1.DeleteUserExampleByIDReply, error) {
|
|
err := req.Validate()
|
|
if err != nil {
|
|
logger.Warn("req.Validate error", logger.Err(err), logger.Any("req", req), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
|
|
err = h.userExampleDao.DeleteByID(ctx, req.Id)
|
|
if err != nil {
|
|
logger.Warn("DeleteByID error", logger.Err(err), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InternalServerError.Err()
|
|
}
|
|
|
|
return &serverNameExampleV1.DeleteUserExampleByIDReply{}, nil
|
|
}
|
|
|
|
// UpdateByID update a userExample by id
|
|
func (h *userExamplePbHandler) UpdateByID(ctx context.Context, req *serverNameExampleV1.UpdateUserExampleByIDRequest) (*serverNameExampleV1.UpdateUserExampleByIDReply, error) {
|
|
err := req.Validate()
|
|
if err != nil {
|
|
logger.Warn("req.Validate error", logger.Err(err), logger.Any("req", req), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
|
|
userExample := &model.UserExample{}
|
|
err = copier.Copy(userExample, req)
|
|
if err != nil {
|
|
return nil, ecode.ErrUpdateByIDUserExample.Err()
|
|
}
|
|
// Note: if copier.Copy cannot assign a value to a field, add it here
|
|
userExample.ID = database.ToObjectID(req.Id)
|
|
|
|
err = h.userExampleDao.UpdateByID(ctx, userExample)
|
|
if err != nil {
|
|
logger.Error("UpdateByID error", logger.Err(err), logger.Any("userExample", userExample), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InternalServerError.Err()
|
|
}
|
|
|
|
return &serverNameExampleV1.UpdateUserExampleByIDReply{}, nil
|
|
}
|
|
|
|
// GetByID get userExample details by id
|
|
func (h *userExamplePbHandler) GetByID(ctx context.Context, req *serverNameExampleV1.GetUserExampleByIDRequest) (*serverNameExampleV1.GetUserExampleByIDReply, error) {
|
|
err := req.Validate()
|
|
if err != nil {
|
|
logger.Warn("req.Validate error", logger.Err(err), logger.Any("req", req), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
|
|
record, err := h.userExampleDao.GetByID(ctx, req.Id)
|
|
if err != nil {
|
|
if errors.Is(err, database.ErrRecordNotFound) {
|
|
logger.Warn("GetByID error", logger.Err(err), logger.Any("id", req.Id), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.NotFound.Err()
|
|
}
|
|
logger.Error("GetByID error", logger.Err(err), logger.Any("id", req.Id), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InternalServerError.Err()
|
|
}
|
|
|
|
data, err := convertUserExamplePb(record)
|
|
if err != nil {
|
|
logger.Warn("convertUserExample error", logger.Err(err), logger.Any("userExample", record), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.ErrGetByIDUserExample.Err()
|
|
}
|
|
|
|
return &serverNameExampleV1.GetUserExampleByIDReply{
|
|
UserExample: data,
|
|
}, nil
|
|
}
|
|
|
|
// List get a list of userExample by custom conditions
|
|
func (h *userExamplePbHandler) List(ctx context.Context, req *serverNameExampleV1.ListUserExampleRequest) (*serverNameExampleV1.ListUserExampleReply, error) {
|
|
err := req.Validate()
|
|
if err != nil {
|
|
logger.Warn("req.Validate error", logger.Err(err), logger.Any("req", req), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
|
|
params := &query.Params{}
|
|
err = copier.Copy(params, req.Params)
|
|
if err != nil {
|
|
return nil, ecode.ErrListUserExample.Err()
|
|
}
|
|
// Note: if copier.Copy cannot assign a value to a field, add it here
|
|
|
|
records, total, err := h.userExampleDao.GetByColumns(ctx, params)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "query params error:") {
|
|
logger.Warn("GetByColumns error", logger.Err(err), logger.Any("params", params), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InvalidParams.Err()
|
|
}
|
|
logger.Error("GetByColumns error", logger.Err(err), logger.Any("params", params), middleware.CtxRequestIDField(ctx))
|
|
return nil, ecode.InternalServerError.Err()
|
|
}
|
|
|
|
userExamples := []*serverNameExampleV1.UserExample{}
|
|
for _, record := range records {
|
|
data, err := convertUserExamplePb(record)
|
|
if err != nil {
|
|
logger.Warn("convertUserExample error", logger.Err(err), logger.Any("id", record.ID), middleware.CtxRequestIDField(ctx))
|
|
continue
|
|
}
|
|
userExamples = append(userExamples, data)
|
|
}
|
|
|
|
return &serverNameExampleV1.ListUserExampleReply{
|
|
Total: total,
|
|
UserExamples: userExamples,
|
|
}, nil
|
|
}
|
|
|
|
func convertUserExamplePb(record *model.UserExample) (*serverNameExampleV1.UserExample, error) {
|
|
value := &serverNameExampleV1.UserExample{}
|
|
err := copier.Copy(value, record)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// Note: if copier.Copy cannot assign a value to a field, add it here
|
|
value.Id = record.ID.Hex()
|
|
|
|
return value, nil
|
|
}
|