package Ġcom . cz f . proxy panel . controller Ċ Ċ import Ġcom . cz f . proxy panel . controller . dto .* Ċ import Ġcom . cz f . proxy panel . entity . Ch arging Strategy Ċ import Ġcom . cz f . proxy panel . entity . Payment Dao Ċ import Ġcom . cz f . proxy panel . entity . User Ċ import Ġcom . cz f . proxy panel . entity . User Dao Ċ import Ġcom . cz f . proxy panel . service . Encoder Ċ import Ġcom . cz f . proxy panel . service . Jwt Parser Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . util .* Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ Ċ @ RestController Ċ @ RequestMapping ("/ account ") Ċ class ĠAccount Controller Ġ{ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Dao : ĠUser Dao ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġencoder : ĠEncoder ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpayment Dao : ĠPayment Dao ĊĊĠĠĠ Ġ@ PostMapping ("/ sign Up ") ĊĠĠĠ Ġfun Ġsign Up (@ RequestBody Ġsign Up Request : ĠSign Up Request ): ĠResponseEntity < SignUp Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġentity Ġ= ĠUser (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġsign Up Request . userName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġencoder . sha 2 4 4 ( sign Up Request . password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch arging Strategy Ġ= Ġsign Up Request . ch arging Strategy ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sign Up Request . ch arging Strategy Ġ== ĠCh arging Strategy . By DateRange ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DATE , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar . set ( 9 9 9 9 , Ġ 0 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalid Before Ġ= Ġcalendar . time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= Ġuser Dao . save ( entity ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp Ġ= ĠSign Up Response ( entity . userName , Ġ 0 , Ġentity . valid Before ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( resp , ĠHttpStatus . OK ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . BAD _ REQUEST ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ("/ login ") ĊĠĠĠ Ġfun Ġlogin (@ RequestBody Ġlogin Request : ĠLogin Request ): ĠResponseEntity < Login Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Dao . findBy UserName ( login Request . userName ) Ġ?: Ġreturn ĠResponseEntity ( HttpStatus . BAD _ REQUEST ) ĊĠĠĠĠĠĠĠ Ġif Ġ( user . password Ġ!= Ġencoder . sha 2 4 4 ( login Request . password )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . BAD _ REQUEST ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= ĠLogin Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Request . userName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJwt Parser . generate Jwt ( login Request . userName , Ġ 1 , Ġ" common "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . ch arging Strategy , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( user . download Ġ+ Ġuser . upload ). to Long () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( resp , ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ("/ change Password ") ĊĠĠĠ Ġfun Ġchange Password (@ RequestBody Ġnew Password : ĠString , Ġrequest : ĠHttpServletRequest ): ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġuser Dao . findBy UserName ( request . getAttribute (" userName ") Ġas ĠString ) !! ĊĠĠĠĠĠĠĠ Ġuser . password Ġ= Ġencoder . sha 2 4 4 ( new Password ) ĊĠĠĠĠĠĠĠ Ġuser Dao . save ( user ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ userName /{ user }") ĊĠĠĠ Ġfun Ġget Self (@ PathVariable Ġuser : ĠString , Ġrequest : ĠHttpServletRequest ): ĠResponseEntity < Self > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġrequest . getAttribute (" userName ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . FOR BID DEN ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Entity Ġ= Ġuser Dao . findBy UserName ( user ) !! ĊĠĠĠĠĠĠĠ Ġvar Ġpayments Ġ= Ġpayment Dao . findAll By UserId ( user Entity . id ) ĊĊĠĠĠĠĠĠĠ Ġpayments Ġ= Ġpayments . sorted By Descending Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= ĠSelf ( user , Ġuser Entity . ch arging Strategy , Ġ( user Entity . download Ġ+ Ġuser Entity . upload ). to Long (), Ġpayments ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( resp , ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Delete Mapping ("/ userName /{ user }") ĊĠĠĠ Ġfun Ġkill Self (@ PathVariable Ġuser : ĠString , Ġrequest : ĠHttpServletRequest ): ĠResponseEntity < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( user Ġ!= Ġrequest . getAttribute (" userName ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . FOR BID DEN ) ĊĠĠĠĠĠĠĠ Ġval Ġuser Entity Ġ= Ġuser Dao . findBy UserName ( user ) !! ĊĠĠĠĠĠĠĠ Ġuser Dao . delete ( user Entity ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity ( HttpStatus . OK ) ĊĠĠĠ Ġ} Ċ }