mirror of
https://github.com/Walter-Sparrow/lunar-tear.git
synced 2026-07-02 13:53:41 +03:00
73 lines
2.5 KiB
Go
73 lines
2.5 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
pb "lunar-tear/server/gen/proto"
|
|
"lunar-tear/server/internal/gametime"
|
|
"lunar-tear/server/internal/masterdata"
|
|
"lunar-tear/server/internal/model"
|
|
"lunar-tear/server/internal/store"
|
|
)
|
|
|
|
type CageOrnamentServiceServer struct {
|
|
pb.UnimplementedCageOrnamentServiceServer
|
|
users store.UserRepository
|
|
sessions store.SessionRepository
|
|
catalog *masterdata.CageOrnamentCatalog
|
|
granter *store.PossessionGranter
|
|
}
|
|
|
|
func NewCageOrnamentServiceServer(users store.UserRepository, sessions store.SessionRepository, catalog *masterdata.CageOrnamentCatalog, granter *store.PossessionGranter) *CageOrnamentServiceServer {
|
|
return &CageOrnamentServiceServer{users: users, sessions: sessions, catalog: catalog, granter: granter}
|
|
}
|
|
|
|
func (s *CageOrnamentServiceServer) ReceiveReward(ctx context.Context, req *pb.ReceiveRewardRequest) (*pb.ReceiveRewardResponse, error) {
|
|
log.Printf("[CageOrnamentService] ReceiveReward: cageOrnamentId=%d", req.CageOrnamentId)
|
|
|
|
reward, ok := s.catalog.LookupReward(req.CageOrnamentId)
|
|
if !ok {
|
|
log.Fatalf("[CageOrnamentService] ReceiveReward: no reward for cageOrnamentId=%d", req.CageOrnamentId)
|
|
}
|
|
|
|
userId := CurrentUserId(ctx, s.users, s.sessions)
|
|
nowMillis := gametime.NowMillis()
|
|
s.users.UpdateUser(userId, func(user *store.UserState) {
|
|
user.CageOrnamentRewards[req.CageOrnamentId] = store.CageOrnamentRewardState{
|
|
CageOrnamentId: req.CageOrnamentId,
|
|
AcquisitionDatetime: nowMillis,
|
|
LatestVersion: nowMillis,
|
|
}
|
|
s.granter.GrantFull(user, model.PossessionType(reward.PossessionType), reward.PossessionId, reward.Count, nowMillis)
|
|
})
|
|
|
|
return &pb.ReceiveRewardResponse{
|
|
CageOrnamentReward: []*pb.CageOrnamentReward{
|
|
{
|
|
PossessionType: reward.PossessionType,
|
|
PossessionId: reward.PossessionId,
|
|
Count: reward.Count,
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func (s *CageOrnamentServiceServer) RecordAccess(ctx context.Context, req *pb.RecordAccessRequest) (*pb.RecordAccessResponse, error) {
|
|
log.Printf("[CageOrnamentService] RecordAccess: cageOrnamentId=%d", req.CageOrnamentId)
|
|
|
|
userId := CurrentUserId(ctx, s.users, s.sessions)
|
|
nowMillis := gametime.NowMillis()
|
|
s.users.UpdateUser(userId, func(user *store.UserState) {
|
|
if _, exists := user.CageOrnamentRewards[req.CageOrnamentId]; !exists {
|
|
user.CageOrnamentRewards[req.CageOrnamentId] = store.CageOrnamentRewardState{
|
|
CageOrnamentId: req.CageOrnamentId,
|
|
AcquisitionDatetime: nowMillis,
|
|
LatestVersion: nowMillis,
|
|
}
|
|
}
|
|
})
|
|
|
|
return &pb.RecordAccessResponse{}, nil
|
|
}
|