generated from VLADIMIR/template
add application number
This commit is contained in:
@@ -1,11 +1,34 @@
|
||||
package models
|
||||
|
||||
import "fmt"
|
||||
|
||||
type Application struct {
|
||||
Name string `json:"name"`
|
||||
Name string `json:"name"`
|
||||
Number string `json:"-"`
|
||||
}
|
||||
|
||||
func NewApplication(name string) *Application {
|
||||
return &Application{
|
||||
func NewApplication(
|
||||
name string,
|
||||
opts ...ApplicationOpt,
|
||||
) *Application {
|
||||
application := &Application{
|
||||
Name: name,
|
||||
}
|
||||
for _, opt := range opts {
|
||||
opt(application)
|
||||
}
|
||||
return application
|
||||
}
|
||||
|
||||
type ApplicationOpt func(application *Application) error
|
||||
|
||||
func WithApplicationNumber(number int) ApplicationOpt {
|
||||
return func(application *Application) error {
|
||||
application.SetNumber(number)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Application) SetNumber(number int) {
|
||||
a.Number = fmt.Sprintf("%d", number)
|
||||
}
|
||||
|
||||
@@ -95,8 +95,21 @@ func (s *StoryService) GetPlaces(codes []string) []*models.Place {
|
||||
places := make([]*models.Place, 0, 100)
|
||||
mOpen := map[string]any{}
|
||||
mDeleted := map[string]any{}
|
||||
applicationNumber := 1
|
||||
applicationsMap := make(map[string]interface{}, 10)
|
||||
for i, code := range codes {
|
||||
place := s.GetPlace(code)
|
||||
for i, application := range place.Applications {
|
||||
if _, ok := applicationsMap[application.Name]; ok {
|
||||
place.Applications = append(place.Applications[:i], place.Applications[i+1:]...)
|
||||
if len(place.Applications) == 0 {
|
||||
place.Applications = nil
|
||||
}
|
||||
}
|
||||
applicationsMap[application.Name] = struct{}{}
|
||||
application.SetNumber(applicationNumber)
|
||||
applicationNumber++
|
||||
}
|
||||
if _, ok := mOpen[place.Code]; place.Hidden && !ok {
|
||||
place = models.NewNotFoundPlace(place.Code)
|
||||
}
|
||||
|
||||
@@ -456,6 +456,40 @@ func TestStoryService_GetPlaces(t *testing.T) {
|
||||
models.NewNotFoundPlace("Ы-2"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Улики не повторяются",
|
||||
story: &models.Story{
|
||||
Places: []*models.Place{
|
||||
models.NewPlace(
|
||||
"Ы",
|
||||
"Название",
|
||||
"Текст",
|
||||
models.WithPlaceApplication(
|
||||
models.NewApplication("Название"),
|
||||
),
|
||||
),
|
||||
},
|
||||
},
|
||||
codes: []string{"Ы", "Ы"},
|
||||
want: []*models.Place{
|
||||
models.NewPlace(
|
||||
"Ы",
|
||||
"Название",
|
||||
"Текст",
|
||||
models.WithPlaceApplication(
|
||||
models.NewApplication(
|
||||
"Название",
|
||||
models.WithApplicationNumber(1),
|
||||
),
|
||||
),
|
||||
),
|
||||
models.NewPlace(
|
||||
"Ы",
|
||||
"Название",
|
||||
"Текст",
|
||||
),
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user