Service.GetItem/CreateItem: ревью работы с кешем и БД
Код-ревьюMiddle25 минпроверка — Спринт23-t010
Сделайте код-ревью сервиса каталога: GetItem сначала читает сущность из кеша, при отсутствии — из БД; CreateItem сохраняет новую сущность. Найдите и объясните проблемы, предложите исправления. Типы Store, Cache, Logger, Item объявлены в другом файле пакета.
Как на собесе: 25 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.
review.gogo
1packagecatalog23import(4"context"5)67typeServicestruct{8storeStore9loggerLogger10cacheCache11}1213funcNew(storeStore,loggerLogger,cacheCache)Service{14return&Service{15store:store,16logger:logger,17cache:cache,18}19}2021// GetItem возвращает сущность по её ID22func(sService)GetItem(_context.Context,idint64)(Item,error){23item,err:=s.cache.GetItem(id)24iferr!=nil{25returnnil,err26}2728ifitem!=nil{29returnitem,nil30}3132item,err:=s.store.GetItem(context.Background(),id)33iferr!=nil{34returnnil,err35}3637returnitem,nil38}3940// CreateItem сохраняет новую сущность41func(sService)CreateItem(ccontext.Context,itItem)error{42_,err:=s.store.CreateItem(c,it)43iferr!=nil{44returnerr45}4647returnnil48}