micro--go-micro
1bb25d6e7f
* feat: add agent platform showcase and blog post Add a complete platform example (Users, Posts, Comments, Mail) that mirrors micro/blog, demonstrating how existing microservices become AI-accessible through MCP with zero code changes. Includes blog post "Your Microservices Are Already an AI Platform" walking through real agent workflows: signup, content creation, commenting, tagging, and cross-service messaging. https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc * refactor: rename handler types to drop redundant Service suffix UserService → Users, PostService → Posts, CommentService → Comments, MailService → Mail. Matches micro/blog naming convention. https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc * refactor: consolidate top-level directories, reduce framework bloat Move internal/non-public packages behind internal/ or into their parent packages where they belong: - deploy/ → gateway/mcp/deploy/ (Helm charts belong with the gateway) - profile/ → service/profile/ (preset plugin profiles are a service concern) - scripts/ → internal/scripts/ (install script is not public API) - test/ → internal/test/ (test harness is not public API) - util/ → internal/util/ (internal helpers shouldn't be imported externally) Also fixes CLAUDE.md merge conflict markers and updates project structure documentation. All import paths updated. Build and tests pass. https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc * refactor: redesign model package to match framework conventions Rename model.Database interface to model.Model (consistent with client.Client, server.Server, store.Store). Remove generics in favor of interface{}-based API with reflection. Key changes: - model.Model interface: Register once, CRUD infers table from type - DefaultModel + NewModel() + package-level convenience functions - Schema registered via Register(&User{}), no per-call schema passing - Memory implementation as default (in model package, like store) - memory/sqlite/postgres backends updated for new interface - protoc-gen-micro generates RegisterXModel() instead of generic factory - All docs, blog, and README updated https://claude.ai/code/session_01GkduEhcrqcG45rdfYh8dAc --------- Co-authored-by: Claude <noreply@anthropic.com>
159 行
4.4 KiB
Plaintext
159 行
4.4 KiB
Plaintext
// Code generated by protoc-gen-micro. DO NOT EDIT.
|
|
// source: user.proto
|
|
|
|
package user
|
|
|
|
import (
|
|
fmt "fmt"
|
|
proto "google.golang.org/protobuf/proto"
|
|
math "math"
|
|
)
|
|
|
|
import (
|
|
context "context"
|
|
client "go-micro.dev/v5/client"
|
|
server "go-micro.dev/v5/server"
|
|
model "go-micro.dev/v5/model"
|
|
)
|
|
|
|
// Reference imports to suppress errors if they are not otherwise used.
|
|
var _ = proto.Marshal
|
|
var _ = fmt.Errorf
|
|
var _ = math.Inf
|
|
|
|
// Reference imports to suppress errors if they are not otherwise used.
|
|
var _ context.Context
|
|
var _ client.Option
|
|
var _ server.Option
|
|
var _ model.Model
|
|
|
|
// Client API for UserService service
|
|
|
|
type UserServiceService interface {
|
|
Create(ctx context.Context, in *CreateUserRequest, opts ...client.CallOption) (*CreateUserResponse, error)
|
|
Get(ctx context.Context, in *GetUserRequest, opts ...client.CallOption) (*GetUserResponse, error)
|
|
Delete(ctx context.Context, in *DeleteUserRequest, opts ...client.CallOption) (*DeleteUserResponse, error)
|
|
}
|
|
|
|
type userServiceService struct {
|
|
c client.Client
|
|
name string
|
|
}
|
|
|
|
func NewUserServiceService(name string, c client.Client) UserServiceService {
|
|
return &userServiceService{
|
|
c: c,
|
|
name: name,
|
|
}
|
|
}
|
|
|
|
func (c *userServiceService) Create(ctx context.Context, in *CreateUserRequest, opts ...client.CallOption) (*CreateUserResponse, error) {
|
|
req := c.c.NewRequest(c.name, "UserService.Create", in)
|
|
out := new(CreateUserResponse)
|
|
err := c.c.Call(ctx, req, out, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (c *userServiceService) Get(ctx context.Context, in *GetUserRequest, opts ...client.CallOption) (*GetUserResponse, error) {
|
|
req := c.c.NewRequest(c.name, "UserService.Get", in)
|
|
out := new(GetUserResponse)
|
|
err := c.c.Call(ctx, req, out, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func (c *userServiceService) Delete(ctx context.Context, in *DeleteUserRequest, opts ...client.CallOption) (*DeleteUserResponse, error) {
|
|
req := c.c.NewRequest(c.name, "UserService.Delete", in)
|
|
out := new(DeleteUserResponse)
|
|
err := c.c.Call(ctx, req, out, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
// Server API for UserService service
|
|
|
|
type UserServiceHandler interface {
|
|
Create(context.Context, *CreateUserRequest, *CreateUserResponse) error
|
|
Get(context.Context, *GetUserRequest, *GetUserResponse) error
|
|
Delete(context.Context, *DeleteUserRequest, *DeleteUserResponse) error
|
|
}
|
|
|
|
func RegisterUserServiceHandler(s server.Server, hdlr UserServiceHandler, opts ...server.HandlerOption) error {
|
|
type userService interface {
|
|
Create(ctx context.Context, in *CreateUserRequest, out *CreateUserResponse) error
|
|
Get(ctx context.Context, in *GetUserRequest, out *GetUserResponse) error
|
|
Delete(ctx context.Context, in *DeleteUserRequest, out *DeleteUserResponse) error
|
|
}
|
|
type UserService struct {
|
|
userService
|
|
}
|
|
h := &userServiceHandler{hdlr}
|
|
return s.Handle(s.NewHandler(&UserService{h}, opts...))
|
|
}
|
|
|
|
type userServiceHandler struct {
|
|
UserServiceHandler
|
|
}
|
|
|
|
func (h *userServiceHandler) Create(ctx context.Context, in *CreateUserRequest, out *CreateUserResponse) error {
|
|
return h.UserServiceHandler.Create(ctx, in, out)
|
|
}
|
|
|
|
func (h *userServiceHandler) Get(ctx context.Context, in *GetUserRequest, out *GetUserResponse) error {
|
|
return h.UserServiceHandler.Get(ctx, in, out)
|
|
}
|
|
|
|
func (h *userServiceHandler) Delete(ctx context.Context, in *DeleteUserRequest, out *DeleteUserResponse) error {
|
|
return h.UserServiceHandler.Delete(ctx, in, out)
|
|
}
|
|
|
|
// UserModel is a model struct generated from User.
|
|
// Use NewUserModel to create a typed table backed by any model.Model.
|
|
type UserModel struct {
|
|
Id string `json:"id" model:"key"`
|
|
Name string `json:"name"`
|
|
Email string `json:"email"`
|
|
Age int32 `json:"age"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
// RegisterUserModel registers the UserModel table with the given model backend.
|
|
func RegisterUserModel(db model.Model) error {
|
|
return db.Register(&UserModel{}, model.WithTable("users"))
|
|
}
|
|
|
|
// UserModelFromProto converts a User proto message to a UserModel.
|
|
func UserModelFromProto(p *User) *UserModel {
|
|
if p == nil {
|
|
return nil
|
|
}
|
|
return &UserModel{
|
|
Id: p.GetId(),
|
|
Name: p.GetName(),
|
|
Email: p.GetEmail(),
|
|
Age: p.GetAge(),
|
|
Status: p.GetStatus(),
|
|
}
|
|
}
|
|
|
|
// ToProto converts a UserModel to a User proto message.
|
|
func (m *UserModel) ToProto() *User {
|
|
if m == nil {
|
|
return nil
|
|
}
|
|
return &User{
|
|
Id: m.Id,
|
|
Name: m.Name,
|
|
Email: m.Email,
|
|
Age: m.Age,
|
|
Status: m.Status,
|
|
}
|
|
}
|