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
+29 -17
View File
@@ -55,12 +55,22 @@ func (s *StoryService) GetPlace(code string) *models.Place {
if s.cleaner.ClearCode(place.Code) == clearCode {
applications := make([]*models.Application, 0, len(place.Applications))
for _, application := range place.Applications {
name := s.cleaner.ClearText(application.Name)
applications = append(
applications,
&models.Application{
Name: name,
},
models.NewApplication(
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(
@@ -69,7 +79,7 @@ func (s *StoryService) GetPlace(code string) *models.Place {
s.cleaner.ClearText(place.Text),
models.WithPlaceApplication(applications...),
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 {
places := make([]*models.Place, 0, 100)
m := map[string]any{}
mOpen := map[string]any{}
mDeleted := map[string]any{}
for i, code := range codes {
place := s.GetPlace(code)
_, ok := m[place.Code]
if place.Hidden && !ok {
if _, ok := mOpen[place.Code]; place.Hidden && !ok {
place = models.NewNotFoundPlace(place.Code)
}
places = append(places, place)
for _, door := range place.Doors {
m[door.Code] = struct{}{}
for j, door := range places[i].Doors {
if _, ok := mDeleted[door.Code]; ok {
places[i].Doors[j].Show = false
continue
}
mOpen[door.Code] = struct{}{}
}
if i > 0 {
for j := range places[i-1].Doors {
if places[i-1].Doors[j].Code != place.Code {
if places[i-1].Doors[j].Show {
places[i-1].Doors[j].Show = false
delete(m, places[i-1].Doors[j].Code)
}
for j, door := range places[i-1].Doors {
if door.Code != place.Code && door.Show {
places[i-1].Doors[j].Show = false
delete(mOpen, door.Code)
mDeleted[door.Code] = struct{}{}
}
}
}