package Ġcz . cle ver farm . inter view . farm assignment . field Ċ Ċ import Ġcz . cle ver farm . inter view . farm assignment . common . F ARM _ NOT _ FOUND Ċ import Ġcz . cle ver farm . inter view . farm assignment . farm . Farm Service Ċ import Ġcz . cle ver farm . inter view . farm assignment . field . geometry . Field Geometry Service Ċ import Ġcz . cle ver farm . inter view . farm assignment . generated . tables . Field . FIELD Ċ import Ġcz . cle ver farm . inter view . farm assignment . validation . Form ValidationException Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util . UUID Ċ Ċ @ Service Ċ @ Transactional Ċ class ĠField Service Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġj oo q : ĠDSL Context , ĊĠĠĠ Ġprivate Ġval Ġfarm Service : ĠF arm Service , ĊĠĠĠ Ġprivate Ġval Ġgeometry Service : ĠField Geometry Service Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġnew Ġfield Ġto Ġthe Ġsystem . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfarm Id ĠID Ġof Ġfarm Ġthis Ġfield Ġbelongs Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġfield Ġform Ġwith Ġfield Ġdata ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġadd New Field ( farm Id : ĠUUID , Ġfield : ĠField Form ): ĠField Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfarm Ġ= Ġfarm Service . find Farm ById ( farm Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠForm ValidationException ( F ARM _ NOT _ FOUND ) ĊĊĠĠĠĠĠĠĠ Ġval Ġborders Ġ= Ġgeometry Service . parse B orders ( field . w kt ) ĊĠĠĠĠĠĠĠ Ġgeometry Service . validate B orders ( b orders , Ġfarm . country ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= Ġj oo q . new Record ( FIELD , Ġfield ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . ID , ĠUUID . randomUUID ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . F ARM _ ID , Ġfarm Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . B ORD ERS , Ġborders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . CREATED _ AT , ĠLocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . UPDATED _ AT , ĠLocalDateTime . now ()) ĊĠĠĠĠĠĠĠ Ġrecord . store () ĊĠĠĠĠĠĠĠ Ġreturn Ġrecord . into ( Field Dto :: class . java ). apply Ġ{ Ġthis . farm Ġ= Ġfarm Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRetrieves Ġfield Ġand Ġfarm Ġit Ġbelongs Ġto . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfarm Id ĠID Ġof Ġfarm Ġthis Ġfield Ġbelongs Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠID Ġof Ġthis Ġfield ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġretrieved Ġfield Ġor Ġ` null ` Ġif Ġfield Ġwith Ġgiven ĠID Ġwas Ġnot Ġfound Ġin Ġdatabase ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġfind Field ById ( farm Id : ĠUUID , Ġid : ĠUUID ): ĠField Dto ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfield Ġ= Ġj oo q . fetch One ( FIELD . where ( FIELD . ID . eq ( id ). and ( FIELD . F ARM _ ID . eq ( farm Id )))) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġfield . into ( Field Dto :: class . java ). apply Ġ{ Ġthis . farm Ġ= Ġfarm Service . find Farm ById ( field . farm Id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdates Ġfield . ĠOnly Ġname Ġand Ġborders Ġcan Ġbe Ġupdated . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfarm Id ĠID Ġof Ġfarm Ġthis Ġfield Ġbelongs Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠID Ġof Ġthis Ġfield ĊĠĠĠĠ Ġ* Ġ@ param Ġupdated Field Ġform Ġwith Ġupdated Ġfield Ġdata ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġupdated Ġfield Ġor Ġ` null ` Ġif Ġfield Ġwith Ġgiven ĠID Ġwas Ġnot Ġfound Ġin Ġdatabase . ĊĠĠĠĠ Ġ* Ġ@ throws ĠForm ValidationException Ġif Ġupdated Ġborders Ġare Ġinvalid ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġupdate Field ( farm Id : ĠUUID , Ġid : ĠUUID , Ġupdated Field : ĠField Form ): ĠField Dto ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfarm Ġ= Ġfarm Service . find Farm ById ( farm Id ) ĊĠĠĠĠĠĠĠ Ġval Ġborders Ġ= Ġgeometry Service . parse B orders ( updated Field . w kt ) ĊĠĠĠĠĠĠĠ Ġgeometry Service . validate B orders ( b orders , Ġfarm !!. country , Ġupdating Id Ġ= Ġid ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj oo q . update ( FIELD ). set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj oo q . new Record ( FIELD , Ġupdated Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . UPDATED _ AT , ĠLocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( FIELD . B ORD ERS , Ġborders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( FIELD . ID . eq ( id ). and ( FIELD . F ARM _ ID . eq ( farm Id ))). execute () Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( updated ) Ġfind Field ById ( farm Id , Ġid ) Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDeletes Ġfield . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfarm Id ĠID Ġof Ġfarm Ġthis Ġfield Ġbelongs Ġto ĊĠĠĠĠ Ġ* Ġ@ param Ġid ĠID Ġof Ġthis Ġfield ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġfield Ġwas Ġdeleted , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġdelete Field ( farm Id : ĠUUID , Ġid : ĠUUID ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġj oo q . delete From ( FIELD ). where ( FIELD . ID . eq ( id ). and ( FIELD . F ARM _ ID . eq ( farm Id ))). execute () Ġ> Ġ 0 ĊĠĠĠ Ġ} Ċ }