add logic

This commit is contained in:
Владимир Фёдоров 2025-05-17 12:30:24 +07:00
parent e1b342d12c
commit 73838d7773
4 changed files with 56 additions and 7 deletions

View File

@ -2,6 +2,7 @@ package services
import ( import (
"evening_detective/internal/models" "evening_detective/internal/models"
"evening_detective/internal/services/story_service"
"evening_detective/proto" "evening_detective/proto"
) )
@ -28,7 +29,13 @@ func mapProtoTeamsToTeam(team *proto.Team) *models.Team {
func mapActionToProtoAction(action *models.Action) *proto.Action { func mapActionToProtoAction(action *models.Action) *proto.Action {
return &proto.Action{ return &proto.Action{
Id: action.ID, Id: action.ID,
Place: action.Place, Place: action.Place,
} }
} }
func mapApplicationToProtoApplication(application *story_service.Application) *proto.Application {
return &proto.Application{
Name: application.Name,
}
}

View File

@ -45,9 +45,13 @@ func (s *Services) AddAction(ctx context.Context, req *proto.AddActionReq) (*pro
if err != nil { if err != nil {
return nil, err return nil, err
} }
place, err := s.storyService.GetPlace(req.Place)
if err != nil {
return nil, err
}
actions := []*models.Action{ actions := []*models.Action{
{ {
Place: req.Place, Place: place.Code,
TeamID: team.ID, TeamID: team.ID,
}, },
} }
@ -79,6 +83,10 @@ func (s *Services) GetTeam(ctx context.Context, req *proto.GetTeamReq) (*proto.G
return nil, err return nil, err
} }
newAction.Text = place.Text newAction.Text = place.Text
newAction.Applications = make([]*proto.Application, 0, len(place.Applications))
for _, application := range place.Applications {
newAction.Applications = append(newAction.Applications, mapApplicationToProtoApplication(application))
}
res = append(res, newAction) res = append(res, newAction)
} }
return &proto.GetTeamRsp{Actions: res}, err return &proto.GetTeamRsp{Actions: res}, err

View File

@ -3,7 +3,9 @@ package story_service
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"os" "os"
"strings"
) )
type Story struct { type Story struct {
@ -11,8 +13,13 @@ type Story struct {
} }
type Place struct { type Place struct {
Code string `json:"code"` Code string `json:"code"`
Text string `json:"text"` Text string `json:"text"`
Applications []*Application `json:"applications"`
}
type Application struct {
Name string `json:"name"`
} }
type StoryService struct { type StoryService struct {
@ -32,10 +39,16 @@ func NewStoryService() (*StoryService, error) {
} }
func (s *StoryService) GetPlace(code string) (*Place, error) { func (s *StoryService) GetPlace(code string) (*Place, error) {
code = clearCode(code)
for _, place := range s.story.Places { for _, place := range s.story.Places {
if place.Code == code { if clearCode(place.Code) == code {
return place, nil return place, nil
} }
} }
return nil, errors.New("place not found") return nil, errors.New(fmt.Sprintf("place not found: %s", code))
}
func clearCode(code string) string {
code = strings.ToLower(code)
return strings.ReplaceAll(code, "-", "")
} }

View File

@ -5,9 +5,30 @@
"text": "Вас приветствуют волонтеры, говорят что игорек где-то здесь, но точно они не знают.", "text": "Вас приветствуют волонтеры, говорят что игорек где-то здесь, но точно они не знают.",
"applications": [ "applications": [
{ {
"name": "Карта" "name": "Карта площадки"
} }
] ]
},
{
"code": "М-1",
"text": "Ребята делают мод для майнкрафта, не стоит их беспокоить."
},
{
"code": "О-1",
"text": "Организаторы говорят что игорек убежал на пробежку и если поторопиться его можно успеть поймать.",
"applications": [
{
"name": "Карта базы"
}
]
},
{
"code": "Б-1",
"text": "Тут его нет, вы чествуете только прохладный ветер."
},
{
"code": "Б-2",
"text": "А вот и он уже делает зарядку!"
} }
] ]
} }