generated from VLADIMIR/template
fix
This commit is contained in:
parent
edd3db35ae
commit
2e8afd3948
6
.vscode/settings.json
vendored
6
.vscode/settings.json
vendored
@ -2,9 +2,14 @@
|
|||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"ввода",
|
"ввода",
|
||||||
"внимательно",
|
"внимательно",
|
||||||
|
"вопрос",
|
||||||
|
"второй",
|
||||||
|
"дает",
|
||||||
"Детективы",
|
"Детективы",
|
||||||
"диалога",
|
"диалога",
|
||||||
"диалогом",
|
"диалогом",
|
||||||
|
"другой",
|
||||||
|
"задать",
|
||||||
"корректный",
|
"корректный",
|
||||||
"Можно",
|
"Можно",
|
||||||
"Название",
|
"Название",
|
||||||
@ -12,6 +17,7 @@
|
|||||||
"найдено",
|
"найдено",
|
||||||
"Нельзя",
|
"Нельзя",
|
||||||
"Открываем",
|
"Открываем",
|
||||||
|
"Открытие",
|
||||||
"открытую",
|
"открытую",
|
||||||
"открыть",
|
"открыть",
|
||||||
"получение",
|
"получение",
|
||||||
|
|||||||
@ -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{}{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user