Перейти к содержимому

VK / ВК (ВКонтакте) - 4

Актуальность: 1 кв 2026

Задача: Нужно написать сервис. На вход сервису поступают обновления документов: go/basics

Заголовок раздела «Задача: Нужно написать сервис. На вход сервису поступают обновления документов: go/basics»
type Document struct {
Url string `json:"url "db:"url "`
PubDate uint64 `json:"pub_date "db:"pub_date "`
FetchTime uint64 `json:"fetch_time "db:"fetch_time "`
Text string `json:"text "db:"text "`
FirstFetchTime *uint64 `json:"first_fetch_time "db:"first_fetch_time "`
}

Документы могут поступать в произвольном порядке (не в том, как они обновлялись), также возможно дублирование отдельных сообщений.

Задача: Необходимо на выходе формировать такие же сообщения, но с исправленными отдельными полями по следующим правилам (все нижеуказанное - для группы документов с совпадающим полем Url): go/basics

Заголовок раздела «Задача: Необходимо на выходе формировать такие же сообщения, но с исправленными отдельными полями по следующим правилам (все нижеуказанное - для группы документов с совпадающим полем Url): go/basics»
  • Поле Text и FetchTime должны быть такими, какими были в документе с наибольшим FetchTime, полученным на данный момент;
  • Поле PubDate должно быть таким, каким было у сообщения с наименьшим FetchTime;
  • Поле FirstFetchTime должно быть равно минимальному значению FetchTime.

Т.е. если отсортировать документы по FetchTime, то в каждый момент времени мы берем PubDate и FirstFetchTime от самой первой из полученных, а Text - от самой последней.

func (s *Service) Process(ctx context.Context, doc *Document) (*Document, error)

Данный код будет работать в сервисе, читающим входные сообщения из очереди сообщений (Kafka или подобное), и записывающем результат также в очередь. Если Process возвращает Null - то в очередь ничего не пишется.