package Ġcom . rich ode mus . reader . youtube _ feed _ service Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġcom . fasterxml . jackson . annotation . JsonValue Ċ import Ġcom . google . api . client . util . DateTime Ċ import Ġjava . time . Instant . of Epoch Second Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . time . Zone Offset Ċ Ċ internal Ġfun ĠDateTime . toDate (): ĠOffset DateTime Ġ{ ĊĠĠĠ Ġval Ġepoch Ġ= Ġthis . value Ġ/ Ġ 1 0 0 0 ĊĠĠĠ Ġval Ġtime Zone Shift Ġ= Ġthis . time Zone Shift ĊĠĠĠ Ġreturn ĠOffset DateTime . of Instant ( of Epoch Second ( epoch ), ĠZone Offset . of Hours ( time Zone Shift Ġ/ Ġ 6 0 )) Ċ } Ċ Ċ internal Ġfun Ġ< A , ĠB > ĠEither < A , ĠB >. peek ( function : Ġ( B ) Ġ-> ĠUnit ): ĠEither < A , ĠB > Ġ{ ĊĠĠĠ Ġreturn Ġthis . map Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction ( it ) ĊĠĠĠĠĠĠĠ Ġit ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠChannel Name (@ get : JsonIgnore Ġval Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( value . isNotBlank ()) Ġ{ Ġ" Feed Id Ġcan 't Ġbe Ġempty " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ JsonValue ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġvalue Ċ } Ċ Ċ internal Ġfun Ġshould Fetch Statistics ( video : ĠVideo , Ġnow : ĠOffset DateTime ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( video . upload Date . is After ( now . minus Days ( 7 ))) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( video . upload Date . day OfMonth Ġ== Ġnow . day OfMonth ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } Ċ Ċ /** Ċ Ġ* ĠFormat : ĠYYYY - MM - DD Ċ Ġ*/ Ċ internal Ġfun Ġdate ( str : ĠString ): ĠOffset DateTime Ġ{ ĊĠĠĠ Ġval Ġsplit Ġ= Ġstr . split ("- ") ĊĠĠĠ Ġval Ġyear Ġ= Ġsplit [ 0 ]. toInt () ĊĠĠĠ Ġval Ġmonth Ġ= Ġsplit [ 1 ]. toInt () ĊĠĠĠ Ġval Ġday Ġ= Ġsplit [ 2 ]. toInt () ĊĠĠĠ Ġreturn ĠOffset DateTime . of ( year , Ġmonth , Ġday , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĠZone Offset . UTC ) Ċ } Ċ