This commit is contained in:
Владимир Фёдоров 2026-03-07 20:53:59 +07:00
parent edd3db35ae
commit 2e8afd3948
3 changed files with 93 additions and 17 deletions

View File

@ -2,9 +2,14 @@
"cSpell.words": [ "cSpell.words": [
"ввода", "ввода",
"внимательно", "внимательно",
"вопрос",
"второй",
"дает",
"Детективы", "Детективы",
"диалога", "диалога",
"диалогом", "диалогом",
"другой",
"задать",
"корректный", "корректный",
"Можно", "Можно",
"Название", "Название",
@ -12,6 +17,7 @@
"найдено", "найдено",
"Нельзя", "Нельзя",
"Открываем", "Открываем",
"Открытие",
"открытую", "открытую",
"открыть", "открыть",
"получение", "получение",

View File

@ -55,12 +55,22 @@ func (s *StoryService) GetPlace(code string) *models.Place {
if s.cleaner.ClearCode(place.Code) == clearCode { if s.cleaner.ClearCode(place.Code) == clearCode {
applications := make([]*models.Application, 0, len(place.Applications)) applications := make([]*models.Application, 0, len(place.Applications))
for _, application := range place.Applications { for _, application := range place.Applications {
name := s.cleaner.ClearText(application.Name)
applications = append( applications = append(
applications, applications,
&models.Application{ models.NewApplication(
Name: name, s.cleaner.ClearText(application.Name),
}, ),
)
}
doors := make([]*models.Door, 0, len(place.Doors))
for _, door := range place.Doors {
doors = append(
doors,
models.NewDoor(
door.Code,
door.Name,
models.WithDoorShow(door.Show),
),
) )
} }
return models.NewPlace( return models.NewPlace(
@ -69,7 +79,7 @@ func (s *StoryService) GetPlace(code string) *models.Place {
s.cleaner.ClearText(place.Text), s.cleaner.ClearText(place.Text),
models.WithPlaceApplication(applications...), models.WithPlaceApplication(applications...),
models.WithPlaceHidden(place.Hidden), models.WithPlaceHidden(place.Hidden),
models.WithPlaceDoors(place.Doors...), models.WithPlaceDoors(doors...),
) )
} }
} }
@ -78,25 +88,27 @@ func (s *StoryService) GetPlace(code string) *models.Place {
func (s *StoryService) GetPlaces(codes []string) []*models.Place { func (s *StoryService) GetPlaces(codes []string) []*models.Place {
places := make([]*models.Place, 0, 100) places := make([]*models.Place, 0, 100)
m := map[string]any{} mOpen := map[string]any{}
mDeleted := map[string]any{}
for i, code := range codes { for i, code := range codes {
place := s.GetPlace(code) place := s.GetPlace(code)
_, ok := m[place.Code] if _, ok := mOpen[place.Code]; place.Hidden && !ok {
if place.Hidden && !ok {
place = models.NewNotFoundPlace(place.Code) place = models.NewNotFoundPlace(place.Code)
} }
places = append(places, place) places = append(places, place)
for _, door := range place.Doors { for j, door := range places[i].Doors {
m[door.Code] = struct{}{} if _, ok := mDeleted[door.Code]; ok {
places[i].Doors[j].Show = false
continue
}
mOpen[door.Code] = struct{}{}
} }
if i > 0 { if i > 0 {
for j := range places[i-1].Doors { for j, door := range places[i-1].Doors {
if places[i-1].Doors[j].Code != place.Code { if door.Code != place.Code && door.Show {
if places[i-1].Doors[j].Show {
places[i-1].Doors[j].Show = false places[i-1].Doors[j].Show = false
delete(m, places[i-1].Doors[j].Code) delete(mOpen, door.Code)
} mDeleted[door.Code] = struct{}{}
} }
} }
} }

View File

@ -396,6 +396,64 @@ func TestStoryService_GetPlaces(t *testing.T) {
), ),
}, },
}, },
{
name: "Открытие второй раз точки не дает задать другой вопрос",
story: &models.Story{
Places: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(true)),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewPlace(
"Ы-3",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
},
},
codes: []string{"Ы-1", "Ы-2", "Ы-3", "Ы-1", "Ы-3", "Ы-2"},
want: []*models.Place{
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(true)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(false)),
),
),
models.NewPlace(
"Ы-2",
"Название",
"Текст",
models.WithPlaceHidden(true),
),
models.NewNotFoundPlace("Ы-3"),
models.NewPlace(
"Ы-1",
"Название",
"Текст",
models.WithPlaceDoors(
models.NewDoor("Ы-2", "Название", models.WithDoorShow(false)),
models.NewDoor("Ы-3", "Название", models.WithDoorShow(false)),
),
),
models.NewNotFoundPlace("Ы-3"),
models.NewNotFoundPlace("Ы-2"),
},
},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {