mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-11 10:54:28 +00:00
49 lines
791 B
Go
49 lines
791 B
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/micro/micro/v3/service/store"
|
|
"github.com/micro/services/pkg/tenant"
|
|
pb "github.com/micro/services/search/proto"
|
|
)
|
|
|
|
type Search struct{}
|
|
|
|
var (
|
|
mtx sync.RWMutex
|
|
|
|
voteKey = "votes/"
|
|
)
|
|
|
|
type Vote struct {
|
|
Id string `json:"id"`
|
|
Message string `json:"message"`
|
|
VotedAt time.Time `json:"voted_at"`
|
|
}
|
|
|
|
func (n *Search) Vote(ctx context.Context, req *pb.VoteRequest, rsp *pb.VoteResponse) error {
|
|
mtx.Lock()
|
|
defer mtx.Unlock()
|
|
|
|
id, ok := tenant.FromContext(ctx)
|
|
if !ok {
|
|
id = "micro"
|
|
}
|
|
|
|
rec := store.NewRecord(voteKey+id, &Vote{
|
|
Id: id,
|
|
Message: req.Message,
|
|
VotedAt: time.Now(),
|
|
})
|
|
|
|
// we don't need to check the error
|
|
store.Write(rec)
|
|
|
|
rsp.Message = "Thanks for the vote!"
|
|
|
|
return nil
|
|
}
|