From 85547195bee6d41cdc47d886b74a4b892ea54651 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Wed, 7 Sep 2022 13:48:40 +0200 Subject: [PATCH 01/12] New stuffs --- XYZStore.DataAccess/Repository/UnitOfWork.cs | 4 +- .../Areas/Admin/Views/Product/Upsert.cshtml | 11 +++++ .../Customer/Controllers/HomeController.cs | 13 ++++-- .../Areas/Customer/Views/Home/Index.cshtml | 42 ++++++++++++++++-- XYZStore/Program.cs | 2 +- XYZStore/Views/Shared/_Layout.cshtml | 1 + .../01bfb15e-cd19-4fb3-b955-db1b6beadd26.jpg | Bin 0 -> 69340 bytes .../1b5ea07a-7f09-406d-babb-b01142cc3e58.jpg | Bin 0 -> 23641 bytes .../5f30c0f4-68c4-4784-b488-c773067db828.jpg | Bin 0 -> 43229 bytes .../68ff54e6-fb4f-4ddd-839e-f8cebe1ff1c6.jpg | Bin 78656 -> 0 bytes .../6ebb3ad7-4b97-4edb-b5b1-c14c574e7da7.jpg | Bin 189229 -> 0 bytes .../a3adeee3-9c3b-42cc-81db-befdb4e35ad2.jpg | Bin 0 -> 30277 bytes .../a4aee01b-055c-468d-b781-dbb70a3aaa14.jpg | Bin 0 -> 34664 bytes .../b362003c-7186-44c0-be7c-3d0b55d790a6.jpg | Bin 30279 -> 0 bytes XYZStore/wwwroot/js/product.js | 3 +- 15 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 XYZStore/wwwroot/images/products/01bfb15e-cd19-4fb3-b955-db1b6beadd26.jpg create mode 100644 XYZStore/wwwroot/images/products/1b5ea07a-7f09-406d-babb-b01142cc3e58.jpg create mode 100644 XYZStore/wwwroot/images/products/5f30c0f4-68c4-4784-b488-c773067db828.jpg delete mode 100644 XYZStore/wwwroot/images/products/68ff54e6-fb4f-4ddd-839e-f8cebe1ff1c6.jpg delete mode 100644 XYZStore/wwwroot/images/products/6ebb3ad7-4b97-4edb-b5b1-c14c574e7da7.jpg create mode 100644 XYZStore/wwwroot/images/products/a3adeee3-9c3b-42cc-81db-befdb4e35ad2.jpg create mode 100644 XYZStore/wwwroot/images/products/a4aee01b-055c-468d-b781-dbb70a3aaa14.jpg delete mode 100644 XYZStore/wwwroot/images/products/b362003c-7186-44c0-be7c-3d0b55d790a6.jpg diff --git a/XYZStore.DataAccess/Repository/UnitOfWork.cs b/XYZStore.DataAccess/Repository/UnitOfWork.cs index b93a97d..4198ca0 100644 --- a/XYZStore.DataAccess/Repository/UnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/UnitOfWork.cs @@ -8,11 +8,11 @@ namespace XYZStore.DataAccess.Repository { - public class UnitOfWork : IUnitOfWork + public class unitOfWork : IUnitOfWork { private ApplicationDbContext _db; - public UnitOfWork(ApplicationDbContext db) + public unitOfWork(ApplicationDbContext db) { _db = db; Category = new CategoryRepository(_db); diff --git a/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml b/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml index 80ccc91..5533351 100644 --- a/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml +++ b/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml @@ -101,12 +101,23 @@ } + @await RenderSectionAsync("Scripts", required: false) diff --git a/XYZStore/wwwroot/images/products/01bfb15e-cd19-4fb3-b955-db1b6beadd26.jpg b/XYZStore/wwwroot/images/products/01bfb15e-cd19-4fb3-b955-db1b6beadd26.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed3cf1eb3bdf49b5a2d66a892518779d23dc2753 GIT binary patch literal 69340 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

ZHO1VXWyIFLB9i4*Kp2ciAv>6yyGqUpW5R*O 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

yJH*}T0);&rtGK^T^7e37#f01SRyo|&&& z{inPiq5K2*VIHYAsi;k%_co;m;6T>6TZT7mJrp z)wLPXW3#=rifc%t*(1N0>br~lp+E=kXX-oSPJFtgk3X6YcTKh2@ZT5wLimmGBU!lc z&ZVc{>H3AM5qG1cCK;_l;O~{(hWUQ*z!|_GkzS?XuiMYWzXo)ev`dQ^?qJhpk|)zH z<(Euvm@>$a?F1_}cM*~@eQP)42f}ZNU$hDE{l)KzJTGvXU8Gkr%q;E%x_nZWjY~e# z?x$(OmTkOa6_!6?KNEPXb<+6bOVwntx@|IJsaVWJaH>8f$tQLUZlOR72veU(mLJ+j zmaJ3$x^4de0P2n+FnrK<{<`jaCx$*4c!T0E#2*Rxs?)*x_KV?*S*`OW#-HWe+DREM z+oyziPUG(u8E4L02Q|q2I`H3(zi5Aq+6Rj*{5#@55JzLH+r@WvWu?l|N99hg*1P`RZ^ev8f#6rcKELEf5813pNY|>JQTjJpVetfm&E=1q`AHw8n)W{o&NyBABP?> zf7*w{Ul=6twxxC99eO=t=G(+CrcEA=aTUaFi6N3;6Ut)P`J4mOJuA-t0O5`Ne|zzt zSk)o;Z>(w_8}TW-lGYst%y}jk1OO5}{{UwydD!@6kODdAXLGTV=oKX-~x(YP2U?3Y-=hVWl2s zxua&Bu9l7b?bBVn^W(4V+2T)z9}abU&lzb8q1gC~RcvDEXUk z03LDH{?wlft#!`>>W!((uWCB>V>Wt@p>}Sko>yRu%^?MV3|Qkh2N*n8muvq3vz@=e z71JA0@n?+uS!*_>Y?0et>ave1$qXIoSg{Kl-jeCdMA6@-F%LT zc)d~PSd7M%2&q+6Qc1f<*);mEdiF`}YCoCu3tqw$sdVzR=l&ZRT4=dNfen2ji4wT7UY9m_L=(} zYkC)oG&Q{ORB~xrz17{JI%CeaHuq6lnaU@211hFwCkKMf?_Cy$@ax4t89Zg<{{V*enqIMWu6Rc8N_p*5O_gM`SfP>@ zX_sdT7ibLLzL>59!k@8TldOC}xYF!AN#acwPq3}jliA!XEhq0}A2?hR0>((mBr!G3 zc+cQIpWy!h73$J2jJ#=gZx@NQ?+s5V)Pmezi-nubEjR;vMp83_l?ucWkPT&u;n`KI zR(T2D2Gpl zG<`{=@U7LvH}b&|$#~fvV^S9d%wTbn-!MHeD(0*3XT|>jA9OzrY91QUmr}RU<<|=FXqQ_y*Ekn z3zwpQ5_K&RmKYeP;;zx}%SlWB|?ex=m%`_z)d05QouNUd@EI`~t?`c|~slI!}kc0MCb9_^JNk?-SK3W*g+ zI|yPKv4OWI9A>+4yf-{O3bYitl}@``<$Zqx!_E9io@0%`9 zUGA0rPcpFml00{*_+g`O3;3ZeVo2V3r_R@9uFr90nrtghR# z+e=vU3vV6xdVdWyjqm&=8l*QyGb&o@K3KX4xJ~jnXJDu9jPN+%0Z;IM#dG1EBI?6S z@cxf+XK(_Tb(y}^Z*b_qljIZox9NsbHj$p>*QR)n_CfHzo8kMWw7AzKytj+bnbJ_u z%_7QCl4S#IAPhD~0ggHftKqNN@57!7@%M-{4Pt2Szq9RNm9K6U3)?i#;K{oIcvVoO za!ENI>*!q=z5f6+^O)i-x8!oZB=PTy{whstW1{H44=u0O7com5w(7R(vF~O3M8`5n zP#j|;0|cHbuY;ZRX>6KMf|dCM*dBmsg+te=SfF1P)gm&2AC zZPvZ2X!_(A8kN1h-~JsKJlJ|t$43Y)OF1-;XaF~X?F^@mv{OqKbNMH#^u{F+N?n&5Wuk{W1#at_)qjy zc?b4w?Y`F|$~R{*;NY*!x!~k;&2(NN*JZSp@B0T(T^`scH*~NGrOn*+uz!zF|oX9$FKYY(EbzrN%7Cb z&xxKH(QbT6;>~R@^&4wBqg_Gd3kZ=jjAe$^Pc!TVc6u7^! zCKV(Of%h)r2N+Yudw0OA{{RZ!d@g-6#hw|_d?n(q0pm@-yw!CFgHpbo?p1_{j_OuK zUF)|y2qf`}=%@YTmk_nQ9^DuGInZjq40Q*eLx)W9my5hRaj0u|8fsrje{nQ6YZFS@ z2*E(y5tK7vF$95=im{>mJk+k@(QUjz<4+jeT-|tz^2%GWsLcZ3+oVolomF^N$lJR( z!65Y&m*7hehx(qOhr?)8nZp-o~)%Uq5wJC(K2p8nGNQQo+|8&-iu$z?KR(lI>wK8 zYbS+#RpRR#eJyUaJBT9GrJb&$NnuYQM)+lB^BIebh6jLnuD4G3YO(5`B-HIS?-uHl ziz|EOw2t=X(%{MF5MnXPg~5$R^*u)4Ltb^RXP_L<1j}!Dl7^l* z;4!#9asB9h_`w9^@x@m76Y%50_x?7si&pU!$BON5{3iygU&J@&<~gqttsu+nL|)EqHJCgYf<5#NB(tI=ue?5jAaftgY@e_k#4ol1m-4naqoo zU~%%V8;;|GGAr7D;Zte;81WvGnr+99EoRhG{zl(_GXX4dtBA-wa@ZZSjAsWGUw7co3hEln`e*jF z)|E8(=Hpj=qsCgNh%PkyJzq$XZ(7AIE%&In zGe!wMcPJDtNy+Jom%%;@@XoW~zlc{_)czT1tuTgiQ?819zXTcdffg*fuY7=}{7 zG3Tx;U&WsT{u$_A4AvINX!3ZfKMLv>R#GkMNvSQ`%Er{AGv%`wJ9`obTneXliH9s- zU+TrpU%?UhC&ku!EZYA7jjo}Z!Efy%xYZ|^SWdH;)t6un2a;QW4u3kq_*d|&#NIye z-m~J3Z&>k#-MGEag=DtzF%71~w-0G@s;JE z7w|35#H+~kxO^=%cG@+>kXtsaV1Z>>A}Zu8hb$v9;F3wsF^uDHSom-7$awPJ@+HuI z$tIYOc>?N56Fi3Dm&|>V;pABGLHodVqT;ezd3HMcKLv+NhSeL#meWh9Bo{HZyKof} zJ-|mDz+(Jw6C_B)An8BrlJN?DxlAI7f0@IlGv zHNnqq;TSw+s70$;_;PJIZ}j_AOMO9GXn0e3Lel)Ot1v7<`^CBpitQlqKf>)p!X{qYSHSK z5+#w|s?$uVpEbr=Ne7a9VAnIE=pPMjJ~>CH$NvBbyqa8o6HDc3wPW^K?$+?6fFCga z`(fMEH|-vg$s3cOkso0Uw*SfnqXGqUNeQXlE;3DO~72 zH2Bv^_<5t-YnOf}@wJ>fb-Xj%-R_=N!^s$!p(*l%9Fh!Yo!oK_b^Z$f0EAytwYXbP z6Y5cTZ&XQTv$DI?Zc5zSn9<0>jBYtQgJgs0fnGQ9Kj5#1Pr{vM9X4MBTUGs`XQd14Z?oP7k*);s7Xd_>-WPZP4g)qS&w#bxg`XGhV(|sHfpotO*xl+8 zTixj?BTTVIT&v3LtTG*fkWN?yupNR z!EX+t+Jwyt2b*gFkjg;Vqa%V)5rbYK;$MXtpNws-?sa`*U)2{(EpCEo)<(9C&hOn8 zTmr`*FLR$zE4}ewfP670!1i4&W{&xMK^>HGSxs=ajR1K_P=ZXdU;<9u=LhS9p!kK`51kvFnP;dwYk`yoV4pIE zDy82#R`PfJRgX%w8g^X2inrmZ@aT9gV`)6KQZNev$@)}sNUD=B%&l{uo?cm3)E?Z{ zRi3yajZ}#kwDBhtMdYwRvl?%fyu3Ms63W8kmCUkUs%(DltP zO7MhHCck}WX$*r|xB=PKcN6=tFk>{nV)Q%D6uq+Dp!%no_wSGVWAL>+Nu}6Mo*&X-iqGv6 zOFfU-eE0iIZjzPqzI<&Y6$1fSdsmrgzYzZbXPr~T{y1+RFOOPHPsG+|PrmSV!ozQG zVs;D5go;2Tl1!^@jkazMaOyxOSBt{2SV%1ClYrElnGPrsS1e7mh#rd`pP zzjHOSf!jYR`qOney9?^7D^~vV^)LPj>G1>hZ?pZIEn)GU=j_{YdpC&nw$l^F8hmo= zpV;c<(KRQQCMMyNi+0@0gBV?|u20CH2fR`HH28AgQqufsrrvnc;a^Z|eSb-U>cm`O zEzOjFWnuybCh<&!GbD=%ZPDZ(2)WSwF{9{Kt9dq~Z>dP-*iAA`2yApHqa)q3RCTKx zU9sF-Nuh>~Kx3p&D#%A>DE<9#b4}ECO3OnyVdKp8dY@a^f5SQWiqpXNUK&kfLf15Z z5!u{o{{U#Vxe(sz4ItfX=FIOBUqrcSCP5rBxL+w(rFTEHjlaWt$UHqBwHB3e;eYK* zcA5<~MxOE6?iVvzs>s)hS{0RK$s>DNtL~8`YWQl$`xfaY8i$N;QagkI!ySp8pYu2e z--BBEJ%z4|tm*pChvV^9m#A25YYX^cffIP)WXg<&_cRcUs<$(4$Et zepI48&EdLd?Thha!M6AIb9k# z;+Sr*Jk_x(TMofPFea;rOe{{X-} zui^)fegWTnQTS&cg!~`y+rqj{#CO`KjXXoHXqxV;;ndbuZf#P^+5i^eG}c({?-C{6 z(a)%Cm6|vNV*dcg`2PT9yI+s`wat}}jI_T9-}pYt#tHl_qfcvVXW|!xEyeJL=*J

ugYcrW%X@K?jX4MpSaKgU(C05qv4}9n)$Sxzcq<9!>lapR>vT z08H7xygd)$RqZLY?%A2fl}9dFN=YA6=>Gr@{{UjGM_#lM*!)=3G?;Wq>>e*GWVgD? zINPhUM=4dXl?!>+i;IN9h)R;g=6oXfW&1JsL*WIQd`i%KS8L<>E$%$IEaBBA(PFqJ zQy1Er88^s)7{C_gTL5m!-Cr2kO1dPHc`dto?E##sVE4-NQ)#~t_00lpvFaC)uG|&h z=BtnQTdf??-o}!{&el_ZdG*JHe`#+8{66@R;~xolIv6xxh4&h~`lp9=ZxUO1+PrCq z5iR6nljZ!b${ZF7FxffJrQCkipAD>hU#BcOkAtJrE$jf2=tLq{oLxr4bbekPg5|Tv z3PAL)hkxOrbuCKI?6+EGk8$OUE13MbN6`NOO5cI3;g&z`Jy%S%TZ9fFG6@w_`tka9 zts_yb6EUfUj`LsePo}&p`&Rrpv-qRq%dJXpvgo>oqaE$F{-5E?d-(1hR4Y2}UD3yk z;B-H&Xm~q7zVR}6yHfD~0Es5>wzV$2+JYviKEidoQw&=Z$^Zrb092r30Rbbq&&~7v zHnG3c(ra7I9_kkbki{l}yp5HM%esx^Z>XDDLroIxq0VtXt2h+y4N>rVd1hsxJ3rTcZ61YFL|v^MmR#IdkdW#1-A8*7pMt3EV0 zhHU;6*iU(JZw8K9dVZxn?Xlrrhp9&Mz&jDVpIPB#vUN&F;0#yES9%4##LXmTOIZ&gmAKE-rhh7AEv;$M`B7>SvM)l) z%E#-DKN{hd4vT!&*S}xH?u}}RTK@noe@19(f3g0dr}$nyQ8lYK4;o43m|1bV9r9~e z#2>Nr-W%{9m8;3(BP(h%7#;+*z>fnt54)eH1r%3jvx>Ejc~+l)>qC~+KW97bGVP&V zQU_@QnDU1QCymGd0IX}7@t4DWL&I9k_IEcHvrB98vmtG#j@(g2OyHJ=v}(z{N_zhQ zf@ILN`zwz3*g#2Bn>2?xD zsA=nX{bQ42mQm@=OQ-n9NYLcCmd{VQS)~LG@-EcR9C4Z`qnX%FE12e1F>vP$**u)n zzj(X`z>lUl??n__OPY&~^JTEyWM`kwx=jj6Cc-9~*nQAJ!y zdl#F>P~2(F95(X9x{X& zz^Oe6#V^7?+6PH-coDPO~k(M4#YmAuR*`K2rLKEe1) zq@Rf%6w|K-^~BRjAc`5Tm-nFO1hyE1&*nPRpBjD|O4?ST;k|9`bqibQyry8MzwvD& z0f$gWN+_=(RhQP>I&1lz)1?)KQ(Lv-3y~sOT~6MHTALN1@G!lakcQlI0AgT0ER}JpPoIF1I_R`PrkuVCNwH zJt(4sW2o@YgN~)8o9N@UF|xK|k(_Kl-cmXmyP*7U)qE0$%HlX~7w*W*{{Srj3B74cKIMw0PRCXpPX zAKb%8$>``A7@0V^xS#Rxiit}|N=d&^e50hSqN=8@|IWbB$k@cx+Q!z-{-cAVho_gf zkFTG9_}6a{kx|hx$tgcl)6z3Cvwju+E-Ef5Ei12YXl!Z*x3sqP^$!dVLH-PnOij zgFgtViS9lTzDM&)m)Oef;Zu=Nl1HzT3hH`E*+un`v>)6j$>=!5);LlBLHnP`{{I0B z`@cf=zk&U~xE25ugar7>Bcui>05H_cy?%0$jwZBW6(Qsg!TZZa9odH>d?biiYJT5% zw|267I-m>$_lh{7yD)mI)5T0Q`_-PZd^mRvaelBu4I#A6H5Nqfr4ydVt;KENETU0U zujp;2GxMY?iX(>cRWg_DO87|1cVF?*A(8%WIiB$Y!s4Z$*DR>-N~4&d7^JqZx=j&;mYoXf2LoJW z2{rx@lS;5vf$JdZf%Z1#{;NKvkddO0w$H-LsUdz%4KR3-)L=1W}R)M{TcxUI# zr0EcwPt4O%vNSUC{I$DLfJ+X_v)uv*>ntOO2hC(hqkfUy@>sv3h8Z>zF0CmJ_b1G> z7vTxY$H(u#xE=1tOwIn~J*b0UeR}+|mvgzGnc|O5>o6QHex%z!INdJfGNJgSYAZD5 zZ^D~pq8M}9Ww}nrlb)nGfu793!yC<4>dnMYz?2=KJ=@*tH5Yx8-;y#jY2Vn?$@n8l zuV;s?KTfirq)BZVyeGfMFXFc}{?F~&$d2vnr#G37J!1Y|1EVyJNd?R+E)w1MTiDdL z!#WZQp_L!mc-xSM-S*WVUwm7Ruh^}xyr^Gjhlq(pD7;XW*7TO%aZ7$B4pN^rQ=fS~ z^te4qB{|QA@3FL8JC@|}O^i#GBh<9Ac1gJp3E(mh(?yD=V2@fS0xxTf=DF`4tYD<$ zk6R1YyICDU51M4g6pd$HoA^feBRbo&5F%qf?i;T5!9LP}+<`oF@0jk4zE-SKXOeBI z7Y~P07&TK<_m5ZngW7#h=~IA+Pqc5^W-c z{_dW#cI0Ic<^-V52Z?w_6*A_B0m1p8eO-HAsk?Q<$GD)14ckY#}j}!82kl(4#)dj^$X^ z8EtkD&!cCGG+#&&$5_OQoYS-B!wo?SwP9(6T+6@N=B-<1)yY>5U2}G?3*0s{kUsWZ zhj3vy;HEu7`cYl&V|#Cz4-MJvKwhAmWG=f1@2@(} zcfj@uZNH1{sqjpdk#@J~SpK$NL6R3y+SjIvrk4p#AlKwIxsS5ILXx?J~OsH2qOnGj-HPe0bwSknIQ- z7z)m>V(1x{6v^=zF5$yuYj|>m!&vm+eRBE9LJ>GW$o5i=bp{&!6v7d`#WhT;{cnFK zsC+Xos;yB{Gu_aQoEg*z6vxykP{eMQT>icqhFreOo7Iyxwc7X+z}6vrehZLK^&c9r zfHS;q^kG~qbP{gmC{Au?K)#A|84=-73yy7uNP;glU>Da668+!tUMyf`oFv3 zWc4|s4;~G5+1P&R;aDx(2oCapm&VKafldy>a#xnh`n&?1rTHDg@Ex*QY|X$L+QZ?+ zI2aTGB;=XWmdQyjv;PpQDE6sdvpwsrP^Gk6j;%_UaK2-wOBspYNK9S+Ix~#b?{Hk` z)qc{hR&%Y{Xv;bc*ES$<+p*C7<>C^3cbC&_hv09^;0aTe@Ib#``#1_%le43o-oxJ+ z)-zm_>OEH8ZQv|XHVbaMs4pvG0WHr6&TCCPYev$x#Ch{no_>0n$(dV><7g9Lav%cHRpD zecyD&h-sw=*E%&8SQ7t`3FR^=yYT%vFPF?ABU;ntwJD3g%hnvr4(=jQ%=HX z&e_iIwFkMCS(t0Nd59gUIZvI8?Z`DO8cB#q79Bep$drBj+xj6c{(CuXileAnXauWz zj_2igkYh4fn){f>-v$_h>ooPtEWD96#^Da(B3R-0CGVSe0_hZs0f$oiAX2@&3zZO& zJxQOVz60irO|zRu+gP`&?IKEv7i9|!6gfFq9#z4`(-rYizAC^2+`h}y5*C6E;`!#$ z67=uo{_?jg2+E}-v`JK-FO)f?A_(GSW90@z70qe5(@Re%Y;z+EJQDpIZ25&v&H0-T z#imM)Eo|T$&3;#(eQeyq6HOiY${gPqL7mB;!B3+8B{N73zx7YtgcrT6uTMx0rnPeU zEyQ4|CYw9-`X{FS+9n}yo-LKsggLeE8iO9b)_n%~3Gv*%S>n}*Vw$pMKD6rtkHEiB z{EVYsnPK8!4%+QfwmxMhbS=ACp0%8)`(dN(PuYJ|SN4>r)c`Ew0|E7gwI{4V9=*>W zsz_6nj(l=;8Q7`4h@HNk4J+mR235kYM{v7w>aY_NN+V>wpO$x+`3FfCy|t0?MkH<; zF~=Y-jznyykCF)(mvjRwx)UHPz<4>(rKO36g=d8O^zoKIjGu{1t9tBABs`qom zC#7mHey6&hw^F1IJ^n`OzcLxWRD*+TQlKLs!EH|BQ zo})$k7OKP7ZUOXxZ*aXR;;2cRh&@(*^POuwb=A;g7umI^5ksJncudjoz*lEE;J^f$ zyE|6?krR$}a;v+kEz$IbH8MJQ43Mlt22vNj&?sm@lJ;rFZ;t+xSRGM#)q8UDY$-1g zC%Sd~n2@PPflKww8g@oooE4bXyr170hbT|l3C?wz#t7c9p;HF01qa$|C{6a3IlIsv zRi?Wl#tvDUu!qYkqAO2Y$=SBzAIz^c^2zq+ zuWRKzhKI4w8rt9l#)wsEFaBEqZ$fXn)H&lmNJ;R3s$2u1K)NgBo1)Y*8E6m)y_A0v zHoMU{B|v3Y@u=LZ1?@!g79}< z3cS@U?e`wyJS?;ek?jMuMIFh$Ax0-hdW=uq949(C0sa4gUB79GQ@%T1MszVdRIJJQ z-wgUkl&xhR9^{@q%U4Z)2dzf@P=?-|{1W;pv3*rL+!(jjtx%yf;>;E{w`L-dw}_q8 z7T)kGVG-rCM*GQ07Ywb>oz=W3lKW&N1hW%JSn6~jXU)a#5-?v=74r-PcAQ<(vQ!q7 zozk>I7>6;pfFkk8k zdG!o%3ovXI0H1ycVS2-yaD-Lj`0^K??cxw16R-BGpG*0;Jx@z<2744K?xC8-Ag>q z=GYU8!w*2*lB?ErdBkJWK8P6i_{uJ9-75q3t!>$NX{g5f@=`my_g@4#Ql<&3lscCk z?#u{SN5@`mhVgzUJD(^Lw=mnhB4rP4&%yE?Rhg}Y^y{EGx+6S+XcIP)DctkmDW;|$ zFLEco%Bm*FiX$&b3u)l}K`vySo2PI796wA=5LhGmKq`w%zXjZFL1#WMzPP^ZzXi-+ z4q8&V{_xe&Lpu~#C%I$-`8AmM>mEo^aQqop*5=C-w--NpGo2(bkE(dS{K8|%QMCss z>>N`f^JO>YQg8vTi&jKsTOh$v@)W+-rpVx?^^!DJkDiee5Zr-2d-4O5XOZM6#b5^i zCzF3)M8o)&Its-F<3a!Jeo zokXCC+P_CASsg$Xkftk9Mn-yO=#;gR0~CUaT-!VUzN5l@&z-ZKha4Y(oHWM9Jbi7g zd_z>U^g}xH-D~-W8c1ei^z@CwE|`tJ4f!KUa)2s=J}aZ61^M@(P>h_JcHY|>uaZo4 zm8ZEU@Q$+fjraSL$~Y)*<)>`$GBodvkQB)3;v7)-IR^|!^^P6FZ0zWaL$j+L~^1YP1ZTZKF)+Dz86Varh zLGzSwP$8%>@lfMN`WDd3lcp2VeNUEnO(7Qa;LII*y%I00Ym@$q@8^J2JfnIJ_4jv4 zNB*#b41cj1>+nLIg?CQ2MTJXUS%X0?$zsEP26*~TStgR}7By%L@FdJh)2 zQD)W2Hd&gef2q$H83~j@8IlI5b{rY`I%q+DK~>glO)z5Nhba3~HDE+l<4v|QN7AN_ z3;TB~xA@I;nJ&|ll{*-@Hk8{9UAmL_MOBc;{j~g&-e!&1o6I8PUtye^St|Bqfc=~c z@ypEMS0s}cEm5Ur0e(&ayH{*pntjf{FYT4qsosF7%&om9ul>ngitk z^1M;?sSSACJRQ75`rJ6xU5z{IU+e`I#o3e|d31ItqXMG-m`ANcp;&S6Mp1gxrX!D$ z@Xe(%H3eq|FpYCuP5dxVa9W-guW})q#Qy8Zus}i7C}M!*p@sajuS;l^Ua;K3dZXc; zi*<#zLs36J;!Re*``xSMSr?7*u891wm4@^LSyA^bg##Fph{-DE`8Q{ms+cjCmjnhs z>dYx_FoT-a#lmf9P0>`DC3zPkL9uo(qo(C9`x2%-@-)4fQ}_xTY>ra-+9dE$4~gxZ zLPrZwMGLzNSkJofub(vD| z0g11+${sM1^y$Ox9sfC55?Fs9RcCfp_xrb1W|r7h4-wE5TM}ZYK!h$_{ezxIDq9%3 z0;={Lg87kYg`b}{xkg-n{n^yv{-?#S(w>|<$y1-Xz{a{e=Ja@8 z=81UMr7xdg?iS#Lo*1Inb%|7MBqn{t(-QRS#E0+E11^gVx0CObQlk9Njq7*U3)qZU zIdZG>?b0omm}X@}9VzR}f1V$>`x76QaYe;|O-YvQZLR3C`5zW_;7yUHs3S4z77*C_ zb}T>VY-zbwFma`^6Lv`O`y=!+%hS+WN!jc(SZ_Sa_FdXeX>h#wzJ-P4d)TMgukQ$V z1axp@_Q=as_TgU`a%^t!!}%SFlF>vEI_cNo`tc)28Q;^51`F&tjC@5x~ zPfH^gvN`LYcM`J`sA>ch$w`7nKYV`+@X3>_*j;*f!8daYu+K;HMD_zCf+ZTJ&ky-b zP%aTr@O?&S$w4Nir87R-fso}en?>ehKyP}f_znnZ)Q#q*ip2L*h?eI-`)L$z?Bw zPHdmo)OWAu<&y;pBkeJU>x`sZ1E zccPoCkqJHy5|;mT&X#IX&>!NZTH{}Qx5TRs!j#UNfj)E9-0DiZ1%$l{Vs1%|f`7Z~d;`Mb@&I=8 z(pPYuF4M`?FJ!gT4sI02_~S}nOoZ>?y$p*r7}|m|HsaOOHH9mhddclG-U66$g8K@M zl0zVR-_wDI*g^|bT9aRuBjqFB%#zGa=bxX;$=^R)r6B03HhhL0nZKz58HMy}+yZRO zfRSvHDF~{52Dl+MAIEP#T!l7z2mVTOX4qoQ-zN9ZgyY1;nZy1|g}m__=2pT@_jdP{ zzRrnPXj}-WKdQG>J=x7nu!Yw`^?DyiBEEJXICu*{8YF%@aa#DaFjy0zU9{dFpjsr{ zk)CCj>k;ACkDr0(z~{ria3=>y{9dr z%nQLh(zp=QnU7u9L&x@kA%mcMfq@g{zU+gB2R2RJO)1+qvT-BDGNldms+qc}KXO~P zS_}TvId^9Ln>Hc`zIb-i{WlJV|3n~PEh#%CqIpWf0{J-c$S~|7G?n76#OQ>Ph1CIZ zIr(FqmKBPx)U9u#9~EL--X$1zy~=ZMjwL-wWp`eSi9c+iTHjB=Tyk|m@fP9cE3Y%> zvsT@DW9<8Hafh#X*QkxYFMvJ+zU*5AYX5daH zy5e;Uy)9=oo7Ndldr8p8iHrtdmznG_adp5}7k>E<_w07Y(qH&t>zf2AF|RseR{BEd z4>l&fWZEOBe~W6mCmdpU%~!$B^EKl5vEx~`Ua3I0TL95Dwm^K0SZ`XKuZDcohvS;7 z#foeBdOqRpF(WgcHOige2Q__`Gq&;|`%&kw{rfQ@xTAcGd*l2npC@y#hVA$o*A7$| zuufJ5a|oXh|7kJ53$T?7*!T>u_p7Ne5tIIw&LUiG@Z2`k3vK@@op)3-!; zpaO~yZ$c%G63H@6mFaXzL2XkfZ)E8sR1>CWToH`Y!>HqdkHMrNy`1tuvb_XJazgTAR-U70Y9AZv-#pu;2i8IkauLS~dHi79C`_K~ zBfaGvwAF8r8RmL@@ds{Z_H_e$B^{DvUG1f<-*fNn&FYW~59D7Um>%=+W&lXw>AU6{ z8$#t}(&4shA;IT$V-zc}Kxd(&9UXhmDfGc9B3d^~@!p~b=&PHTm#jgc*Ij?%oJUm+ z4q^*t4xag0Ff*V5D*VC}`wbIRX})_Lu&R*Ahs6D>YJ+&m=Up;+ zo$(&s+oj_nLi20OVknHrZyDRaLzfJI{axb%nM?mz*Q3P4 zrB>LGq+wnxkQa9*TMQWqX=i=YT&Xa3v1PXa>+X3-zkhslO$f3Z(&pWYh}~yy&YN<5 zu*dW*X7p2cPw?pd4&Ai)T#ez!#E)TPD@a47TR?nD;3vrPE#PbQDe!VOaEpqpeD-s? zLCLz;Olq?AEx=`Eu0#z@P8`|w1S1J`?XW_MuD|Y__$Hn`@UE-=alWYL%pE)NPOt*| z!4=45^^pW|RYnLXyA)5R9EF`|!&xDJRC3+~$Lh`nIJHXer97omv1VEl^J5L96y z4=xnf6RA{vNLT{PN*8FTQUa)Sd95-4C65U}4(Nv$GAS1t*qB>@v;CB~i~=1-7zO)+ zk*h@052gXdOQJlF50zi55nUPSs#ZNhb`8_K;rLa-_JQG#;3dhL%WK6gx6kM4B(6`gyt48`e+nJBDmvz8r`q!T?~UNN0XhWNm^pJp_- zC=7yWFDFMzXk8*x&cB|E4u(^pPR=H(#4AUE>xeM7oM75A)@oM&bIgv@dpio^>SunM zrgL=cWqaNApu=qx@IoZga0(+HQnHsviDDdTUArGVBB%cf+Cq4FQ6CmM@PzIjyb1`!#=dB1FtsCk_>FOfZVrdRafJsII5JG27-H4Uq>I zbi*{JbGvWdqMV(78N@6Lho1bR442-w@HuF}KmR`J7I09trm;c_A6#2u4itxSK6K0@ zL3w9oRYwN)Z2zV1Vj>lt$RuRHNwMVP01E2#Wj!$rl=L4j)=}zDNrRs7d?;!?ufuxR_6LwBl6e1fvD5cJ=5xn60_mN^Q1W~$uyzQy~g#|;aSL#1(^#lI{M}V zMhT4K9?+pNcLGDb*P%m8Pc_U~xfb7(2nc*Ih#~1A+>BRt8$P!5la+bdyC|eUmZAw> z`dl7>nri6TXk3eq`_*(alE-BpsrU;MCRgrbA38yMO?xAPUy}TTpJJrZAP0On&qN=I z6GAHw((wg^JnY||aAjbA9UZmO1F+fZx?9&^yb2P?Xl4+C{|j>5Y>IuD6STaXdQ-#_ zNd=-}@-25XgtwjQcm`HKt#AK$gIM>$(6;ya$2|^|!{&F<`O?2lVt(O-hO4jmn;Gdfn2dPj^dY!QpSB6#_+hA#8ut}@L+Yve z<0S{IV*7p8fi!!T?6r+cfnAH)7y^5iK7q%EBaPtYbz1r>BJOON@s zj5Cjx8~kW>9&3yJp?|LSd&Og=55ZgR1e)2u1$-1-U>@pj0uDHIm>`ZHSop@8B@;Eo zZ^BvV=!Wy3FDyU0BlSf4m(=V#cR!A-(^A=2Wxm`4FM?YO_e>*FsvYQcR~*0>qMe}YYdh$F^ zjQ6=+v~k|=JSUlfeB`?Tg$PT!u1N)ZPcTaaY-`OwbW z?fiz{pNs$v1fXZKQr~X@4KsR04fZfsV7@q-rJhXN+if4ZJsspQw<}MI(Q8LbqPF|k zWKWC?yO8-&{7op@fg+`iv`Zd&SRft2ypS2uxojTq<)I|%7vdrv`?JFeb>~zkQlk~+ zU4f_0KL4@N(0?-g^6x#B8KWl~2yD?=i3-hHkjIsgvus*=qrQfj@wjo?Y}~1H%F2$@ zF4g=k07s^VPzY0~0}dvB5mjE;{u0cs^ay$}Z6P8Vd5p;7cFG`@HqjHRVg9UMct@zW zE9B$5_Yd1)@{QBZ;p1{2D^m0;j>bUcBdAF{6c(WU8gkopM-8AR!Y=gBO zp*bW7kFpY9i5AOKUymLQ-^-Eb?KsG)KP125b`=j5o>hZew z?4xwnOqqvm$2AqM^9@wSBw^92MZ6S+@NroRn6`_JOBwW-8F@dcTlv@I(+R`P#>_SA zuh^!gJ>QCYvoxUK66CFi{>O{T=LTKoV3rsm=@-UP4Qenf{Dt$2Uc*PO$3hHpPOqV} z%JLQ+RB=6vGf1M=@|$?p#uxdvzK9;+|7_(|<2 zq}K7vz>YRmh!90;wDtAg@{v=`iBx^sL#{NJ(ie4~5?wmd^5}?vqk)MUP`jyw% z)_S1zD<=`@`MP2E4cTH##65YFw-UB>oeAYy6-44z-IlB1rhX+yiMkN=s^4#>&740S z?(b*q@;9D`WM)e-ZkMna&FChI$OljxB`s{ckSo;sT+ju|pzs8pjs=+@MPEk%BP0W| zq-lS+uyYzEP1j+Zwr&CUcZ&DlMjLHfw#wS)L%Rmh1gn0}gBh39xDZTzy~?aMkwkED#AP5fVc(3`1`|sBV3;=*-(BaVYzYJH`lz_D{oKL8G`{!)}}fG z5Gr4P*P>{9gb%S>5>NgR!sLG&udj z5=;m#S-z-HBOXPs|4yLvfEV+1Nr`*f9>z@ew|?1dPBcw&t`+G3zS8e&*Y!Vg?c5=D zOnbACFKJLc;_G{|XUm(g`6d#$o#m4{0fQFpg;2^j#${l-O{av_$TL%aM*%N<^x5uC zAi)U3BF*v|luvP6rnb>fM3L2t&#u-=Tu$UlabVa~t{53T#z}8m2aa9VVc06$n^r0@ zX>9mYnv|bWI}}v6+`j+ei8`gnq`>l@lie8)2Z4D_ZUxI1ZYoKM?JEgCvYfHi4Rrf5 zUt91?1!YCv3xl=y2EzHB|Gd{*OF!(wN)CC{_y0^a+G?BEFaFJf11;yav%U_V+ycHF zn+`i=%G&}3S>7oR;FALz`ac9~m7C&bn(>s7$Kg~qXBix$a%~v1;OBhGT394y>WTvv z%gnel1vrV)nb{efV|d3?9JaJuT-~66QkH zZ;~c8J#52V1j_bDB_$Nz0;)hVfl}xowxTjPIBk=|c4#@grgR(J8T>tX{1!l}j^R&G z;4e!S$?meH5XNgaLB%rl6r+}@-#2Y^6zq{A-2@p-rG$`u9g%S6SGKnVGRt;mXe z+;Tj{wh(#$9chR;uPaF*SlU|_|-0NrxN&(SM16RdLeHI4J3a0r~L6Pz*r>MGUFJ% zVZ^w8Or~bVT)|E-WAmY_7A4pZ52+8V*b-9kGum|dU3&|Vs~GO$+!5|C`t!G|pPiNO zSCQ1P`86gzTCV9$VlH>Bm8e_7;XdSSS6A)co!rh_Kx~l_pHeyOS^vGQUGz+s zHpAJF9ItOxeQ?K2LjENzm$_-P*Uy{ zBdtB68tnJmq0PwwM#H-l5C3J+YB|=b9YVG_EZWf^II_?)x)2~Q6`%9y?5D~BhG{3jf=qcOVwSYqvM~o0UtM0F4GyQQ*m@G9@xcXVuTS$EoIn2 zg7$vT1v?llepZ(%J(?y{IGn21>!D%&XpTmE(Q8i$gxpFq#S+R-sSWi`iZcO+~%c;1WrOcu^sNwwU5&i(+Q)i8x)MawQ$nvuKM5s+Bk0u(L# z@u{D0Aoyd~uNBIJ^p0z8yVnR{f1JTY7>Mj%p)*CYGERH;-s=*_6o~Fr*DtgK^6B-d z)~VRO@$t)nWHHxM8`K|+0`E!P{22d>%gifn*YomOreC?^Di^-kT-<#5;M2;U!l>p4 z5AI&6fKm6hJA<+fTf_IqwBW!~9W+L!HkV5TwdK9NyWFy4e%X6h-BJ zl83b-DZxk&Jb#36E-+AoEX!^nYQXY2J~af`!Y-!K;yGZ_Kc2^B7KH^0+v3;a)q%Wp z&~@>6n^EDn^zwED?7Mls@_FZ{z(cQ98d*^<(f9$XB>HW>Tfp9s=rO3$)^EdU942qg z9UmycCA+{h1BXh%Y9tu9gt z9i+L7MM0XY*{wI@^bAXKfeAJyf$=c!MM_?2ev@>U$s;!lja@T?%r4^@8lCsV9+;gM zTxf%oZDmHH`|y@S{gE1{T##vV2_I+7P-ty=fwCftb0t25(+sUXdfMnJ?W{d)PWWYB z8Z_0erP!~#{ATh`(iowYH$s}NwQ`BRS0b2o#&mg{Va-G!yq5TQZP8v1l@s7u&Gc^| z!1tM1N=*nKYet{}w^l1CyTmm!i@z(V>uRD%yZK4D;O@RzS%FY$l>Rr+zBX>){R%Iz zbJz0s$D9>o6?spnZ`aWZvb1Q**858SNZ8`VuE4iNiId<|(&^f56wd)g5z|#hkT$a2VQ`F{wz^3#RI;R4XXY5vgzfm#$K?m=@n{HmJs_a{~RbJvJrs%zJ z*Yu?z|MC)FK38*Yryp$~RF`eotPg{RFGd+A{;I zTAvfVRy{{>Bg-#SEKFXBRC)+9>KQ%jhb`n$kt=<0G)f#;0v|ZV49<8uOa_>4@zd@6 zwey9(8~~=&$j|Pr0M6v-%~1l4-u}PayimNMcFF?>s(0lrmvF8}FhYm*8^3Dml3MT* z!`q#okgdB2?$&GA46sfo0>_GZg>EY8m#Z!)UQ~U9irQR^QYP4zY0m2}b_(?7(JkV+ zkX=}uy8IN>ej^Yl1MQG=aA^y}=IuR5&aES$xMByO8p~J>BE`?QzjTrAT5{K##WEZ= zc770IjMLZ{T8&G!WwFk=^TLq3PcY19%%K>DB5` zbd6n4Vf@ZC%vfVnftri2Kdp*Sexz!i_efPM4&bOH4eP16J$x7^bSHo{2+P^^(W21o zzu%e>arfu9r&>o*);_H^*m1unE$i(psmjyxA5oJ1LoIop2@*-Q<)gXf zEfAf*xYQHaVgBkzD`XKe$yzDim^!Xpp@0>=6Yww#OM#;QdU#IcAh2oCgDE-YxnQ5h z@NEggsd`1mR^?R1Q-7?!`MXiQnZkMtpv;dCF6g^LT>sTSN*rxSp#AD<$mgsxlpnRs z^39bK-tO_>k-c0Sn>0JLg}I8=pshai^p46BaaDlAAo}32X>=e`s{?H2uJJ9!gS9KP zJ2f!DSHhUj!k7&W2?qj>lpb6%c>`fe6!V0P?eid$M#FC^UIrkOZ8u(@!rFi zgok-=NE>`IFI1=B?79W;Sv!cJsw;&YhUHb8XB3<8vbu(x-S4Qm+zX#c$kedrF;Teoy+~?dgPkDjZ0Tx!gV>U~> zeLyyqQ{_n&+h&VOdClg4Af-=%*67rNK=#H)rp6I4Y*OYGO__D#)o#K)=%>{*X5B0EieKdCG7BJn|~OR58g@7w(*Z7GOjKbjR4`4ZhKFOcvZ8J*>B86_@ya4Semw26=S%Hu zvsc-8^1cll3cH|1hpxiKP+XB!{p;i!(S>HrMOmtMUQ}R$7*ukou2u zLUWM1n$#YI;~F1?T5UnYF6f)%+X`asARqY_6ji)4ytkXA$(c)svq^2!tX=geT$maV zlT2{%Grqro7KSfT`kns(LtcrF{?$C~+SsXQAxA^R*Cl(0xn_B|7gBndg%0BKByXDc z&bdRSbGpY@js_tF2>UMa@oS&j&t)g5s9QbkT>$9^*SByBovwGNU1;~)VT|U0{!oB= z8&{Lj2^jNm6NM2~t_CK{ROK7gl*{cy*tlS46Y)&J1@=AyP0-8&&>nA%aIAm7%Sp>( ztAdbX&yc^3T~{gINyUdfkG2<0N=1DR zZ2~$v{CDc184)>CHdHj7kgnSf&H`md-)JrDLG$>L@1pHp>McPd!4pnTABqk=IIz(( zrcRbda3DH^e}we%bUiZO3!yrjh>_<&Vuy0Pc%DDO|K=B6oUF(a`nkhqv*EC}W6L65B_u57gYLblZ=ub-ABQkAeb5o)XN2`y;Jw1cO?S3t9nUd`^+y8H(rtNGoHupV@y7Gre>X@$ws za0S|NjShZeo^D)dEv=m7?Yc;-O7w*}25XO8iTfRPfzU~V?wJTsMAc_|_wwaqP!BJ_*c`_9CH(uaLJBBV{G_ex$UWZtF|C->#(cg}y=MxLZ zdeW{O23F5!BQ(!sid-_Kuk~@{h#LZ9+(+>3WM5=FqUjW#sE#RZS$W~nId+@1(I*ttEmyVb?xLTb6 zDix`fKoA0KaKjslaZV>u-g|QxPiFwig_8b`pZ%bo360>bEQEr%rlc6j8qt? zh+ad{hMNq!3H%dz@kEVPgKMe$^EdyTt!`P|y^od>*c^F^K*1CQ7&5USsDTbaiT0!L znb#Jy2|}$n@)W@z-1Y0*2g2e72n7c?GQ z>8>rf=s@drXQ~?$I=mOn9P4MnCj8LP+5p*y2+|XM4@`N{G1#vC)3GaA5^4nv!4>K>0ln_Ll#spw36#Sy@I3|Ral@{7j09U zv-N-ki~?*Vk@Qsk*BfPhE?eq5t*itP+M`vs2PJxm^__4FpIZQXPgQuKUaqa4###_l zb9=rbZa%+mabY>P#%Y-q`U?kfa$s^WT{E#Z)YFk0W}WcItjx;O;In@iI^^FJbMsfe zReoD9``rhU{%EfyeK-DdkI*^}AzjlX&lQX>jH2tJntAz^gyP?i&dje6>ycHYvU8NU5yw6pb9D2?*az8cFfANDppyj5KV|@TMRQYzk8&g zdQSG4V82&xf2)QOEqJ5YPrpzTiP0)^@~2Cyg#`Kd=G(;Eeg{5ZdekbSYQVBe@j+rE z^!wa7JePgdJKc-zr;D@co|8#sf2xqg)Np$p15xOqc`Jx9NV&a;V^&JPepaUInypwS zaxFSi6f9QcQ)ucfAQw@0qaCQ+1rvD0K^{Pa3QlwQwT3nJ5Qx+05$ zwPMDE&iA#ee5FUs7r<4=g;(BtL0+=51tfh`seB*PwM$Ac&%<25$%`WM>KBTRa&0T6 zPPY>tUqxFGmEQ|?{c*<5IP_T>_+jtGhR<7UiONh>lX1cu_n$JwthCLm5-R52HRI>q zxiqw=TX0fqrj75}bvabQxW29pY+{JrN>n$!Jn1~TP;1hat8vDK`=mH33bUzMLAzni zDz|^WLW)lQ;W$Bv9IUA5Z0=qTRA9E9^t6i3o|RD$y9KPplXS6LMv<#IKM898p195^ zwMa!iM9h|&UmB@3*H5;0=D@2Em`9Kp?Fhz0{rNL!R`>P|7iObQ0au`$0abwMJU8Gj4#WdKLcf4Uta6S z_=SIj)Ih_Mt>U{Hp#s`Kg&PISnN>+CU;rS$M!ni_*s))Sk+m*-T-ai}Z(k}<($;NV zX45cXBG$(B>La#Rz6tWN?M)lB>~5v{80Y9$1Ge8^_-fF-r79(APCw1otf%xpWveWw zbUE$1=e#IT_r1&`r8`zuKL`P$Hs8zoQLp3Yz4qJP?J)G<-d(QH z3dk0GOvrh zS9`rqs*q5Hk=1zf;>U}=BWoH>*ND7P;tg{5O&{oY8jhhY%$AuT{_UNKUO+s03i?aI zKevCz?HXZo{{Rb{;+&H)G8TUkTrhHavB~E(^B$X{z18$Bw>>@U*1R#{YpE4gA(4)E z4mk9$-8d(OXmeGmTAFv-=gDVzgkco9tdCIt0D^md(Vr834EU?!4!hx>9C(w%w_YZ^ zihWvJOV&v>IYY|f<|JX8GDvcH`P#k1{tBo2TYO6WqrYZd6G7HIY2r;=L%z6zYr9LC zL5Aj7kIL-0>ZOU~<2X3tyx;a~_)RvQVXUjd#iUh~f^mW~+Py2{4}>Q1f9&urWVU8& z8^N~&pdj}8fU=1hDmKM(+1^N$cmi_|9|2GKPIm5l(NGEhev~*4wG%zq8-% zCGi{fPSK>g@IQ|A%@b0%vx>^@{?_0%#Lz~#jvewVGQ@xYBSI8orFg%Mel2*zNBF7Ae=wYYid6n5 zzvEN*2ljS`>NnT52-q#F84ED^N$fu#YBMekz*nNE!jw}@Yh`wqosX}=@nmR9RqE7l zn&~f7xbctt74P<*(=Hl6_+B1A60gi#?a}j}_y^PSua`96+jrvkhW`L)e-nI0)BYfM zn$yP~BZ^ynQ(2DSE#2&H0AzEHcK|r{6{+LxGHpx5moh5tUCcloG5&v*c_yu%;Q9O@1>|GObG)8tt~?@2lv2R4`OsCrL#l_emwG>%X-(iFLmf zc*;F@QNCOCy|q|vt`^=ncR-^Gghr~rC?sSqc*i2R8$TcF_CF6VJTDFFe_-ktaq1J= z>_V?JYE>l383ZXK0DwU`u8&34r19Uvd(9F$Gg`LdtFy!KqitfYO@ zkH)*Wr;>H!jl+C3R;g^CRAraN#vaCd#r_=tC(Z9kw;tQOQ?_y6>6&Y=%FKH91m?aZ z^#xIaxCF605Agp0>vAjTpM+oVRBw#m0{$Cmei87$iEK3e4@pB6v?E8fm6sZ=7M!Y#IN18r%XVwt^0KsZMXh@lu z__Iopq$K?QAF)6CPOLxt7T5NMl>Y$8%b@(D9Qba;{{Zbe`6M5adHchfa-zsS_qP@7 ze{W-d=j;2=JNpMOdb%+2!{$t? zyp|*U{W0Q*YhHBvb#M;_E^yt-^Ch-h$nzcYvH>Iuitmw+^BZv{sdOM%U8aW zR@5fCknVY;F2wgIn)++N9ubGZzp?jU1#FR_mGiy^of_=G3ZJt5x)TtK@PjgDaon><3!V(BbnhRa=n9rFNbh_$hhf zD}a{qyqGx3jz1du2jExi2X*3YMi;(sE&00-w>>XE1nrYo*5R|W zvl77=9(i=asL1Er>tCXN8vg)-OL!jaM>WJU#N-X@8mg}xj@9}`JB_m3iL5mBl3fqN zt7aL`5>%A3=w6>j-H*$E*w5fIc*o*I8hco`mvlCeP_{Vxr`J7wtL!Pi;FkJ={597! z`0QaU@(ExWKQYd5Ywu5kKe1PX{tjG6ai?kV{jh(_XF$?^b?b3>dfY*?Z?WRPDdGly@mq*lz<>Vt&?sQrIR{BZrR ze_(sB3hR?Cyl#yO5aE}VK9%}xbBr$$;2+gwx%+lE;mrQFQH=VQaJgjq^nQou-NJH5 zzvWSbgVmebyRRO6Bh)-AeIiS5E)eoU@mzfROwkXxbDZRkwfH7=!r0s`R;L@EzhJWp zHK3|fl4#QSX|2cM?;Yuv6Yl#nO0irISl{J;{B)YR@sq)y@Phc}^38wL?(-vTef2zp zT>k*sBwlu$uX^^6+B?E0SNL(^PZGz=-B~14HtdqXb^I&0FUsp;@~ZTlb*JwyF6kWj zj8tgisXOUCAFk-|v&Z=Q(hfTG>;S1s6(8+;nre@qo!^Cg1gObwk87A{Bk=ubB&vUR z-j+o30PFIehrK*>{{Uw^(HJmt)M0FsHj~Vsjj?}sNkMQ%;6z<9u zly1rXDppO6{{R8$NAWk;@}y}nes7y^ddQfHQzJR&ztWXcDo5o^#`ykI>5tBrcRfXE z2Nk(as-#M;%kjd z;oNaFi?$1lmCvX=*F3uA!Z99c&vBalLonl&PP`{iq*3!2T#?3feSR5cGXE zcp~y*jhpXaVX}D{{Oj!>+0VvW4yLx@uj92C+D_rY9V_xfO!1Ayi-rz*;B(f!C*l79 z$Gfd6Xw*!~SJ96Z_E|3*VY3wIRi7(zY!%Pb|uo><%Uu}45_B)$ZXxUqE;~dxWfAAmn*ws8Ga|>E(jS~h^6`g{U@6CR) zf5A9^;IPodmbyoaE;DGr0Xk=VS;zi6Um3=J9^xxTSo|Elr6GU_g_DoG{W?EWJ?yJ>PqCeyi2 zbKg8y<@fv)AK>Pb;yqgO{u#8(SrHE8UZuO|@~%Vn+y4N9(O+CG#g>nCYYYkr{nWod z-N*RX<{#}3{{RIK*SuLR)MHSPteGrB_0O$-^})O&jmnqS@l*C|vHb7F7>b-%Sy8}J ze5vU-rk+Ph`$K#()2*)NUoy^AIm(V$n)xrs{sdh%>PCfQ*^__|TFLQ`?G3GKw~XfQ zPD$w9Ym3ypb$zHv%_Ppp-MUw`pK-%p#zTJdbs_$t;GnVZZzv7SaN z=W>oL!O^2zk{U@n{LiY#}I2{{U;XG(K4ReJQ!aV|IJvG}So_e(pyj*1XwPY}=G^JC~O0 z$4->cqEEc4PfC1$bAg5Jj?}{%llNA!dXznz<=_44X*-vmf2BE(&$J$tkN21Hpos1v zI2{Ei-h8&uy~(Dpf1#y_?fg1a^AUEF8z#TV!oMVMu0 zv6?N%YXHQ4HCsE&9GvHZJ*m*X#`UBlYqFKcwrjGrPIx9~PBvnsn@2q7oRL%8UA4K& z_p03E=I7Izaz54_{kFCejPuh3>3X9L8Od&OO%mjMxu&V-`cm%6uY;+Gl;wM##A&6lp^5(hYm@kK zS2Y{&w8IK*{{U8*>CID&^0g$5=A8ckciOduX9`U|p(=NhAsl}W0O?DUj*8yC)ZVe5 z;pv0xP9x^&g1*(oxuBa!^xNw~3>!VUMK)<{x-fa{%X2{3Gvlq(3gv^8OU&<%m0YG}ptkH{R^DuE~f-*MlVWMQ}Obrm7n&7I%lU6iF|c24H^hOXJK(lo~6ag)#U zuUYWkmpo7`-gI!TI*7A_{yqNy3h^yA>+IJ%mDzTY&U#m`cvD_^bfy0QOmE&sbCfNd z5Pzk9@8OU7xi9i&!v^!iDA3f+PY7O^ZB}l z?=nXIEN2zVKR`0Qay$Fi!EwfD@fnoVUW?53a(XH>7x@j4dvojSQ1z2yPu^j4}Ji zpQQxz5`W8F9%z+EZ=2iFhJDg@`Fqo3Z!ny7ZfGPEmHwlx8N`6D?DV8^S$=N*y{SOK z``>}Az%Vzr-uaJu2+3ZZalxZIRIm4V6b8rM>+9)N%ok&DS=2Ay#~jm$-7otm`O{g7 zx3AKiM&;wznrW4%P(|FlD8)z@YOiW&`|a;SKIU!RMn5X9ZsDN0{oXoc)57zg?(xX! zNsRRC+JqP*=57b2bj95Uwlp~AxzdIgIX&3D7jQ;=}Si@zh1&r<|j$1W=#fbaMmhD>pFt>$o z+sXWWs~ouh0KR$8t$7?lQM_!_Qd;ynFe~>fQM{ALQJynVy6s+_`VQXpAl-wxyKzj% zE6HzhUpG_C?})~amid>bK~4iZfg5^pLkxZ=v8I+?$M1XdS*-?1Aiy7$HNfYe%8X#` zKVQSOIPg9DdQc?pG_TFbWbUQ7xw{FsVq||4am6H~ zW=C!h(wDG1urrDqgXv1`XcxH9Kz9ECYmC#OC6lM?Lvp|2O+0^l{`smUj&Xzj=)vNQ z83S>K#ShT&-}9#rE$dZ?ES{%dtr3r7_OnGq)ohs1WdXW8a+mP!}P2&jXr8e94S+k&KSD=pVD>z7^Fx zMHYeL%Y7S9({-Du7Jm|6{ia6H?ZX2r#}rIF#%0I=sbQWuqV^rGa6jyg)RFMZ_fPW` z_12T2{?GQ`w1>nS?+V{|cK5?Nu8f+e!~HwOt#F!lmvJt`EsgpA09ex7pEe{e+a(L; zXXjec@MpnK*|rOtTYY2VErr$Jj5HZd<-~iE*Fn@*Rk3iEpdn~?Tdm9r*B)X7kju`{ zq>P((9j&SHx_rM(9+c%9N8Qh;$4dIc;#a}%*}(id(r>i?03S7uqo>lfMupTuBp8&Oa-N$wX?hATF=i}x|K zaH9FkFPJ>=F^pvnGI}E^B6*LIWBEtjUO6Mz(zZM~r!~-T^(&5Y#PRu8w0vFoC-76l zIu+D@ANZGbeXAW-%Li$>wXw6FTd3}1J0U}HEvSMQGNDwJZV;j`HQRWD!C$lIfbG0L z;rl-kU2ChU_~%4@b5w@u4aT3L8154GIHp*30@;c}LY;?Vki;DN*=8~nt0~k?`W*GC z^G3+|Ut72GuCd*EnxH=CLV4hx_4W^m{tN!izY^}X4MNA_B>od?4GpCG2m1B7x>Y~E zjJg2WA2UK&G=yOpax0ziFM+-Qc*Ec~hwN{)<yMSb z&Mk7;Dg$SdO<|Z~<5IUYQFLR=4NsS`@^jOgVlUnQ06bUH+Ar+y@FeNC8g8rca^l}y zhU(te?QvTy+Ip8;vnv3oWRW6kG>>-RANxiZ8&)UZoAImQC&AAHcu&MlqWng@)qF<{ zoOgO{lDrdJ#NtF*Ev1zg_p&r>&aWO7cHy#X&Z#HV-8Inp;BY_AX*Okludi?EUvl{S z_DuLU@e{!po;K5bO``ZKN73{fAhs5F0`@z5=2iJ_XUS`(m#FfRIRI~+5amaoc-!F@ zz}+WF@l-axG_}^XIPK<_M{5@QBvN0=6@<~QWCV*yyz8rQgqAOC@4ssVTyFP4b=3KM zov-*}hW+Qu{o3C6k*sMt--%jH7elx3{hV7?bL}{&aa;er?TxN8MgMdeO`rz&OtYXN(#H43c)PI0lfP zZ_}kIVgdQTN|HwB1P_}y=iZT|=jF~QRo*zs&pfprTFi1!w@PBToYopbkl&>Do8!(~Qs#Wyg}9ztesP&#lQNuC3#nTX{rp4Xid1$dQA!UO63!b#e2)R4~Hr7$+md z!(@NG>sDZhPMbk0eRpwPm|0Jr=)$61Pi%(A_I}betv*RLFCS}`4SxsP(px3Bk}E+v znMwtG7if2ISYeL@^{8+BIq(+d+3z9oH;$|%x*lR#CYrMSk-V6hqYTF-1kEgH#Fi-< zmd0zvW=*blF5gTVh?Z$N>C>%ch?8?|l^FZBS3MWvwV%S#;VW7E8F}L=HK`d==F3xt zHMM~PV6w=+Gcjc?w*Ubk13NN&;opp7JoA(E>rQ`|e7{4AZ$i1xTH}`GY$x4pbosN6 z#*#L`8-@-EJaweU1EYRDC?gH`zZ~_X1B(GJ?!yQ4q<_8lx#~Hj`^TJv_39~4ExYCU zXdf#DZLQZ7sDAhKrek3Fh+)_PM^tR|>^&$KsOhvxFGv`dE3V$$v>urf&mw|5cU+{Pkd zEHW~{7`sAZkdS2vJ{9rSfv5Oe$6Dr>rRvf6i%Zh=3GFQPOLz=%YEZ``Do&_LDkM-G zDI|^EO&s85NV$)9y(&ra8YrL$(4U(eaheAqPe9!<+KMPDTMi>^jk}gBoY5*^44m#i z(uyh;D z1o@-KYMM7HoKZz}VcS#CDr`c|&ffn3N{!cQ{{Xr_Iw-D6l5V3+A+VeH{{TL;iZ;ph zBz}}pT)j#ff7K6RnoQ-?H#r%iil~zzQMWPt`g%~~DgN&wiYkd5M(%%#fH5O4d;^*& zpa!|ymh8Y}SE7E-U$sw;e`OCDU2A>>@h-XHjY9I>t>>FdylZJDPO2G)P#Xtn;NprX zGSwz~0>eMuwLofi7;SkWc8lm+?O*x WlXlm}(m^DgvFo0`^ifF3AOG3HQa;fD literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/5f30c0f4-68c4-4784-b488-c773067db828.jpg b/XYZStore/wwwroot/images/products/5f30c0f4-68c4-4784-b488-c773067db828.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93d04a9bb54d469199d67716760ca0efd75961d5 GIT binary patch literal 43229 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 YZowgcBbtZf|LoiUfA5rOZv316A0v+dYXATM literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/68ff54e6-fb4f-4ddd-839e-f8cebe1ff1c6.jpg b/XYZStore/wwwroot/images/products/68ff54e6-fb4f-4ddd-839e-f8cebe1ff1c6.jpg deleted file mode 100644 index 93a7b0ad48e1b9d83ea39ee771ce47dcae617600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78656 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 diff --git a/XYZStore/wwwroot/images/products/6ebb3ad7-4b97-4edb-b5b1-c14c574e7da7.jpg b/XYZStore/wwwroot/images/products/6ebb3ad7-4b97-4edb-b5b1-c14c574e7da7.jpg deleted file mode 100644 index 5c552a143b60519bff0950980f777a26b19c1a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189229 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

16YqSWvk-WJ9yR2;3#p?)bj7@DgRj;8 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%0DM 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 X-nvaDG?r;2kwYqu0qxB+OF#eF=n1Az diff --git a/XYZStore/wwwroot/js/product.js b/XYZStore/wwwroot/js/product.js index f754dd7..f49e39b 100644 --- a/XYZStore/wwwroot/js/product.js +++ b/XYZStore/wwwroot/js/product.js @@ -24,7 +24,7 @@ function loadDataTable() { Edit

` @@ -50,6 +50,7 @@ function Delete(url) { type: 'DELETE', success: function (data) { if (data.success) { + dataTable.ajax.reload(); toastr.success(data.message); } else { From 18528bb3303437bf63d5b46bcd24a8f3ec676087 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Thu, 8 Sep 2022 15:11:01 +0200 Subject: [PATCH 02/12] IdentityUser and more --- .../Data/ApplicationDbContext.cs | 6 +- ...220908124304_AddedIdentityToDb.Designer.cs | 400 ++++++++++++++++ .../20220908124304_AddedIdentityToDb.cs | 221 +++++++++ ...20908130411_extendIdentityUser.Designer.cs | 429 ++++++++++++++++++ .../20220908130411_extendIdentityUser.cs | 76 ++++ .../ApplicationDbContextModelSnapshot.cs | 282 ++++++++++++ .../XYZStore.DataAccess.csproj | 1 + XYZStore.Models/ApplicationUser.cs | 20 + XYZStore.Models/Models/ShoppingCart.cs | 16 + XYZStore.Models/ViewModels/ShoppingCart.cs | 16 - XYZStore.Models/XYZStore.Models.csproj | 1 + .../Customer/Controllers/HomeController.cs | 11 +- .../Areas/Customer/Views/Home/Details.cshtml | 79 ++++ .../Pages/Account/AccessDenied.cshtml | 10 + .../Pages/Account/AccessDenied.cshtml.cs | 23 + .../Pages/Account/ConfirmEmail.cshtml | 8 + .../Pages/Account/ConfirmEmail.cshtml.cs | 51 +++ .../Pages/Account/ConfirmEmailChange.cshtml | 8 + .../Account/ConfirmEmailChange.cshtml.cs | 69 +++ .../Pages/Account/ExternalLogin.cshtml | 33 ++ .../Pages/Account/ExternalLogin.cshtml.cs | 223 +++++++++ .../Pages/Account/ForgotPassword.cshtml | 26 ++ .../Pages/Account/ForgotPassword.cshtml.cs | 84 ++++ .../Account/ForgotPasswordConfirmation.cshtml | 10 + .../ForgotPasswordConfirmation.cshtml.cs | 25 + .../Identity/Pages/Account/Lockout.cshtml | 10 + .../Identity/Pages/Account/Lockout.cshtml.cs | 25 + .../Areas/Identity/Pages/Account/Login.cshtml | 85 ++++ .../Identity/Pages/Account/Login.cshtml.cs | 140 ++++++ .../Pages/Account/LoginWith2fa.cshtml | 41 ++ .../Pages/Account/LoginWith2fa.cshtml.cs | 131 ++++++ .../Account/LoginWithRecoveryCode.cshtml | 29 ++ .../Account/LoginWithRecoveryCode.cshtml.cs | 112 +++++ .../Identity/Pages/Account/Logout.cshtml | 21 + .../Identity/Pages/Account/Logout.cshtml.cs | 42 ++ .../Account/Manage/ChangePassword.cshtml | 36 ++ .../Account/Manage/ChangePassword.cshtml.cs | 127 ++++++ .../Account/Manage/DeletePersonalData.cshtml | 33 ++ .../Manage/DeletePersonalData.cshtml.cs | 103 +++++ .../Pages/Account/Manage/Disable2fa.cshtml | 25 + .../Pages/Account/Manage/Disable2fa.cshtml.cs | 69 +++ .../Manage/DownloadPersonalData.cshtml | 12 + .../Manage/DownloadPersonalData.cshtml.cs | 67 +++ .../Pages/Account/Manage/Email.cshtml | 44 ++ .../Pages/Account/Manage/Email.cshtml.cs | 171 +++++++ .../Account/Manage/EnableAuthenticator.cshtml | 53 +++ .../Manage/EnableAuthenticator.cshtml.cs | 188 ++++++++ .../Account/Manage/ExternalLogins.cshtml | 53 +++ .../Account/Manage/ExternalLogins.cshtml.cs | 141 ++++++ .../Manage/GenerateRecoveryCodes.cshtml | 27 ++ .../Manage/GenerateRecoveryCodes.cshtml.cs | 82 ++++ .../Pages/Account/Manage/Index.cshtml | 30 ++ .../Pages/Account/Manage/Index.cshtml.cs | 118 +++++ .../Pages/Account/Manage/ManageNavPages.cs | 123 +++++ .../Pages/Account/Manage/PersonalData.cshtml | 27 ++ .../Account/Manage/PersonalData.cshtml.cs | 36 ++ .../Account/Manage/ResetAuthenticator.cshtml | 24 + .../Manage/ResetAuthenticator.cshtml.cs | 67 +++ .../Pages/Account/Manage/SetPassword.cshtml | 35 ++ .../Account/Manage/SetPassword.cshtml.cs | 114 +++++ .../Account/Manage/ShowRecoveryCodes.cshtml | 25 + .../Manage/ShowRecoveryCodes.cshtml.cs | 46 ++ .../Manage/TwoFactorAuthentication.cshtml | 71 +++ .../Manage/TwoFactorAuthentication.cshtml.cs | 89 ++++ .../Pages/Account/Manage/_Layout.cshtml | 29 ++ .../Pages/Account/Manage/_ManageNav.cshtml | 15 + .../Account/Manage/_StatusMessage.cshtml | 10 + .../Pages/Account/Manage/_ViewImports.cshtml | 1 + .../Identity/Pages/Account/Register.cshtml | 67 +++ .../Identity/Pages/Account/Register.cshtml.cs | 180 ++++++++ .../Pages/Account/RegisterConfirmation.cshtml | 23 + .../Account/RegisterConfirmation.cshtml.cs | 79 ++++ .../Account/ResendEmailConfirmation.cshtml | 26 ++ .../Account/ResendEmailConfirmation.cshtml.cs | 88 ++++ .../Pages/Account/ResetPassword.cshtml | 37 ++ .../Pages/Account/ResetPassword.cshtml.cs | 117 +++++ .../Account/ResetPasswordConfirmation.cshtml | 10 + .../ResetPasswordConfirmation.cshtml.cs | 25 + .../Pages/Account/_StatusMessage.cshtml | 10 + .../Pages/Account/_ViewImports.cshtml | 1 + XYZStore/Areas/Identity/Pages/Error.cshtml | 23 + XYZStore/Areas/Identity/Pages/Error.cshtml.cs | 41 ++ .../Pages/_ValidationScriptsPartial.cshtml | 18 + .../Areas/Identity/Pages/_ViewImports.cshtml | 4 + .../Areas/Identity/Pages/_ViewStart.cshtml | 4 + XYZStore/Program.cs | 7 +- XYZStore/Views/Shared/_Layout.cshtml | 6 +- XYZStore/Views/Shared/_LoginPartial.cshtml | 27 ++ XYZStore/XYZStore.csproj | 2 + XYZStore/appsettings.json | 5 +- 90 files changed, 5630 insertions(+), 25 deletions(-) create mode 100644 XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.cs create mode 100644 XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.cs create mode 100644 XYZStore.Models/ApplicationUser.cs create mode 100644 XYZStore.Models/Models/ShoppingCart.cs delete mode 100644 XYZStore.Models/ViewModels/ShoppingCart.cs create mode 100644 XYZStore/Areas/Customer/Views/Home/Details.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Login.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Login.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Logout.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Logout.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/_Layout.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Register.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/Account/_StatusMessage.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Account/_ViewImports.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Error.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/Error.cshtml.cs create mode 100644 XYZStore/Areas/Identity/Pages/_ValidationScriptsPartial.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/_ViewImports.cshtml create mode 100644 XYZStore/Areas/Identity/Pages/_ViewStart.cshtml create mode 100644 XYZStore/Views/Shared/_LoginPartial.cshtml diff --git a/XYZStore.DataAccess/Data/ApplicationDbContext.cs b/XYZStore.DataAccess/Data/ApplicationDbContext.cs index 221f232..865d675 100644 --- a/XYZStore.DataAccess/Data/ApplicationDbContext.cs +++ b/XYZStore.DataAccess/Data/ApplicationDbContext.cs @@ -1,11 +1,12 @@ -using Microsoft.EntityFrameworkCore; +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using XYZStore.DataAccess; using XYZStore.Models; using XYZStore.Models.Models; namespace XYZStore.DataAccess; -public class ApplicationDbContext : DbContext +public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptionsoptions) : base(options) { @@ -14,4 +15,5 @@ public ApplicationDbContext(DbContextOptionsoptions) : bas public DbSetCategories { get; set; } public DbSetCoverType { get; set; } public DbSetProducts { get; set; } + public DbSet ApplicationUsers { get; set; } } diff --git a/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.Designer.cs b/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.Designer.cs new file mode 100644 index 0000000..7c9aed0 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.Designer.cs @@ -0,0 +1,400 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220908124304_AddedIdentityToDb")] + partial class AddedIdentityToDb + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.cs b/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.cs new file mode 100644 index 0000000..c94129b --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220908124304_AddedIdentityToDb.cs @@ -0,0 +1,221 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class AddedIdentityToDb : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column(type: "nvarchar(450)", nullable: false), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + EmailConfirmed = table.Column(type: "bit", nullable: false), + PasswordHash = table.Column(type: "nvarchar(max)", nullable: true), + SecurityStamp = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(max)", nullable: true), + PhoneNumber = table.Column(type: "nvarchar(max)", nullable: true), + PhoneNumberConfirmed = table.Column(type: "bit", nullable: false), + TwoFactorEnabled = table.Column(type: "bit", nullable: false), + LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), + LockoutEnabled = table.Column(type: "bit", nullable: false), + AccessFailedCount = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + RoleId = table.Column(type: "nvarchar(450)", nullable: false), + ClaimType = table.Column(type: "nvarchar(max)", nullable: true), + ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetRoleClaims_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserClaims", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + UserId = table.Column(type: "nvarchar(450)", nullable: false), + ClaimType = table.Column(type: "nvarchar(max)", nullable: true), + ClaimValue = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AspNetUserClaims_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserLogins", + columns: table => new + { + LoginProvider = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderKey = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderDisplayName = table.Column(type: "nvarchar(max)", nullable: true), + UserId = table.Column(type: "nvarchar(450)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey }); + table.ForeignKey( + name: "FK_AspNetUserLogins_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserRoles", + columns: table => new + { + UserId = table.Column(type: "nvarchar(450)", nullable: false), + RoleId = table.Column(type: "nvarchar(450)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetRoles_RoleId", + column: x => x.RoleId, + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AspNetUserRoles_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AspNetUserTokens", + columns: table => new + { + UserId = table.Column(type: "nvarchar(450)", nullable: false), + LoginProvider = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AspNetUserTokens_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AspNetRoleClaims_RoleId", + table: "AspNetRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "RoleNameIndex", + table: "AspNetRoles", + column: "NormalizedName", + unique: true, + filter: "[NormalizedName] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserClaims_UserId", + table: "AspNetUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserLogins_UserId", + table: "AspNetUserLogins", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUserRoles_RoleId", + table: "AspNetUserRoles", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "EmailIndex", + table: "AspNetUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "UserNameIndex", + table: "AspNetUsers", + column: "NormalizedUserName", + unique: true, + filter: "[NormalizedUserName] IS NOT NULL"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AspNetRoleClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserClaims"); + + migrationBuilder.DropTable( + name: "AspNetUserLogins"); + + migrationBuilder.DropTable( + name: "AspNetUserRoles"); + + migrationBuilder.DropTable( + name: "AspNetUserTokens"); + + migrationBuilder.DropTable( + name: "AspNetRoles"); + + migrationBuilder.DropTable( + name: "AspNetUsers"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.Designer.cs b/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.Designer.cs new file mode 100644 index 0000000..acab724 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.Designer.cs @@ -0,0 +1,429 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220908130411_extendIdentityUser")] + partial class extendIdentityUser + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.cs b/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.cs new file mode 100644 index 0000000..1e072f5 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220908130411_extendIdentityUser.cs @@ -0,0 +1,76 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class extendIdentityUser : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "City", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Discriminator", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "Name", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "PostalCode", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "State", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "StreetAddress", + table: "AspNetUsers", + type: "nvarchar(max)", + nullable: true); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "City", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "Discriminator", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "Name", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "PostalCode", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "State", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "StreetAddress", + table: "AspNetUsers"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs index e6f4cb1..20514d2 100644 --- a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs @@ -22,6 +22,214 @@ protected override void BuildModel(ModelBuilder modelBuilder) SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + modelBuilder.Entity("XYZStore.Models.Category", b => { b.Property("Id") @@ -121,6 +329,80 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Products"); }); + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("XYZStore.Models.Models.Product", b => { b.HasOne("XYZStore.Models.Category", "Category") diff --git a/XYZStore.DataAccess/XYZStore.DataAccess.csproj b/XYZStore.DataAccess/XYZStore.DataAccess.csproj index 474f5bf..4695e15 100644 --- a/XYZStore.DataAccess/XYZStore.DataAccess.csproj +++ b/XYZStore.DataAccess/XYZStore.DataAccess.csproj @@ -7,6 +7,7 @@ + diff --git a/XYZStore.Models/ApplicationUser.cs b/XYZStore.Models/ApplicationUser.cs new file mode 100644 index 0000000..a10238f --- /dev/null +++ b/XYZStore.Models/ApplicationUser.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Identity; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Models +{ + public class ApplicationUser : IdentityUser + { + [Required] + public string Name { get; set; } + public string? StreetAddress { get; set; } + public string? City { get; set; } + public string? State { get; set; } + public string? PostalCode { get; set; } + } +} diff --git a/XYZStore.Models/Models/ShoppingCart.cs b/XYZStore.Models/Models/ShoppingCart.cs new file mode 100644 index 0000000..64f0a76 --- /dev/null +++ b/XYZStore.Models/Models/ShoppingCart.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Models.Models +{ + public class ShoppingCart + { + public Product Product { get; set; } + [Range(1, 1000, ErrorMessage = "Please enter a value between 1 and 1000")] + public int Count { get; set; } + } +} diff --git a/XYZStore.Models/ViewModels/ShoppingCart.cs b/XYZStore.Models/ViewModels/ShoppingCart.cs deleted file mode 100644 index ae8561a..0000000 --- a/XYZStore.Models/ViewModels/ShoppingCart.cs +++ /dev/null @@ -1,16 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.ComponentModel.DataAnnotations; -//using System.Linq; -//using System.Text; -//using System.Threading.Tasks; - -//namespace XYZStore.Models.ViewModels -//{ -// public class ShoppingCart -// { -// public Product Product { get; set; } -// [Range(1,1000,ErrorMessage ="Please enter a value between 1 and 1000")] -// public int Count { get; set; } -// } -//} diff --git a/XYZStore.Models/XYZStore.Models.csproj b/XYZStore.Models/XYZStore.Models.csproj index 91d6605..f768985 100644 --- a/XYZStore.Models/XYZStore.Models.csproj +++ b/XYZStore.Models/XYZStore.Models.csproj @@ -10,6 +10,7 @@ + diff --git a/XYZStore/Areas/Customer/Controllers/HomeController.cs b/XYZStore/Areas/Customer/Controllers/HomeController.cs index fb9ae84..f5d4721 100644 --- a/XYZStore/Areas/Customer/Controllers/HomeController.cs +++ b/XYZStore/Areas/Customer/Controllers/HomeController.cs @@ -3,7 +3,6 @@ using XYZStore.DataAccess.Repository.IRepository; using XYZStore.Models; using XYZStore.Models.Models; -using XYZStore.Models.ViewModels; namespace XYZStore.Areas.Customer.Controllers; @@ -25,6 +24,16 @@ public IActionResult Index() return View(productList); } + public IActionResult Details(int id) + { + ShoppingCart cartObj = new() + { + Count = 1, + Product = _unitOfWork.Product.GetFirstOrDefault(u => u.Id == id, includeProperties: "Category,CoverType") + }; + return View(cartObj); + } + public IActionResult Privacy() { return View(); diff --git a/XYZStore/Areas/Customer/Views/Home/Details.cshtml b/XYZStore/Areas/Customer/Views/Home/Details.cshtml new file mode 100644 index 0000000..37245df --- /dev/null +++ b/XYZStore/Areas/Customer/Views/Home/Details.cshtml @@ -0,0 +1,79 @@ +@model XYZStore.Models.Models.ShoppingCart + +
+
+
+
+

@Model.Product.Title

+

By @Model.Product.Director

+
+
+ @Model.Product.CoverType.Name + @Model.Product.Category.Name +
+
+
+
+
+
+
+
IMDB : @Model.Product.IMDB
+
+
+
List Price: @Model.Product.ListPrice.ToString("c")
+
+
+
+
Quantity
+
+
+
1-5
+
+
+
6-10
+
+
+
100+
+
+
+
+
+
Price
+
+
+
@Model.Product.Price5.ToString("c")
+
+
+
@Model.Product.Price10.ToString("c")
+
+
+
@Model.Product.ListPrice.ToString("c")
+
+
+
+

@Model.Product.Description

+
+
+

Count

+
+
+
+
+ +
+
+
+
+ +
+
+ diff --git a/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml b/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml new file mode 100644 index 0000000..017f6ff --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml @@ -0,0 +1,10 @@ +@page +@model AccessDeniedModel +@{ + ViewData["Title"] = "Access denied"; +} + +
+

@ViewData["Title"]

+

You do not have access to this resource.

+
diff --git a/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs new file mode 100644 index 0000000..4a57ae1 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/AccessDenied.cshtml.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class AccessDeniedModel : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public void OnGet() + { + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml new file mode 100644 index 0000000..2deb2e5 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml @@ -0,0 +1,8 @@ +@page +@model ConfirmEmailModel +@{ + ViewData["Title"] = "Confirm email"; +} + +

@ViewData["Title"]

+ diff --git a/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs new file mode 100644 index 0000000..d30a365 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmail.cshtml.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class ConfirmEmailModel : PageModel + { + private readonly UserManager _userManager; + + public ConfirmEmailModel(UserManager userManager) + { + _userManager = userManager; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + public async Task OnGetAsync(string userId, string code) + { + if (userId == null || code == null) + { + return RedirectToPage("/Index"); + } + + var user = await _userManager.FindByIdAsync(userId); + if (user == null) + { + return NotFound($"Unable to load user with ID '{userId}'."); + } + + code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code)); + var result = await _userManager.ConfirmEmailAsync(user, code); + StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email."; + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml new file mode 100644 index 0000000..114fa88 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml @@ -0,0 +1,8 @@ +@page +@model ConfirmEmailChangeModel +@{ + ViewData["Title"] = "Confirm email change"; +} + +

@ViewData["Title"]

+ diff --git a/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml.cs new file mode 100644 index 0000000..b0f0f47 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ConfirmEmailChange.cshtml.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class ConfirmEmailChangeModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + + public ConfirmEmailChangeModel(UserManager userManager, SignInManager signInManager) + { + _userManager = userManager; + _signInManager = signInManager; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGetAsync(string userId, string email, string code) + { + if (userId == null || email == null || code == null) + { + return RedirectToPage("/Index"); + } + + var user = await _userManager.FindByIdAsync(userId); + if (user == null) + { + return NotFound($"Unable to load user with ID '{userId}'."); + } + + code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code)); + var result = await _userManager.ChangeEmailAsync(user, email, code); + if (!result.Succeeded) + { + StatusMessage = "Error changing email."; + return Page(); + } + + // In our UI email and user name are one and the same, so when we update the email + // we need to update the user name. + var setUserNameResult = await _userManager.SetUserNameAsync(user, email); + if (!setUserNameResult.Succeeded) + { + StatusMessage = "Error changing user name."; + return Page(); + } + + await _signInManager.RefreshSignInAsync(user); + StatusMessage = "Thank you for confirming your email change."; + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml b/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml new file mode 100644 index 0000000..9f75374 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml @@ -0,0 +1,33 @@ +@page +@model ExternalLoginModel +@{ + ViewData["Title"] = "Register"; +} + +

@ViewData["Title"]

+

Associate your @Model.ProviderDisplayName account.

+
+ +

+ You've successfully authenticated with @Model.ProviderDisplayName. + Please enter an email address for this site below and click the Register button to finish + logging in. +

+ +
+
+
+
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs new file mode 100644 index 0000000..554b6fb --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ExternalLogin.cshtml.cs @@ -0,0 +1,223 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Security.Claims; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Options; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + [AllowAnonymous] + public class ExternalLoginModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly IUserStore _userStore; + private readonly IUserEmailStore _emailStore; + private readonly IEmailSender _emailSender; + private readonly ILogger _logger; + + public ExternalLoginModel( + SignInManager signInManager, + UserManager userManager, + IUserStore userStore, + ILogger logger, + IEmailSender emailSender) + { + _signInManager = signInManager; + _userManager = userManager; + _userStore = userStore; + _emailStore = GetEmailStore(); + _logger = logger; + _emailSender = emailSender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ProviderDisplayName { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ReturnUrl { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string ErrorMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + public string Email { get; set; } + } + + public IActionResult OnGet() => RedirectToPage("./Login"); + + public IActionResult OnPost(string provider, string returnUrl = null) + { + // Request a redirect to the external login provider. + var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl }); + var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); + return new ChallengeResult(provider, properties); + } + + public async Task OnGetCallbackAsync(string returnUrl = null, string remoteError = null) + { + returnUrl = returnUrl ?? Url.Content("~/"); + if (remoteError != null) + { + ErrorMessage = $"Error from external provider: {remoteError}"; + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); + } + var info = await _signInManager.GetExternalLoginInfoAsync(); + if (info == null) + { + ErrorMessage = "Error loading external login information."; + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); + } + + // Sign in the user with this external login provider if the user already has a login. + var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor: true); + if (result.Succeeded) + { + _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider); + return LocalRedirect(returnUrl); + } + if (result.IsLockedOut) + { + return RedirectToPage("./Lockout"); + } + else + { + // If the user does not have an account, then ask the user to create an account. + ReturnUrl = returnUrl; + ProviderDisplayName = info.ProviderDisplayName; + if (info.Principal.HasClaim(c => c.Type == ClaimTypes.Email)) + { + Input = new InputModel + { + Email = info.Principal.FindFirstValue(ClaimTypes.Email) + }; + } + return Page(); + } + } + + public async Task OnPostConfirmationAsync(string returnUrl = null) + { + returnUrl = returnUrl ?? Url.Content("~/"); + // Get the information about the user from the external login provider + var info = await _signInManager.GetExternalLoginInfoAsync(); + if (info == null) + { + ErrorMessage = "Error loading external login information during confirmation."; + return RedirectToPage("./Login", new { ReturnUrl = returnUrl }); + } + + if (ModelState.IsValid) + { + var user = CreateUser(); + + await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None); + await _emailStore.SetEmailAsync(user, Input.Email, CancellationToken.None); + + var result = await _userManager.CreateAsync(user); + if (result.Succeeded) + { + result = await _userManager.AddLoginAsync(user, info); + if (result.Succeeded) + { + _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider); + + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { area = "Identity", userId = userId, code = code }, + protocol: Request.Scheme); + + await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", + $"Please confirm your account by clicking here."); + + // If account confirmation is required, we need to show the link if we don't have a real email sender + if (_userManager.Options.SignIn.RequireConfirmedAccount) + { + return RedirectToPage("./RegisterConfirmation", new { Email = Input.Email }); + } + + await _signInManager.SignInAsync(user, isPersistent: false, info.LoginProvider); + return LocalRedirect(returnUrl); + } + } + foreach (var error in result.Errors) + { + ModelState.AddModelError(string.Empty, error.Description); + } + } + + ProviderDisplayName = info.ProviderDisplayName; + ReturnUrl = returnUrl; + return Page(); + } + + private IdentityUser CreateUser() + { + try + { + return Activator.CreateInstance(); + } + catch + { + throw new InvalidOperationException($"Can't create an instance of '{nameof(IdentityUser)}'. " + + $"Ensure that '{nameof(IdentityUser)}' is not an abstract class and has a parameterless constructor, or alternatively " + + $"override the external login page in /Areas/Identity/Pages/Account/ExternalLogin.cshtml"); + } + } + + private IUserEmailStore GetEmailStore() + { + if (!_userManager.SupportsUserEmail) + { + throw new NotSupportedException("The default UI requires a user store with email support."); + } + return (IUserEmailStore)_userStore; + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml b/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml new file mode 100644 index 0000000..43aa112 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml @@ -0,0 +1,26 @@ +@page +@model ForgotPasswordModel +@{ + ViewData["Title"] = "Forgot your password?"; +} + +

@ViewData["Title"]

+

Enter your email.

+
+
+
+
+
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs new file mode 100644 index 0000000..0c83f12 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ForgotPassword.cshtml.cs @@ -0,0 +1,84 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class ForgotPasswordModel : PageModel + { + private readonly UserManager _userManager; + private readonly IEmailSender _emailSender; + + public ForgotPasswordModel(UserManager userManager, IEmailSender emailSender) + { + _userManager = userManager; + _emailSender = emailSender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + public string Email { get; set; } + } + + public async Task OnPostAsync() + { + if (ModelState.IsValid) + { + var user = await _userManager.FindByEmailAsync(Input.Email); + if (user == null || !(await _userManager.IsEmailConfirmedAsync(user))) + { + // Don't reveal that the user does not exist or is not confirmed + return RedirectToPage("./ForgotPasswordConfirmation"); + } + + // For more information on how to enable account confirmation and password reset please + // visit https://go.microsoft.com/fwlink/?LinkID=532713 + var code = await _userManager.GeneratePasswordResetTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ResetPassword", + pageHandler: null, + values: new { area = "Identity", code }, + protocol: Request.Scheme); + + await _emailSender.SendEmailAsync( + Input.Email, + "Reset Password", + $"Please reset your password by clicking here."); + + return RedirectToPage("./ForgotPasswordConfirmation"); + } + + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml b/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml new file mode 100644 index 0000000..4f5ae99 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml @@ -0,0 +1,10 @@ +@page +@model ForgotPasswordConfirmation +@{ + ViewData["Title"] = "Forgot password confirmation"; +} + +

@ViewData["Title"]

+

+ Please check your email to reset your password. +

diff --git a/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs new file mode 100644 index 0000000..171cd53 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ForgotPasswordConfirmation.cshtml.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [AllowAnonymous] + public class ForgotPasswordConfirmation : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public void OnGet() + { + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml b/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml new file mode 100644 index 0000000..4eded88 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml @@ -0,0 +1,10 @@ +@page +@model LockoutModel +@{ + ViewData["Title"] = "Locked out"; +} + +
+

@ViewData["Title"]

+

This account has been locked out, please try again later.

+
diff --git a/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml.cs new file mode 100644 index 0000000..3f5ce65 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Lockout.cshtml.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [AllowAnonymous] + public class LockoutModel : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public void OnGet() + { + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Login.cshtml b/XYZStore/Areas/Identity/Pages/Account/Login.cshtml new file mode 100644 index 0000000..dc4511e --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Login.cshtml @@ -0,0 +1,85 @@ +@page +@model LoginModel + +@{ + ViewData["Title"] = "Log in"; +} + +

@ViewData["Title"]

+
+
+
+
+

Use a local account to log in.

+
+
+
+ + + +
+
+ + + +
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+

Use another service to log in.

+
+ @{ + if ((Model.ExternalLogins?.Count ?? 0) == 0) + { +
+

+ There are no external authentication services configured. See this article + about setting up this ASP.NET application to support logging in via external services. +

+
+ } + else + { +
+
+

+ @foreach (var provider in Model.ExternalLogins) + { + + } +

+
+
+ } + } +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Login.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Login.cshtml.cs new file mode 100644 index 0000000..46fc8d0 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Login.cshtml.cs @@ -0,0 +1,140 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class LoginModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public LoginModel(SignInManager signInManager, ILogger logger) + { + _signInManager = signInManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public IList ExternalLogins { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ReturnUrl { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string ErrorMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + public string Email { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [DataType(DataType.Password)] + public string Password { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Display(Name = "Remember me?")] + public bool RememberMe { get; set; } + } + + public async Task OnGetAsync(string returnUrl = null) + { + if (!string.IsNullOrEmpty(ErrorMessage)) + { + ModelState.AddModelError(string.Empty, ErrorMessage); + } + + returnUrl ??= Url.Content("~/"); + + // Clear the existing external cookie to ensure a clean login process + await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); + + ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + + ReturnUrl = returnUrl; + } + + public async Task OnPostAsync(string returnUrl = null) + { + returnUrl ??= Url.Content("~/"); + + ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + + if (ModelState.IsValid) + { + // This doesn't count login failures towards account lockout + // To enable password failures to trigger account lockout, set lockoutOnFailure: true + var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false); + if (result.Succeeded) + { + _logger.LogInformation("User logged in."); + return LocalRedirect(returnUrl); + } + if (result.RequiresTwoFactor) + { + return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }); + } + if (result.IsLockedOut) + { + _logger.LogWarning("User account locked out."); + return RedirectToPage("./Lockout"); + } + else + { + ModelState.AddModelError(string.Empty, "Invalid login attempt."); + return Page(); + } + } + + // If we got this far, something failed, redisplay form + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml b/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml new file mode 100644 index 0000000..38088ed --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml @@ -0,0 +1,41 @@ +@page +@model LoginWith2faModel +@{ + ViewData["Title"] = "Two-factor authentication"; +} + +

@ViewData["Title"]

+
+

Your login is protected with an authenticator app. Enter your authenticator code below.

+
+
+
+ +
+
+ + + +
+
+
+ +
+
+
+ +
+
+
+
+

+ Don't have access to your authenticator device? You can + log in with a recovery code. +

+ +@section Scripts { + +} \ No newline at end of file diff --git a/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs new file mode 100644 index 0000000..175df79 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs @@ -0,0 +1,131 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class LoginWith2faModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public LoginWith2faModel( + SignInManager signInManager, + UserManager userManager, + ILogger logger) + { + _signInManager = signInManager; + _userManager = userManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool RememberMe { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ReturnUrl { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Text)] + [Display(Name = "Authenticator code")] + public string TwoFactorCode { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Display(Name = "Remember this machine")] + public bool RememberMachine { get; set; } + } + + public async Task OnGetAsync(bool rememberMe, string returnUrl = null) + { + // Ensure the user has gone through the username & password screen first + var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); + + if (user == null) + { + throw new InvalidOperationException($"Unable to load two-factor authentication user."); + } + + ReturnUrl = returnUrl; + RememberMe = rememberMe; + + return Page(); + } + + public async Task OnPostAsync(bool rememberMe, string returnUrl = null) + { + if (!ModelState.IsValid) + { + return Page(); + } + + returnUrl = returnUrl ?? Url.Content("~/"); + + var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); + if (user == null) + { + throw new InvalidOperationException($"Unable to load two-factor authentication user."); + } + + var authenticatorCode = Input.TwoFactorCode.Replace(" ", string.Empty).Replace("-", string.Empty); + + var result = await _signInManager.TwoFactorAuthenticatorSignInAsync(authenticatorCode, rememberMe, Input.RememberMachine); + + var userId = await _userManager.GetUserIdAsync(user); + + if (result.Succeeded) + { + _logger.LogInformation("User with ID '{UserId}' logged in with 2fa.", user.Id); + return LocalRedirect(returnUrl); + } + else if (result.IsLockedOut) + { + _logger.LogWarning("User with ID '{UserId}' account locked out.", user.Id); + return RedirectToPage("./Lockout"); + } + else + { + _logger.LogWarning("Invalid authenticator code entered for user with ID '{UserId}'.", user.Id); + ModelState.AddModelError(string.Empty, "Invalid authenticator code."); + return Page(); + } + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml b/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml new file mode 100644 index 0000000..b45cefe --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml @@ -0,0 +1,29 @@ +@page +@model LoginWithRecoveryCodeModel +@{ + ViewData["Title"] = "Recovery code verification"; +} + +

@ViewData["Title"]

+
+

+ You have requested to log in with a recovery code. This login will not be remembered until you provide + an authenticator app code at log in or disable 2FA and log in again. +

+
+
+
+
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} \ No newline at end of file diff --git a/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs new file mode 100644 index 0000000..ea310d3 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/LoginWithRecoveryCode.cshtml.cs @@ -0,0 +1,112 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class LoginWithRecoveryCodeModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public LoginWithRecoveryCodeModel( + SignInManager signInManager, + UserManager userManager, + ILogger logger) + { + _signInManager = signInManager; + _userManager = userManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ReturnUrl { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + [Required] + [DataType(DataType.Text)] + [Display(Name = "Recovery Code")] + public string RecoveryCode { get; set; } + } + + public async Task OnGetAsync(string returnUrl = null) + { + // Ensure the user has gone through the username & password screen first + var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); + if (user == null) + { + throw new InvalidOperationException($"Unable to load two-factor authentication user."); + } + + ReturnUrl = returnUrl; + + return Page(); + } + + public async Task OnPostAsync(string returnUrl = null) + { + if (!ModelState.IsValid) + { + return Page(); + } + + var user = await _signInManager.GetTwoFactorAuthenticationUserAsync(); + if (user == null) + { + throw new InvalidOperationException($"Unable to load two-factor authentication user."); + } + + var recoveryCode = Input.RecoveryCode.Replace(" ", string.Empty); + + var result = await _signInManager.TwoFactorRecoveryCodeSignInAsync(recoveryCode); + + var userId = await _userManager.GetUserIdAsync(user); + + if (result.Succeeded) + { + _logger.LogInformation("User with ID '{UserId}' logged in with a recovery code.", user.Id); + return LocalRedirect(returnUrl ?? Url.Content("~/")); + } + if (result.IsLockedOut) + { + _logger.LogWarning("User account locked out."); + return RedirectToPage("./Lockout"); + } + else + { + _logger.LogWarning("Invalid recovery code entered for user with ID '{UserId}' ", user.Id); + ModelState.AddModelError(string.Empty, "Invalid recovery code entered."); + return Page(); + } + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml b/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml new file mode 100644 index 0000000..09bdfef --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml @@ -0,0 +1,21 @@ +@page +@model LogoutModel +@{ + ViewData["Title"] = "Log out"; +} + +
+

@ViewData["Title"]

+ @{ + if (User.Identity.IsAuthenticated) + { +
+ +
+ } + else + { +

You have successfully logged out of the application.

+ } + } +
diff --git a/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml.cs new file mode 100644 index 0000000..0e77b85 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Logout.cshtml.cs @@ -0,0 +1,42 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class LogoutModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public LogoutModel(SignInManager signInManager, ILogger logger) + { + _signInManager = signInManager; + _logger = logger; + } + + public async Task OnPost(string returnUrl = null) + { + await _signInManager.SignOutAsync(); + _logger.LogInformation("User logged out."); + if (returnUrl != null) + { + return LocalRedirect(returnUrl); + } + else + { + // This needs to be a redirect so that the browser performs a new + // request and the identity for the user gets updated. + return RedirectToPage(); + } + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml new file mode 100644 index 0000000..d130b8e --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml @@ -0,0 +1,36 @@ +@page +@model ChangePasswordModel +@{ + ViewData["Title"] = "Change password"; + ViewData["ActivePage"] = ManageNavPages.ChangePassword; +} + +

@ViewData["Title"]

+ +
+
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs new file mode 100644 index 0000000..12cbd69 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ChangePassword.cshtml.cs @@ -0,0 +1,127 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class ChangePasswordModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public ChangePasswordModel( + UserManager userManager, + SignInManager signInManager, + ILogger logger) + { + _userManager = userManager; + _signInManager = signInManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [DataType(DataType.Password)] + [Display(Name = "Current password")] + public string OldPassword { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Password)] + [Display(Name = "New password")] + public string NewPassword { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [DataType(DataType.Password)] + [Display(Name = "Confirm new password")] + [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] + public string ConfirmPassword { get; set; } + } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var hasPassword = await _userManager.HasPasswordAsync(user); + if (!hasPassword) + { + return RedirectToPage("./SetPassword"); + } + + return Page(); + } + + public async Task OnPostAsync() + { + if (!ModelState.IsValid) + { + return Page(); + } + + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword); + if (!changePasswordResult.Succeeded) + { + foreach (var error in changePasswordResult.Errors) + { + ModelState.AddModelError(string.Empty, error.Description); + } + return Page(); + } + + await _signInManager.RefreshSignInAsync(user); + _logger.LogInformation("User changed their password successfully."); + StatusMessage = "Your password has been changed."; + + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml new file mode 100644 index 0000000..17f5a30 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml @@ -0,0 +1,33 @@ +@page +@model DeletePersonalDataModel +@{ + ViewData["Title"] = "Delete Personal Data"; + ViewData["ActivePage"] = ManageNavPages.PersonalData; +} + +

@ViewData["Title"]

+ + + +
+
+
+ @if (Model.RequirePassword) + { +
+ + + +
+ } + +
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs new file mode 100644 index 0000000..fd5bd42 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/DeletePersonalData.cshtml.cs @@ -0,0 +1,103 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class DeletePersonalDataModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public DeletePersonalDataModel( + UserManager userManager, + SignInManager signInManager, + ILogger logger) + { + _userManager = userManager; + _signInManager = signInManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [DataType(DataType.Password)] + public string Password { get; set; } + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool RequirePassword { get; set; } + + public async Task OnGet() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + RequirePassword = await _userManager.HasPasswordAsync(user); + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + RequirePassword = await _userManager.HasPasswordAsync(user); + if (RequirePassword) + { + if (!await _userManager.CheckPasswordAsync(user, Input.Password)) + { + ModelState.AddModelError(string.Empty, "Incorrect password."); + return Page(); + } + } + + var result = await _userManager.DeleteAsync(user); + var userId = await _userManager.GetUserIdAsync(user); + if (!result.Succeeded) + { + throw new InvalidOperationException($"Unexpected error occurred deleting user."); + } + + await _signInManager.SignOutAsync(); + + _logger.LogInformation("User with ID '{UserId}' deleted themselves.", userId); + + return Redirect("~/"); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml new file mode 100644 index 0000000..31ecb7e --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml @@ -0,0 +1,25 @@ +@page +@model Disable2faModel +@{ + ViewData["Title"] = "Disable two-factor authentication (2FA)"; + ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; +} + + +

@ViewData["Title"]

+ + + +
+
+ +
+
diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs new file mode 100644 index 0000000..4625c6b --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Disable2fa.cshtml.cs @@ -0,0 +1,69 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class Disable2faModel : PageModel + { + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public Disable2faModel( + UserManager userManager, + ILogger logger) + { + _userManager = userManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGet() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!await _userManager.GetTwoFactorEnabledAsync(user)) + { + throw new InvalidOperationException($"Cannot disable 2FA for user as it's not currently enabled."); + } + + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false); + if (!disable2faResult.Succeeded) + { + throw new InvalidOperationException($"Unexpected error occurred disabling 2FA."); + } + + _logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", _userManager.GetUserId(User)); + StatusMessage = "2fa has been disabled. You can reenable 2fa when you setup an authenticator app"; + return RedirectToPage("./TwoFactorAuthentication"); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml new file mode 100644 index 0000000..93f631f --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml @@ -0,0 +1,12 @@ +@page +@model DownloadPersonalDataModel +@{ + ViewData["Title"] = "Download Your Data"; + ViewData["ActivePage"] = ManageNavPages.PersonalData; +} + +

@ViewData["Title"]

+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs new file mode 100644 index 0000000..6accf4d --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/DownloadPersonalData.cshtml.cs @@ -0,0 +1,67 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class DownloadPersonalDataModel : PageModel + { + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public DownloadPersonalDataModel( + UserManager userManager, + ILogger logger) + { + _userManager = userManager; + _logger = logger; + } + + public IActionResult OnGet() + { + return NotFound(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + _logger.LogInformation("User with ID '{UserId}' asked for their personal data.", _userManager.GetUserId(User)); + + // Only include personal data for download + var personalData = new Dictionary(); + var personalDataProps = typeof(IdentityUser).GetProperties().Where( + prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute))); + foreach (var p in personalDataProps) + { + personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null"); + } + + var logins = await _userManager.GetLoginsAsync(user); + foreach (var l in logins) + { + personalData.Add($"{l.LoginProvider} external login provider key", l.ProviderKey); + } + + personalData.Add($"Authenticator Key", await _userManager.GetAuthenticatorKeyAsync(user)); + + Response.Headers.Add("Content-Disposition", "attachment; filename=PersonalData.json"); + return new FileContentResult(JsonSerializer.SerializeToUtf8Bytes(personalData), "application/json"); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml new file mode 100644 index 0000000..9464333 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml @@ -0,0 +1,44 @@ +@page +@model EmailModel +@{ + ViewData["Title"] = "Manage Email"; + ViewData["ActivePage"] = ManageNavPages.Email; +} + +

@ViewData["Title"]

+ +
+
+
+
+ @if (Model.IsEmailConfirmed) + { +
+ +
+ +
+ +
+ } + else + { +
+ + + +
+ } +
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml.cs new file mode 100644 index 0000000..2027679 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Email.cshtml.cs @@ -0,0 +1,171 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class EmailModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly IEmailSender _emailSender; + + public EmailModel( + UserManager userManager, + SignInManager signInManager, + IEmailSender emailSender) + { + _userManager = userManager; + _signInManager = signInManager; + _emailSender = emailSender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string Email { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool IsEmailConfirmed { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + [Display(Name = "New email")] + public string NewEmail { get; set; } + } + + private async Task LoadAsync(IdentityUser user) + { + var email = await _userManager.GetEmailAsync(user); + Email = email; + + Input = new InputModel + { + NewEmail = email, + }; + + IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user); + } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await LoadAsync(user); + return Page(); + } + + public async Task OnPostChangeEmailAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + + var email = await _userManager.GetEmailAsync(user); + if (Input.NewEmail != email) + { + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ConfirmEmailChange", + pageHandler: null, + values: new { area = "Identity", userId = userId, email = Input.NewEmail, code = code }, + protocol: Request.Scheme); + await _emailSender.SendEmailAsync( + Input.NewEmail, + "Confirm your email", + $"Please confirm your account by clicking here."); + + StatusMessage = "Confirmation link to change email sent. Please check your email."; + return RedirectToPage(); + } + + StatusMessage = "Your email is unchanged."; + return RedirectToPage(); + } + + public async Task OnPostSendVerificationEmailAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + + var userId = await _userManager.GetUserIdAsync(user); + var email = await _userManager.GetEmailAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { area = "Identity", userId = userId, code = code }, + protocol: Request.Scheme); + await _emailSender.SendEmailAsync( + email, + "Confirm your email", + $"Please confirm your account by clicking here."); + + StatusMessage = "Verification email sent. Please check your email."; + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml new file mode 100644 index 0000000..5bec220 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml @@ -0,0 +1,53 @@ +@page +@model EnableAuthenticatorModel +@{ + ViewData["Title"] = "Configure authenticator app"; + ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; +} + + +

@ViewData["Title"]

+
+

To use an authenticator app go through the following steps:

+
    +
  1. +

    + Download a two-factor authenticator app like Microsoft Authenticator for + Android and + iOS or + Google Authenticator for + Android and + iOS. +

    +
  2. +
  3. +

    Scan the QR Code or enter this key @Model.SharedKey into your two factor authenticator app. Spaces and casing do not matter.

    + +
    +
    +
  4. +
  5. +

    + Once you have scanned the QR code or input the key above, your two factor authentication app will provide you + with a unique code. Enter the code in the confirmation box below. +

    +
    +
    +
    +
    + + + +
    + +
    +
    +
    +
    +
  6. +
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs new file mode 100644 index 0000000..7514b8b --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs @@ -0,0 +1,188 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class EnableAuthenticatorModel : PageModel + { + private readonly UserManager _userManager; + private readonly ILogger _logger; + private readonly UrlEncoder _urlEncoder; + + private const string AuthenticatorUriFormat = "otpauth://totp/{0}:{1}?secret={2}&issuer={0}&digits=6"; + + public EnableAuthenticatorModel( + UserManager userManager, + ILogger logger, + UrlEncoder urlEncoder) + { + _userManager = userManager; + _logger = logger; + _urlEncoder = urlEncoder; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string SharedKey { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string AuthenticatorUri { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string[] RecoveryCodes { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(7, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Text)] + [Display(Name = "Verification Code")] + public string Code { get; set; } + } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await LoadSharedKeyAndQrCodeUriAsync(user); + + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadSharedKeyAndQrCodeUriAsync(user); + return Page(); + } + + // Strip spaces and hyphens + var verificationCode = Input.Code.Replace(" ", string.Empty).Replace("-", string.Empty); + + var is2faTokenValid = await _userManager.VerifyTwoFactorTokenAsync( + user, _userManager.Options.Tokens.AuthenticatorTokenProvider, verificationCode); + + if (!is2faTokenValid) + { + ModelState.AddModelError("Input.Code", "Verification code is invalid."); + await LoadSharedKeyAndQrCodeUriAsync(user); + return Page(); + } + + await _userManager.SetTwoFactorEnabledAsync(user, true); + var userId = await _userManager.GetUserIdAsync(user); + _logger.LogInformation("User with ID '{UserId}' has enabled 2FA with an authenticator app.", userId); + + StatusMessage = "Your authenticator app has been verified."; + + if (await _userManager.CountRecoveryCodesAsync(user) == 0) + { + var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10); + RecoveryCodes = recoveryCodes.ToArray(); + return RedirectToPage("./ShowRecoveryCodes"); + } + else + { + return RedirectToPage("./TwoFactorAuthentication"); + } + } + + private async Task LoadSharedKeyAndQrCodeUriAsync(IdentityUser user) + { + // Load the authenticator key & QR code URI to display on the form + var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); + if (string.IsNullOrEmpty(unformattedKey)) + { + await _userManager.ResetAuthenticatorKeyAsync(user); + unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user); + } + + SharedKey = FormatKey(unformattedKey); + + var email = await _userManager.GetEmailAsync(user); + AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey); + } + + private string FormatKey(string unformattedKey) + { + var result = new StringBuilder(); + int currentPosition = 0; + while (currentPosition + 4 < unformattedKey.Length) + { + result.Append(unformattedKey.AsSpan(currentPosition, 4)).Append(' '); + currentPosition += 4; + } + if (currentPosition < unformattedKey.Length) + { + result.Append(unformattedKey.AsSpan(currentPosition)); + } + + return result.ToString().ToLowerInvariant(); + } + + private string GenerateQrCodeUri(string email, string unformattedKey) + { + return string.Format( + CultureInfo.InvariantCulture, + AuthenticatorUriFormat, + _urlEncoder.Encode("Microsoft.AspNetCore.Identity.UI"), + _urlEncoder.Encode(email), + unformattedKey); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml new file mode 100644 index 0000000..7c397e5 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml @@ -0,0 +1,53 @@ +@page +@model ExternalLoginsModel +@{ + ViewData["Title"] = "Manage your external logins"; + ViewData["ActivePage"] = ManageNavPages.ExternalLogins; +} + + +@if (Model.CurrentLogins?.Count > 0) +{ +

Registered Logins

+ + + @foreach (var login in Model.CurrentLogins) + { + + + + + } + +
@login.ProviderDisplayName + @if (Model.ShowRemoveButton) + { +
+
+ + + +
+
+ } + else + { + @:   + } +
+} +@if (Model.OtherLogins?.Count > 0) +{ +

Add another service to log in.

+
+ +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs new file mode 100644 index 0000000..2c296a4 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ExternalLogins.cshtml.cs @@ -0,0 +1,141 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class ExternalLoginsModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly IUserStore _userStore; + + public ExternalLoginsModel( + UserManager userManager, + SignInManager signInManager, + IUserStore userStore) + { + _userManager = userManager; + _signInManager = signInManager; + _userStore = userStore; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public IList CurrentLogins { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public IList OtherLogins { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool ShowRemoveButton { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + CurrentLogins = await _userManager.GetLoginsAsync(user); + OtherLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()) + .Where(auth => CurrentLogins.All(ul => auth.Name != ul.LoginProvider)) + .ToList(); + + string passwordHash = null; + if (_userStore is IUserPasswordStore userPasswordStore) + { + passwordHash = await userPasswordStore.GetPasswordHashAsync(user, HttpContext.RequestAborted); + } + + ShowRemoveButton = passwordHash != null || CurrentLogins.Count > 1; + return Page(); + } + + public async Task OnPostRemoveLoginAsync(string loginProvider, string providerKey) + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey); + if (!result.Succeeded) + { + StatusMessage = "The external login was not removed."; + return RedirectToPage(); + } + + await _signInManager.RefreshSignInAsync(user); + StatusMessage = "The external login was removed."; + return RedirectToPage(); + } + + public async Task OnPostLinkLoginAsync(string provider) + { + // Clear the existing external cookie to ensure a clean login process + await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); + + // Request a redirect to the external login provider to link a login for the current user + var redirectUrl = Url.Page("./ExternalLogins", pageHandler: "LinkLoginCallback"); + var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User)); + return new ChallengeResult(provider, properties); + } + + public async Task OnGetLinkLoginCallbackAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var userId = await _userManager.GetUserIdAsync(user); + var info = await _signInManager.GetExternalLoginInfoAsync(userId); + if (info == null) + { + throw new InvalidOperationException($"Unexpected error occurred loading external login info."); + } + + var result = await _userManager.AddLoginAsync(user, info); + if (!result.Succeeded) + { + StatusMessage = "The external login was not added. External logins can only be associated with one account."; + return RedirectToPage(); + } + + // Clear the existing external cookie to ensure a clean login process + await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme); + + StatusMessage = "The external login was added."; + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml new file mode 100644 index 0000000..91e1d01 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml @@ -0,0 +1,27 @@ +@page +@model GenerateRecoveryCodesModel +@{ + ViewData["Title"] = "Generate two-factor authentication (2FA) recovery codes"; + ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; +} + + +

@ViewData["Title"]

+ +
+
+ +
+
diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs new file mode 100644 index 0000000..60d65c5 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/GenerateRecoveryCodes.cshtml.cs @@ -0,0 +1,82 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class GenerateRecoveryCodesModel : PageModel + { + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public GenerateRecoveryCodesModel( + UserManager userManager, + ILogger logger) + { + _userManager = userManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string[] RecoveryCodes { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user); + if (!isTwoFactorEnabled) + { + throw new InvalidOperationException($"Cannot generate recovery codes for user because they do not have 2FA enabled."); + } + + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user); + var userId = await _userManager.GetUserIdAsync(user); + if (!isTwoFactorEnabled) + { + throw new InvalidOperationException($"Cannot generate recovery codes for user as they do not have 2FA enabled."); + } + + var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10); + RecoveryCodes = recoveryCodes.ToArray(); + + _logger.LogInformation("User with ID '{UserId}' has generated new 2FA recovery codes.", userId); + StatusMessage = "You have generated new recovery codes."; + return RedirectToPage("./ShowRecoveryCodes"); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml new file mode 100644 index 0000000..1d0e00f --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml @@ -0,0 +1,30 @@ +@page +@model IndexModel +@{ + ViewData["Title"] = "Profile"; + ViewData["ActivePage"] = ManageNavPages.Index; +} + +

@ViewData["Title"]

+ +
+
+
+
+
+ + +
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs new file mode 100644 index 0000000..d481078 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/Index.cshtml.cs @@ -0,0 +1,118 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class IndexModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + + public IndexModel( + UserManager userManager, + SignInManager signInManager) + { + _userManager = userManager; + _signInManager = signInManager; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string Username { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Phone] + [Display(Name = "Phone number")] + public string PhoneNumber { get; set; } + } + + private async Task LoadAsync(IdentityUser user) + { + var userName = await _userManager.GetUserNameAsync(user); + var phoneNumber = await _userManager.GetPhoneNumberAsync(user); + + Username = userName; + + Input = new InputModel + { + PhoneNumber = phoneNumber + }; + } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await LoadAsync(user); + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + if (!ModelState.IsValid) + { + await LoadAsync(user); + return Page(); + } + + var phoneNumber = await _userManager.GetPhoneNumberAsync(user); + if (Input.PhoneNumber != phoneNumber) + { + var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber); + if (!setPhoneResult.Succeeded) + { + StatusMessage = "Unexpected error when trying to set phone number."; + return RedirectToPage(); + } + } + + await _signInManager.RefreshSignInAsync(user); + StatusMessage = "Your profile has been updated"; + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs new file mode 100644 index 0000000..50b13fc --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ManageNavPages.cs @@ -0,0 +1,123 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using Microsoft.AspNetCore.Mvc.Rendering; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static class ManageNavPages + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string Index => "Index"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string Email => "Email"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string ChangePassword => "ChangePassword"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string DownloadPersonalData => "DownloadPersonalData"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string DeletePersonalData => "DeletePersonalData"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string ExternalLogins => "ExternalLogins"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string PersonalData => "PersonalData"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string TwoFactorAuthentication => "TwoFactorAuthentication"; + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string IndexNavClass(ViewContext viewContext) => PageNavClass(viewContext, Index); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string EmailNavClass(ViewContext viewContext) => PageNavClass(viewContext, Email); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string ChangePasswordNavClass(ViewContext viewContext) => PageNavClass(viewContext, ChangePassword); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string DownloadPersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, DownloadPersonalData); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string DeletePersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, DeletePersonalData); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string ExternalLoginsNavClass(ViewContext viewContext) => PageNavClass(viewContext, ExternalLogins); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string PersonalDataNavClass(ViewContext viewContext) => PageNavClass(viewContext, PersonalData); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string TwoFactorAuthenticationNavClass(ViewContext viewContext) => PageNavClass(viewContext, TwoFactorAuthentication); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public static string PageNavClass(ViewContext viewContext, string page) + { + var activePage = viewContext.ViewData["ActivePage"] as string + ?? System.IO.Path.GetFileNameWithoutExtension(viewContext.ActionDescriptor.DisplayName); + return string.Equals(activePage, page, StringComparison.OrdinalIgnoreCase) ? "active" : null; + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml new file mode 100644 index 0000000..0835493 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml @@ -0,0 +1,27 @@ +@page +@model PersonalDataModel +@{ + ViewData["Title"] = "Personal Data"; + ViewData["ActivePage"] = ManageNavPages.PersonalData; +} + +

@ViewData["Title"]

+ +
+
+

Your account contains personal data that you have given us. This page allows you to download or delete that data.

+

+ Deleting this data will permanently remove your account, and this cannot be recovered. +

+
+ +
+

+ Delete +

+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs new file mode 100644 index 0000000..556eb29 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/PersonalData.cshtml.cs @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class PersonalDataModel : PageModel + { + private readonly UserManager _userManager; + private readonly ILogger _logger; + + public PersonalDataModel( + UserManager userManager, + ILogger logger) + { + _userManager = userManager; + _logger = logger; + } + + public async Task OnGet() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml new file mode 100644 index 0000000..f3297e0 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml @@ -0,0 +1,24 @@ +@page +@model ResetAuthenticatorModel +@{ + ViewData["Title"] = "Reset authenticator key"; + ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; +} + + +

@ViewData["Title"]

+ +
+
+ +
+
diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs new file mode 100644 index 0000000..7d5f951 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ResetAuthenticator.cshtml.cs @@ -0,0 +1,67 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class ResetAuthenticatorModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public ResetAuthenticatorModel( + UserManager userManager, + SignInManager signInManager, + ILogger logger) + { + _userManager = userManager; + _signInManager = signInManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGet() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await _userManager.SetTwoFactorEnabledAsync(user, false); + await _userManager.ResetAuthenticatorKeyAsync(user); + var userId = await _userManager.GetUserIdAsync(user); + _logger.LogInformation("User with ID '{UserId}' has reset their authentication app key.", user.Id); + + await _signInManager.RefreshSignInAsync(user); + StatusMessage = "Your authenticator app key has been reset, you will need to configure your authenticator app using the new key."; + + return RedirectToPage("./EnableAuthenticator"); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml new file mode 100644 index 0000000..dd5827f --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml @@ -0,0 +1,35 @@ +@page +@model SetPasswordModel +@{ + ViewData["Title"] = "Set password"; + ViewData["ActivePage"] = ManageNavPages.ChangePassword; +} + +

Set your password

+ +

+ You do not have a local username/password for this site. Add a local + account so you can log in without an external login. +

+
+
+
+
+
+ + + +
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs new file mode 100644 index 0000000..20ca2a3 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/SetPassword.cshtml.cs @@ -0,0 +1,114 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class SetPasswordModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + + public SetPasswordModel( + UserManager userManager, + SignInManager signInManager) + { + _userManager = userManager; + _signInManager = signInManager; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Password)] + [Display(Name = "New password")] + public string NewPassword { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [DataType(DataType.Password)] + [Display(Name = "Confirm new password")] + [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] + public string ConfirmPassword { get; set; } + } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var hasPassword = await _userManager.HasPasswordAsync(user); + + if (hasPassword) + { + return RedirectToPage("./ChangePassword"); + } + + return Page(); + } + + public async Task OnPostAsync() + { + if (!ModelState.IsValid) + { + return Page(); + } + + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + var addPasswordResult = await _userManager.AddPasswordAsync(user, Input.NewPassword); + if (!addPasswordResult.Succeeded) + { + foreach (var error in addPasswordResult.Errors) + { + ModelState.AddModelError(string.Empty, error.Description); + } + return Page(); + } + + await _signInManager.RefreshSignInAsync(user); + StatusMessage = "Your password has been set."; + + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml new file mode 100644 index 0000000..49a8518 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml @@ -0,0 +1,25 @@ +@page +@model ShowRecoveryCodesModel +@{ + ViewData["Title"] = "Recovery codes"; + ViewData["ActivePage"] = "TwoFactorAuthentication"; +} + + +

@ViewData["Title"]

+ +
+
+ @for (var row = 0; row < Model.RecoveryCodes.Length; row += 2) + { + @Model.RecoveryCodes[row] @Model.RecoveryCodes[row + 1]
+ } +
+
diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml.cs new file mode 100644 index 0000000..86c1b70 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/ShowRecoveryCodes.cshtml.cs @@ -0,0 +1,46 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class ShowRecoveryCodesModel : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string[] RecoveryCodes { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public IActionResult OnGet() + { + if (RecoveryCodes == null || RecoveryCodes.Length == 0) + { + return RedirectToPage("./TwoFactorAuthentication"); + } + + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml new file mode 100644 index 0000000..6db5b32 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml @@ -0,0 +1,71 @@ +@page +@using Microsoft.AspNetCore.Http.Features +@model TwoFactorAuthenticationModel +@{ + ViewData["Title"] = "Two-factor authentication (2FA)"; + ViewData["ActivePage"] = ManageNavPages.TwoFactorAuthentication; +} + + +

@ViewData["Title"]

+@{ + var consentFeature = HttpContext.Features.Get(); + @if (consentFeature?.CanTrack ?? true) + { + @if (Model.Is2faEnabled) + { + if (Model.RecoveryCodesLeft == 0) + { +
+ You have no recovery codes left. +

You must generate a new set of recovery codes before you can log in with a recovery code.

+
+ } + else if (Model.RecoveryCodesLeft == 1) + { +
+ You have 1 recovery code left. +

You can generate a new set of recovery codes.

+
+ } + else if (Model.RecoveryCodesLeft <= 3) + { +
+ You have @Model.RecoveryCodesLeft recovery codes left. +

You should generate a new set of recovery codes.

+
+ } + + if (Model.IsMachineRemembered) + { +
+ +
+ } + Disable 2FA + Reset recovery codes + } + +

Authenticator app

+ @if (!Model.HasAuthenticator) + { + Add authenticator app + } + else + { + Set up authenticator app + Reset authenticator app + } + } + else + { +
+ Privacy and cookie policy have not been accepted. +

You must accept the policy before you can enable two factor authentication.

+
+ } +} + +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs new file mode 100644 index 0000000..28216f1 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/TwoFactorAuthentication.cshtml.cs @@ -0,0 +1,89 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account.Manage +{ + public class TwoFactorAuthenticationModel : PageModel + { + private readonly UserManager _userManager; + private readonly SignInManager _signInManager; + private readonly ILogger _logger; + + public TwoFactorAuthenticationModel( + UserManager userManager, SignInManager signInManager, ILogger logger) + { + _userManager = userManager; + _signInManager = signInManager; + _logger = logger; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool HasAuthenticator { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public int RecoveryCodesLeft { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public bool Is2faEnabled { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool IsMachineRemembered { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [TempData] + public string StatusMessage { get; set; } + + public async Task OnGetAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + HasAuthenticator = await _userManager.GetAuthenticatorKeyAsync(user) != null; + Is2faEnabled = await _userManager.GetTwoFactorEnabledAsync(user); + IsMachineRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user); + RecoveryCodesLeft = await _userManager.CountRecoveryCodesAsync(user); + + return Page(); + } + + public async Task OnPostAsync() + { + var user = await _userManager.GetUserAsync(User); + if (user == null) + { + return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); + } + + await _signInManager.ForgetTwoFactorClientAsync(); + StatusMessage = "The current browser has been forgotten. When you login again from this browser you will be prompted for your 2fa code."; + return RedirectToPage(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/_Layout.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/_Layout.cshtml new file mode 100644 index 0000000..17e797c --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/_Layout.cshtml @@ -0,0 +1,29 @@ +@{ + if (ViewData.TryGetValue("ParentLayout", out var parentLayout)) + { + Layout = (string)parentLayout; + } + else + { + Layout = "/Areas/Identity/Pages/_Layout.cshtml"; + } +} + +

Manage your account

+ +
+

Change your account settings

+
+
+
+ +
+
+ @RenderBody() +
+
+
+ +@section Scripts { + @RenderSection("Scripts", required: false) +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml new file mode 100644 index 0000000..59b1bb1 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/_ManageNav.cshtml @@ -0,0 +1,15 @@ +@inject SignInManager SignInManager +@{ + var hasExternalLogins = (await SignInManager.GetExternalAuthenticationSchemesAsync()).Any(); +} + diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml new file mode 100644 index 0000000..c898543 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/_StatusMessage.cshtml @@ -0,0 +1,10 @@ +@model string + +@if (!String.IsNullOrEmpty(Model)) +{ + var statusMessageClass = Model.StartsWith("Error") ? "danger" : "success"; + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml b/XYZStore/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml new file mode 100644 index 0000000..f7e252a --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Manage/_ViewImports.cshtml @@ -0,0 +1 @@ +@using XYZStore.Areas.Identity.Pages.Account.Manage \ No newline at end of file diff --git a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml new file mode 100644 index 0000000..30ce8d2 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml @@ -0,0 +1,67 @@ +@page +@model RegisterModel +@{ + ViewData["Title"] = "Register"; +} + +

@ViewData["Title"]

+ +
+
+
+

Create a new account.

+
+
+
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
+
+

Use another service to register.

+
+ @{ + if ((Model.ExternalLogins?.Count ?? 0) == 0) + { +
+

+ There are no external authentication services configured. See this article + about setting up this ASP.NET application to support logging in via external services. +

+
+ } + else + { +
+
+

+ @foreach (var provider in Model.ExternalLogins) + { + + } +

+
+
+ } + } +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs new file mode 100644 index 0000000..9d04b66 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs @@ -0,0 +1,180 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; +using Microsoft.Extensions.Logging; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class RegisterModel : PageModel + { + private readonly SignInManager _signInManager; + private readonly UserManager _userManager; + private readonly IUserStore _userStore; + private readonly IUserEmailStore _emailStore; + private readonly ILogger _logger; + private readonly IEmailSender _emailSender; + + public RegisterModel( + UserManager userManager, + IUserStore userStore, + SignInManager signInManager, + ILogger logger, + IEmailSender emailSender) + { + _userManager = userManager; + _userStore = userStore; + _emailStore = GetEmailStore(); + _signInManager = signInManager; + _logger = logger; + _emailSender = emailSender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string ReturnUrl { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public IList ExternalLogins { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + [Display(Name = "Email")] + public string Email { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Password)] + [Display(Name = "Password")] + public string Password { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [DataType(DataType.Password)] + [Display(Name = "Confirm password")] + [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] + public string ConfirmPassword { get; set; } + } + + + public async Task OnGetAsync(string returnUrl = null) + { + ReturnUrl = returnUrl; + ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + } + + public async Task OnPostAsync(string returnUrl = null) + { + returnUrl ??= Url.Content("~/"); + ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + if (ModelState.IsValid) + { + var user = CreateUser(); + + await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None); + await _emailStore.SetEmailAsync(user, Input.Email, CancellationToken.None); + var result = await _userManager.CreateAsync(user, Input.Password); + + if (result.Succeeded) + { + _logger.LogInformation("User created a new account with password."); + + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { area = "Identity", userId = userId, code = code, returnUrl = returnUrl }, + protocol: Request.Scheme); + + await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", + $"Please confirm your account by clicking here."); + + if (_userManager.Options.SignIn.RequireConfirmedAccount) + { + return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }); + } + else + { + await _signInManager.SignInAsync(user, isPersistent: false); + return LocalRedirect(returnUrl); + } + } + foreach (var error in result.Errors) + { + ModelState.AddModelError(string.Empty, error.Description); + } + } + + // If we got this far, something failed, redisplay form + return Page(); + } + + private IdentityUser CreateUser() + { + try + { + return Activator.CreateInstance(); + } + catch + { + throw new InvalidOperationException($"Can't create an instance of '{nameof(IdentityUser)}'. " + + $"Ensure that '{nameof(IdentityUser)}' is not an abstract class and has a parameterless constructor, or alternatively " + + $"override the register page in /Areas/Identity/Pages/Account/Register.cshtml"); + } + } + + private IUserEmailStore GetEmailStore() + { + if (!_userManager.SupportsUserEmail) + { + throw new NotSupportedException("The default UI requires a user store with email support."); + } + return (IUserEmailStore)_userStore; + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml b/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml new file mode 100644 index 0000000..d3e7f61 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml @@ -0,0 +1,23 @@ +@page +@model RegisterConfirmationModel +@{ + ViewData["Title"] = "Register confirmation"; +} + +

@ViewData["Title"]

+@{ + if (@Model.DisplayConfirmAccountLink) + { +

+ This app does not currently have a real email sender registered, see these docs for how to configure a real email sender. + Normally this would be emailed: Click here to confirm your account +

+ } + else + { +

+ Please check your email to confirm your account. +

+ } +} + diff --git a/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs new file mode 100644 index 0000000..ae999c7 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/RegisterConfirmation.cshtml.cs @@ -0,0 +1,79 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + [AllowAnonymous] + public class RegisterConfirmationModel : PageModel + { + private readonly UserManager _userManager; + private readonly IEmailSender _sender; + + public RegisterConfirmationModel(UserManager userManager, IEmailSender sender) + { + _userManager = userManager; + _sender = sender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string Email { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool DisplayConfirmAccountLink { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string EmailConfirmationUrl { get; set; } + + public async Task OnGetAsync(string email, string returnUrl = null) + { + if (email == null) + { + return RedirectToPage("/Index"); + } + returnUrl = returnUrl ?? Url.Content("~/"); + + var user = await _userManager.FindByEmailAsync(email); + if (user == null) + { + return NotFound($"Unable to load user with email '{email}'."); + } + + Email = email; + // Once you add a real email sender, you should remove this code that lets you confirm the account + DisplayConfirmAccountLink = true; + if (DisplayConfirmAccountLink) + { + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + EmailConfirmationUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { area = "Identity", userId = userId, code = code, returnUrl = returnUrl }, + protocol: Request.Scheme); + } + + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml b/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml new file mode 100644 index 0000000..ccce148 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml @@ -0,0 +1,26 @@ +@page +@model ResendEmailConfirmationModel +@{ + ViewData["Title"] = "Resend email confirmation"; +} + +

@ViewData["Title"]

+

Enter your email.

+
+
+
+
+
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml.cs new file mode 100644 index 0000000..b324100 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResendEmailConfirmation.cshtml.cs @@ -0,0 +1,88 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Identity.UI.Services; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + [AllowAnonymous] + public class ResendEmailConfirmationModel : PageModel + { + private readonly UserManager _userManager; + private readonly IEmailSender _emailSender; + + public ResendEmailConfirmationModel(UserManager userManager, IEmailSender emailSender) + { + _userManager = userManager; + _emailSender = emailSender; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + public string Email { get; set; } + } + + public void OnGet() + { + } + + public async Task OnPostAsync() + { + if (!ModelState.IsValid) + { + return Page(); + } + + var user = await _userManager.FindByEmailAsync(Input.Email); + if (user == null) + { + ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email."); + return Page(); + } + + var userId = await _userManager.GetUserIdAsync(user); + var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); + code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); + var callbackUrl = Url.Page( + "/Account/ConfirmEmail", + pageHandler: null, + values: new { userId = userId, code = code }, + protocol: Request.Scheme); + await _emailSender.SendEmailAsync( + Input.Email, + "Confirm your email", + $"Please confirm your account by clicking here."); + + ModelState.AddModelError(string.Empty, "Verification email sent. Please check your email."); + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml b/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml new file mode 100644 index 0000000..d8114b6 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml @@ -0,0 +1,37 @@ +@page +@model ResetPasswordModel +@{ + ViewData["Title"] = "Reset password"; +} + +

@ViewData["Title"]

+

Reset your password.

+
+
+
+
+
+ +
+ + + +
+
+ + + +
+
+ + + +
+ +
+
+
+ +@section Scripts { + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs new file mode 100644 index 0000000..aec7a3d --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResetPassword.cshtml.cs @@ -0,0 +1,117 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System; +using System.ComponentModel.DataAnnotations; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.WebUtilities; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + public class ResetPasswordModel : PageModel + { + private readonly UserManager _userManager; + + public ResetPasswordModel(UserManager userManager) + { + _userManager = userManager; + } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [BindProperty] + public InputModel Input { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public class InputModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [EmailAddress] + public string Email { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [DataType(DataType.Password)] + public string Password { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [DataType(DataType.Password)] + [Display(Name = "Confirm password")] + [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] + public string ConfirmPassword { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [Required] + public string Code { get; set; } + + } + + public IActionResult OnGet(string code = null) + { + if (code == null) + { + return BadRequest("A code must be supplied for password reset."); + } + else + { + Input = new InputModel + { + Code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code)) + }; + return Page(); + } + } + + public async Task OnPostAsync() + { + if (!ModelState.IsValid) + { + return Page(); + } + + var user = await _userManager.FindByEmailAsync(Input.Email); + if (user == null) + { + // Don't reveal that the user does not exist + return RedirectToPage("./ResetPasswordConfirmation"); + } + + var result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password); + if (result.Succeeded) + { + return RedirectToPage("./ResetPasswordConfirmation"); + } + + foreach (var error in result.Errors) + { + ModelState.AddModelError(string.Empty, error.Description); + } + return Page(); + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml b/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml new file mode 100644 index 0000000..c52552f --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml @@ -0,0 +1,10 @@ +@page +@model ResetPasswordConfirmationModel +@{ + ViewData["Title"] = "Reset password confirmation"; +} + +

@ViewData["Title"]

+

+ Your password has been reset. Please click here to log in. +

diff --git a/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs new file mode 100644 index 0000000..a7577f0 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/ResetPasswordConfirmation.cshtml.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages.Account +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [AllowAnonymous] + public class ResetPasswordConfirmationModel : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public void OnGet() + { + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/_StatusMessage.cshtml b/XYZStore/Areas/Identity/Pages/Account/_StatusMessage.cshtml new file mode 100644 index 0000000..c898543 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/_StatusMessage.cshtml @@ -0,0 +1,10 @@ +@model string + +@if (!String.IsNullOrEmpty(Model)) +{ + var statusMessageClass = Model.StartsWith("Error") ? "danger" : "success"; + +} diff --git a/XYZStore/Areas/Identity/Pages/Account/_ViewImports.cshtml b/XYZStore/Areas/Identity/Pages/Account/_ViewImports.cshtml new file mode 100644 index 0000000..fdae941 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Account/_ViewImports.cshtml @@ -0,0 +1 @@ +@using XYZStore.Areas.Identity.Pages.Account \ No newline at end of file diff --git a/XYZStore/Areas/Identity/Pages/Error.cshtml b/XYZStore/Areas/Identity/Pages/Error.cshtml new file mode 100644 index 0000000..b1f3143 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Error.cshtml @@ -0,0 +1,23 @@ +@page +@model ErrorModel +@{ + ViewData["Title"] = "Error"; +} + +

Error.

+

An error occurred while processing your request.

+ +@if (Model.ShowRequestId) +{ +

+ Request ID: @Model.RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ Development environment should not be enabled in deployed applications, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the ASPNETCORE_ENVIRONMENT environment variable to Development, and restarting the application. +

diff --git a/XYZStore/Areas/Identity/Pages/Error.cshtml.cs b/XYZStore/Areas/Identity/Pages/Error.cshtml.cs new file mode 100644 index 0000000..5540b5f --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/Error.cshtml.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +#nullable disable + +using System.Diagnostics; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace XYZStore.Areas.Identity.Pages +{ + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + [AllowAnonymous] + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + public class ErrorModel : PageModel + { + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public string RequestId { get; set; } + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + /// + /// This API supports the ASP.NET Core Identity default UI infrastructure and is not intended to be used + /// directly from your code. This API may change or be removed in future releases. + /// + public void OnGet() + { + RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; + } + } +} diff --git a/XYZStore/Areas/Identity/Pages/_ValidationScriptsPartial.cshtml b/XYZStore/Areas/Identity/Pages/_ValidationScriptsPartial.cshtml new file mode 100644 index 0000000..efa2d88 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/_ValidationScriptsPartial.cshtml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/XYZStore/Areas/Identity/Pages/_ViewImports.cshtml b/XYZStore/Areas/Identity/Pages/_ViewImports.cshtml new file mode 100644 index 0000000..7e6cd1b --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Identity +@using XYZStore.Areas.Identity +@using XYZStore.Areas.Identity.Pages +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers diff --git a/XYZStore/Areas/Identity/Pages/_ViewStart.cshtml b/XYZStore/Areas/Identity/Pages/_ViewStart.cshtml new file mode 100644 index 0000000..94fd419 --- /dev/null +++ b/XYZStore/Areas/Identity/Pages/_ViewStart.cshtml @@ -0,0 +1,4 @@ + +@{ + Layout = "/Views/Shared/_Layout.cshtml"; +} diff --git a/XYZStore/Program.cs b/XYZStore/Program.cs index 9f544b7..56df085 100644 --- a/XYZStore/Program.cs +++ b/XYZStore/Program.cs @@ -2,6 +2,7 @@ using XYZStore.DataAccess; using XYZStore.DataAccess.Repository; using XYZStore.DataAccess.Repository.IRepository; +using Microsoft.AspNetCore.Identity; var builder = WebApplication.CreateBuilder(args); @@ -10,6 +11,9 @@ builder.Services.AddDbContext(options => options.UseSqlServer( builder.Configuration.GetConnectionString("DefaultConnection") )); + +builder.Services.AddDefaultIdentity(/*options => options.SignIn.RequireConfirmedAccount = true*/) +.AddEntityFrameworkStores(); builder.Services.AddScoped(); builder.Services.AddRazorPages().AddRazorRuntimeCompilation(); var app = builder.Build(); @@ -26,9 +30,10 @@ app.UseStaticFiles(); app.UseRouting(); +app.UseAuthentication(); app.UseAuthorization(); - +app.MapRazorPages(); app.MapControllerRoute( name: "default", pattern: "{area=Customer}/{controller=Home}/{action=Index}/{id?}"); diff --git a/XYZStore/Views/Shared/_Layout.cshtml b/XYZStore/Views/Shared/_Layout.cshtml index 13c363a..bc0fda3 100644 --- a/XYZStore/Views/Shared/_Layout.cshtml +++ b/XYZStore/Views/Shared/_Layout.cshtml @@ -25,17 +25,17 @@ Home + @*
diff --git a/XYZStore/Views/Shared/_LoginPartial.cshtml b/XYZStore/Views/Shared/_LoginPartial.cshtml new file mode 100644 index 0000000..ef9e63e --- /dev/null +++ b/XYZStore/Views/Shared/_LoginPartial.cshtml @@ -0,0 +1,27 @@ +@using Microsoft.AspNetCore.Identity + +@inject SignInManager SignInManager +@inject UserManager UserManager + + diff --git a/XYZStore/XYZStore.csproj b/XYZStore/XYZStore.csproj index 08e9091..9fcf801 100644 --- a/XYZStore/XYZStore.csproj +++ b/XYZStore/XYZStore.csproj @@ -7,6 +7,8 @@ + + diff --git a/XYZStore/appsettings.json b/XYZStore/appsettings.json index a241881..a4d9403 100644 --- a/XYZStore/appsettings.json +++ b/XYZStore/appsettings.json @@ -7,6 +7,7 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=XYZStore;Trusted_Connection=True;" + "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=XYZStore;Trusted_Connection=True;", + "ApplicationDbContextConnection": "Server=(localdb)\\mssqllocaldb;Database=XYZStore;Trusted_Connection=True;MultipleActiveResultSets=true" } -} +} \ No newline at end of file From be2c4f0c458b5ec386e911e38fca48a90cb67379 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Tue, 13 Sep 2022 15:19:41 +0200 Subject: [PATCH 03/12] Commit --- SQLQuery1.sql | 3 + .../Data/ApplicationDbContext.cs | 3 + ...0220912085919_addedCompanyToDb.Designer.cs | 461 ++++++++++++++++ .../20220912085919_addedCompanyToDb.cs | 36 ++ ...912121121_addedCompanyIdToUser.Designer.cs | 474 ++++++++++++++++ .../20220912121121_addedCompanyIdToUser.cs | 118 ++++ ...23_addedCompanyIdToUserCorrect.Designer.cs | 474 ++++++++++++++++ ...20912124223_addedCompanyIdToUserCorrect.cs | 19 + ...1_addedCompanyIdToUserCorrect2.Designer.cs | 474 ++++++++++++++++ ...0912131641_addedCompanyIdToUserCorrect2.cs | 19 + .../20220913100927_null.Designer.cs | 457 +++++++++++++++ .../Migrations/20220913100927_null.cs | 92 ++++ .../20220913115231_Adding.Designer.cs | 457 +++++++++++++++ .../Migrations/20220913115231_Adding.cs | 19 + ...13125952_addedShoppingCartToDb.Designer.cs | 520 ++++++++++++++++++ .../20220913125952_addedShoppingCartToDb.cs | 86 +++ .../20220913131814_null1.Designer.cs | 520 ++++++++++++++++++ .../Migrations/20220913131814_null1.cs | 19 + .../ApplicationDbContextModelSnapshot.cs | 107 +++- .../Repository/CompanyRepository.cs | 26 + .../IRepository/ICompanyRepository.cs | 15 + .../Repository/IRepository/IUnitOfWork.cs | 1 + XYZStore.DataAccess/Repository/UnitOfWork.cs | 7 +- XYZStore.Models/ApplicationUser.cs | 9 +- XYZStore.Models/Models/Company.cs | 21 + XYZStore.Models/Models/ShoppingCart.cs | 10 +- XYZStore.Utility/EmailSender.cs | 17 + XYZStore.Utility/SD.cs | 5 +- XYZStore.Utility/XYZStore.Utility.csproj | 1 + .../Admin/Controllers/CompanyController.cs | 85 +++ .../Areas/Admin/Views/Company/Index.cshtml | 28 + .../Areas/Admin/Views/Company/Upsert.cshtml | 64 +++ .../Identity/Pages/Account/Register.cshtml | 118 ++-- .../Identity/Pages/Account/Register.cshtml.cs | 75 ++- XYZStore/Program.cs | 8 +- XYZStore/XYZStore.csproj | 1 + XYZStore/wwwroot/js/company.js | 62 +++ 37 files changed, 4860 insertions(+), 51 deletions(-) create mode 100644 SQLQuery1.sql create mode 100644 XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913100927_null.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913100927_null.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913115231_Adding.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913115231_Adding.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913131814_null1.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220913131814_null1.cs create mode 100644 XYZStore.DataAccess/Repository/CompanyRepository.cs create mode 100644 XYZStore.DataAccess/Repository/IRepository/ICompanyRepository.cs create mode 100644 XYZStore.Models/Models/Company.cs create mode 100644 XYZStore.Utility/EmailSender.cs create mode 100644 XYZStore/Areas/Admin/Controllers/CompanyController.cs create mode 100644 XYZStore/Areas/Admin/Views/Company/Index.cshtml create mode 100644 XYZStore/Areas/Admin/Views/Company/Upsert.cshtml create mode 100644 XYZStore/wwwroot/js/company.js diff --git a/SQLQuery1.sql b/SQLQuery1.sql new file mode 100644 index 0000000..5e27bf3 --- /dev/null +++ b/SQLQuery1.sql @@ -0,0 +1,3 @@ +select * from dbo.AspNetUsers +select * from dbo.AspNetUserRoles +select * from dbo.AspNetRoles diff --git a/XYZStore.DataAccess/Data/ApplicationDbContext.cs b/XYZStore.DataAccess/Data/ApplicationDbContext.cs index 865d675..faeec5b 100644 --- a/XYZStore.DataAccess/Data/ApplicationDbContext.cs +++ b/XYZStore.DataAccess/Data/ApplicationDbContext.cs @@ -16,4 +16,7 @@ public ApplicationDbContext(DbContextOptionsoptions) : bas public DbSetCoverType { get; set; } public DbSetProducts { get; set; } public DbSet ApplicationUsers { get; set; } + public DbSet Companies { get; set; } + public DbSet ShoppingCarts { get; set; } + } diff --git a/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.Designer.cs b/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.Designer.cs new file mode 100644 index 0000000..4794367 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.Designer.cs @@ -0,0 +1,461 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220912085919_addedCompanyToDb")] + partial class addedCompanyToDb + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.cs b/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.cs new file mode 100644 index 0000000..144d7dd --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912085919_addedCompanyToDb.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedCompanyToDb : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Companies", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + StreetAddress = table.Column(type: "nvarchar(max)", nullable: true), + City = table.Column(type: "nvarchar(max)", nullable: true), + State = table.Column(type: "nvarchar(max)", nullable: true), + PostalCode = table.Column(type: "nvarchar(max)", nullable: true), + PhoneNumber = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Companies", x => x.Id); + }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Companies"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.Designer.cs b/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.Designer.cs new file mode 100644 index 0000000..3fca8e9 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.Designer.cs @@ -0,0 +1,474 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220912121121_addedCompanyIdToUser")] + partial class addedCompanyIdToUser + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.cs b/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.cs new file mode 100644 index 0000000..b362f1e --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912121121_addedCompanyIdToUser.cs @@ -0,0 +1,118 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedCompanyIdToUser : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AddColumn( + name: "CompanyId", + table: "AspNetUsers", + type: "int", + nullable: true); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.CreateIndex( + name: "IX_AspNetUsers_CompanyId", + table: "AspNetUsers", + column: "CompanyId"); + + migrationBuilder.AddForeignKey( + name: "FK_AspNetUsers_Companies_CompanyId", + table: "AspNetUsers", + column: "CompanyId", + principalTable: "Companies", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_AspNetUsers_Companies_CompanyId", + table: "AspNetUsers"); + + migrationBuilder.DropIndex( + name: "IX_AspNetUsers_CompanyId", + table: "AspNetUsers"); + + migrationBuilder.DropColumn( + name: "CompanyId", + table: "AspNetUsers"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.Designer.cs b/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.Designer.cs new file mode 100644 index 0000000..c416729 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.Designer.cs @@ -0,0 +1,474 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220912124223_addedCompanyIdToUserCorrect")] + partial class addedCompanyIdToUserCorrect + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.cs b/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.cs new file mode 100644 index 0000000..60160bc --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912124223_addedCompanyIdToUserCorrect.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedCompanyIdToUserCorrect : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.Designer.cs b/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.Designer.cs new file mode 100644 index 0000000..e42d138 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.Designer.cs @@ -0,0 +1,474 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220912131641_addedCompanyIdToUserCorrect2")] + partial class addedCompanyIdToUserCorrect2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.cs b/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.cs new file mode 100644 index 0000000..7807489 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220912131641_addedCompanyIdToUserCorrect2.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedCompanyIdToUserCorrect2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913100927_null.Designer.cs b/XYZStore.DataAccess/Migrations/20220913100927_null.Designer.cs new file mode 100644 index 0000000..7dbbb17 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913100927_null.Designer.cs @@ -0,0 +1,457 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220913100927_null")] + partial class @null + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913100927_null.cs b/XYZStore.DataAccess/Migrations/20220913100927_null.cs new file mode 100644 index 0000000..baebd1b --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913100927_null.cs @@ -0,0 +1,92 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class @null : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(450)", + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Companies"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserTokens", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "ProviderKey", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + + migrationBuilder.AlterColumn( + name: "LoginProvider", + table: "AspNetUserLogins", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(450)"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913115231_Adding.Designer.cs b/XYZStore.DataAccess/Migrations/20220913115231_Adding.Designer.cs new file mode 100644 index 0000000..fb96fb5 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913115231_Adding.Designer.cs @@ -0,0 +1,457 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220913115231_Adding")] + partial class Adding + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913115231_Adding.cs b/XYZStore.DataAccess/Migrations/20220913115231_Adding.cs new file mode 100644 index 0000000..add086e --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913115231_Adding.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class Adding : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.Designer.cs b/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.Designer.cs new file mode 100644 index 0000000..72bca67 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.Designer.cs @@ -0,0 +1,520 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220913125952_addedShoppingCartToDb")] + partial class addedShoppingCartToDb + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.HasIndex("ProductId"); + + b.ToTable("ShoppingCarts"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.cs b/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.cs new file mode 100644 index 0000000..1338d00 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913125952_addedShoppingCartToDb.cs @@ -0,0 +1,86 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedShoppingCartToDb : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + //migrationBuilder.AddColumn( + // name: "CompanyId", + // table: "AspNetUsers", + // type: "int", + // nullable: true); + + migrationBuilder.CreateTable( + name: "ShoppingCarts", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ProductId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false), + ApplicationUserId = table.Column(type: "nvarchar(450)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ShoppingCarts", x => x.Id); + table.ForeignKey( + name: "FK_ShoppingCarts_AspNetUsers_ApplicationUserId", + column: x => x.ApplicationUserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ShoppingCarts_Products_ProductId", + column: x => x.ProductId, + principalTable: "Products", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + //migrationBuilder.CreateIndex( + // name: "IX_AspNetUsers_CompanyId", + // table: "AspNetUsers", + // column: "CompanyId"); + + migrationBuilder.CreateIndex( + name: "IX_ShoppingCarts_ApplicationUserId", + table: "ShoppingCarts", + column: "ApplicationUserId"); + + migrationBuilder.CreateIndex( + name: "IX_ShoppingCarts_ProductId", + table: "ShoppingCarts", + column: "ProductId"); + + //migrationBuilder.AddForeignKey( + // name: "FK_AspNetUsers_Companies_CompanyId", + // table: "AspNetUsers", + // column: "CompanyId", + // principalTable: "Companies", + // principalColumn: "Id", + // onDelete: ReferentialAction.Cascade); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_AspNetUsers_Companies_CompanyId", + table: "AspNetUsers"); + + migrationBuilder.DropTable( + name: "ShoppingCarts"); + + //migrationBuilder.DropIndex( + // name: "IX_AspNetUsers_CompanyId", + // table: "AspNetUsers"); + + //migrationBuilder.DropColumn( + // name: "CompanyId", + // table: "AspNetUsers"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913131814_null1.Designer.cs b/XYZStore.DataAccess/Migrations/20220913131814_null1.Designer.cs new file mode 100644 index 0000000..24c9ef6 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913131814_null1.Designer.cs @@ -0,0 +1,520 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220913131814_null1")] + partial class null1 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.HasIndex("ProductId"); + + b.ToTable("ShoppingCarts"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220913131814_null1.cs b/XYZStore.DataAccess/Migrations/20220913131814_null1.cs new file mode 100644 index 0000000..997eecd --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220913131814_null1.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class null1 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs index 20514d2..c016433 100644 --- a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs @@ -173,12 +173,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => { b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasColumnType("nvarchar(450)"); b.Property("ProviderKey") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasColumnType("nvarchar(450)"); b.Property("ProviderDisplayName") .HasColumnType("nvarchar(max)"); @@ -215,12 +213,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nvarchar(450)"); b.Property("LoginProvider") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasColumnType("nvarchar(450)"); b.Property("Name") - .HasMaxLength(128) - .HasColumnType("nvarchar(128)"); + .HasColumnType("nvarchar(450)"); b.Property("Value") .HasColumnType("nvarchar(max)"); @@ -271,6 +267,38 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("CoverType"); }); + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + modelBuilder.Entity("XYZStore.Models.Models.Product", b => { b.Property("Id") @@ -329,6 +357,33 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Products"); }); + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.HasIndex("ProductId"); + + b.ToTable("ShoppingCarts"); + }); + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => { b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); @@ -336,6 +391,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("City") .HasColumnType("nvarchar(max)"); + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); @@ -349,6 +408,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("StreetAddress") .HasColumnType("nvarchar(max)"); + b.HasIndex("CompanyId"); + b.HasDiscriminator().HasValue("ApplicationUser"); }); @@ -421,6 +482,36 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("CoverType"); }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); #pragma warning restore 612, 618 } } diff --git a/XYZStore.DataAccess/Repository/CompanyRepository.cs b/XYZStore.DataAccess/Repository/CompanyRepository.cs new file mode 100644 index 0000000..a0b860c --- /dev/null +++ b/XYZStore.DataAccess/Repository/CompanyRepository.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository +{ + public class CompanyRepository : Repository, ICompanyRepository + { + private ApplicationDbContext _db; + + public CompanyRepository(ApplicationDbContext db) : base(db) + { + _db = db; + } + + public void Update(Company obj) + { + _db.Companies.Update(obj); + } + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/ICompanyRepository.cs b/XYZStore.DataAccess/Repository/IRepository/ICompanyRepository.cs new file mode 100644 index 0000000..166620b --- /dev/null +++ b/XYZStore.DataAccess/Repository/IRepository/ICompanyRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository.IRepository +{ + public interface ICompanyRepository : IRepository + { + void Update(Company obj); + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs index b2570f3..ce700be 100644 --- a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs @@ -11,6 +11,7 @@ public interface IUnitOfWork ICategoryRepository Category { get; } ICoverTypeRepository CoverType { get; } IProductRepository Product { get; } + ICompanyRepository Company { get; } void Save(); } } diff --git a/XYZStore.DataAccess/Repository/UnitOfWork.cs b/XYZStore.DataAccess/Repository/UnitOfWork.cs index 4198ca0..c50294c 100644 --- a/XYZStore.DataAccess/Repository/UnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/UnitOfWork.cs @@ -5,23 +5,26 @@ using System.Threading.Tasks; using XYZStore.DataAccess.Repository.IRepository; using XYZStore.Models; +using XYZStore.Models.Models; namespace XYZStore.DataAccess.Repository { - public class unitOfWork : IUnitOfWork + public class UnitOfWork : IUnitOfWork { private ApplicationDbContext _db; - public unitOfWork(ApplicationDbContext db) + public UnitOfWork(ApplicationDbContext db) { _db = db; Category = new CategoryRepository(_db); CoverType = new CoverTypeRepository(_db); Product = new ProductRepository(_db); + Company = new CompanyRepository(_db); } public ICategoryRepository Category { get; private set; } public ICoverTypeRepository CoverType { get; private set; } public IProductRepository Product { get; private set; } + public ICompanyRepository Company { get; private set; } public void Save() { _db.SaveChanges(); diff --git a/XYZStore.Models/ApplicationUser.cs b/XYZStore.Models/ApplicationUser.cs index a10238f..5266e6f 100644 --- a/XYZStore.Models/ApplicationUser.cs +++ b/XYZStore.Models/ApplicationUser.cs @@ -1,10 +1,13 @@ using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; +using XYZStore.Models.Models; namespace XYZStore.Models { @@ -15,6 +18,10 @@ public class ApplicationUser : IdentityUser public string? StreetAddress { get; set; } public string? City { get; set; } public string? State { get; set; } - public string? PostalCode { get; set; } + public string? PostalCode { get; set; } + public int? CompanyId { get; set; } + [ForeignKey("CompanyId")] + [ValidateNever] + public Company Company { get; set; } } } diff --git a/XYZStore.Models/Models/Company.cs b/XYZStore.Models/Models/Company.cs new file mode 100644 index 0000000..ad7584d --- /dev/null +++ b/XYZStore.Models/Models/Company.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Models.Models +{ + public class Company + { + public int Id { get; set; } + [Required] + public string Name { get; set; } + public string? StreetAddress { get; set; } + public string? City { get; set; } + public string? State { get; set; } + public string? PostalCode { get; set; } + public string? PhoneNumber { get; set; } + } +} diff --git a/XYZStore.Models/Models/ShoppingCart.cs b/XYZStore.Models/Models/ShoppingCart.cs index 64f0a76..974e0d1 100644 --- a/XYZStore.Models/Models/ShoppingCart.cs +++ b/XYZStore.Models/Models/ShoppingCart.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,8 +10,15 @@ namespace XYZStore.Models.Models { public class ShoppingCart { - public Product Product { get; set; } + public int Id { get; set; } + + public int ProductId { get; set; } + [ForeignKey("ProductId")] + public Product Product { get; set; } [Range(1, 1000, ErrorMessage = "Please enter a value between 1 and 1000")] public int Count { get; set; } + public string ApplicationUserId { get; set; } + [ForeignKey("ApplicationUserId")] + public ApplicationUser ApplicationUser { get; set; } } } diff --git a/XYZStore.Utility/EmailSender.cs b/XYZStore.Utility/EmailSender.cs new file mode 100644 index 0000000..89caedd --- /dev/null +++ b/XYZStore.Utility/EmailSender.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Identity.UI.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Utility +{ + public class EmailSender : IEmailSender + { + public Task SendEmailAsync(string email, string subject, string htmlMessage) + { + return Task.CompletedTask; + } + } +} diff --git a/XYZStore.Utility/SD.cs b/XYZStore.Utility/SD.cs index 118ca90..6daa4e1 100644 --- a/XYZStore.Utility/SD.cs +++ b/XYZStore.Utility/SD.cs @@ -8,6 +8,9 @@ namespace XYZStore.Utility { public static class SD { - + public const string Role_User_Indi = "Individual"; + public const string Role_User_Comp = "Company"; + public const string Role_Admin = "Admin"; + public const string Role_Employee = "Employee"; } } diff --git a/XYZStore.Utility/XYZStore.Utility.csproj b/XYZStore.Utility/XYZStore.Utility.csproj index 39f3134..5976e59 100644 --- a/XYZStore.Utility/XYZStore.Utility.csproj +++ b/XYZStore.Utility/XYZStore.Utility.csproj @@ -7,6 +7,7 @@ + diff --git a/XYZStore/Areas/Admin/Controllers/CompanyController.cs b/XYZStore/Areas/Admin/Controllers/CompanyController.cs new file mode 100644 index 0000000..a87a12e --- /dev/null +++ b/XYZStore/Areas/Admin/Controllers/CompanyController.cs @@ -0,0 +1,85 @@ +using Microsoft.AspNetCore.Mvc; +using XYZStore.DataAccess; +using XYZStore.Models; +using System.Linq; +using XYZStore.DataAccess.Repository.IRepository; +using System.Collections.Generic; +using XYZStore.Models.Models; +using Microsoft.AspNetCore.Mvc.Rendering; +using XYZStore.Models.ViewModels; + +namespace XYZStore.Areas.Admin.Controllers; + +[Area("Admin")] +public class CompanyController : Controller +{ + private readonly IUnitOfWork _unitOfWork; + + public CompanyController(IUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + } + public IActionResult Index() + { + return View(); + } + //GET + public IActionResult Upsert(int? id) + { + Company company = new(); + if (id==null || id == 0) + { + return View(company); + } + else + { + company =_unitOfWork.Company.GetFirstOrDefault(u => u.Id == id); + return View(company); + } + } + //POST + [HttpPost] + [ValidateAntiForgeryToken] + public IActionResult Upsert(Company obj,IFormFile? file) + { + if (ModelState.IsValid) + { + if (obj.Id == 0) + { + _unitOfWork.Company.Add(obj); + TempData["success"] = "Company Created Successfully!"; + } + else + { + TempData["success"] = "Company Updated Successfully!"; + _unitOfWork.Company.Update(obj); + } + _unitOfWork.Save(); + + return RedirectToAction("Index"); + } + return View(obj); + } + + #region API CALLS + [HttpGet] + public IActionResult GetAll() + { + var companyList = _unitOfWork.Company.GetAll(); + return Json(new { data = companyList }); + } + //POST + [HttpDelete] + public IActionResult Delete(int? id) + { + var obj = _unitOfWork.Company.GetFirstOrDefault(u => u.Id == id); + if (obj == null) + { + return Json(new { success = false, message = "Error while deleting" }); + } + _unitOfWork.Company.Remove(obj); + _unitOfWork.Save(); + return Json(new { success = true, message = "Delete Successfully!" }); + } + #endregion +} diff --git a/XYZStore/Areas/Admin/Views/Company/Index.cshtml b/XYZStore/Areas/Admin/Views/Company/Index.cshtml new file mode 100644 index 0000000..2fcccd5 --- /dev/null +++ b/XYZStore/Areas/Admin/Views/Company/Index.cshtml @@ -0,0 +1,28 @@ +
+
+
+

Company List

+
+ +
+

+ + + + + + + + + + + +
NameAddressCityStatePhoneNumber
+
+@section Scripts{ + +} \ No newline at end of file diff --git a/XYZStore/Areas/Admin/Views/Company/Upsert.cshtml b/XYZStore/Areas/Admin/Views/Company/Upsert.cshtml new file mode 100644 index 0000000..cd43c88 --- /dev/null +++ b/XYZStore/Areas/Admin/Views/Company/Upsert.cshtml @@ -0,0 +1,64 @@ +@model XYZStore.Models.Models.Company + +
+ + +
+
+
+
+

@(Model.Id != 0 ? "Update" : "Create") Company

+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ @if (Model.Id != 0) + { + + } + else + { + + } + + Back To List + +
+
+
+
+
+@section Scripts{ +@{ + + } +} diff --git a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml index 30ce8d2..57adfeb 100644 --- a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml +++ b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml @@ -4,59 +4,102 @@ ViewData["Title"] = "Register"; } -

@ViewData["Title"]

+

@ViewData["Title"]

-
-
-
+
+
+

Create a new account.


-
+ +
-
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
-
+
- +
+ +
+ +
+ +
+ +
-
+

Use another service to register.


@{ - if ((Model.ExternalLogins?.Count ?? 0) == 0) - { -
-

- There are no external authentication services configured. See this article - about setting up this ASP.NET application to support logging in via external services. -

-
- } - else - { -
-
-

- @foreach (var provider in Model.ExternalLogins) - { - - } -

-
-
- } + if ((Model.ExternalLogins?.Count ?? 0) == 0) + { +
+

+ There are no external authentication services configured. See this article + about setting up this ASP.NET application to support logging in via external services. +

+
+ } + else + { +
+
+

+ @foreach (var provider in Model.ExternalLogins) + { + + } +

+
+
+ } }
@@ -64,4 +107,17 @@ @section Scripts { + } diff --git a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs index 9d04b66..8041ba9 100644 --- a/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs +++ b/XYZStore/Areas/Identity/Pages/Account/Register.cshtml.cs @@ -15,9 +15,14 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Logging; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Utility; namespace XYZStore.Areas.Identity.Pages.Account { @@ -29,20 +34,27 @@ public class RegisterModel : PageModel private readonly IUserEmailStore _emailStore; private readonly ILogger _logger; private readonly IEmailSender _emailSender; + private readonly RoleManager _roleManager; + private readonly IUnitOfWork _unitOfWork; public RegisterModel( UserManager userManager, IUserStore userStore, SignInManager signInManager, ILogger logger, - IEmailSender emailSender) + IEmailSender emailSender, + RoleManager roleManager, + IUnitOfWork unitOfWork) { + _unitOfWork = unitOfWork; + _roleManager = roleManager; _userManager = userManager; _userStore = userStore; _emailStore = GetEmailStore(); _signInManager = signInManager; _logger = logger; _emailSender = emailSender; + } /// @@ -97,15 +109,50 @@ public class InputModel [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } - } + + [Required] + public string Name { get; set; } + public string? StreetAddress { get; set; } + public string? City { get; set; } + public string? State { get; set; } + public string? PostalCode { get; set; } + public string? PhoneNumber { get; set; } + public string? Role { get; set; } + public int? CompanyId { get; set; } + + [ValidateNever] + public IEnumerable RoleList { get; set; } + [ValidateNever] + public IEnumerable CompanyList { get; set; } + } public async Task OnGetAsync(string returnUrl = null) { + if (!_roleManager.RoleExistsAsync(SD.Role_Admin).GetAwaiter().GetResult()) + { + _roleManager.CreateAsync(new IdentityRole(SD.Role_Admin)).GetAwaiter().GetResult(); + _roleManager.CreateAsync(new IdentityRole(SD.Role_Employee)).GetAwaiter().GetResult(); + _roleManager.CreateAsync(new IdentityRole(SD.Role_User_Indi)).GetAwaiter().GetResult(); + _roleManager.CreateAsync(new IdentityRole(SD.Role_User_Comp)).GetAwaiter().GetResult(); + } + ReturnUrl = returnUrl; ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); + Input = new InputModel() + { + RoleList = _roleManager.Roles.Select(x => x.Name).Select(i => new SelectListItem + { + Text = i, + Value = i + }), + CompanyList = _unitOfWork.Company.GetAll().Select(i => new SelectListItem + { + Text = i.Name, + Value = i.Id.ToString() + }), + }; } - public async Task OnPostAsync(string returnUrl = null) { returnUrl ??= Url.Content("~/"); @@ -116,12 +163,30 @@ public async Task OnPostAsync(string returnUrl = null) await _userStore.SetUserNameAsync(user, Input.Email, CancellationToken.None); await _emailStore.SetEmailAsync(user, Input.Email, CancellationToken.None); + user.StreetAddress = Input.StreetAddress; + user.City = Input.City; + user.State = Input.State; + user.PostalCode = Input.PostalCode; + user.Name = Input.Name; + user.PhoneNumber = Input.PhoneNumber; + if(Input.Role == SD.Role_User_Comp) { + user.CompanyId = Input.CompanyId; + } + var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { _logger.LogInformation("User created a new account with password."); + if(Input.Role == null) { + await _userManager.AddToRoleAsync(user, SD.Role_User_Indi); + } + else + { + await _userManager.AddToRoleAsync(user, Input.Role); + } + var userId = await _userManager.GetUserIdAsync(user); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); @@ -154,11 +219,11 @@ await _emailSender.SendEmailAsync(Input.Email, "Confirm your email", return Page(); } - private IdentityUser CreateUser() + private ApplicationUser CreateUser() { try { - return Activator.CreateInstance(); + return Activator.CreateInstance(); } catch { diff --git a/XYZStore/Program.cs b/XYZStore/Program.cs index 56df085..6a2c7f3 100644 --- a/XYZStore/Program.cs +++ b/XYZStore/Program.cs @@ -3,6 +3,9 @@ using XYZStore.DataAccess.Repository; using XYZStore.DataAccess.Repository.IRepository; using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Identity.UI.Services; +using XYZStore.Utility; var builder = WebApplication.CreateBuilder(args); @@ -12,9 +15,10 @@ builder.Configuration.GetConnectionString("DefaultConnection") )); -builder.Services.AddDefaultIdentity(/*options => options.SignIn.RequireConfirmedAccount = true*/) +builder.Services.AddIdentity().AddDefaultTokenProviders() .AddEntityFrameworkStores(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddSingleton(); builder.Services.AddRazorPages().AddRazorRuntimeCompilation(); var app = builder.Build(); diff --git a/XYZStore/XYZStore.csproj b/XYZStore/XYZStore.csproj index 9fcf801..693327b 100644 --- a/XYZStore/XYZStore.csproj +++ b/XYZStore/XYZStore.csproj @@ -22,6 +22,7 @@ + diff --git a/XYZStore/wwwroot/js/company.js b/XYZStore/wwwroot/js/company.js new file mode 100644 index 0000000..f4bd7e6 --- /dev/null +++ b/XYZStore/wwwroot/js/company.js @@ -0,0 +1,62 @@ +var dataTable; + +$(document).ready(function () { + loadDataTable(); +}); + +function loadDataTable() { + dataTable = $('#tblData').DataTable({ + "ajax": { + "url":"/Admin/Company/GetAll" + }, + "columns": [ + { "data": "name", "width": "15%" }, + { "data": "streetAddress", "width": "15%" }, + { "data": "city", "width": "15%" }, + { "data": "state", "width": "15%" }, + { "data": "phoneNumber", "width": "15%" }, + { + "data": "id", + "render": function (data) { + return ` +
+ Edit +
+ Delete +
+ ` + }, + "width": "15%" + } + ] + }); +} +function Delete(url) { + Swal.fire({ + title: 'Are you sure?', + text: "You won't be able to revert this!", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, delete it!' + }).then((result) => { + if (result.isConfirmed) { + $.ajax({ + url: url, + type: 'DELETE', + success: function (data) { + if (data.success) { + dataTable.ajax.reload(); + toastr.success(data.message); + } + else { + toastr.error(data.message); + } + } + }) + } + }) +} \ No newline at end of file From db5900cce0c802b2e267a8f4b39ef9f2283b2366 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Wed, 14 Sep 2022 15:16:26 +0200 Subject: [PATCH 04/12] Commit shoppingcart_plus --- SQLQuery1.sql | 1 + .../20220914114940_addedCart2.Designer.cs | 520 ++++++++++++++++++ .../Migrations/20220914114940_addedCart2.cs | 19 + .../Repository/ApplicationUserRepository.cs | 21 + .../IRepository/IApplicationUserRepository.cs | 15 + .../IRepository/ICategoryRepository.cs | 5 +- .../Repository/IRepository/IRepository.cs | 2 +- .../IRepository/IShoppingCartRepository.cs | 16 + .../Repository/IRepository/IUnitOfWork.cs | 2 + XYZStore.DataAccess/Repository/Repository.cs | 10 +- .../Repository/ShoppingCartRepository.cs | 34 ++ XYZStore.DataAccess/Repository/UnitOfWork.cs | 7 +- XYZStore.Models/ViewModels/ShoppingCartVM.cs | 14 + .../Customer/Controllers/CartController.cs | 36 ++ .../Customer/Controllers/HomeController.cs | 41 +- .../Areas/Customer/Views/Cart/Index.cshtml | 76 +++ .../Areas/Customer/Views/Home/Details.cshtml | 1 + .../Areas/Customer/Views/Home/Index.cshtml | 2 +- XYZStore/Program.cs | 7 + XYZStore/Views/Shared/_Layout.cshtml | 5 + 20 files changed, 818 insertions(+), 16 deletions(-) create mode 100644 XYZStore.DataAccess/Migrations/20220914114940_addedCart2.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220914114940_addedCart2.cs create mode 100644 XYZStore.DataAccess/Repository/ApplicationUserRepository.cs create mode 100644 XYZStore.DataAccess/Repository/IRepository/IApplicationUserRepository.cs create mode 100644 XYZStore.DataAccess/Repository/IRepository/IShoppingCartRepository.cs create mode 100644 XYZStore.DataAccess/Repository/ShoppingCartRepository.cs create mode 100644 XYZStore.Models/ViewModels/ShoppingCartVM.cs create mode 100644 XYZStore/Areas/Customer/Controllers/CartController.cs create mode 100644 XYZStore/Areas/Customer/Views/Cart/Index.cshtml diff --git a/SQLQuery1.sql b/SQLQuery1.sql index 5e27bf3..f578c55 100644 --- a/SQLQuery1.sql +++ b/SQLQuery1.sql @@ -1,3 +1,4 @@ select * from dbo.AspNetUsers select * from dbo.AspNetUserRoles select * from dbo.AspNetRoles +select * from dbo.ShoppingCarts \ No newline at end of file diff --git a/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.Designer.cs b/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.Designer.cs new file mode 100644 index 0000000..70278dd --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.Designer.cs @@ -0,0 +1,520 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220914114940_addedCart2")] + partial class addedCart2 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.HasIndex("ProductId"); + + b.ToTable("ShoppingCarts"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.cs b/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.cs new file mode 100644 index 0000000..f046856 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220914114940_addedCart2.cs @@ -0,0 +1,19 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class addedCart2 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/XYZStore.DataAccess/Repository/ApplicationUserRepository.cs b/XYZStore.DataAccess/Repository/ApplicationUserRepository.cs new file mode 100644 index 0000000..e7aa51d --- /dev/null +++ b/XYZStore.DataAccess/Repository/ApplicationUserRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; + +namespace XYZStore.DataAccess.Repository +{ + public class ApplicationUserRepository : Repository, IApplicationUserRepository + { + private ApplicationDbContext _db; + + public ApplicationUserRepository(ApplicationDbContext db) : base(db) + { + _db = db; + } + + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/IApplicationUserRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IApplicationUserRepository.cs new file mode 100644 index 0000000..92f3cd5 --- /dev/null +++ b/XYZStore.DataAccess/Repository/IRepository/IApplicationUserRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository.IRepository +{ + public interface IApplicationUserRepository : IRepository + { + + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/ICategoryRepository.cs b/XYZStore.DataAccess/Repository/IRepository/ICategoryRepository.cs index 49e2733..9ef502c 100644 --- a/XYZStore.DataAccess/Repository/IRepository/ICategoryRepository.cs +++ b/XYZStore.DataAccess/Repository/IRepository/ICategoryRepository.cs @@ -9,7 +9,8 @@ namespace XYZStore.DataAccess.Repository.IRepository { public interface ICategoryRepository : IRepository { - void Update(Category obj); - + void Update(Category obj); + } + } diff --git a/XYZStore.DataAccess/Repository/IRepository/IRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IRepository.cs index f465a6b..789c9fe 100644 --- a/XYZStore.DataAccess/Repository/IRepository/IRepository.cs +++ b/XYZStore.DataAccess/Repository/IRepository/IRepository.cs @@ -10,7 +10,7 @@ public interface IRepository where T : class { //T - Category T GetFirstOrDefault(Expression> filter, string? includeProperties = null); - IEnumerable GetAll(string? includeProperties = null); + IEnumerable GetAll(Expression>? filter=null, string? includeProperties = null); void Add(T entity); void Remove(T entity); void RemoveRange(IEnumerable entity); diff --git a/XYZStore.DataAccess/Repository/IRepository/IShoppingCartRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IShoppingCartRepository.cs new file mode 100644 index 0000000..eef5b86 --- /dev/null +++ b/XYZStore.DataAccess/Repository/IRepository/IShoppingCartRepository.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository.IRepository +{ + public interface IShoppingCartRepository: IRepository + { + int IncrementCount(ShoppingCart shoppingCart, int count); + int DecrementCount(ShoppingCart shoppingCart, int count); + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs index ce700be..f26baea 100644 --- a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs @@ -12,6 +12,8 @@ public interface IUnitOfWork ICoverTypeRepository CoverType { get; } IProductRepository Product { get; } ICompanyRepository Company { get; } + IShoppingCartRepository ShoppingCart { get; } + IApplicationUserRepository ApplicationUser { get; } void Save(); } } diff --git a/XYZStore.DataAccess/Repository/Repository.cs b/XYZStore.DataAccess/Repository/Repository.cs index b8e2ebc..b95dad0 100644 --- a/XYZStore.DataAccess/Repository/Repository.cs +++ b/XYZStore.DataAccess/Repository/Repository.cs @@ -27,10 +27,14 @@ public void Add(T entity) dbSet.Add(entity); } //IncludeProperties "Category,CoverType" - public IEnumerable GetAll(string? includeProperties = null) + public IEnumerable GetAll(Expression>? filter=null, string? includeProperties = null) { IQueryable query = dbSet; - if(includeProperties != null) + if(filter != null) + { + query = query.Where(filter); + } + if (includeProperties != null) { foreach(var includeProp in includeProperties.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)) { @@ -52,12 +56,10 @@ public T GetFirstOrDefault(Expression> filter, string? includeProp } return query.FirstOrDefault(); } - public void Remove(T entity) { dbSet.Remove(entity); } - public void RemoveRange(IEnumerable entity) { dbSet.RemoveRange(entity); diff --git a/XYZStore.DataAccess/Repository/ShoppingCartRepository.cs b/XYZStore.DataAccess/Repository/ShoppingCartRepository.cs new file mode 100644 index 0000000..e5b5b03 --- /dev/null +++ b/XYZStore.DataAccess/Repository/ShoppingCartRepository.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading.Tasks; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository +{ + public class ShoppingCartRepository : Repository, IShoppingCartRepository + { + private ApplicationDbContext _db; + + public ShoppingCartRepository(ApplicationDbContext db) : base(db) + { + _db = db; + } + + public int DecrementCount(ShoppingCart shoppingCart, int count) + { + shoppingCart.Count -= count; + return shoppingCart.Count; + } + + public int IncrementCount(ShoppingCart shoppingCart, int count) + { + shoppingCart.Count += count; + return shoppingCart.Count; + } + } +} diff --git a/XYZStore.DataAccess/Repository/UnitOfWork.cs b/XYZStore.DataAccess/Repository/UnitOfWork.cs index c50294c..aa50f9b 100644 --- a/XYZStore.DataAccess/Repository/UnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/UnitOfWork.cs @@ -11,7 +11,7 @@ namespace XYZStore.DataAccess.Repository { public class UnitOfWork : IUnitOfWork { - private ApplicationDbContext _db; + private ApplicationDbContext _db; public UnitOfWork(ApplicationDbContext db) { @@ -20,11 +20,16 @@ public UnitOfWork(ApplicationDbContext db) CoverType = new CoverTypeRepository(_db); Product = new ProductRepository(_db); Company = new CompanyRepository(_db); + ApplicationUser = new ApplicationUserRepository(_db); + ShoppingCart = new ShoppingCartRepository(_db); } public ICategoryRepository Category { get; private set; } public ICoverTypeRepository CoverType { get; private set; } public IProductRepository Product { get; private set; } public ICompanyRepository Company { get; private set; } + public IShoppingCartRepository ShoppingCart { get; private set; } + public IApplicationUserRepository ApplicationUser { get; private set; } + public void Save() { _db.SaveChanges(); diff --git a/XYZStore.Models/ViewModels/ShoppingCartVM.cs b/XYZStore.Models/ViewModels/ShoppingCartVM.cs new file mode 100644 index 0000000..01c788c --- /dev/null +++ b/XYZStore.Models/ViewModels/ShoppingCartVM.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models.Models; + +namespace XYZStore.Models.ViewModels +{ + public class ShoppingCartVM + { + public IEnumerable ListCart { get; set; } + } +} diff --git a/XYZStore/Areas/Customer/Controllers/CartController.cs b/XYZStore/Areas/Customer/Controllers/CartController.cs new file mode 100644 index 0000000..2eff9f6 --- /dev/null +++ b/XYZStore/Areas/Customer/Controllers/CartController.cs @@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Security.Claims; +using XYZStore.Models.ViewModels; +using XYZStore.Models.Models; +using XYZStore.DataAccess.Repository.IRepository; + +namespace XYZStore.Areas.Customer.Controllers +{ + [Area("Customer")] + [Authorize] + public class CartController : Controller + { + private readonly IUnitOfWork _unitOfWork; + + public ShoppingCartVM ShoppingCartVM { get; set; } + + public CartController(IUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + } + public IActionResult Index() + { + var claimsIdentity = (ClaimsIdentity)User.Identity; + var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + + ShoppingCartVM = new ShoppingCartVM() + { + ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, + includeProperties: "Product") + }; + + return View(ShoppingCartVM); + } + } +} diff --git a/XYZStore/Areas/Customer/Controllers/HomeController.cs b/XYZStore/Areas/Customer/Controllers/HomeController.cs index f5d4721..de45cb6 100644 --- a/XYZStore/Areas/Customer/Controllers/HomeController.cs +++ b/XYZStore/Areas/Customer/Controllers/HomeController.cs @@ -1,5 +1,7 @@ -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using System.Diagnostics; +using System.Security.Claims; using XYZStore.DataAccess.Repository.IRepository; using XYZStore.Models; using XYZStore.Models.Models; @@ -20,21 +22,46 @@ public HomeController(ILogger logger, IUnitOfWork unitOfWork) } public IActionResult Index() { - IEnumerable productList = _unitOfWork.Product.GetAll(includeProperties:"Category,CoverType"); - return View(productList); + IEnumerable productList = _unitOfWork.Product.GetAll(includeProperties: "Category,CoverType"); + return View(productList); } - public IActionResult Details(int id) + public IActionResult Details(int productId) { ShoppingCart cartObj = new() { Count = 1, - Product = _unitOfWork.Product.GetFirstOrDefault(u => u.Id == id, includeProperties: "Category,CoverType") + ProductId = productId, + Product = _unitOfWork.Product.GetFirstOrDefault(u => u.Id == productId, includeProperties: "Category,CoverType") }; return View(cartObj); } - - public IActionResult Privacy() + [HttpPost] + [ValidateAntiForgeryToken] + [Authorize] + public IActionResult Details(ShoppingCart shoppingCart) + { + var claimsIdentity = (ClaimsIdentity)User.Identity; + var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + shoppingCart.ApplicationUserId = claim.Value; + + ShoppingCart cartFromDb = _unitOfWork.ShoppingCart.GetFirstOrDefault( + u=>u.ApplicationUserId==claim.Value && u.ProductId == shoppingCart.ProductId); + + if(cartFromDb == null) + { + _unitOfWork.ShoppingCart.Add(shoppingCart); + } + else + { + _unitOfWork.ShoppingCart.IncrementCount(cartFromDb, shoppingCart.Count); + } + _unitOfWork.Save(); + + return RedirectToAction(nameof(Index)); + } + + public IActionResult Privacy() { return View(); } diff --git a/XYZStore/Areas/Customer/Views/Cart/Index.cshtml b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml new file mode 100644 index 0000000..b1ba9e7 --- /dev/null +++ b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml @@ -0,0 +1,76 @@ +@model XYZStore.Models.ViewModels.ShoppingCartVM + +
+
+
+
+
+
+
+   + Shopping Cart +
+ +
+ +
+ @foreach(var item in Model.ListCart){ +
+
+ +
+
+
@item.Product.Title
+

@item.Product.Description

+
+
+
+
@item.Product.Pricex --Count--
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+ } +
+
+
    +
  • + Total (USD) + $ --TOTAL-- +
  • +
+
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/XYZStore/Areas/Customer/Views/Home/Details.cshtml b/XYZStore/Areas/Customer/Views/Home/Details.cshtml index 37245df..d5e5c5d 100644 --- a/XYZStore/Areas/Customer/Views/Home/Details.cshtml +++ b/XYZStore/Areas/Customer/Views/Home/Details.cshtml @@ -1,6 +1,7 @@ @model XYZStore.Models.Models.ShoppingCart
+
diff --git a/XYZStore/Areas/Customer/Views/Home/Index.cshtml b/XYZStore/Areas/Customer/Views/Home/Index.cshtml index 718fd7a..2ea2c37 100644 --- a/XYZStore/Areas/Customer/Views/Home/Index.cshtml +++ b/XYZStore/Areas/Customer/Views/Home/Index.cshtml @@ -28,7 +28,7 @@
diff --git a/XYZStore/Program.cs b/XYZStore/Program.cs index 6a2c7f3..e012fdc 100644 --- a/XYZStore/Program.cs +++ b/XYZStore/Program.cs @@ -20,6 +20,13 @@ builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddRazorPages().AddRazorRuntimeCompilation(); +builder.Services.ConfigureApplicationCookie(options => +{ + options.LoginPath = $"/Identity/Account/Login"; + options.LogoutPath = $"/Identity/Account/Logout"; + options.AccessDeniedPath = $"/IdentityAccount/AccessDenied"; +}); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/XYZStore/Views/Shared/_Layout.cshtml b/XYZStore/Views/Shared/_Layout.cshtml index bc0fda3..270dafc 100644 --- a/XYZStore/Views/Shared/_Layout.cshtml +++ b/XYZStore/Views/Shared/_Layout.cshtml @@ -34,6 +34,11 @@
+ @* From b89e6b468759db1d6de90e6923c97a8c1d59e784 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Thu, 15 Sep 2022 15:07:24 +0200 Subject: [PATCH 05/12] More ShoppingCart stuff --- SQLQuery1.sql | 6 +- XYZStore.Models/Models/ShoppingCart.cs | 2 + XYZStore.Models/ViewModels/ShoppingCartVM.cs | 1 + .../Customer/Controllers/CartController.cs | 77 ++++++++++- .../Areas/Customer/Views/Cart/Index.cshtml | 129 +++++++++--------- .../Areas/Customer/Views/Cart/Summary.cshtml | 108 +++++++++++++++ .../Areas/Customer/Views/Home/Details.cshtml | 14 +- .../0418446a-7351-4107-ba48-e250923db174.jpg | Bin 0 -> 39528 bytes .../5bdff320-ec2a-4910-b465-f641a1e27a47.jpg | Bin 0 -> 37010 bytes .../60844784-fc44-4731-9dc4-abda3af7d068.jpg | Bin 0 -> 47981 bytes .../65f71195-73a9-47ef-95b2-11707184b325.jpg | Bin 0 -> 36756 bytes .../67e22567-ab21-4d32-ba8b-d6a498fade65.jpg | Bin 0 -> 15566 bytes .../87f87bc3-5c66-4b65-b1c7-b08d7077a724.jpg | Bin 0 -> 27436 bytes .../986e73c5-8e8c-4c67-a23b-ac8b4dd1e423.jpg | Bin 0 -> 33034 bytes 14 files changed, 261 insertions(+), 76 deletions(-) create mode 100644 XYZStore/Areas/Customer/Views/Cart/Summary.cshtml create mode 100644 XYZStore/wwwroot/images/products/0418446a-7351-4107-ba48-e250923db174.jpg create mode 100644 XYZStore/wwwroot/images/products/5bdff320-ec2a-4910-b465-f641a1e27a47.jpg create mode 100644 XYZStore/wwwroot/images/products/60844784-fc44-4731-9dc4-abda3af7d068.jpg create mode 100644 XYZStore/wwwroot/images/products/65f71195-73a9-47ef-95b2-11707184b325.jpg create mode 100644 XYZStore/wwwroot/images/products/67e22567-ab21-4d32-ba8b-d6a498fade65.jpg create mode 100644 XYZStore/wwwroot/images/products/87f87bc3-5c66-4b65-b1c7-b08d7077a724.jpg create mode 100644 XYZStore/wwwroot/images/products/986e73c5-8e8c-4c67-a23b-ac8b4dd1e423.jpg diff --git a/SQLQuery1.sql b/SQLQuery1.sql index f578c55..37296f4 100644 --- a/SQLQuery1.sql +++ b/SQLQuery1.sql @@ -1,4 +1,8 @@ select * from dbo.AspNetUsers select * from dbo.AspNetUserRoles select * from dbo.AspNetRoles -select * from dbo.ShoppingCarts \ No newline at end of file +select * from dbo.ShoppingCarts +select * from dbo.Companies +select * from dbo.Categories +select * from dbo.Products +select * from dbo.CoverType diff --git a/XYZStore.Models/Models/ShoppingCart.cs b/XYZStore.Models/Models/ShoppingCart.cs index 974e0d1..0fb0f36 100644 --- a/XYZStore.Models/Models/ShoppingCart.cs +++ b/XYZStore.Models/Models/ShoppingCart.cs @@ -20,5 +20,7 @@ public class ShoppingCart public string ApplicationUserId { get; set; } [ForeignKey("ApplicationUserId")] public ApplicationUser ApplicationUser { get; set; } + [NotMapped] + public double Price { get; set; } } } diff --git a/XYZStore.Models/ViewModels/ShoppingCartVM.cs b/XYZStore.Models/ViewModels/ShoppingCartVM.cs index 01c788c..1e4baca 100644 --- a/XYZStore.Models/ViewModels/ShoppingCartVM.cs +++ b/XYZStore.Models/ViewModels/ShoppingCartVM.cs @@ -10,5 +10,6 @@ namespace XYZStore.Models.ViewModels public class ShoppingCartVM { public IEnumerable ListCart { get; set; } + public double CartTotal { get; set; } } } diff --git a/XYZStore/Areas/Customer/Controllers/CartController.cs b/XYZStore/Areas/Customer/Controllers/CartController.cs index 2eff9f6..dde366c 100644 --- a/XYZStore/Areas/Customer/Controllers/CartController.cs +++ b/XYZStore/Areas/Customer/Controllers/CartController.cs @@ -14,7 +14,7 @@ public class CartController : Controller private readonly IUnitOfWork _unitOfWork; public ShoppingCartVM ShoppingCartVM { get; set; } - + public int OrderTotal { get; set; } public CartController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; @@ -29,8 +29,79 @@ public IActionResult Index() ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, includeProperties: "Product") }; - + foreach(var cart in ShoppingCartVM.ListCart) + { + cart.Price = GetPriceBasedOnQuntity(cart.Count,cart.Product.Price, + cart.Product.Price5,cart.Product.Price10); + ShoppingCartVM.CartTotal += (cart.Price * cart.Count); + } return View(ShoppingCartVM); } - } + public IActionResult Summary() + { + //var claimsIdentity = (ClaimsIdentity)User.Identity; + //var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + + //ShoppingCartVM = new ShoppingCartVM() + //{ + // ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, + // includeProperties: "Product") + //}; + //foreach (var cart in ShoppingCartVM.ListCart) + //{ + // cart.Price = GetPriceBasedOnQuntity(cart.Count, cart.Product.Price, + // cart.Product.Price5, cart.Product.Price10); + // ShoppingCartVM.CartTotal += (cart.Price * cart.Count); + //} + //return View(ShoppingCartVM); + return View(); + } + + public IActionResult Plus(int cartId) + { + var cart = _unitOfWork.ShoppingCart.GetFirstOrDefault(u => u.Id == cartId); + _unitOfWork.ShoppingCart.IncrementCount(cart, 1); + _unitOfWork.Save(); + return RedirectToAction(nameof(Index)); + } + public IActionResult Minus(int cartId) + { + var cart = _unitOfWork.ShoppingCart.GetFirstOrDefault(u => u.Id == cartId); + if(cart.Count <= 1) + { + _unitOfWork.ShoppingCart.Remove(cart); + } + else + { + _unitOfWork.ShoppingCart.DecrementCount(cart, 1); + } + + _unitOfWork.Save(); + return RedirectToAction(nameof(Index)); + } + public IActionResult Remove(int cartId) + { + var cart = _unitOfWork.ShoppingCart.GetFirstOrDefault(u => u.Id == cartId); + _unitOfWork.ShoppingCart.Remove(cart); + _unitOfWork.Save(); + return RedirectToAction(nameof(Index)); + } + + private double GetPriceBasedOnQuntity(double quantity,double price,double price5,double price10) + { + if(quantity <= 5) + { + return price; + } + else + { + + if(quantity <=10) + { + return price5; + } + return price10; + } + } + } } diff --git a/XYZStore/Areas/Customer/Views/Cart/Index.cshtml b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml index b1ba9e7..f63e9ab 100644 --- a/XYZStore/Areas/Customer/Views/Cart/Index.cshtml +++ b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml @@ -1,76 +1,73 @@ @model XYZStore.Models.ViewModels.ShoppingCartVM - -
-
-
-
-
-
-   - Shopping Cart -
- -
+ +
+
+
+
+
+
+   + Shopping Cart +
+ +
+
+ @foreach(var item in Model.ListCart) + { +
+
+ +
+
+
@item.Product.Title
+

@Html.Raw(item.Product.Description)

+
+
+
+
@item.Price.ToString("c") +  x @item.Count
+
+
+
+ + +     -
- @foreach(var item in Model.ListCart){ -
-
- -
-
-
@item.Product.Title
-

@item.Product.Description

-
-
-
-
@item.Product.Pricex --Count--
-
-
-
- -
-
- -
-
-
- + + +     + + + +
-
-
- } +
+
+
+ }
    -
  • - Total (USD) - $ --TOTAL-- -
  • -
-
-
-
- -
-
+
  • + Total (SEK) + $$$ @Model.CartTotal.ToString("c") +
  • + +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml b/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml new file mode 100644 index 0000000..af5d05b --- /dev/null +++ b/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml @@ -0,0 +1,108 @@ + +
    +
    +
    +
    +
    +
    +
    +   + Order Summary +
    + +
    +
    +
    +
    +
    +
    +

    + PickUp Details: +

    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +

    + Order Summary: +

    +
      +
    • +
      +
      --TITLE--
      + Quantity: --COUNT-- +
      + $ --PRICE* COUNT-- +
    • +
    • + Total (USD) + $--GRAND TOTAL-- +
    • +
    +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/XYZStore/Areas/Customer/Views/Home/Details.cshtml b/XYZStore/Areas/Customer/Views/Home/Details.cshtml index d5e5c5d..4b29a66 100644 --- a/XYZStore/Areas/Customer/Views/Home/Details.cshtml +++ b/XYZStore/Areas/Customer/Views/Home/Details.cshtml @@ -18,10 +18,11 @@
    -
    IMDB : @Model.Product.IMDB
    +
    IMDB: @Model.Product.IMDB
    -
    List Price: @Model.Product.ListPrice.ToString("c")
    +
    Old Price: @Model.Product.ListPrice.ToString("c")
    +
    New Price: @Model.Product.Price.ToString("c")
    @@ -33,9 +34,9 @@
    6-10
    -
    + @*
    100+
    -
    +
    *@
    @@ -47,10 +48,11 @@
    @Model.Product.Price10.ToString("c")
    -
    + @*
    @Model.Product.ListPrice.ToString("c")
    -
    +
    *@
    +

    @Model.Product.Description

    diff --git a/XYZStore/wwwroot/images/products/0418446a-7351-4107-ba48-e250923db174.jpg b/XYZStore/wwwroot/images/products/0418446a-7351-4107-ba48-e250923db174.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94a0f628ef7885d17c5575be197fa7a5fe6e0a1b GIT binary patch literal 39528 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

    =YsNx$Bf=Tv}^P`p5F?_=`azbpuYN6I>gL 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 ^pkH!{<Eims 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 literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/5bdff320-ec2a-4910-b465-f641a1e27a47.jpg b/XYZStore/wwwroot/images/products/5bdff320-ec2a-4910-b465-f641a1e27a47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf9dbb8c5615c35e73b30d4be90175be6096b1f9 GIT binary patch literal 37010 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 literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/60844784-fc44-4731-9dc4-abda3af7d068.jpg b/XYZStore/wwwroot/images/products/60844784-fc44-4731-9dc4-abda3af7d068.jpg new file mode 100644 index 0000000000000000000000000000000000000000..229717ed58a914a1f3f596358d9e301945bfb450 GIT binary patch literal 47981 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

    75U}W+ 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 Ovr3@+B;T+9=KcpU3<+ES literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/65f71195-73a9-47ef-95b2-11707184b325.jpg b/XYZStore/wwwroot/images/products/65f71195-73a9-47ef-95b2-11707184b325.jpg new file mode 100644 index 0000000000000000000000000000000000000000..45d0e61a25b73d8a2d8d50ee3c3a8234635c4a56 GIT binary patch literal 36756 zcmbTec~q0v`ZgS^7KbWzt_s9TFja&c1w}CM9BXZi6jKLe5Xezf1jG~&Aq;s=rHYD@ z5(+thCP$fME;7j=DKbO^j4}m+gdq$vW+HR)E(`|Eq(sB5tnkUV?ud${iF zy0*rC;|S{OQ$G@aL@isk4D~PY2W1>Z?LH9|cnyVeb3^Szp-`*9_co%IgRho>KYzcB zgQ(-EFP1G^`uo3L%U3R6dVRTK#qyOVUz(UK{adwq?dnyl)~qryS+j1->}Tsj6#EF zT?tmSw5b2}TK2{A6)V34kF;hj_<_o=!Q(Gq{snm0l`B?&pN<3HN3Gbfa^trLj(xf5 z%q5fEp_>o>n*3~)<@aTcTh4xzVC*i3-C4b6>$Y#U@37i~{ci6*`$LBvjyO6U|KY@s zgpC)2vUfKV@h28nTTG{_z*#EmO0qU#e%fR6+-++Qp zYIdU$wG%5DPO#B)hT3rYaysJ8r%F_QbWiyqFA>8AGI)rsr<@($RC`B?_psX;I0fxW z>b%7l8Lme!9>FjmT)Q0Zqq0J1zDaqf(M>Mmb*FQVf5JP6Rxid~J1LUs>&TiwtLT;N z)>V2!1O*znQkBG4`32||MpSNuh_Nb!z=+y!M5!l;0o45K4!0#Vv0)!c z5y~~9lC7JSv=8%2zYdk@#$dE0lgtg)@haeUN6Y;EdJ`zqf=+?7KfI*ABu*Gn?M@D0d^u%{p81)4|}rhFH0VcAj>F1#4dvo*UcNQf&Gc&HPnm zPsI?WJq=Ra-U`<;5dk&11#P&Mc1mq3Qq8xOL=84a?zow0uBc9!!^rCIFId*3AtY@e zR$FS=?)|Un%LfSS_vAR42){-?dRxRtV0KW_^WzFt9-9P&$rD?AdK&(rCU`zPnvZuI zt@GM#M0rg55YPsFX}dG5OzXq#x5eLI2+6KBqJA`@e$NwMHKIx)#^J9k2J|6H>LE`> zpsj7T5k*Ks9HB1G>=U-U8!_>N&_-$~Iu)G9;3);?&%H*JBhQcx6EaNWr#_0sF74)>)tS2C-O)9o zwT^qb#_y19N!Eq{COOTBDr4%m4ZExT$BxEXj|o%5$JVW%5gz?U(GQ8VeJ72mNNlb=@q4X(mmwx2Lu}xHtZuY^h63=UQ^6!V~wa8eZQWgnewx>wo#g#*iUk7Qe#^! z+&XR_F4Hhhp!IUuY`YOfq1#zJ~;$;drn~QDaUubU|XgLxKH*2tr zpCoBDF}XyvUPkYbgCG6K@Th#8H@}y4+9FT9b{lPZEx$On4Ws)i8Ri`^qGEoGU&qhH z{6bVdb@|SSn&61>1)uSk?9;+D$r{!b@+Zb)6Sq6T&b;cB$W!+Q6K_2uKPix2AMgp|jDea4xa|zOfJ69y6yCT_mlIsIl zG)B_QlASw?eB4TjRx&tC!=9O4AUzm1y&}b2P;#y^CLx^RN~k76&UpX@)GWpn(hr(0 zMr9*T&WX8!^QNX!Ush_7F9E$Es;*5@F{p5D@y^g^1A>+vZPyCE4*BAAFVs?c@8ESU zc>zQt(h{aM`Sqq^$ky?{-Q%9zx69~VWlr=o1umhM`2f%RQ((vtb%13;+5#0l-iTT= z7klVZ&Wv|!PVT3+;E5J2n`&My;81mMji}i?rV(Xh-M$FlGom(BT69pOSUS40Ir+1av&aKS zz+ONQ#zPPO)veP-xpo=!6DQF!ZU72R*SCi$hZ-8F#@Y!WRQ?Ut*euk>-Mdkwpn~_;bL`L|xu)nRM|7dS{ZSo+I>d{z?Cm$}$)a|+Ixvjz z!k4JLuGc-l4{IhSsO(v2nl0Xk+jw092L)~7S@D?b>eD{Hl~EZ(G`T9Y&4_wF`vD4q z2MRBIR17+lbxl;&mC-xvqd;TDY7CzurlQx^Ybg&gm9?^kkokz!RscxAd`SPmD!NB{ ze&)E~EdI&qFLRt&@BbThA<$)~I!tzQ{z`BC8JmgMiu%w&L*6?%o~M5RVjmI@#YE2e z>q7J-wT<-fg~0kBq(Rpl!CSLDpJhM}Dh79Z(n&qYm5$UA+HOO^q0+TMlcrz2ZpdI? zms7;M;@fNbt{72itSf9e4@u{L9DdnammkIFZkVp#sx+boqH~@^r#{i%V4SciV%HkR zVflNKkO-=1c5&!=kkHY;+r1I{tICxg>VaV0_pvT1XYWAeKHeZ!f38SrXI%7x`UsdX zf-c`O%@NPDQ-vYQTGvW+YRuM(BAjHrJ-rE&e#mFAC&cDPkNgLAls8s%yz0ymId zQlTTHhe!!FG0&twfmCA6m?G-x6Z`NM;b z3~s#*tpSmeKfF@!@7$Aim}XN=KUr@WUZ}6Zq`f2AAp=6f1<2oUnDi?LjmP;%U|4?f zC4N!1GRJYbm28~hX+$ZrBjy(9+eTd8N-tyv=g+WwLN#E^3Y+qXxu7{1hB%;q?Kh%& z&(r>q5x3S4Y$Sh%4xW79maG%5dbU znu1l@hfkLoGEQ=)p59`a)~66;pg8OsM!Y?ajk)cBULp%rj2xcG)60qsPaXg27FcY{ zny&5+N(&t#=-PsX_)Vi1eN8%8QKFiZcKH>#HN9Li)a+s@w`4d%Q%}Q;C<`bs1U)K# z2#s!UXkZMU*Fg&-G9yYfi+Ix(NSZ+3ZzusIRqFDA_w|OScIQOQ`CmuT_f&p90I8;e zV~$rbG;I0%BeU_Y7*V{1 ziIU8Hi$+vb@LBesYSZT~Hn9hgE{+ajq6a2YR5Y@_vV_u#wy1}6EdPM|jlcynL>gNw|%s7Z{XFP8o_zdxQGCy(FVs9Vb z_r*zpbzByy44}u0!#L#oFtpG$+=yD9MmQwr4D|gzdzr+X)0^a9S5`^Y0nLJ;$6SMb zQZ4U+5HH;muR9o()s!*O!{jrigDvKtSOI!{3s!7B{Oau3o5jH?M4EQYM9j zJqRP43kRM7PBVXxn)T${HL)0{t@O)@Xs7d-nO94P{Jd&ae)HXNk z4|sRoN%&33{$HYQQq+V+9q5k8*h&41LSgIGElBme=~mW0cDW;G+h-R@eHW(Y3V6BG zwQ%}`55eNuL_b&?_ba=v*@6Mh$!1zW2fpFRtYs^n!WXcM8&dXlvew%SdOL zls;Ipn{KdZI#Eqmag<#o1w1p`tPn5bl?Hok8V=qtNCl0k`OShOzU?v{p=weUH6cgg zuQmGcBZe4{vJctyNhjxv7i>9HOmwB5dC-U&uAO!HYF5x%22Wnsp0DPofg{ZhIyb0c zEOoSb5twAqhL`ybn_|~j)dE~CzTX$^rs!izkdx1TPxnunJxLCMA;wJ^^~HarkH zD%S6cc7L+t544Q;j#0~bur-?7lo{MyhI~YLwQ{KU6VdD!{>1s2V>P`m;&QwxPtWB> zVIM&OoUhbPuD#e4x5{q++9Xm10eLxV@JL6>5ic-y?9=nr1|w>PR8o>t5VY-rQ;veJ zCFsjj4DPhwqEb9l+-mvQhT7gNxqnLg9p~>!nkn)YWXQXLE*U2Ej>HwOL;=Umi;wjfc zb9Bq&;%3%&oNlpwV$`l`fIZ+UP%Y)qL^gwnffsq8yuJ6sORZFo4!Iq7XRHn08I=V( zsUq(#&4MHuMpmbe!ru^AFoH93pN0G9{Urq;nK3rmdeVqm^kLVP_5{zKviP8%WJ|Gg zymDydDSL}0NT?9px<-@q$rGc7qd)aw<5kHgFt>#P095)~)yQq3**`#V@lF|jR^O#M zkLWy@6I`73ojw6%B!C?OezC{u@5Havk1qNuUM zE%z-eEt*AvU^8wFMjMwK!mmOeMdVj_;0EFrP6|Mms`+mJz1mdeIna=|gJytncCb9F>nKlh!x!QZLUl9G3 z>w-uJzsr)18OCWoVKg~F!yh9C&Z)2cXJ37)X(w!=x0cZFjlJr#xzfOZs^DCLc{96~ z0ciuko6q*Upwua6rSymR*ZYnZva1cx2T2w2hO52J?0Rrww1rdhIw&5ol$0<_Az89uA@Z6MB=&KAGPj$&b>CqJ9iymDl8!J8xt?MUF&M=VxaYSZ6C~HJ|2dMs` zL`<@Vt>}8aaaLKS_85t`$PBQ5ys{Rxo^8e=jFJyE{db15z4(^F-(6BtJQ@ehDG}eC zVJ7B+1zBGXhH~(`4fiDpcNaNdUH@4yT@~&2I&b)VbI2ndKRrp68`j;gKi7x9RN@!x zu+h1f$BaX#Vpsv<*cyNX0rsbN6t^FB_BdOK^fFwW@@*$JQ*AR(`i&14o$s4m#LpjwayD^bXa1u|4JGFv))c z?9V5nIVXK{87P5{)PNA+k4bghwgJpx@2iIpHO#cC8AV7zF#V zF{^Q+&5U(E#lY^6Wf@VByzftBUsNHofwS7jv%d}7KL&6w73v!TK*G(MkEdoeW_>=4 z_&y31l93tVDsUEQOXO09N4#22sO+=NzT@c9O}T^#6OsV*2=4w%=lCS*VQhi`Eg?NV zWx56V>tK{qA7s~@p`zQ=e@j89o54ZIM}~DeM8#@3Lj!H*ap1F7+)_J7NQ5|xAZGVq zTR=fD`m@ZN%J3W>_6`39 zm+oE42uJ6h9g(b^2e3`4>IGdjPCET^wPtS6vv9cl|*2R;3GO3EGr^f{o@} z9$p_C_GfiZC9Z;iDbt)KH|lEOX|^FesbQ5`3?86I3N@{+H2qWmy|nl7c*F*DPt3!J;+;&ESOF4mq@xtyQCh?ujc)`v$}8MIr~mR^K2t3 zxD@bZBhP;^@2Qu1l)U36O|Am2TlF5=3r43dkrKjD zJ*xq?L06q~F#N{5d)rKPjV`;6J2Z>$*IrA=5p;%RHAR}2bCFUNn6^PE3>r~e^~5P! zlan9aEOgMTB{Vc7rwtOjG%ABBLLVb)+?6i$Xl0kFV2*|MLPgA}n3gIWi51JGVU7tLA;r%sV1!SHh?-FUI8=mNFGY z?~fkyS10M%%qam8q2t8CQZ}-xT9P(9DozYhw9mWhHocL0ee#(}=3&!w$%9<9mS^`r z!^2f@Y=w)PL;?D(DavrQ`8H;p=&iz_1Ng!*=0T#HE^Ad z#KaoH(@xG-CD}2y6095Fhu3HWB__(>)l{ABu)6%X)PZh4JXe=*vk)?s}O$4SK zvrsNN9rP$r4>~_9YX%qQ3CrZNH5^d16 zumDvpJO?`zN===yFzt>Fl?*r5!jJK=NwXW)=VN8N4e94U`L}d2lzFz08b+X4)iX{^ zQp1R5w~eSed8|O&t^7^Be3bVKuUZ_;XVagvBP{>7V-{S zWure95gcCVM{cu7f7VZ1aGj4<8GPV6I+8(+$Uv~-^~0Lm5v+au3icW`S?AHr2y6iK z4k78{{RI#k?$}fvU|O})egN@25^m4*N?K>?*&XqnSpT-ZjwFP$iMqGo=QyE!wi;4m z`7YlEr6C8@hPaS1`c}a6JjK1~B2HeXnHf=e6ddAb3r}Zrl<#YKkI>~LWy{^k!Vze0 z20YD}NV#qUvBb-53WrfrPteku` z`EXDbsv*}tbgBVF_anXpt&x4^#O~PBqQnl<}aNNOsrd#jxgbaYh=eC z3~a!^YUslxX=O9RDq37U$hbloClU>y^nN|Z_BHlr$)YQ4@83SS=@0ZVztjF_Ej~1@ zEt72fw_>ltnmp8IM!Nym$@e+CzNzl^ZgbAz3;ffF__tGZRb@hMlS`(}ldTOtw^ihs zE=cIQIaL^CidZ$+Byn3VI6(es&|ybB2WLcm+m{M3^tJaEf!T6@FqW9z=De2SYiIEe zBREq4w1tjS-67xzCb9vn^Efj`-u-@NY$ncP(#@8v2?US3nFFARSJOxxv^p*y59J!3 zBcy$Vq~UfZfPgI8)zI_#??d!w9;ogdXyiYB)=9k4j_A~fae3!ckUi1AF#uRVpN-3%gzT1D z@og!x(6C%`I@5?+Rgz~WDAYuLJ!rUh1ez#1!`1QhiMn?>2V^xiS1{}3-1NWk7#v0Sm+?( zHNk5Qb?&-Dug4pFUXsk8g!%e{Vd52ND!Hlh;Ww{Ot>ta@^W;smQTDSuKpweS|0%^j zuHQBSZ5Wto*vC4W>1@)GCUpEe*Y$w?d7G*^;Q|NF@oMu=XBbAJQX2meSms0aHq>&P zxAjG$Kc{VD-OK}kS>1C*?!p7jdm@##3F#VMk*CH=aXt-w_5=Gv#`|o6V3@`{a007+ zt8cSb__v}Z?vw=18f4eZ*24#eF9wEjF=t7U0cOcGIpU=O0s~URpTNxz>!@nFi2pd& zYc#zGF1xkvxTk|d+89naMBJ8Y25Ui7?)I4eguT}sLs~#%**(wZzG9o`ql~DBer^`9 zU56a{sDFS-!s%4xf5MIbY`_p4{tbpp&T4J3v-MLZmT!18H zPZ3@|`j$T#S)_U5y( z;0KmzVDO%x16soX08x=xkkHK9rLGip9{21i&F;xg6LqGjSOLfnCD31fU(@}V$ewd? ziKLHU141!?F1CtR@3%Q}PMNy?#tCm$_sk-%jJ7j2C}HIEYjgs#Ey|XER=RRA%+pW| zaBW3pVySit6AC8n0ct3J2GVaxY-Xb)==X>F5xjKUZxutfd=ld#&(!x5HDer1oHCv& z6qy0tk4F~r$8m2Ufe?L9xV2WoiC;{&Kic`dPn&baf@+%-PzOX4F{U)1Gs51=I>6@y z8d3M;Ls8vsYIjU+PPNvrICR3740g%JrdVVcU!sq48+_d5j*kM&2o+CE^BO#ZY1AtrMNxFO+4@?_f-KtoPya%;Dz-W$N7iYSY|nN^BlXhoEt%BNezAT3_J z*gyVIFxXB<(y2?e!WW)>O8YH%Qyl2BA~4&K?Nsbpe1V31%#e74W~z^>SEojd6}z65 ze)&4*Q$KAHh~Lv4Gy^X^KYM@lk9E1+B5%!-NDj))Px`jtzl^9L zoQ3DC(6U;6HEVX`MdAzizv}q243X+37vmS8ya6wEd5R2EhJ%SqNGVlF`v~parMA0- zR^GVX6`YZ$Jxm8{YR7>n;&uS_=(|}^9ZUuq^J4=)jNh5$sQ0@>YTx#dlnIc@@rp;H85$bKhsuxh&`6|Ir>KQ zPoX}<{l5d1cY*+hE`;wFAPwSi*%j6E;nWe%++gNTdcr}16(=1jm=PgxEKdWT3J;n= zaojVJ>AGoem-v9VoMTpxm=~mmEToni(R8->r1|-2Ig3(y{b1D1SyHcmJmL)Z!QD7J zLjclUl1=h2JZ|1(UcCE@CSkr`V19nokD`txQi5Gyv~wGyb>OmLs-1h#!#q0Usr|Ht zHX@Ju^c9~9G1gs;c) zfofqNWyxqg!ikt_qbyM}iJ1UuO8y|27tyZ1{*7HPw@f;jQxY%YKCp)dWC&4zEH2#Q z87_UI5h?EkohOtF_{Un0yG;Pt?CFkm*wT`10g%^&SkCJtqAe6N2@g6gG+hch&0cu# z^W(m!(3nNC^yuh(N!eH;6cAseS|z1&BBPpOxAhzq^J%Gor4?HITKnD$1{{!+p?Y!}o(@CyJAjsiU0De#G!=H?GKWMR=Yf?PD8OUjdvU zPuO*7I8YKC{Uzwf8L9M^($yEa!RUS%kU3nr$t<3Is0r?`3{)5lM7r1K2*+(VwIjZw8S;Sg$yubSw&BQttP!0-u%3rg$%oW zP_+4{%z@dv+R#(I0dTsY7ft8s7fXNT{?hTSPJrzn34ad{^*FPY?P_;PgH5z>t#|{_ z3Bt{i;hdSY+aFzxDA>|4L5o8^u-D?Zjm%#=`Wf$TC=LJtx9R7kNwO{gV6Ap1ZIiM@ zU1^asLSHMGuD-x`*ha2>#bF#7mu1QEoFOh&FDp$1Ew0moOHjvC{n6UDC3wz3lC6{K z)y>o&I8oFA5sxDYmJSR`~(k_N<0(UjJ8(Zi>JnC8~C z7#x#03$}ium~XJ71IWtnKd&-PQ5#XW|K@PuOg9OsdG#UQ7BbO)v~CsBO~vXfneG4M z{NQ`xYp0=+>|x2p5Ld9?<6|U~z(0M|@bStXn~CmukZ)tPFX>1$C~`t-s+2=_aU`zr z$goH-%ecvm0OB4X0hW;eWF+hA6w_RxXa-Up6~h3Ig>>*#Kh0*aOjxw8XCD9_JSduH&3omCRD|ur5;ZUe2zW)9PL)YKxQ1fj?6!Q2x$YY;+Bm- zzjCB5<$d@-fN54oQAk}2HWRN{rgj$q)BqS|zi5d$`j{$x;)3CS`=<_- zm`9s5nfo`>{?WI8j@BD)kq`{HG=j;JABTTroY4?z&V<|Fq6xot!V?3AAEGYET%iQv zPB}1ry_)QrpU}l_(46swyS*n7yWl>{9~s&iSk0Uc)x3nI9K$vrXl@>qmuXIUWV`~m z+Bb;bu&viVCMMGnP!| zzw}JDo|}3R8r@okZE=fi&X~HdZ_n&J``$J92%e)>yabs6Bm@2_slf#3EmDej+%U-u zoge@Z>|gp*c~5p|v0Cqre%Q^0J z%aG2_Z8B#kV3Obp4J}|n|8C+?Ov|>lRfj0Qhxt#|=^JyWL%CQcR{yfZ)bC+WP#8_T z1dN~F|1^hpq1?S)yRIml3k`6l*n)Ax9GJLkI2(hvLMDsm{w?POZC0)E6swM3;P&sb z0NiE3gCs>nIG1$*G_Mz2=SLeo4QZk!Q-mQ8DQEz#=uQHyYilhNST#*^NEoKYl}M*% zV7-YeAZY@CYBx^OseHdNJ9H{_UC?Fcr*@!#B$B^5#Cyy-SkFInG2b>~?KIT)KcAKx z(K2fhz?_7O0K{U;-(?%d4^TsS6B^De6glbcOi~@7!dJoJ&F91w@4Mh~vsAq1ml-b* zvL2vvSuc>)SaJ*d8|0(RC-zWp2t2y0YyMUZ1`sPE!+gTu1M=TU!Pk0Byk701^Xv^7 zN$MkFGC(z*gmv!>kHB(%p|#gi8X+|nY9)O$yNPQk%lRzr|8&fZEuDSQW>t~)5kwA2 zNYK3#b?iH*y!Of|cB%#52>lD%;WaC`%fELc1Z*5Tktnt_%ma4^eSkcMeX};ig|aE? z+N@i~OqZ+L9Gm2|uAV$=#nm#Ca%CVZqh z1l~Y4Rnkw?zlu}s*vz0NbHQiZV9J5s39JUZ>1p5FITDA_c@~orj7}`Bq&NWGrz;j4 zia7%h5}_C$&I6Z?YFtya@9VzIvC^*z)XnUf@sHyMzM-Oo_h?cXu`5h_J8x{=Zh?&J zUWxRTC#q;CfU9Xz0E%K(u&J9QmbI^E0p0OXa3qUyk?ul-KKdusKK2)__`St!M^Ty! zNRnJR*Q#=ntn5a-dYq8DQP)nFoiE0FN_J(cBLBfN8BkcC0Tp%uXtW@wef^W@{{1w5 zP4jdWTlv1yKBjH|L`pk*$s$acyx>)r#Pebtv2ExE(QGRRbc);`AeD&zD2m&i>zqj4 zyZ*h~X+N<%m;huJfLQb15yF1DnO$d?xV1If^y%c1ySIR@ig-5q`mkfE{sHJ}Rmoug z_kM@rbpuB8pGm7RNv^PF6ss*z^7?^uuG8ammJt^YZ(AiHT=FECQa~M$d@vzePPI9nO5HUN+yya zplrM0ISLT@?IeYJn_Au|)x10@)vzdfd6rH7*=+$= zsy6S7JsK02t5L5WckX3T>;)l{OzN2F*S>L?P0{!;S88M=mbs;uc1a(mPBx{xSk3NW zif#P?T|aqbc80Fr%WSqWJyu&SNlMN4nYlm<5QL1d4L3mYv^zrcrCOeL0tELU>AnJ9 ztmAwF-7L(b@9Gga!1VfiJa3xWOV_tKDE>}Ek)PKh_7B-ujc-Yr<< zaiPT)$uRJI>%N%H0B)S(?19cA!r0FHmML=|4S6cRCCmh448y<|nhS+kx0ed|Ejug{ zvSz$*K6qwG5}oTgWL+1N_@C$1RY_i$ly+c+nGrGSaU;lM6D}?R`r1CmJWK$YsKXnz z7fJ&zDe1VmY73v2gmAD=-DJS|vKRZjHTv2dYPT}g6t>Sxc&4i*9fZ|%sEWmtJ$pCPYEe= z(|`p-tFgh<%_(gFt}St*eZ9PIVwc6A{Zl52SFvX}RPqh@4ZHgqKU-&06soDrFQRoS z|M3}EoL2y!sjM4pM43kf-tC{-dQ*^2CP-WItYDE9SKPVC0Ha0{$n8EpTDn$g#|Sw~ z+TABO0!-MU{OKz@pf_+lG`K-sIF=WGi|E1wz<7g@5FRlJ^N#>dqD6rd93QC=WT%zQ z_+fg%jF=X7Y_zV;x{9?Y%Q5IIN2#&lcQAKnM|1*7W7Fq@RbyV>H})l{&B!rhVh3pxOA5-vm4ujp$C;VhaIoTvgj8+ zEbPC`L=eIRJbr4CG{7IFCoG!dewHc7U#hd-XtTpE`UP?XzzbV&u?>0YXziW)({wkq ze{tyWy6C=Ppw@WdKyqC5CETTLX;bFofl(qDbR2*yJxXZ(=yL2`_!>mt=&43G3n&lp zxPpt^{At9OE4W#~u|s@HK)GfmU&xzNJv%0%Y#8KXLb;S};wx-D$h=dd&0{rtGtT9R zb#_C*Km&hC;fz{>iE$U0*PRozuk;+nOITT}3-^;w_3Lpj$UyCny4Z#TuJ69~3GSrF zW4$x~zmiX98qGrcx%**YD2%{X$N3Ud=t_t!Z|K z-0xUEc_xL2*8Z3us?4O@k~Gu4Q-2NrTCQe#$#(&3m=_cY)>xP##WtC{Ho;pWI<2qJ zuEkTWD#HHOIZ8j$)q70mBI1CQ$j$d9QT!=5EoTuv=oLKFe5oJ?H}u3_+GBY3f%eXb zdRe~%Uln<#ACc`dpw#}Ore*52y2B7|KAE87=mNbwIIHYQzj4+JDT?Z30$|v070@=Q z!kzdpE`~M&X(gF} z1(00Hd-QdigV++F0=Y%m7*Qd<&rcQr_nQVNbzx2_={NE3^L~=T7CT?u0-=LV-yC-0 zZw06DU8Ui|jM9kel-(Bp97_I4E#n=R4E@F)WcGRg6i%BVReqw<+^MDyO6s>g3*LC# zP?y)lW(R+2%?=RM??^QpcqTWcA9`v%TK_Vz%4MyDlz64K*QN7Ckl(jmqMl0UYv5Ed z44BIiTgpU9xFL_#60Vo}obFiL#Bi*$q#=b0t}w+hcymH`PWps~U6*Yrt9Quv(*OKn zvGB!ye}Kpw0JExU2QVDCd4FIuP}G#MI`K07vFh6H5}Tq@n}}8O99Z`%Cy8hU<^*j3 z&@^^LIpCp+ymQ0$&0|}3X#dh?DIWr?P3hNLS627gJ7VZ0fa23a5gE?*b&4{+0sthH z&LN6C%KJCodi3>H(pvSM;j@f&4u+k&fR2|sdqCB*XE8}6U4TyT*=379O0tkS+77P| zs%0vf@d~!^b98n3WL!MrWylyiHG|(Y;_NYE`Y20!ApuD=?}6)+Oob-^XWo8Fx>rPdvoCh_=>ub@@Oos%ejw%ey1w{?EF294b-RxX7@gVU zN;}CX_8Mff{z@7Dko9&2KhnveC6?mVu3ozDk0gTiYVjM70@jI(QefRKz=U|;ZSJZjVr-AJ*$3t1c8(q!wK+F1;2u(a; zz`T=4Cl)!ucr7l1%h`?|re`0MuF>wqI%E>MUCcg92rFQzb=N%T5?;De1uWws(HG)a z<-z$;NkZ3)7uiEZ9ZyJ`@s?>S;0;Z|RA*%kC3l(@pyg?xQqni+855G<{g#-;biZ8xIUmN#YG%-=&FeR>$$s(y)6q;XfK{RS;viak!_IEn@)k;tw}2aB z1`tOn*pEIwQA82c9q&8j`q<&G9Tfc@!T8_Y64CPG9LUXF2HegygeM|MAFIa{Qtt%t zLDiL;Xh0wDx|JD2Rxrc46D^wojeV+p$qVeF-^d4dxbA!J$$0^{pIp31#es_^0>XKP z_%6-f@Vs)`Qp!y%skCvyDWcu-wCf&`fve8LP*KF$3FbhLdyB6Y2YnAi^KJnMe(Ca0 zF-KoflL9WhfB+E8=05e@{>P;HuFg>{n{oBR2bw=(1*8HGgSF%S%Rt3t5GF3P#_Q1f z?S1<(4Gru@2LYZ_D<200(nGQ?&@6RI%bBao>b!&%WOw_gAPtsuVEG`P*RL#!#Tw`e z@jQLKry6b@-ed!hn_f?oe(DGN%A4@(L}~D-$3vI(YST9j z8_TLClT0&jT8=ZPA07)v8|=ZcfYJ^6?G(7@qh2o>^-a)QYPt6)MN3zfhU=@QW+d0=^q?_Z$@;6rKcE;NH%#xwvo0 z$Fsbqy}<5O8l-wu8dGug4=%A^3D0b#k!5coBdoVNXbc2lJ+|gRB$1sm7pOc|vIm|sfl>)Z!XCDv3ep8kTkMopu*^Q( z0%|kpDq~5cs$-MXWLKmRyaS6p3xg?aG4*u#!>4w=E{?H;GD%S_S@}m8SRZ`&qy=EM zF)UvybiZLg7#Ys3Yrb9G=Y5(Pj9%z6Rgg8NhO0h?XZVv$mRZuwy2GxsjzvJU5o2^X z{bEwR*pL6;?pxb;vE8Z~mRP(qD_G>e1)#UHvJUb3yz~n%cwGk{9fAt}sTo%0bsgF} z_6p&ui=VgU4HK<8qOY*8r#ZsYY^GIQpzeU0-z>zbO|xeF4rJiwANT{77tA7^zyskM zTP+n4BxEf<(qetzVn5I+4f>4VSRP1XiD*>ZJgwiNbNnpE!`EK*`6K*S^p2Ew55d)v z&9L(Q5ugJ4`W!Ae&U)@-2P9ahuXEpLiA?6tj2axq>}l%<;`Wq9m@(QWG&J|3r7?_% zZ?l${B5RiG$kUv!VnGb9no`~@o&X-W>^3}e<3(!K@XS(0oyraa9e@AqaZkhZdg#CU zIQ6gjK_0{X$?en$04x>@3p5-Nx%n|#nWip$K`IF0@95`%CLP9!iAsfE0^d4i5r=L-?b4x?1I(`kSYt&ah zW6hbV%ma|Bp$mOuh7*K)#P6dWEN3}_i??Y)*^18CBx+mnjm!uf#W=tkK3TLqwxg^bMm4f!A}z4!-*oChi#SJDmW0_Mv{%cDqq^hlx$Fp zU99Km%aERb1UGDy>z5VutK*OBuFwJ!@(e@0ztMa^@dt{AgCRgKO95t!3Bwa%L=k&t zrrxQgj}Dvn7B{EyHxP9-yHeWI_8o8xagr;4>*^>t2YK2Ln-4`b`MqMbuA1{VjC)wX z=}OP+rJENjF{q^cDq2(YjUC)KUiO1%p`Rxa;S7^&fsg z-l?4akPv^y$*h$2YT$u}WM*ez9;Aq9@-Th-I(=w9$YVU9-(m|ttNtJ{ZUybiS(=zv z{P?iBgYHZD*`B;4XQ)FStFfkk9AzJq-biDfS@J#3r$%ESQ+V_e^%pX@=$T>wMd4~N z*~KJ9T?l5Iy9St&YbcmJbx42jy55_7f4@)aD9l^C6;IS!J#!e>W z#)e6&;~T#D%(t-Y$zlw;f>8IGKo&0MgZf?p4%S;QRyRuHo6#Hb{?xI;!ovTE53v=u zebjXuG6$@3!U?%zm zP-BsqGY!!AEPxg66Z~p~2IC*Y`w)<0pDWP$g2TSq;ae}bKm*8-KapzCLO~KBlgvxr*`8#^| zLot*<4DE^sxlV3fx7PI&a6arvb)1Q@Gd&}{mvx9Qo{xPoL4PL`0V&rL6tX9&`J-eD z->922!jmH@9S=zr+({pBQETD##SwJ#Ylk1ZDaEB%GTJ78|CCeU75DsPit6m325_RV zp}ZQDq||AaS#PWb{@ZQwiov)|7vh43b^oGn;D$$J2?>*ijP?#d$;3T}4g&rGpxK#% z%iEyxar?YGhT)1Smka>UJ&dSESA1wdM9#GL_*O_lpLJ?^{fH^^fuFYkf$lAEuz0m0 zC4lHhN;p5;4{rg*bM+6mRX-EZsc0>@=Y-6VhgyI^AWBSgQ#HyDhDigp%v>qp$T$)8@3BxU7A2WXlTXM?rskz@<=d6YB4|d?GtS zlu{3#qoTZI&{9zUAM- zk{h_WD7Kb@Td-@MNlL;00WjJg7k;WIyQ(@(Zm?9bUsr++4{bxL8jc=#_xaj4>T@sR z?wxzA{AM-V=eiN~btPwTr>K&9|B&xt(rUd~mx46c9N)OaaSYhGA5CCU6eSp)tqqJG9-oyU4NHSUY+~=Zty-=k) z4hq@tEGBjk?&Si6G7eDWZjWTOfY-!Y&M!UWd)fJv_B~MHoze5a6f;A_fFJ|^PXR!x z_}S@Ss3BiroKx-oYMyjIK(2og4OnKT()Yt+R3#m)Hlog!HSi&-ft@>~iF9#q25LRg z64cFzeBH^|V0BEuXxkz3mZx~5U1xI^vq%a0R`N0!Pide-GQ5hT-$3Cft$D9>3nvKG(7Z)%I^ON0_({5l5wGz zxAJTRxO;e&wEgsEpxuVUJAu+#6qUuREUW6ep&;Tx<1G&nRq0}r5wVH|3;{B5oyT9g zvZQpk=ZrUVfba1G2Ps`7$zVb3UX#p+DlR#Q|ROaSfy(87Ary}-2k<(}!uChcNf>cHC{5=6LF83~6p zl!dYjmIC2y7ra+4le!>W7}At$FR6r@wX|#Xulw+=g@LxcB)3>fL5tPMYC1DSlxWF4 zhECV(jxo;$JZO2e2Ur`=1artOM$EU($1b&x+$G|oKIyJX54MGz$rltQykjqc?8MUj z1o1=N@~fhhE4;6?$8k3<<{=}JF~p*Q4@xZ%2!9*G#4~6gMj*@^Kj&Qpip4ktR{rm^ zsCp@Bm^taFI{+`kyz8}n!P6jjdW6IJat04_1ujL9=M(<(!GI5EUDWei@`oD3jpwKE zK)@vVe&u4%JKQXdJ_x#3%3MNQ?9MY9!X&&gN<{*e(t7n`v`a-WeiaZA^uR2 zkFSjff-7)t)5q8S`-zbPQMq3|k)Q5r1T|YdS)=j8J!hEls!|&62fomy?9502Wt8@v z=2DH{lA?kaGsL%2jmJWnX&&LEiW;0v5fQHl$I;QWE6vX?>3kr``RcR%jN6cUb)ayr zMRz>%YnEJe9B$*|&(Svs#G(syNLJ6*L04Gj0ir7X22Rp1s3zEpQ@JF1;wAk)bEf{e zlXx`^eN()_5O-^&nB~?U0)85S(9Z}N%zH+@Uz=6Q+zg@DHT>4xRQILol-%Bmxd$9S zpA!2G?P1<-r|3i2^e#wJ9du{u)uA;g^c9)Y6?gaBul)&Y4p{H|ds+~8!2FHy##PQu%%qR@tmBR2 z1+HzIH6bK}9f=m!oYIsEBZlfU{X4Lf6Qqd(jkER_fi9DQxMY9Q5dN+5+hrx#jor@t z=(_eqvyYk*q7R|<0AO8O>n6=+!i?Kc#{6Y&MpAGs90>Mk$&4H z@y0>dyF@irWsk12nk>x8#($VgrCWuJXh_NH__|kh!(dBuNe>=v(&f9e3YGU=Iy76> zl{qKNdD;yQ%D@kpfp)h*Q4^OIvc8N@yQcKM^(oHvhc;6-^mznA{mn?g&5wg>q?wl= zGF%ogV1*nniaw0hzlfVZ&@u=D{C&gTkV(evl*01}$6&>uB!gSl*t?57vXn1tA>>7N6-OdM4mkN0Vg(WnE2n~eHkr`i}~;Er)rq2W)p-?!S1Z-hc2+Uj!>VD@&aZ6ro<%OKjxj8*1s>V z-l=42gyRQw+@fz<3;Wm6SieA;<}~3LQlaGO%AhZ96jlSPEr^2_7;kbCx|XpzY9eJ5 zv%|%zO?Vc$i+;;+$mk#2Cb|Im9vL8;+n$=q5 z7MpE4J!u935|Gl0XU9e%7mz4_*Oa34A$8dC%y#STSOEmJwvDIQ!B3@eyYTElq)mhs zdyR1hVs6<3fPwpk;!icZ{MkQSw~5)-QYUR(e3Ey#L~|&`kE2T-5#c5?HHWxx*=l}f z7*@s{llTA6^4IAJtyushrK%JYO>wKT%cHVz!E7Go&a0&S8azfds59SB=s7_I}Jhq}3>nr}4Gc<8S8x<@A>8 z+VgcWp^J39Ze|%e zFNLceooTQ93>p`;%QlAJ2N^@`@D6}U$$#MpvFYsNV%3ikZ@ejAeeS~nnM2}D52j-; z9hKRq;|w2&YlVPcDI(rfxc4o;R5jn;?Dh}i>Xqh@JD`;1nl;!GisA>6@}i1E#Z~7R zd%t1g6#IA_liY}`k0ebgoKsIo>Y7Xt8T1svqjw9Arb%!!WWN4r{eU2}lWbrR{p z)TjZQ-*J^$HAIoi5iiyJ6O*=nk18x`avfC&~VdTydWa6=i1kA{5DZzm0+9orYc|Bc#>=cYe{Irq-6=e;A{Hti51-b=gS;x+r=u;{_hkXuuJltTkQ6qX z@d>&zBskYX`Mt_5Ydj^1bt!i&C3B?n@~e&b>7nw{Y3;jN@-?(D<_5#fI$vpgu=c=& z>C8oG}3L0h2vh?eIiC_UQEKQIl!l83*rye5y8MUNK` zi7YF9&;^^sgUpe_^*^Ls*Cp4$J?_U`4LaY-Z$8outHVg2V$l-sQDGPJ%uA6z<$uN6 z0UYQ8eiHLbmDdyo8Sek6d0W_dhXK>9d$P4ZrOK%0$B4Tdj3AX#Qw#r>&0WUyRg z7x(BCU`@A?@FA#jcbW3vBe(lDD;y@qrQ(&eOVwABO3IPg@FjLpCX-8C8aIF(BU1RtOm&6kH`svJ`0D%$ul1OefxFUcfpODa0l<4VxZfFFoC)D+Adi1PbY1@eM{ z#N5hM#nSQW_4Aw~qDw=%m%y3S7mfO6lD|kOKZe{u4T#&RRJpQw#H&>I(T|x+$A>~S zKLXxf(Q)-b9Xt)u;N=_X3lLcCkdalEQ#XfILz*vPt#7*VWv`Z>mJByqNp%w?>$^i5 z;zj1V@PvB)JK#6s1isH1X9TT97T(4er84e?q}ARcpk5+VgItH9%ETvxuSp-q0G^By;r-)lRq)VYrY(wd4725L!pw+ zd(>ZGk{R`<_M7I}+!N=A+HHj@Ef>zXy%d7-xFaNw=KW^jP*Op^ zin_l{L%1PXjf#qT>mPx73AI_J=_?XF7!-QdMg^?W?l^QYc;ctOzc^9F`;L}Sfl7TN~WZEpjPLI9mR2;IQDK*d+C zR8asex()mW^34ziJ^OXQ!1?ef>&+UR!@JV9?@BA~bRUqSpZH;!5T`dm$%%9W-tJ3}V7Ulel9t;?DKFw*jB5{Zn1EP2f z@tntMvk^`(@bBqx;t!2CVoljzO!11VIFCWy&~DZ<)netI)-y#Ph!#11s+UfwsZo0- zBW7G)<3Mo!k&X)B*K*I&nSANgI+}8h@8H{5GSqjw(70a!`9z2X`$PEnlu1z1m68sx z#6|(7yrhr?7?v&j;G`Y-mQ217-hA2j>R5YU+ZRbc-Plf0$OYkfcW5+`inrmYLEwAl z7{gf+la|?oO_Eh`bh{rg_B7+=q&K>~nk{e>HmAc~9j0b`B&s}WJi0G(jKUx-TnNCP zu{JY)X3w}4pDIdxI%7VwojGT0qrtu&13h$A>vt zuYu97<^?7+0BQk7mgX#cfv_~8zIX;1O{1Z*VCk}{4O;LX$;OwJ+&Lhb2AOGqU$OUz ztioNPw$K8AHs?gYeJ0o|xi9S0zG4*sFht%lpZ`xsw>$AO?qAwdQS$zp4TcXk91%VB z0y_CW=sI9Q$C2xmOSqF`5~q{k%Ez~{K-Fj0MJ@Tn>x!syWF?1(Kc@t_qoTru*Vw(_ zwZM1;vbk9#ubS9Dkce#_Z>G77liI(#*4=|`!Hr2-^GBG|TjA?9B`Qf(xLYS&erjg~ zMgi}&h6L5vPN41nQ-W<6>UhW8rZRA0eTscM8|5KGMsa}}V4Ih->ZhepW{;Y~iKMAK zBozVJT9>jXDvybdK78{8)|=k#TQ}4_#-(V>T+OuwGbs2=zGMqnImd3G0l&ui_Pv-e?d*+Sy5_I6PDtT)zxHEi+UiD)q}!edJ!7sHST6 zFl(7Bbhj~ERh3V9#}5i>oZWJFsm2mU;Lou-!+o(eSy4sM!XAwiC!D*KoX7CAnT21qdnkV7pa>M9hZsu59Qf092X(gT( zeNvH>9h@Ch`Ca?OY{edOzSwM#m?p^VLq|h(+;1kqx~hMo|DT$V zdzOJHzZ1aF8aCU6K>1XpptYqRqW>v1i4p&PtU9;U-a zZ;T@^j8M+e43t#4xQ4O}=*%@<$4hSEi(0T=dd3(P%z}T3s#I=N5 zxk0F{F<4C_9X$MR%`fE%@8Tv8NOf(Tg*yEi96`M zZ3+Lz3RG-GapXQVbZ=+gBMuF5l@6_1+$T5R6Ne9q4i~pvkikNc;v#Qbqj0Q4kamyq zQCuN<%Y{IjIjK02|45V#MRdybB>UgMKf)TYC`;xUy{p2U{z0A`|BG=_fzEunV4Nq6Vh+ND?-mMI z(89*OTKU!)8aqLl51LK~iori_Jssob6Y~SYrCJAtNzAA5ji&hpZPp-fslzRx9HS$8 zrXOHk(;W~XC~;rbc=WHZs%*>btq*y27$4?Jgk20}qlHY|!;|Rde|Isa;c87bz0!?z zJ)d(5Tn$#ACI>PhaOmO6`(ujMEW2-x?x>1%+|0{a;8gP#Y4jNH?S2)wFnqA)W&-oC=ROlyAZ3DdBnea$J>s zG|P)D+vU(-7kUZIqBzY57m%FSEfwTqx=S+y{1CQRBFwgK{%t!~)9B-Dr`!5W4zEA{ z%<&PS;}~e<%-L?q#CHibM=9iIuDJM1!%#yyTRhdJP|f8rcZJ2ciS}l%p1MoMy|Y~3 z+~+75$&`DbFSGWfWg9KLf09*BGgo>j7XJ@)@G?YVH>XU{J$eSl2FU(bGsOM^Y(`J* zp{N7=92W@DbGI{J@s5=iv4=hJ+lz{)ZDf5Fo57kdQ(~a+o+}-GIVqxMf=ma_7)K5N zd4f*A2mNXeKV@$7bs&z`-<}GQonfEbf)sF(sfP-mPA|K`vN7Y6cODFAcg&lTI`W=t z3t8`CfzLU{yH_;MR~>r(iM>-=atCp!pB{I|Ew2mE)am&f7xX+uMEcFeqN&@!5X4Om z6-*1o*k1mfCs%JYnoJ*d@MV*2oT#&`USJa@s%AWS)x6bOplHkxik1M`ap=Kunc;kN zA8t0ASci`VgJj&oGwCd~YlDdUQ^)g3OaJ_q5UsdS&6(%=yaYrH>GQ};(#(CU*n+;H z-0d?GaLDEIp?PIr463|mIyfz@d{N4pXOlv4Iy+rIlzT;YD({2h1_Fr*Crix@=#oKy zu&qub+y;Fh@Le^y4*HH%B#?Kz`{&G0oeYQPK}Wn*(LcW`L2X1p=WhseqXK`J#hVMz z9pj$;&1EaZC>~>fjKt@vN#cM8cYC$3UsNg?tBI31@%!|q-B8L$P+Wgb23L?-(>KD6 z-w71MoZ#>$b(aFHfL#$M0ldkt>B(n`JVtw5@zoWfpyWk6{tiOGyhP?xh%%Gup|Zf1 z`bRz0{^ylEx4%lfzK0e~YC{Unw1k+(xjoH;Cl3P+ez^{>a#NUAGq)+IHRKJnawn>R z%0P44DQ$%lT(_Tdr7t0eg=?7`ip@X(FLw7Z@t3XJoc7R>tDYgqPAR;raq>gL?q-eT z++E%&RjA_Jr1O`eR4eV|8mkZy#s&K1feyLde7iA6EtVCpRy~M;LW^%A3?m&@jv+fKNtWgR;R{*(j3t?fz zcddsr64*MT6eKz)D}=HoM9i=avUjn+E)|a|91`ZyiX^v(TKLk_#`NBPUI5>9s1ARH zNtuN7sITKO$@WU_0(f6cA1GR;ma<)$O;9+Dn@m+-DSsgBF6j>}76^3{ zOa_zE4F^7n4V;e|;M!!P-?qoyooiegNIWhdsZQGddf4^Ufbd0+2rA(gGPcXdBwz8h zn-%&R+nIl@M~3TCdf0$f_8Ip&BR`*bh|w3MPzV%_1CC$Fj}d-DAn=P~sn(n6;6BI$ zel#o=I@eOqH@{kCPm@p6QIJn@GL45BuToqN2WusZ#iTkP$ z{RS|LBXo%@%x!9I&<4u%moM0TZkux`bCl7J)u6rV)fbZ6o-=zf0uSs^>gk^@2^-JZ@nh8~J42QbPi<>JqsKTV)w2@crVYi$*{PctrAVi#=jFDzYsn`J# zDS#khZGuXzHa>kc=b1MtgJD-PJ!NGDZ^bp~z~gBkAZcgI*lxFBf8?<{-u7=~?g-)) z#?+3BHwMRxjB94O7p~k#pB2UJgkxre&b@!84UCZYa$^Qm)Qrla@{$sT)xdU4?&nuy z^bqu|fkXPG>94c6+Y-*&rq{Q4Xv%)zA2o=+j?ltdt7odZ*fe(Fmhyj69Lf=ux1@$& zOIB@pUo=o=#SpKe?Q&_vr$TPqrH*%{nnSe-#4O5>etsm|m#)T_af>iBc=<0B)%Wa2 zZKK?~5AQe%fOroqwG}d+5deO*T^;{@dTCSSUKwu*O##7;|GLuWKDgBcuAe?|jXdY) z6G|Gc)9;^yWJvASSAKt3B3>Dlb5dgu4&zuIo_jX8H6C&yOL$4%Ah15Dp4y{|4wVak zX|sJ${<5N=8QKt8;>8QEKq?5K;UCsW*pxDp+XVF!zj6E1l&&W zF?9C5fcLaFO?VRCWOuq`AGkc6HJW$#5`|i#V=~ie2|tIpOc8*s=5%(h4+gC&J8^KP+DYGjhnN@VWFV4a6H$(_B~-P z9&DPdTH&Ux=i^lIl3WLOd1bc$mQL zOs<`x^m2dd|7bj3PF1gnBKMN-@RpCr`>*GY#2Hvat#O}Z9IEfCgDFJg)oGfg|BMyd zrVgL|%4Ktc^j~n_CABNidf@eVbC;<6pQz0D$B7OD8c+(jDG0L8@NX}~Petw>*7?u7 zSd}!*5v+HaL1hE_(F>5zm!ds6%A{7oV!3zq`f?*!XvfSpLA0t--f5%o)#;3gCUi<_!SL6!mIH^%S-ge5R^9k}B7fD;Bk~X{cvuX&HPX zbYCP;eL$uIl{dKyn~+qux;U%SG#6<(QjX|Vlw0kFr0pLYjVlT_oPeb{cLz74w-|8s ztB~`RNzqCV`H<*#It#O2lsg#jN6PlDyX22jq5q_(>9s*z1HL7M)$#fP9p`eC+wM5> zO6JVFgvJ?D05H84_I{e5z#+1IsB+xXN`MSFFLs;e6XvW=ledl6vl@T_PSSKiRA}-G ziCT28Ge)TwfKqX=HVP??V!vAx|;+$1FWf1u+R zf!rbNbJIK(^lQ#ip7V-2z+8ScQ|w}y-!vQL<}DDi4^+O+P@_Q_1j4qZz6C*94%zNT zCXtpZ4Ukdj66X_W2`PL)b1UN-(z`F+8xkogNG(RzF;hI%DT!D$+i~U+1)V=X`?5P= z5LbmRRj~%9YL+1;BzZ?o-|`QVHkT@@OD5IquE!B|m}p2uHRph31H2o8dgzG0bu0{c z#otUbAgQK4Ib|aQKdCNhdTz_W@G!6+ASrLKv>AW!5)5lKdtn*r&&K>5p&vY~(V7`S*4e~J@lC{W?2EJHSradGXS&3mP}ZIx%ro9DesnCB^5K*p)-*G?ya z7WVk>*>z4vJ5x{r5djYz`H1qVjsvVITdXs|wS#!XD4vAHYjO!kSeUOKBOOKuw}J;p z0A-QZvp^Bfs}8iJKKIY>u-)WR75WuSE;#}YHxLy5{sN=`5nigT&#)TYW1Ei0>zdDU3BQ9u_JXEV<`-M-;L+Z@9m%#PW*P2 zn=I!HnBUr>T11U9j=K%?Trh}NjDhb?@ie5FVBq3~Dzd@WI}~#;B-HfBmW!%#BRpFR zTO`YO>}M}4wd|wxd8i279BzkZkDJiu@HE=8bG$(?wZ(DnDVXRQ@2T!DgI-kv)_pw6O=t7Zb$moU zhsRaM*5`ivGj9N?wsNR)_c^JGbu}#JfFtvNM=ffsU=&OJ0j*xwUz-^?;)YL}H#sYC zXHM?I>tr6&+jc$DwS8g8{A1xk6F3*vo#DR}e!BN#60XQhbTd4g_zGDy%Kj%o^G5Z2 zp(2Yx-cn#~2fdL(;sf3(kRCVk89MGT>ornX5D2iGBd>Tu) zn8Z5VGE~YYfTNr@3Z7-IelCWY$N)F@AZ1$q*|z7c_7vaMBykZdc`ft8{iuR>v9N(s zNWS}714}FmRni#G=Go4e-jWNx4@J7mzgA=6xGLJOA42@wE<0~?GG5V+^!awvIX3k` z!xLM><6`SCa`^pyVyAt<=H0&EMj*D)i_0EWq62Xse%Dz;fA?n0C*9Wv<}7lIx4b9x zx)P`9;4%o!pp|H#ufa*hzM;0cj^qHl!6Zip7?i3{D4?f(08miSfZ9~<1?S;?LBf@M zZ5^0Sdc7y~^+1d&q<{n(?%>xvpu?;Y9Lf58bvV`dJ;$17-ebxIf@cz3@^px1JrvzK zKeL13=H#vv4Y|+cw&p^xq4S6=P%b`Mt^lLE-o2g$8e8UnUeUq^tLi~{F&91`y!R`ddL*JZI&6-`;6+-KDW?CS&5%eqnP&MN2FudtsEjTx%P`dH4vd}v7E~Xetn}1UH zmmU|!B6scyuyQ}VL%CiRtZ;h09%lDsOLJ(m!A@yz$6AFYmfD!F1%2i*hg%O0$evdFq} zJHx%*&e_CZBUzW4G3s@6pLIU}VMBzCe}nF0sQ*N>Yp68{+i@H`TQP7dv@Q6ZVEY=C zd7Z(VfZU@7b#*6r(>TDOaMgrpq#ze#MWw4&XdtW;sG%YFg~QcoPcC-r z9)}L`!5qKb#Xw7!1O7a9GhX$qc3GPJF2>u8LgBQuJhon+gF}a3GBVMt`7gs>H6xAW z8B}zzuuZD;>iN}f0TB{ocQFjb;Nd;20 zS<1I;pU^7R-r{%*R*RSUAE5l2u|ha954@g!<)UK0oj4v0G%yBvQ|Rf zW!=!##jL@Ca*q1~X_bKpeL1BXd?FN53Z@Ma>x_oyrm(P-9*!87P;(%G17 z@3BPZxhMA2y}CptloU$K2TKsVX5=a$WI2owNPF z{`yE-NUeWgT@(;leG+aAd?|W%KH>+9>*QYD z6Cl|`wxy>ZWHO=Q^m?bjK^lx)Tfn{9Oxa9}7U4GA@>H(B7PndFRyIEJqTlTN?=V~o z==Y#80&GQn?l;D}N$%MjEPSgDPC^w%vLhPPh36P#hpDl>UoQq&EW7f16{7T4Es}Hz zc0@%fJS4T*nPvHHc6@`N^G{zMjq@NL_RI$ zuE-dRbPRawXAtvFu|LKLd`w+KaU8Sol-Z7MYV{`TCkgW@cA}ni=zPq;6shnz>s&~c zja6jnsZTnO+P}Xr6u9OFI{f?Hd`-&wd%?Px<<;(B*1Os@RGBQ(HfXVv=9p(kDh3z9 zzlj!dQ{_#C`Avp_WEpSm`S`%A;d7PH%MrvL(;U9*VFO724&btk?;QRmje2^($!6QH z>hEQ{#F?0#b`RDl9}*@nYG8u{^pJWL1UoB)PBGQ~+Wwv5<|Asbzp=PSKcVVC+%i_L zo4)93AyTEmQ@4-;^mpmCg`Kj=!bn;k{u*3lz?FfZ=YuSrD%|{Z)pVSjygf zYsdsTXIVF@A`icJOe8n)VOWL-jNs!{A!})0_i8TQH;JmR2Ym~tNpiXdrnYFb;{4Y;DJ}H z2|BnC-F@jAsZ56CgZt9eGR(V!toa@`!IG(oRhr${jI1Q7a;;$c6Ad1g*9E(Tn>Z+3 zf>5bnYOm3Xw)Rh|)gqwXo&Y=)#U~lec_mNd9=>BU9pDUIjlA2%8xR+lH^|%(;6R-8x4G+Ct zoxjLyPH=yS(Y_icj)gzkZdua|%(D2B0Hm;bC!l&z6F z7T1p@li+@sZTGZzj|43npW48DyKqAkBgKs_JV}gFzVh93V3JWfSXNvNtsjU8I5r6a ztZ+2#7{D^^8tH!&84Fo4Q?}m7D!=oT^QA3<+t=XJ>Seu1fsk3|yjx}BF+RLtKlq%8I930~ih$nTHk_qm2_;5_Z2GtXR6 z)DxzVan7W+`!Cq&=a}#AV+|Ao#wpES8llE-k!nCPwY~u~ zv1){+o#%fLM{}KY$+Ak9V4-p4YSq9Q$}K~?#-tLt(wFQe@5>6t$GhVB=F02&HLzwT z&A=OjD%ykc1>-B#BRQhreDpt3yE6JHc4?GWn2W=faCi@1^4^i|3)aayIZwOr{?Ehq zGs;Zo`7e<`vC6XINrC2&_IuFDC+sejXWh~o4~)kmt3H>rqtXwRm6etydB@UNsl%=z z1OQDA4YG)6&ety*OM^{>opRh?jFy;rbD_D)?C&qw6M>xJ``46-*p7kzug-h<fux=*7EBf})^_-vJOtBM5I^lO4JSop8c$V!*3w2;f_o$jwV3obd! z$R?@j!fv!Fqm=z0V(BEY%n@xtemY$lqDyB)X?9?3%&o1&&{I*0FF)~b6_xqT9Q*L7 z$x6E~V_EVpwp--&(&D6@gK#;7?W+Nn#I?K3ruDeuE5CoDtOlxNoA3p5Bkj`9^8L9_ zd%Z=}b!~%eUmua>Z}gY0Mqv{$yEG>2;@@BFPB}Gx?(*nB5Q+UqYnkpsS;)*p=%=x& zZ*|XIcC?_M(uMNJB{;+=?F^XiN&Ak;hOnug`@w+FT$^Lqet??r)j+(S9g>l^2-lTZ*Ai59bY-W!d&Uq zUdUU6HFP97-l)i}sg2J5xR2^2(!3Rj`}ArVmotg>71X^I=X+pqkpWWzH9O1c*4zHTORBeG7mD~9GsaReV!v)LSGvTB9?qjhpZJi;XQt;f>4KO z{}!|`SJ-qx+xZEEi5(9=C#8U! zD#mxtk?Iz|DSr|zafqs5PQZ-T+V>lu%WnEjauhgZ}N z??NI&7k9%vQ6R|=g|A^av@k*>NC_>hwib4!g=Wj-Og-d6#V6W+nw9x44L2_{$&?`9 zs&ahgz3nmJkXy;g>=Bt|TtO@DNOnqr6*wOX^5OquiFPpYpD)#X657-rcKGE3)s*9t zFcGTe98nAZ0hHQ-`w93(5&WCUV{SxWoMj!v{>m@bedM^1l0oV5Y$1siob6^5{}~Vg z4qhmLc<+6(wQ43sclwckHLvh^M)!Oy4CgE>X|o)}#9TLYht3pKanPf|foLKEh~hh?1G+Z=BT$XqKyS17I!P$Y=)Bm(DHt^za;v2rOy=CEOUG^QzgQ$_a{DsmL4bASP)u&2_IjtJP%KU@!zq@|L1J@8K5A#A6Z)OASYL)vQ+z+y*dsI zu>`qUSg zauB`N2m?VxknqMM$-&PEWVS;k(-~y2hj}{A@xDBHxS!&g8Y5!g3x-!+Hf!?D& zKaIU0Np|P_cjQ1E;l(H&R4-diM?*E@qcBx|A&}xkp;ZPbGE%Cy>$ucHT_#a%O}2u+ z*9lC6?>nCQoj*~Ys2k}P?4WA+1lV9k%;QH>-xS+lrKBM-RswJhY9{I>8%eye@%E}W zD?bcZAN%8d&d;jePgW#pz}+I&%0R`K*Yeq<_|f%>QH3{aoAds5lG+{^4~DyFA{Zq# z!-X$ssOovMAbh>Q<#LzRpRK|Hb3w)SSe(_9g8TcFVD}5AN%O*2GfvH(G$40ebZJZP zsT*>|S5hGRv4r=oDL?G?TG6=nicrq#A%%u(o`Ng|K>6{lZ|;6)()@@}MK)1+lT_;@ z&g-#_U^kT+F&sEAJ8jLZr^4@t+%NC zL{~Yh=<}=KfH|Aq1-~YBU;@t7!bbes{(dj|wg3h^Z9`^RHc1Bm?(P|H5(TFBd~{v+ z2PDWWU4VYZWLN94yNiC#cz+FtQ<;poD{crPD4ka#7TVJ<8QnjhjW6kD#6!|Vt8{gF z?|xNQJ*9n{Rg@`Z^)!QBTz4t)Rno#ZCFMbZ1Ec1Ft-bx?sJopFn0$YP(D| z|3%C7tG8hN_$2L}QGx;01wDUt{wC2%^ZjQ-nec9g>W0E=m9lei^RCz1q040P9=(WkkIg81RAu4PisPqRw%q(?Hf?iN@o!1_9}05-3+mfy zu<#nEEezWMWIwYo%uZg2lgEBMjEf184W=OWPNjq3$|mm8u4#AapyC!BrqEHzgP%U! zZSAjJw|&hY&dKC~Nx_1_E$DlcxwKJ-F0hO2#_Q~2`F*Z14KKN!*tZ#cI*bKt;L6Ov zmbSJN@Hb)bjJ{tie3h5ZO=i*QxI{fHa4_y0n6r&0x2LCOX$$q(*)Dz?UY(wR%)O7^ z>sE^`O(nHn>~3-JVo<_pYxDqV%fUAv3_CQZmk?r-shjG-zCEv?mTT8~FDBlunghd8 zMo<`IrB#PF(1NSxO|~f(aXII?Aw#o@p1&aa+$_w}?)XC{SezYL{@~^AC!^b8by@Rk z`q13GHz6iY5X^d2%=Vqb(-Ky_-Y{b{Gb{nDxNHmBv3lcsLf!^#;k8LU1yLB^CS0N2 zq_AiC4^z&gA#vmNNe-Gb;kZ|}%PAA(E?Gtq?b}6Wt;`F|b1(t`j>bsZd6IIo*e250 ze%JyfG{lkG@TD--U9V{=BoG%zrS2S*`+)3;In_`aN4C!yLst+AM{_4L()GZHxR9?ug77tyWE9~Jrx%{)`!=V;Cgf%N0+zS4%o?k~L(8QLY#Zjl&iCHZ z1B|1RO}3G~<~o~p#D?6*9M}0eRa2Jb;eGc+V zb75p`u4Cnuq+DICxI!Y8I7 zrK6r##Z&LXa^}N%S?6u`2ICc@l|Yi4!fEyZIU2<#^DXDRz55pjrPNfWQk72L;yG#r za95z80asdK?l*Z-PF4Ft&6BhzJv}2b8`H5>>L<{M?^R#kbUWaQu+wS;6D2g1LlFvj zk&EwshQ-sasK;)(PKV11lE}Rx3l7%Ug$E=tg3I z@IrV8^O#J0zy6*6#5E)8F@2V5j}!u9V}Yatj!aYHqkumJ&FWAU6R|$2<*QU+3Uho| z-uoeTo{P(8!;iy#Cf43Q()grNNg-gX>Z#DS&6%Dv==-n;uH1muB2Q~!0SZ~dq(Lz~ z6o@m{2U)vYm_0+iyVFI$dJ)tSkapnVfdD$}IPG%RaM282t}Eee;1EF7obD;lZS7_N zFvINL`U9A;xilGnaXxr`XxC_{*d;Lpi-l>oqR`>C$i}Zf*HH0SLkhzV(}ywO-Ccm+ zU0&Z*w24o20w+>)d=k?KnkDF1=Jc2kDIj=AJYeNk&zbl02Y(W>g|_ZL#zx)W{-#c- zd(;UIY5-f#G|U7?E6CLr#{OjJnEJ(--39FE z#zN&#b#=HPJJ2zS$48%OzGB0;asre>N%2jZf*rM$UCu+=(AOHhw$b-o|E-CsCvkg! zcv-fw>%^muGuOs;0b3CKJZEU^P_y&rybc7slK&A>L3}ug|1xrZdbDq4TgYXrD}4*+ z2NNc2MCSKn>NO-C6hKMgyyXMejCrp>F%xJ^q8lU-bUXC_`%jY!g3SC8Z;okjQVLdr z)$o=tccSOh{%w(s=e=%kh7OJbsPdcnxa=Lc1ikza2{;53+pB^VGga)3{n$!XI;#Q5 zeWF2Vfyf*ynJy~kSP%B!SApOHnr(`Gh$A=vLa!;Gb`n~LSUWw{^N~kV>x_7spVMPJ zs*k{YN$e_VsGZrkxX_k(D*LqrS>H$58>mY)Zsom-TLM~<)B)qL`YONgG{@&+$NCP1 zkp_{40$y*sLz;aW{8e8)1DSrJ;iX&1=5!$bYOu5C&zT!V*n_N?V4(jzrG+c-&VXeaJKpU(_FotQJ)_XAAc`zIbR&J7YSdJ_FQSn~SM z&jo>A|EsB};NS9ROB<@)L8yqELL-b6OCY|215MD7U4C$2Ff}}UVA;5LsG)Zqo?W*# ztZqm@ohr~nut~E&sDFiR)YtWHMJ@l6%dkgJyWT5=$(EerCU3W4=1dl6^>N`HU}=0^ zreIZVO%G~US_JC&TV4zsILvca?*}3BnVSW+_ztakak$7R9rjIn# z*F!J<`-?F>$=f^`BmsVjY4+I>+iy};`-}Q;^I@)+Lbse@BfXOHSF9d_*N3^M8S+UU z)&Fc}W<}-05_HtzMEt&W4+0usq!!p1=6lZ!DWZqe;YZzc`NX}C&aWB0a>dco@j{34 z>fPVajC1X7h{Xiv!wq=&)oBBY`uzDX4K38e-rjuG-nrzE?w$##F0H{t&1T0?ow1J` zePhAD%kJ}11?}!E#L9ogEhx0rNb;G$vZ58+jfNz5u#j`cw@P zn9qcU3g*pee2*&!rU|r&S*}LapxiW5mCa#pEDlL zOoOK5KdYk(=3OXL7Ve1Qm|g*m1Mm5{_l{LL>m#^i-K9U5aZ&{HFhGKAJ{6py;%Ii$ zTBIiTo^-0RY7E=U0y6JOR(m`}KHX|IF5ok|XuT!laiZO{I9>+JD)JZk?n1&meRS z-#S}Od3Epefj5#Rmz=Qp1p-}&Ol|Njpe%3XWpKZ|f7wKJ*F4B960#c>-8j6Tg1*Ax?B3)|e9YRM4HS{he zl28MLaPofVJHPWh_pf{J?7i2Ty`P!cYi6yrvu4)hZsBen@Q;Ryx(Waf4-cS*I{_yOOAEjQ002knjU`S|}wA|63L z!T;dkV&ebO;Dr5exLX1!0r2tg{yqN-1VjY?0x=;W0TBr?3CX_~DcOB8Qqp^*BqaAJ z?%lgjjsp_12b2`#5B|mf74k3pzg)PJoRoz0UyA>4aMul>BE?eyEEC{82H;cS5m4dX z^#g!7I}qWl{jb6Q3pm9IiHLDcx_2K((D)Co`2+;`xW*C@;>?H_@~>eCsfef_3BMqI zsQZrOu?LMvcv1l=$IIFtTD>VG=W}b%2(o*0^bCwlPo8o; zuAy&WXk=_+YGz~m-p<~^(aFo($Jft4ATaV{)TijrUt*F|zNMz6XME2rEGjPfQTns2 zyso~Xu?f=L(%ReCKQIU#8XlR3&CJftFD$}0Hn+BScK815AD~W7&(1F{(O1|1>V@mA z|E<>lX!ifmiwdU~KCTZ4N&eLf58n@W5l|5lJrX9SexXb9&g0=@k#JI)mq`V+J!Blu z^^mmIo>TYeI7K&}p#D|uKbrl&Q!L{DmuCN?*#FfF4j?DM!*w136+i)Sdj^%0nX!8> za=UY&x}~pM9L_#Oe3MtF4`r3u0CnVXHJTegCup z2I?FGf$;)ydMhDmzpL{$W8G@iMN<~OfP!s>j2%pK)fCx}_3Hki%;)@0gKz53aynh) z+(@qYek*d^f9-Q84?0#GJ+KwaVB6e0Ei3r0WbK8U;}6bhwf6}Z>RWz%49DjFiaafP zE6nao6aI%=iE*M`A3K>*pArK$ZuLe7uK9PyJNbi$yjxUKJbs!_#8s1DtoQ6li!;W3 z?kVaSBKciAQL+dTSS6F%f1_?VvhnS5{SJ_)1QOc^HrU6uzd+U)%~aV<>+8W9tAHx1 zEw%4klsqmtd}~~qT|D+=RIb>6>KTUdt)?RH0Gn^B6reQ^{egPsK?~lN(lFD;8JGFd z71ptN;j4%F%&$h?QsXz1Cr2nk+1YZpqc*>HWSms#>DyZN!6GM1xPDP(Ma73r^22f) z)|zTA(_vKs+5>L!#(AVzfj?dF>HV}$z$_nj)GOdI!(Y*gORozfM~RO@W4Z-^_*Ji7 zyhlT9_M6)9^ub(80#dx7&0_W(^7pR* z{@B~cp4vn1ANQO+{V3B~?f~?mQ}TTE=*FLpnZe>0(yy7S!`~)Z{y7;Aq`O3b9XT$$ zC9X4k{}E~qj)WKG162Y>vt6yAH8mO^>Ug=xW zbxV#@dVjtFV=h8Z$`Zrwi;QZUljw})CTqR>yZuX3yxtDf;J zZF73lv}!YPeAod_DEVf}f$Uw%iz3{H>OB(v=b{ zZTe1}j45pj#@)-L4BpUZRcZ?4XP1vQFJNC!bPYkNQ;cXa)z#H)u}98z z`c8++qBrjV8+y*6b}6hIC_-t2m|V6Nhu4Cev@nRu?)FvuHoXkEeZ(tFSz?O|!MmCF zsq-nUssIbkWJZWM|0MdG>S42Mkz=$v@vOxCh+QSY?)DHMLAu1wLeJWLt@0c?Um}(Y z0j4@Oy~qe2ZLCk0Q9)a^1ipS>LAOOB$Jk<(b49x2KcL7;U= zgt~~@g?{ll7wq%Kt|84<+H8O+7ohgc zFYwJxRH>DyzK-rh5irXRI*L;@NG$_govT%BE!#a5rAo%acD?Tak)6!b=jLroArI9P z4s|lkV@u85Wv^`UY`-RCExZ2(2&QD8W~Bis&O!u6RUi=92b<`=d-RZ*%o0huD3A=h>?Z4UhvvdqkD?R@jR>tUePb+-F zX^q^Q)z2{b`cl2Ny(Lr9I;r|GwVR18^}tvED^5e7v-c!b@ApCV&`9r)P*#okzE%r~ zwA0lUW%gK)1m|h_g)J_uIRfc zmqmW{B#sB$+zhq>JmuSAgdbsFS(N9G_SSDIK4xmMn!SRg&8P{KQU`cW*eCfNFDt1n zedhYb3c&9yyAkyVT23|IXP$hpxa@chfoEP!ZGT&`$jZLjDO_u~`j{Q(Nya)JNN^&P zSMt)6-W3L|QZs>02UC^&nQP59nkz9jvUVLyk&TyH-~iN9E0WSG628TYnFK{*SrgTe zI}!W7cK{pY$0W_dLCw6Qi+FMeoxc-?WLD~g50flKK?CQdIu4%cAR>%}&*puE>Dhp# zs(vPO>~Qj?1N=bEfbaE1)4Z$pfX5*Bx# zx69TNkr#J92({MMw~X}sk;eJRfgnEmA_N&1O2)>_#F}?O9+-Gh=_^xwGJT97KAa%& zRl3dp?ymsmpGnbEM>6+%f|f1E3rsJF+V9rRB9Om4fJ?7VT z^3!Y6%y&0IsbeUujl&r* zRbW-x;3S^b@>jM&(|8g#q+BcZcIrz137+vy5qq)>-sIT;Oa9^$#_H!*$jL9R!NwO= z3T6@ask|O$nWlagCXJCC`lJ4~o9!@nmXmH(Adm@$~r8Lqo7b6=5 z^w0jy(x;9&P=nay=4p5qZuqmd>ExIr%Xc2UJ%L_{CZ4cKmQKaZQmeKkqC&rA=Z;_N zj|C;tkj?{rz&rrgWiZ7(q0QoVsiFh=tzkfA8XY`k8odwrG0#fI@RV5{$^eBiyo&dp z6@J1!H#i08D${u33R-qrmJ!qWgxM!F06&al*=*N6Kk#5C?!{FA9~xan;^+U7Br#4y zMw5wq;*rZu2HnHb02*|jTV6@;R)_wB_6?G$@P_eMZFQbtr*_yulB(?P zrBdsujI0B%!&-yE#p*x%9K@J`4X>l7=zKneL;R$m%+YhjO{j?!xebWc%h}?Sk9UAW z0I|q`k}YahZGE?X2`By20u-VQOCOn7sU=#<_J+RsW`$u#{w*S;vT$e(o-+HH!0CXF zf5Ar+H)p4U$MLG9a=eOyI6MDq z>lPg%8eI)V8eL_oe+zj7yfxI1QX>ran7e%TjD!2yu|B@Wv%)Z32ZcR4nV(US) zD3*=+XU9oYl7BAl)}fj5d6*-f6bnoPT#w$3mJEH^RRz#E{-wuRFfP=D!q%J@6SyG} zn84qJiO-Z`+~9Os^#O+n#a`50Y}l6cuWOXD=)g)MjHaz@ndH$`>qY4dCv5Y;=_&=! z>}^$yE9MSB`w-e*Be|O%+5>U*Kq!)*($6Idhd4Iq5Pso_2q;c7Tv!uR8E?u&w2+qY zN6i0De(P(lM@oWp+^{)|4WeHs=x|@^cBlS?Q@7p)FE!7{i-C^Xy`Q z4vDjl@giwAvvdyQct=x`&5F`hqOU73FAK*B*LCiR^YM3kU6$3UwR;j7uXX(ZGl}P} zOKd4hF8@m5NiflWHM(0nH1LX822V4S=x9nRhxDLf_PbKZL9FP*7?Pu@cXmdyE+wb5 z+V2d%xymV+c?wKBrETu0rEcr31nH-}zbEe$p67V{hUD?j7jbt0YFK;MMcEH`)m2ef zH_&t#akL*w_X2#;r6D0vv#+vye#>KPpmcNxK!kn^$=Y6O>ndT+nm;S@3Y_^SwgGQh zxz;yumH(z5u>Hz%@#W89IbmIa;yTo>Qc{GXy9oh|o$VREPqfF)jHro1V1dM{36|ES z7&9gX)f3Vt;HatMvAEg_Y!+^EH}nJ`CY27+zX^r_w+CO%_t0G$Q3Cy6T72uSBeYLg zVC|R7`3UCdmlOcG{O+5z5{c1k*s98l%p_Yo8a$Hp^PhA!J*ZQw_FNRGG5-=GFGm+^QJCK{v4NZEVeWXC?l+@b|&m%I{uSiqa_ zr>ABu{k5F(x4w5xOU|lL2RqzWNR~_R-b!$3@ugH50&0SOvW3HWK$6FXkC;D&R-7l~IZ| zmpX?thgG3T^+bigS@?k z6RS;3UCp>WOu39A^6i^1``J8KG?sCsAgv^T<1hbClhjw25*MD7y+u2TF4dV!{`&-m zSWw;R%Dy4MV5q_oaSzYVi%n-_M|^Kr-$=t=<1=bc5 zw%q|1fjI(R7%|FZF#Np8860$$Pu6z*TOG7<>qJXVxq8cecpCE8>Dw2FP#m|z3U>Tn zy9acx(B~>~LVA{3Qq2pVr}a$nrVD+3Z_NCwf;4XJp(p&Gl}FsRn3AlOPh0$wpKS<_ z4ck`E>?GzD>SHGn(x|MWr)2GLZ4oIqYHAW-w`r)TNqEXila242HvEUjR9F7xJeC`y ziu8km6G8XSL0{OkGxy4bGRx7!SvH6S{^QftJ0q(aiW$J$WM|NY zC37q{-6Z8{H+{MC|k7onlmRpC>}Z zT+qWR(h+I@`u3w3FfQ+*sO7@}dA>yGb$>3`%vs0tqnk5jP3^NtHgS3k~G&q>Yc*8v@}rq@gx6C zo%(|%+p7|T<(`pj?-PY^dH$C9P-*P!8ZqYC+CSCpKAV(u&`kyUQLc|4tRcVCuIE;% z+z8`;e#~X8Vpld==}^*GoLJ_4#CCim89Fcj__m~z7xNbF5m4cnOFz#?H#)#Z*7eJ< zHTk&ra*b2M${gv+(HybCIg$j-dZ5B!mmVo=jtgb2K`sXcKdvF`s;fkSq-b8nc~R%a zsSof2nTpHK1SO6SeT9wX($#oGiE=!YgqSA~^w!N=wAWxR?UavT1oknSgYcTJw$#Gk z2relLdRNv%^J7MfaK~(sqEhdXMS~|h<4$#v7?O z1%x_>e{$)lAKt8-C%6#{4uF9j6F&xm;=Dr?%%+dT#B+hQ2N!uZosDT^xnvxfEVWwQO}Oc{|K=pRYfq8ll);zgVKb~f zl_tOnolji;_gIOTIG5wy@0u;OcgvwRlZ}K;5?)mE@EG^cHeGu!V%KPBf4cw>qQ|_f z<_a3J1;b<^95Q_)(m=RZPvf>-T-qctp-&W70eia#`W{!@N zihqA2gW#hJlP$$klr=Bj0SF_JY{ywxuGOc5LE!$AON=uD7)u2WL3Z_j9cJ3pdWs5t zmmNv?9czCob~TElU&aM;6Yc=EphcPfwR@qg=!3O^O#5CC{Xr+oOr!Z7APQo4(5IKV zy@Wj{0@Kn8ssTG|47ccMvGX%%}=={37J#-k@3f=QBn` zx25Ko(3*)U=Ysg>x>uj+^kN=5|6}r-Pyy+>sS3nU1+9bbw|HkIld(iz3=f7j*T~&w z`G6Q4yO3sUOD6sjO31%e58-G{gsN^=@>F4}chawCCbkqw*?T{vjn!|6{gX$rWJx#w zpuroHF~{dMRQ})|c@7|@_u&ngOxrOepv=M|kKZ;-n@5!Il!vUyx+=n?Iw0{v|273H z5G-`t7AhC4nb?nIOff@OW*W|w6&_%zXZR{Vd=zTzXoXwx&*XaCXC_l<9TUP&EeraV zSl0C(NR3fM*?&Agocz+sIvp&v`D*@{f2$r=;)oc}{*Y&9o0CM|lb$o6%GbwYJP<01 z7QE2`_Xu}B4}Oh`?xCdk17_`{2!4fnvKKF=O<-vum-j`~{P0(m|C~rIw{)8Tijsd( zhuY+(=4c9K-!HxPMOF(X*l#5XK^GJqW@aE0qrJ89(7wAeAw&qSX8OT*dPRw4&St^ zTUhi-KkH6?ztWu8k+XbiH776#zMe(RV;+JA^2o6y;2!A`RCJ_UyXB_ay*{5x|8&dw zng){E8L_Gt)pjZRt#sx(QKmK-q+9wQl@0k`aP3b<0%=9_62SM{6}Geptyn4h=co>( zgI1Qr8m3?HRB&Wu?OKjT;Pn7bcmM};+Q-4G-)TCn?*QJR2Fp{K0Kbf`6<{ix!$OAw zkA3DS=4nP3H;b3z!~e{}NS^=DO$uj~j%xXN%E*OAk+t#*;ih(p$ZpjU-#irh$@Y4$zzlAB%#9tRMt{Aax;MU6}UNt}K6;^>;Mo&5)3t~I8MMTB) z-Xps5F3Lvz%YCt@QrL5AbI|FiK^~mh^w+YW82bnHpQ_Hl?2QX(nnFL6K$g-BGmq9p zLZF%Nqd#HPHw4MhyYri3iGv+(MxRFenJn@akp8%^nqjupiev^UBIn4~E@pG>mcy5W z5Gp!y2Pllxn=nV$COlY`zBty=2JiCxeH12x1?N%RZe*|DoR@zFl827NpO&nzcwNMy zh&u`~p1*fH(R<)c3gSK$*zvo>{-!*;>5Y${eLp6zI0~tsnPz)6}!#ky8}2L zf5A%5@o9gNXU6CuRhl8Iyh3d)4F%HLDpz zEi1)ShnFBX9RY06xRf^uC`kNx+b&_Ur?z&VB*Wx%3c*HKg6gK~zn>;I@;gB9`*q+y zj`Gr=c&7Ik^`-uL_v2qmR#l0qwXdiU>zKM&iJBU8@zf-k2+PB&gEiZcO;KC%GQB6k zCbKo|>K-=EHf4uQTH^z`QBUBp3gXm;4CYH8oxg{^rTQ{_6%~}Tvt>TmH4q^jVa#H~ zc$lEgDs2cx;MWWDx1gUa?b_T*9WTk1;hicR<)Y$J_z5(iUs@Tm>(~8*<)lWx<1-@bPp6ld z?zv}vn=v%_DwPzzHZWtn0Q!~MF_?5ihj~`pQ9Eb@IdgE%(Wv&#K@mMEB?>Y#=bawuW>zMLox6c%3J@Q|zk!30PAbib$8>Ht2et3o zm*p>lPTxo;>_CBnHG#&8PPZl6FVMSL7bQ}Jjn>RRCctcs%m*?i5zCGAir)XMu)E4m z#}w3^>uW557x)v;D~Y! zG*|Kcp78toRWHTze77KnM&m~=#77s^Tn2O9$zmiC(ne9$HLXyR$G>)^SqvMbd7XEB zx4dkA<7BI5NU$#KXYTSfT4>G7ch5u{;%_W10i!^|Y?Cdpp5W>{Ui$=xpl>eCHj~6H zD+)#=W4vu{wPof83-rVZZ!bdPC!1*ZctXmwu;zbnVTTsWfz_NltwA%%P9rBayR!D5 ziZZOmGvS@3pA$ryw|DE7Oz)q%PJ}q+R#jLpp`&N!WyD*<1F?YKlq`2t6?R;^NAuOY;0X-2P($1*%c?=8j^vp@RtGy!`)sa;l{mzv?V3|pU_QEQRS zJr_yKq%K@+k(*Dy&$hjnJ8Q&hL+x@^``20i4q$L)8tRsT8mi=)ZO7~Ol!OqiA@534@p=P(7XoVb)Dd%u8xwg#W z&e>VlS%^4UIYIptMj4x|5)|s=*m#_AvX&FD@~QLdfr%qS@bbNdmbop;Q`h0WL&Yp< zZdpZZxAwIhNp!S#(e5Pez_PPP`S zKshF;Fvo^)`?$EUH@b|^s;{3~g;e>6Q}547+|+#PnUqh}^$RW-g_X@6$n(pCu6rAE zNMf_b6gpgU8wU^MIpQ~N#xK7NQob+&Bhv`D)-Ya&uv5gLx#t;=p6>7SQ3d+eq2l4e zfEoiN_)Gj?MpwHW@6HYAp&NMXUH4XPjTPE>6V&8ji|K1}re~%SuMRXSs0qdexG4-1 z`;+;y)z8Mg{NRPTaf{``&Q8p`N#T>P4Qg3uGO_2N)%Ud~ft?-OAl`sH|IK=r#weR4 zj;(o@cmCz+pc{OVJG0h4-!)E03gzpVaVA@-zwtv|Ewh3A-Qy4cg`O|?~uA1XI9Bf6?TG&ik_ zZr`ysm-|_9p3;8PjJvFUby$&d+Gvz#rUE=581tsiC* zR&?Mnqwrpver%*yPGVawbfJBo3M12xQf|(3 z3&tPM4`u?cb4;Y=SIa+YzeA;7Msz-Oh-!ZkD$r=3I40aDU?da>Oy|g(Xg62AEoqn7 z95>q>S<^9hEObGsa^DhA&&pQ8OhO|9?0HOojZ@F^h{53T5cREaebhK{s9pffmItvd?5es#Om z+>Uc(^PS+@iN{BxKOptB5k_i>U+YAR-O2c8eD*EVa&8>_t>%?sK5n0xG_-MHc=N30 z#57d2f`3%^`aD!RH;dx?joh}-9l*gch2hD2Sz+=QJ;$(`4#&_bg$IpY@nDh$Et1}t zF1VJ@L!S0F!w5`&$`Sx*wv!GqEOKlNIhWy5qI9*yOqSc;He!JeogD43GfSpJGgHpT zGI>qI_rJ;EM`3@oDMT_IN4A5vw2xL?gDPY~-Y9;3(!ZEF=UPRr9Y2-@j;h0xb3U!< zfd`}Ro5vqO(vE0Hgg2n9L8n&XDCWLUf%%jd^~mKhNScUvksq%G!}co{j|1o(ph}y{ z_~E^Mm7>m$Acnb7WVytSf+ZJj<=Lfz4CSncO^z^fo=#?8u}%bDqpX}CBvFRTYKnDy z+A3ML*7Th~gxvwiq-s(-A5B&}G99Ulmw0&azKkATHnkoh_d5dT1f?GhmpiRKs!OuV zWaMbX7e6f?a(xbQy8~EN5ae1r8Sl8anlGSG-$NMmz4Ye`*4CWCoo-pKtNG`5fO}&h z&d(v^X06d-jf}2Oob79cYDajr;#&~YKSz=f z6jwceCV4DBG+pJI_4;5E$VTDZhs?6js%nCkVlHu?8hszPi0g9As?i25um?^|!vVK=Reg50H5FLBri&820Fp_qWEc_>Qnl}Yl2a1at8NJZd z>PBIcC2x7Y**Y`wx;iRVUzJ_9c^SGk7M3fn@3CJSt)w5JHizDUL{?YK3)uW6OPX)< zFnXw_B@=Tw%nq$QvZGKEq1sPQ$v-IM)ETw8nJ#a2I-kH>IMZc!O#fPlZ__3h@I9b% zRC_TR>N_8luI^HFOeMXUE}EMLl(tK8erX3+Ux}Obo%^(9=8hpnc`M~erM89h+yUY# zkTL`2UEB16w`Zl-FyjMx+tzI5Nepf7$=pslV*W)?q+PRuSq&G4b^=49>#Z`^JrHxk zyX9isOOJobSCfEYDhOCV{8A*NBoRzoeQd+FD~ zlc0%Cr`y7=^?d2I!5W6AC1NnsD-Y6F?qMV1q4U|LTwsgGVm)+;DBs!!dVhf>DUGzRcB8;&)Kg%dZi;k@~Ai3aM6bbDJh7oyt8J#k0 z3pc>TLS#_`j_9QxNa!=vt9j!rn*<>OVcc(H`A*qpK=NN7y#ekg+#dqfZu4E%krfB< zZ!hh zd<9Z~1e5DLrvhNOt3mL{Xv)=mMauR!WJO+uJXmtzWqXVDnJT=g3u(j*mIU|zIEu6R zOrJN`P}Q|w;r_}P`@}Cc<#%u17Kj?|&$ji*_c>c5E~6u7l4p&_`%J1PU}{%ZMycgu zybD8XJ?+-<17y=iI`bCmQ{jy3P)*ok5rK9)2kRCHRrA>eLo4)l>5a!cZRlhV>=mkM z?#g(&^Z>H_bC7isf=e8WD0D0cwUj=C+7oAXSB{{Erf8K-<4uv} zJAfZ;*}HY~PZp^=U#wI$n#yl^dr z7CU3bPE@jx7Y;8g$Y~E=?lv~80a{p>m$9Qy1^{kHyVc(QvpXJp7H$Jn(Hjc+xP*x1%2=?PY08u?*Mv|@;OdnS4Mm5M@dD* z(WeZRIGK@g``F?$=>5#=IdIg`-mOOXQcQ^tvUo@;4!kB-GBjUsBAQ3^x^}&H?Q-0H z74zUp*GyGN6j!e<>KpJ!=4>n?@DAV`n;@X+wRMi>3m?hA>aSM6Kw1lnI`7<^ z@E+2kg_E!)U>^GQ+M0wn)Iow-Ls8R#VK6 zeJBDMXG#!~H*2Bq)tajLi%MuV`#G3>?|u`zqb{$t>CwtviXlf zRfsxeuUItJG;t)ei_Bf*9WF*%Rm9`>d(g>G-VziERv5i+-$m;LjI5~tZ0T3Dy z**1kwW5lnVuZ=v*jXCV27crtI^S9;_vfF-D%%EsOo_F;7R!hLX!6j^EsG(R_ABH6W zT*CHS%5+O8SlS^A!vjVe_du_^(pzW|LjGi3d$|E+zzs~;DchQxS--D+j56{MBmJe5 z@q7n6+P~Cos6|iP?4loux6-?X{81Xt9JlU4~<$`8HqQkjb3E9#kGp(twRfBYNJpE26XL?fB3SjXZOVa$xn z9yLq<^r6A;g$ykp*`~N8w3^6>PTFqPO$fm$U?d(={57BD!FIT%+!>vCYX}T%6A;V! zc$vQW?*s7$>sFdnAHCYHbsv;mt zksY`q%yA%$^)OOSNOuEHivMO1c&!!rRlBqnQ<0z9J7X?gom+kr*+M;3xj%$GmSW#F zK$JQn=u@74-<8HWZ<@T>DJ||rz~16KG*v#ij2orNcyQB3)`WE*n<;>5=3#>5Zq@Mm z=l4=ZUsA(+NFY@X7FkLa7OpTGb?QeP(arCdCwn*pw;pHZFDyVSRY`xD==pCedw4<_ zSi-ntb{T$qqXjeRbHy@62sj>m3{%`cex0a2wdg0hWFA+hlsZYk(fFY{sbqz9ymZiy z!G>?1IykH@JlVjTo#mo<+C_AhxvM@>ExGC^{-1{Agn}<}?u$}qW-vYSTZKL|-*Sc? zQE;0}RohO_gv`xs15%dr=L(tK5sR&1!}QtV(5{JhS~5`BNJXS&wL2TZ4)(YILxwP} zZm@hhWvUgc&RY30fcSD}@ID^&O-MkA-^>F){b|t^CL_%+b0XoUoqE2J-EwmN*T4Bh z8^3IycA6|2a@xUbRn3;9N=a$kA49q1=ivE5sGTU;9;b#1%hw4=AEARGfM^sD{utSzLgtO~0`Dj(Gd^gL#_V zKVhUxk!c@vJysZ>@(Vm{ta)T48+Dl52MGp_{P@Sw|E)lwyr~X!v4x}*w-GpZXw-n9 zRBLI;)UH)$4tS|ZxB13%LXL!k1m&Sw1b3|0a_U-KdY5VVI%}9oS=pB*@kO8D3={sJ zn0`kIy10EmMw7vdCmQRnOUr>UBg@AJCaD4iE8^mwo{MJ;=aN;1u!dNp_6Bn!=YVBs z$6w1>f!o2?h{;uqmm&MK=qcw5@0(d?#g{{nv2nJC?s78!;GMlybrKM%kWWr1cjF*m z>}Ed=Pr25wq}OWijDOUcpqde7c+b=1VqZ_$qh#b)(MIUT0tYMJ=B5^uU5?vhi-5#?qwZAayY2&r=R1!x8ZQ#z zgHAdmwq!G&32IO~Tht0W-k|QrdWnp;Ju>IC4&R{k8grT$fCc z*{3fh`{&Z6n+ph8S^&EB|y=DU6O;)wvPPY z`Dd+EmL3f<%i&29{Nb+kXYRi^8Rty@I?UW{ZAeeq<)vEdE}Yo8atA2!HLK}cvIO<# z!LHeG5hKtcO>6K1|X+}UtiY)rDB?8As~IUo@cWc zOPfDse@xY5C#rh4W!h?!k9wxK$fL{J&$Fr=!5;b|?UP0d4OB2hq-a2XGb!m5e>s$7 zwXp#lohEJHcLRR#d|AuJ&8evbuD?gaV((`)Yu_762*W(ONUVj5RP`varzx>B2YNbs z3GGS-RRq)sY?%0DjB+o92aoipeaKUql|I|el51S{{e1`M-xTxUi!xc0XH1}ZYm?x0 zlH2&l56jlj)!+bMv7r_ke$D&96D-gB4Mo`pYFZndg8KN=h;t^NKjJ?1zQ?hT74;H% z4WckVU<$2a2~4YU9e2`6POl8r3H?yLd^V|3=2PsPDC$uSAwH>ehlk@`wlQQe`ww~~ z1}>*>%p%5*>Ko&xhM(K)%*>=(yxkJs%bX3NJDGp2>Cn*p7oP~AeAK;F)MJnbq>!H*XWJ45^M2Cc~1%~ZW)m^0P1O64TpX11xiH6z&}@zuzlObM#QmSIQn?A*v0YOPlXT~1kMzcMFQb;Q?XB^ka5k+)f>Q7Fzh!>dz#Y_#O$LHN7UA+u~Rgnh=A%?ErS>St1&|k;q zD^lB@{Z!c%f()GA$NFR4lk-)AMfKm$R;*X5cEV!0d zPMm`_j(b69Re>irp;;TL@#2l;ju$S#J$E4kAl2r+!d%S!(lT&@T=!og<*2w zuaz|f!J^Z_6fR6=OTDM6ZMRRVw$w9Ne4dfyBNmKbJ=VpD;wBk)tn7ntA&HpX>Hw+z z0Z~jT%}gfeB#P*EFt5-;%bDf5g$jPT#*Xe}3n1ydr!qulfT@3;Zq%oAzgAVWf?3pf zT1FrQFAgmItc>7?F7$>ocY8N;YZrsdPiAGf;$9fQC78zu)@*&+-Y} zaH-7zhTS+^`4n#PFTVMmeH&LxFp8c5pU@b6id5?h6?^)uu>Ltk!!Ugkj$frcRJ7Uc K7)J!YTl`;ZYz@8u literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/87f87bc3-5c66-4b65-b1c7-b08d7077a724.jpg b/XYZStore/wwwroot/images/products/87f87bc3-5c66-4b65-b1c7-b08d7077a724.jpg new file mode 100644 index 0000000000000000000000000000000000000000..376d5dc0e4252c39a64e2f02a32b2a802c1e6e54 GIT binary patch literal 27436 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 literal 0 HcmV?d00001 diff --git a/XYZStore/wwwroot/images/products/986e73c5-8e8c-4c67-a23b-ac8b4dd1e423.jpg b/XYZStore/wwwroot/images/products/986e73c5-8e8c-4c67-a23b-ac8b4dd1e423.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b152a0f48d59fbf930bd58ce457c11b7a3e978a9 GIT binary patch literal 33034 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 z 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 Date: Tue, 20 Sep 2022 09:20:02 +0200 Subject: [PATCH 06/12] Commit PaymentStuff --- .../Data/ApplicationDbContext.cs | 2 + ...AddedOrderHeaderAndDetailsToDb.Designer.cs | 655 ++++++++++++++++++ ...19073521_AddedOrderHeaderAndDetailsToDb.cs | 101 +++ .../ApplicationDbContextModelSnapshot.cs | 135 ++++ .../IRepository/IOrderDetailRepository.cs | 15 + .../IRepository/IOrderHeaderRepository.cs | 17 + .../Repository/IRepository/IUnitOfWork.cs | 3 + .../Repository/OrderDetailRepository.cs | 26 + .../Repository/OrderHeaderRepository.cs | 45 ++ XYZStore.DataAccess/Repository/UnitOfWork.cs | 5 +- XYZStore.Models/Models/OrderDetail.cs | 29 + XYZStore.Models/Models/OrderHeader.cs | 44 ++ XYZStore.Models/ViewModels/ShoppingCartVM.cs | 2 +- XYZStore.Utility/SD.cs | 12 + XYZStore.Utility/StripeSettings.cs | 14 + .../Customer/Controllers/CartController.cs | 151 +++- .../Areas/Customer/Views/Cart/Index.cshtml | 14 +- .../Views/Cart/OrderConfirmation.cshtml | 13 + .../Areas/Customer/Views/Cart/Summary.cshtml | 67 +- XYZStore/Program.cs | 6 +- XYZStore/XYZStore.csproj | 1 + XYZStore/appsettings.json | 4 + XYZStore/wwwroot/images/leaf.png | Bin 0 -> 11583 bytes 23 files changed, 1305 insertions(+), 56 deletions(-) create mode 100644 XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.Designer.cs create mode 100644 XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.cs create mode 100644 XYZStore.DataAccess/Repository/IRepository/IOrderDetailRepository.cs create mode 100644 XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs create mode 100644 XYZStore.DataAccess/Repository/OrderDetailRepository.cs create mode 100644 XYZStore.DataAccess/Repository/OrderHeaderRepository.cs create mode 100644 XYZStore.Models/Models/OrderDetail.cs create mode 100644 XYZStore.Models/Models/OrderHeader.cs create mode 100644 XYZStore.Utility/StripeSettings.cs create mode 100644 XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml create mode 100644 XYZStore/wwwroot/images/leaf.png diff --git a/XYZStore.DataAccess/Data/ApplicationDbContext.cs b/XYZStore.DataAccess/Data/ApplicationDbContext.cs index faeec5b..6bddf21 100644 --- a/XYZStore.DataAccess/Data/ApplicationDbContext.cs +++ b/XYZStore.DataAccess/Data/ApplicationDbContext.cs @@ -18,5 +18,7 @@ public ApplicationDbContext(DbContextOptionsoptions) : bas public DbSet ApplicationUsers { get; set; } public DbSet Companies { get; set; } public DbSet ShoppingCarts { get; set; } + public DbSet OrderHeaders { get; set; } + public DbSet OrderDetails { get; set; } } diff --git a/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.Designer.cs b/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.Designer.cs new file mode 100644 index 0000000..e9348c0 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.Designer.cs @@ -0,0 +1,655 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using XYZStore.DataAccess; + +#nullable disable + +namespace XYZStore.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20220919073521_AddedOrderHeaderAndDetailsToDb")] + partial class AddedOrderHeaderAndDetailsToDb + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Discriminator") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasDiscriminator("Discriminator").HasValue("IdentityUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("XYZStore.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CreatedDateTime") + .HasColumnType("datetime2"); + + b.Property("DisplayOrder") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("XYZStore.Models.CoverType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.ToTable("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Company", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderDetail", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrderId"); + + b.HasIndex("ProductId"); + + b.ToTable("OrderDetails"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Carrier") + .HasColumnType("nvarchar(max)"); + + b.Property("City") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderDate") + .HasColumnType("datetime2"); + + b.Property("OrderStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("OrderTotal") + .HasColumnType("float"); + + b.Property("PaymentDate") + .HasColumnType("datetime2"); + + b.Property("PaymentDueDate") + .HasColumnType("datetime2"); + + b.Property("PaymentIntentId") + .HasColumnType("nvarchar(max)"); + + b.Property("PaymentStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SessionId") + .HasColumnType("nvarchar(max)"); + + b.Property("ShippingDate") + .HasColumnType("datetime2"); + + b.Property("State") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TrackingNumber") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.ToTable("OrderHeaders"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("CategoryId") + .HasColumnType("int"); + + b.Property("CoverTypeId") + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Director") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IMDB") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImageUrl") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ListPrice") + .HasColumnType("float"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("Price10") + .HasColumnType("float"); + + b.Property("Price5") + .HasColumnType("float"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.HasIndex("CoverTypeId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.HasIndex("ProductId"); + + b.ToTable("ShoppingCarts"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser"); + + b.Property("City") + .HasColumnType("nvarchar(max)"); + + b.Property("CompanyId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("State") + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .HasColumnType("nvarchar(max)"); + + b.HasIndex("CompanyId"); + + b.HasDiscriminator().HasValue("ApplicationUser"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderDetail", b => + { + b.HasOne("XYZStore.Models.Models.OrderHeader", "OrderHeader") + .WithMany() + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OrderHeader"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderHeader", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.Product", b => + { + b.HasOne("XYZStore.Models.Category", "Category") + .WithMany() + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.CoverType", "CoverType") + .WithMany() + .HasForeignKey("CoverTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + + b.Navigation("CoverType"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.ShoppingCart", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.ApplicationUser", b => + { + b.HasOne("XYZStore.Models.Models.Company", "Company") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.cs b/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.cs new file mode 100644 index 0000000..340eac2 --- /dev/null +++ b/XYZStore.DataAccess/Migrations/20220919073521_AddedOrderHeaderAndDetailsToDb.cs @@ -0,0 +1,101 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace XYZStore.Migrations +{ + public partial class AddedOrderHeaderAndDetailsToDb : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "OrderHeaders", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ApplicationUserId = table.Column(type: "nvarchar(450)", nullable: false), + OrderDate = table.Column(type: "datetime2", nullable: false), + ShippingDate = table.Column(type: "datetime2", nullable: false), + OrderTotal = table.Column(type: "float", nullable: false), + OrderStatus = table.Column(type: "nvarchar(max)", nullable: true), + PaymentStatus = table.Column(type: "nvarchar(max)", nullable: true), + TrackingNumber = table.Column(type: "nvarchar(max)", nullable: true), + Carrier = table.Column(type: "nvarchar(max)", nullable: true), + PaymentDate = table.Column(type: "datetime2", nullable: false), + PaymentDueDate = table.Column(type: "datetime2", nullable: false), + SessionId = table.Column(type: "nvarchar(max)", nullable: true), + PaymentIntentId = table.Column(type: "nvarchar(max)", nullable: true), + PhoneNumber = table.Column(type: "nvarchar(max)", nullable: false), + StreetAddress = table.Column(type: "nvarchar(max)", nullable: false), + City = table.Column(type: "nvarchar(max)", nullable: false), + State = table.Column(type: "nvarchar(max)", nullable: false), + PostalCode = table.Column(type: "nvarchar(max)", nullable: false), + Name = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrderHeaders", x => x.Id); + table.ForeignKey( + name: "FK_OrderHeaders_AspNetUsers_ApplicationUserId", + column: x => x.ApplicationUserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "OrderDetails", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + OrderId = table.Column(type: "int", nullable: false), + ProductId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false), + Price = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrderDetails", x => x.Id); + table.ForeignKey( + name: "FK_OrderDetails_OrderHeaders_OrderId", + column: x => x.OrderId, + principalTable: "OrderHeaders", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_OrderDetails_Products_ProductId", + column: x => x.ProductId, + principalTable: "Products", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_OrderDetails_OrderId", + table: "OrderDetails", + column: "OrderId"); + + migrationBuilder.CreateIndex( + name: "IX_OrderDetails_ProductId", + table: "OrderDetails", + column: "ProductId"); + + migrationBuilder.CreateIndex( + name: "IX_OrderHeaders_ApplicationUserId", + table: "OrderHeaders", + column: "ApplicationUserId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "OrderDetails"); + + migrationBuilder.DropTable( + name: "OrderHeaders"); + } + } +} diff --git a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs index c016433..387a350 100644 --- a/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/XYZStore.DataAccess/Migrations/ApplicationDbContextModelSnapshot.cs @@ -299,6 +299,111 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Companies"); }); + modelBuilder.Entity("XYZStore.Models.Models.OrderDetail", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("OrderId"); + + b.HasIndex("ProductId"); + + b.ToTable("OrderDetails"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + + b.Property("ApplicationUserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Carrier") + .HasColumnType("nvarchar(max)"); + + b.Property("City") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("OrderDate") + .HasColumnType("datetime2"); + + b.Property("OrderStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("OrderTotal") + .HasColumnType("float"); + + b.Property("PaymentDate") + .HasColumnType("datetime2"); + + b.Property("PaymentDueDate") + .HasColumnType("datetime2"); + + b.Property("PaymentIntentId") + .HasColumnType("nvarchar(max)"); + + b.Property("PaymentStatus") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PostalCode") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SessionId") + .HasColumnType("nvarchar(max)"); + + b.Property("ShippingDate") + .HasColumnType("datetime2"); + + b.Property("State") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("StreetAddress") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TrackingNumber") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationUserId"); + + b.ToTable("OrderHeaders"); + }); + modelBuilder.Entity("XYZStore.Models.Models.Product", b => { b.Property("Id") @@ -464,6 +569,36 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("XYZStore.Models.Models.OrderDetail", b => + { + b.HasOne("XYZStore.Models.Models.OrderHeader", "OrderHeader") + .WithMany() + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("XYZStore.Models.Models.Product", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OrderHeader"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("XYZStore.Models.Models.OrderHeader", b => + { + b.HasOne("XYZStore.Models.ApplicationUser", "ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApplicationUser"); + }); + modelBuilder.Entity("XYZStore.Models.Models.Product", b => { b.HasOne("XYZStore.Models.Category", "Category") diff --git a/XYZStore.DataAccess/Repository/IRepository/IOrderDetailRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IOrderDetailRepository.cs new file mode 100644 index 0000000..f25cde3 --- /dev/null +++ b/XYZStore.DataAccess/Repository/IRepository/IOrderDetailRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository.IRepository +{ + public interface IOrderDetailRepository : IRepository + { + void Update(OrderDetail obj); + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs new file mode 100644 index 0000000..86c01ef --- /dev/null +++ b/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository.IRepository +{ + public interface IOrderHeaderRepository : IRepository + { + void Update(OrderHeader obj); + void UpdateStatus(int id, string orderStatus, string? paymentStatus=null); + void UpdateStripePaymentID(int id, string sessionId, string? paymentStatus=null); + } +} diff --git a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs index f26baea..fd25c9c 100644 --- a/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/IRepository/IUnitOfWork.cs @@ -14,6 +14,9 @@ public interface IUnitOfWork ICompanyRepository Company { get; } IShoppingCartRepository ShoppingCart { get; } IApplicationUserRepository ApplicationUser { get; } + IOrderDetailRepository OrderDetail { get; } + IOrderHeaderRepository OrderHeader { get; } + void Save(); } } diff --git a/XYZStore.DataAccess/Repository/OrderDetailRepository.cs b/XYZStore.DataAccess/Repository/OrderDetailRepository.cs new file mode 100644 index 0000000..bb97426 --- /dev/null +++ b/XYZStore.DataAccess/Repository/OrderDetailRepository.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository +{ + public class OrderDetailRepository : Repository, IOrderDetailRepository + { + private ApplicationDbContext _db; + + public OrderDetailRepository(ApplicationDbContext db) : base(db) + { + _db = db; + } + + public void Update(OrderDetail obj) + { + _db.OrderDetails.Update(obj); + } + } +} diff --git a/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs b/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs new file mode 100644 index 0000000..afe9ca3 --- /dev/null +++ b/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Models.Models; + +namespace XYZStore.DataAccess.Repository +{ + public class OrderHeaderRepository : Repository, IOrderHeaderRepository + { + private ApplicationDbContext _db; + + public OrderHeaderRepository(ApplicationDbContext db) : base(db) + { + _db = db; + } + + public void Update(OrderHeader obj) + { + _db.OrderHeaders.Update(obj); + } + + public void UpdateStatus(int id, string orderStatus, string? paymentStatus = null) + { + var orderFromDb = _db.OrderHeaders.FirstOrDefault(u => u.Id == id); + if(orderFromDb != null) + { + orderFromDb.OrderStatus = orderStatus; + if(paymentStatus != null) + { + orderFromDb.PaymentStatus = paymentStatus; + } + } + } + public void UpdateStripePaymentID(int id, string sessionId, string? paymentIntentId = null) + { + var orderFromDb = _db.OrderHeaders.FirstOrDefault(u => u.Id == id); + orderFromDb.SessionId = sessionId; + orderFromDb.PaymentIntentId = paymentIntentId; + } + } +} diff --git a/XYZStore.DataAccess/Repository/UnitOfWork.cs b/XYZStore.DataAccess/Repository/UnitOfWork.cs index aa50f9b..2d965c0 100644 --- a/XYZStore.DataAccess/Repository/UnitOfWork.cs +++ b/XYZStore.DataAccess/Repository/UnitOfWork.cs @@ -22,6 +22,8 @@ public UnitOfWork(ApplicationDbContext db) Company = new CompanyRepository(_db); ApplicationUser = new ApplicationUserRepository(_db); ShoppingCart = new ShoppingCartRepository(_db); + OrderHeader = new OrderHeaderRepository(_db); + OrderDetail = new OrderDetailRepository(_db); } public ICategoryRepository Category { get; private set; } public ICoverTypeRepository CoverType { get; private set; } @@ -29,7 +31,8 @@ public UnitOfWork(ApplicationDbContext db) public ICompanyRepository Company { get; private set; } public IShoppingCartRepository ShoppingCart { get; private set; } public IApplicationUserRepository ApplicationUser { get; private set; } - + public IOrderHeaderRepository OrderHeader { get; private set; } + public IOrderDetailRepository OrderDetail { get; private set; } public void Save() { _db.SaveChanges(); diff --git a/XYZStore.Models/Models/OrderDetail.cs b/XYZStore.Models/Models/OrderDetail.cs new file mode 100644 index 0000000..6ac3ed4 --- /dev/null +++ b/XYZStore.Models/Models/OrderDetail.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Models.Models +{ + public class OrderDetail + { + public int Id { get; set; } + [Required] + public int OrderId { get; set; } + [ForeignKey("OrderId")] + [ValidateNever] + public OrderHeader OrderHeader { get; set; } + [Required] + public int ProductId { get; set; } + [ForeignKey("ProductId")] + [ValidateNever] + public Product Product { get; set; } + public int Count { get; set; } + public double Price { get; set; } + + } +} diff --git a/XYZStore.Models/Models/OrderHeader.cs b/XYZStore.Models/Models/OrderHeader.cs new file mode 100644 index 0000000..a125071 --- /dev/null +++ b/XYZStore.Models/Models/OrderHeader.cs @@ -0,0 +1,44 @@ +using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Models.Models +{ + public class OrderHeader + { + public int Id { get; set; } + public string ApplicationUserId { get; set; } + [ForeignKey("ApplicationUserId")] + [ValidateNever] + public ApplicationUser ApplicationUser { get; set; } + [Required] + public DateTime OrderDate { get; set; } + public DateTime ShippingDate { get; set; } + public double OrderTotal { get; set; } + public string? OrderStatus { get; set; } + public string? PaymentStatus { get; set; } + public string? TrackingNumber { get; set; } + public string? Carrier { get; set; } + public DateTime PaymentDate { get; set; } + public DateTime PaymentDueDate { get; set; } + public string? SessionId { get; set; } + public string? PaymentIntentId { get; set; } + [Required] + public string PhoneNumber { get; set; } + [Required] + public string StreetAddress { get; set; } + [Required] + public string City { get; set; } + [Required] + public string State { get; set; } + [Required] + public string PostalCode { get; set; } + [Required] + public string Name { get; set; } + } +} diff --git a/XYZStore.Models/ViewModels/ShoppingCartVM.cs b/XYZStore.Models/ViewModels/ShoppingCartVM.cs index 1e4baca..fca8064 100644 --- a/XYZStore.Models/ViewModels/ShoppingCartVM.cs +++ b/XYZStore.Models/ViewModels/ShoppingCartVM.cs @@ -10,6 +10,6 @@ namespace XYZStore.Models.ViewModels public class ShoppingCartVM { public IEnumerable ListCart { get; set; } - public double CartTotal { get; set; } + public OrderHeader OrderHeader { get; set; } } } diff --git a/XYZStore.Utility/SD.cs b/XYZStore.Utility/SD.cs index 6daa4e1..f202789 100644 --- a/XYZStore.Utility/SD.cs +++ b/XYZStore.Utility/SD.cs @@ -12,5 +12,17 @@ public static class SD public const string Role_User_Comp = "Company"; public const string Role_Admin = "Admin"; public const string Role_Employee = "Employee"; + + public const string StatusPending = "Pending"; + public const string StatusApproved = "Approved"; + public const string StatusInProcess = "Processing"; + public const string StatusShipped = "Shipped"; + public const string StatusCancelled = "Cancelled"; + public const string StatusRefunded = "Refunded"; + + public const string PaymentStatusPending = "Pending"; + public const string PaymentStatusApproved = "Approved"; + public const string PaymentStatusDelayedPayment = "ApprovedForDelayedPayment"; + public const string PaymentStatusRejected = "Rejected"; } } diff --git a/XYZStore.Utility/StripeSettings.cs b/XYZStore.Utility/StripeSettings.cs new file mode 100644 index 0000000..f7203c7 --- /dev/null +++ b/XYZStore.Utility/StripeSettings.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace XYZStore.Utility +{ + public class StripeSettings + { + public string SecretKey { get; set; } + public string PublishableKey { get; set; } + } +} diff --git a/XYZStore/Areas/Customer/Controllers/CartController.cs b/XYZStore/Areas/Customer/Controllers/CartController.cs index dde366c..8b7198c 100644 --- a/XYZStore/Areas/Customer/Controllers/CartController.cs +++ b/XYZStore/Areas/Customer/Controllers/CartController.cs @@ -4,6 +4,11 @@ using XYZStore.Models.ViewModels; using XYZStore.Models.Models; using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Utility; +using Stripe.Checkout; +using static System.Net.WebRequestMethods; +using Microsoft.Extensions.Options; +using Stripe; namespace XYZStore.Areas.Customer.Controllers { @@ -12,7 +17,7 @@ namespace XYZStore.Areas.Customer.Controllers public class CartController : Controller { private readonly IUnitOfWork _unitOfWork; - + [BindProperty] public ShoppingCartVM ShoppingCartVM { get; set; } public int OrderTotal { get; set; } public CartController(IUnitOfWork unitOfWork) @@ -27,34 +32,143 @@ public IActionResult Index() ShoppingCartVM = new ShoppingCartVM() { ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, - includeProperties: "Product") + includeProperties: "Product"), + OrderHeader = new() }; foreach(var cart in ShoppingCartVM.ListCart) { cart.Price = GetPriceBasedOnQuntity(cart.Count,cart.Product.Price, cart.Product.Price5,cart.Product.Price10); - ShoppingCartVM.CartTotal += (cart.Price * cart.Count); + ShoppingCartVM.OrderHeader.OrderTotal += (cart.Price * cart.Count); } return View(ShoppingCartVM); } public IActionResult Summary() { - //var claimsIdentity = (ClaimsIdentity)User.Identity; - //var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + var claimsIdentity = (ClaimsIdentity)User.Identity; + var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + + ShoppingCartVM = new ShoppingCartVM() + { + ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, + includeProperties: "Product"), + OrderHeader = new() + }; + ShoppingCartVM.OrderHeader.ApplicationUser = _unitOfWork.ApplicationUser.GetFirstOrDefault( + u => u.Id == claim.Value); - //ShoppingCartVM = new ShoppingCartVM() - //{ - // ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, - // includeProperties: "Product") - //}; - //foreach (var cart in ShoppingCartVM.ListCart) - //{ - // cart.Price = GetPriceBasedOnQuntity(cart.Count, cart.Product.Price, - // cart.Product.Price5, cart.Product.Price10); - // ShoppingCartVM.CartTotal += (cart.Price * cart.Count); - //} - //return View(ShoppingCartVM); - return View(); + ShoppingCartVM.OrderHeader.Name = ShoppingCartVM.OrderHeader.ApplicationUser.Name; + ShoppingCartVM.OrderHeader.PhoneNumber = ShoppingCartVM.OrderHeader.ApplicationUser.PhoneNumber; + ShoppingCartVM.OrderHeader.StreetAddress = ShoppingCartVM.OrderHeader.ApplicationUser.StreetAddress; + ShoppingCartVM.OrderHeader.City = ShoppingCartVM.OrderHeader.ApplicationUser.City; + ShoppingCartVM.OrderHeader.State = ShoppingCartVM.OrderHeader.ApplicationUser.State; + ShoppingCartVM.OrderHeader.PostalCode = ShoppingCartVM.OrderHeader.ApplicationUser.PostalCode; + + foreach (var cart in ShoppingCartVM.ListCart) + { + cart.Price = GetPriceBasedOnQuntity(cart.Count, cart.Product.Price, + cart.Product.Price5, cart.Product.Price10); + ShoppingCartVM.OrderHeader.OrderTotal += (cart.Price * cart.Count); + } + return View(ShoppingCartVM); + } + [HttpPost] + [ActionName("Summary")] + [ValidateAntiForgeryToken] + public IActionResult SummaryPOST() + { + var claimsIdentity = (ClaimsIdentity)User.Identity; + var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + + ShoppingCartVM.ListCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == claim.Value, + includeProperties: "Product"); + + ShoppingCartVM.OrderHeader.PaymentStatus= SD.PaymentStatusPending; + ShoppingCartVM.OrderHeader.OrderStatus = SD.StatusPending; + ShoppingCartVM.OrderHeader.OrderDate = System.DateTime.Now; + ShoppingCartVM.OrderHeader.ApplicationUserId = claim.Value; + + foreach (var cart in ShoppingCartVM.ListCart) + { + cart.Price = GetPriceBasedOnQuntity(cart.Count, cart.Product.Price, + cart.Product.Price5, cart.Product.Price10); + ShoppingCartVM.OrderHeader.OrderTotal += (cart.Price * cart.Count); + } + + _unitOfWork.OrderHeader.Add(ShoppingCartVM.OrderHeader); + _unitOfWork.Save(); + + foreach (var cart in ShoppingCartVM.ListCart) + { + OrderDetail orderDetail = new() + { + ProductId = cart.ProductId, + OrderId = ShoppingCartVM.OrderHeader.Id, + Price = cart.Price, + Count = cart.Count + }; + _unitOfWork.OrderDetail.Add(orderDetail); + _unitOfWork.Save(); + } + //Stripe Settings + var domain = "https://localhost:44340/"; + var options = new SessionCreateOptions + { + PaymentMethodTypes = new List + { + "card", + }, + LineItems = new List(), + + Mode = "payment", + SuccessUrl = domain+$"customer/cart/OrderConfirmation?id={ShoppingCartVM.OrderHeader.Id}", + CancelUrl = domain+$"customer/cart/index", + }; + foreach(var item in ShoppingCartVM.ListCart) + { + var sessionLineItem = new SessionLineItemOptions + { + PriceData = new SessionLineItemPriceDataOptions + { + UnitAmount = (long)(item.Price * 100), + Currency = "SEK", + ProductData = new SessionLineItemPriceDataProductDataOptions + { + Name = item.Product.Title + }, + }, + Quantity = item.Count, + }; + options.LineItems.Add(sessionLineItem); + } + + var service = new SessionService(); + Session session = service.Create(options); + _unitOfWork.OrderHeader.UpdateStripePaymentID(ShoppingCartVM.OrderHeader.Id,session.PaymentIntentId); + _unitOfWork.Save(); + Response.Headers.Add("Location", session.Url); + return new StatusCodeResult(303); + + //_unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart); + //_unitOfWork.Save(); + //return RedirectToAction("Index","Home"); + } + public IActionResult OrderConfirmation(int id) + { + OrderHeader orderHeader = _unitOfWork.OrderHeader.GetFirstOrDefault(u => u.Id == id); + var service = new SessionService(); + Session session = service.Get(orderHeader.SessionId); + //check the stripe status + if(session.PaymentStatus.ToLower() == "paid") + { + _unitOfWork.OrderHeader.UpdateStatus(id, SD.StatusApproved, SD.PaymentStatusApproved); + _unitOfWork.Save(); + } + List shoppingCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == + orderHeader.ApplicationUserId).ToList(); + _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart); + _unitOfWork.Save(); + return View(id); } public IActionResult Plus(int cartId) @@ -95,7 +209,6 @@ private double GetPriceBasedOnQuntity(double quantity,double price,double price5 } else { - if(quantity <=10) { return price5; diff --git a/XYZStore/Areas/Customer/Views/Cart/Index.cshtml b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml index f63e9ab..e41c603 100644 --- a/XYZStore/Areas/Customer/Views/Cart/Index.cshtml +++ b/XYZStore/Areas/Customer/Views/Cart/Index.cshtml @@ -9,10 +9,10 @@

    -
    +
    +
    +
    @foreach(var item in Model.ListCart) @@ -45,7 +45,7 @@
    -
    +

    } @@ -54,20 +54,18 @@
    • Total (SEK) - $$$ @Model.CartTotal.ToString("c") + $$$ @Model.OrderHeader.OrderTotal.ToString("c")
    - -
    +
    \ No newline at end of file diff --git a/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml b/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml new file mode 100644 index 0000000..b9043f0 --- /dev/null +++ b/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml @@ -0,0 +1,13 @@ +@model int +
    +
    +

    Order Placed Successfully

    + Your Order Number is : @Model

    + +
    +
    +
    + Your Order has been placed successfully!
    + +
    +
    diff --git a/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml b/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml index af5d05b..9393e48 100644 --- a/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml +++ b/XYZStore/Areas/Customer/Views/Cart/Summary.cshtml @@ -1,18 +1,22 @@ - +@model XYZStore.Models.ViewModels.ShoppingCartVM +@using Microsoft.Extensions.Options +@inject IOptions Stripe +

    -
    -
    +
    +
      Order Summary
    - -
    + +
    +
    @@ -22,12 +26,13 @@ PickUp Details:
    -
    -
    +
    +
    - + +
    @@ -35,15 +40,17 @@
    - + +
    -
    +
    - + +
    @@ -51,7 +58,8 @@
    - + +
    @@ -59,7 +67,8 @@
    - + +
    @@ -67,7 +76,8 @@
    - + +
    @@ -76,16 +86,19 @@ Order Summary:
      -
    • + @foreach(var details in Model.ListCart) + { +
    • -
      --TITLE--
      - Quantity: --COUNT-- -
      - $ --PRICE* COUNT-- +
      @details.Product.Title
      + Quantity: @details.Count +
    + @((details.Price * details.Count).ToString("c")) + }
  • - Total (USD) - $--GRAND TOTAL-- + Total (SEK) + @Model.OrderHeader.OrderTotal.ToString("c")
  • @@ -95,14 +108,16 @@
    - +
    diff --git a/XYZStore/Program.cs b/XYZStore/Program.cs index e012fdc..d51cac4 100644 --- a/XYZStore/Program.cs +++ b/XYZStore/Program.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Identity.UI.Services; using XYZStore.Utility; +using Stripe; var builder = WebApplication.CreateBuilder(args); @@ -14,7 +15,7 @@ builder.Services.AddDbContext(options => options.UseSqlServer( builder.Configuration.GetConnectionString("DefaultConnection") )); - +builder.Services.Configure(builder.Configuration.GetSection("Stripe")); builder.Services.AddIdentity().AddDefaultTokenProviders() .AddEntityFrameworkStores(); builder.Services.AddScoped(); @@ -41,6 +42,9 @@ app.UseStaticFiles(); app.UseRouting(); + + StripeConfiguration.ApiKey = builder.Configuration.GetSection("Stripe:SecretKey").Get(); + app.UseAuthentication(); app.UseAuthorization(); diff --git a/XYZStore/XYZStore.csproj b/XYZStore/XYZStore.csproj index 693327b..acce2a4 100644 --- a/XYZStore/XYZStore.csproj +++ b/XYZStore/XYZStore.csproj @@ -18,6 +18,7 @@
    +
    diff --git a/XYZStore/appsettings.json b/XYZStore/appsettings.json index a4d9403..8703012 100644 --- a/XYZStore/appsettings.json +++ b/XYZStore/appsettings.json @@ -9,5 +9,9 @@ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=XYZStore;Trusted_Connection=True;", "ApplicationDbContextConnection": "Server=(localdb)\\mssqllocaldb;Database=XYZStore;Trusted_Connection=True;MultipleActiveResultSets=true" + }, + "Stripe": { + "SecretKey": "sk_test_51Lji70F0vqBNmIPwSEx36D8gP655scaMRi4LIwjBY8cQDGSs7D5eEDCjInolh5DAKmvCiuBevsd62nTAoGqHr6hv00FDbADSRz", + "PublishableKey": "pk_test_51Lji70F0vqBNmIPwRYtFEz8vXTstpYHrnLPfezaBSYNGcBofIsKcCZxdprZKuID8aNdfSW7B5JIZwCsnoTc4u8Ok00rMeELrdz" } } \ No newline at end of file diff --git a/XYZStore/wwwroot/images/leaf.png b/XYZStore/wwwroot/images/leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..2b406aafbcb485ba00cf44972d3046c93bde93c9 GIT binary patch literal 11583 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 literal 0 HcmV?d00001 From 236c22a462feb5e168427808e01ba46a44de4c0d Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Tue, 20 Sep 2022 10:37:29 +0200 Subject: [PATCH 07/12] Commit Correction Payments --- .../Repository/IRepository/IOrderHeaderRepository.cs | 2 +- XYZStore.DataAccess/Repository/OrderHeaderRepository.cs | 2 +- XYZStore/Areas/Customer/Controllers/CartController.cs | 6 +++--- XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs b/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs index 86c01ef..1f3859f 100644 --- a/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs +++ b/XYZStore.DataAccess/Repository/IRepository/IOrderHeaderRepository.cs @@ -12,6 +12,6 @@ public interface IOrderHeaderRepository : IRepository { void Update(OrderHeader obj); void UpdateStatus(int id, string orderStatus, string? paymentStatus=null); - void UpdateStripePaymentID(int id, string sessionId, string? paymentStatus=null); + void UpdateStripePaymentID(int id, string sessionId, string paymentIntentId); } } diff --git a/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs b/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs index afe9ca3..cb60a51 100644 --- a/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs +++ b/XYZStore.DataAccess/Repository/OrderHeaderRepository.cs @@ -35,7 +35,7 @@ public void UpdateStatus(int id, string orderStatus, string? paymentStatus = nul } } } - public void UpdateStripePaymentID(int id, string sessionId, string? paymentIntentId = null) + public void UpdateStripePaymentID(int id, string sessionId, string paymentIntentId) { var orderFromDb = _db.OrderHeaders.FirstOrDefault(u => u.Id == id); orderFromDb.SessionId = sessionId; diff --git a/XYZStore/Areas/Customer/Controllers/CartController.cs b/XYZStore/Areas/Customer/Controllers/CartController.cs index 8b7198c..10a2985 100644 --- a/XYZStore/Areas/Customer/Controllers/CartController.cs +++ b/XYZStore/Areas/Customer/Controllers/CartController.cs @@ -144,7 +144,7 @@ public IActionResult SummaryPOST() var service = new SessionService(); Session session = service.Create(options); - _unitOfWork.OrderHeader.UpdateStripePaymentID(ShoppingCartVM.OrderHeader.Id,session.PaymentIntentId); + _unitOfWork.OrderHeader.UpdateStripePaymentID(ShoppingCartVM.OrderHeader.Id,session.Id,session.PaymentIntentId); _unitOfWork.Save(); Response.Headers.Add("Location", session.Url); return new StatusCodeResult(303); @@ -164,9 +164,9 @@ public IActionResult OrderConfirmation(int id) _unitOfWork.OrderHeader.UpdateStatus(id, SD.StatusApproved, SD.PaymentStatusApproved); _unitOfWork.Save(); } - List shoppingCart = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == + List shoppingCarts = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == orderHeader.ApplicationUserId).ToList(); - _unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart); + _unitOfWork.ShoppingCart.RemoveRange(shoppingCarts); _unitOfWork.Save(); return View(id); } diff --git a/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml b/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml index b9043f0..186cda3 100644 --- a/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml +++ b/XYZStore/Areas/Customer/Views/Cart/OrderConfirmation.cshtml @@ -1,4 +1,5 @@ @model int +

    Order Placed Successfully

    From ad00efa7083eaf3a1ddaf69327d25bc14e76d35d Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Tue, 20 Sep 2022 15:20:56 +0200 Subject: [PATCH 08/12] Commit Manage Order --- XYZStore.Models/ViewModels/OrderVM.cs | 15 ++++ .../Admin/Controllers/OrderController.cs | 62 ++++++++++++++ XYZStore/Areas/Admin/Views/Order/Index.cshtml | 75 ++++++++++++++++ .../Customer/Controllers/CartController.cs | 85 ++++++++++++------- XYZStore/Views/Shared/_Layout.cshtml | 18 ++-- XYZStore/wwwroot/js/order.js | 56 ++++++++++++ 6 files changed, 271 insertions(+), 40 deletions(-) create mode 100644 XYZStore.Models/ViewModels/OrderVM.cs create mode 100644 XYZStore/Areas/Admin/Controllers/OrderController.cs create mode 100644 XYZStore/Areas/Admin/Views/Order/Index.cshtml create mode 100644 XYZStore/wwwroot/js/order.js diff --git a/XYZStore.Models/ViewModels/OrderVM.cs b/XYZStore.Models/ViewModels/OrderVM.cs new file mode 100644 index 0000000..c62fcf0 --- /dev/null +++ b/XYZStore.Models/ViewModels/OrderVM.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using XYZStore.Models.Models; + +namespace XYZStore.Models.ViewModels +{ + public class OrderVM + { + public OrderHeader OrderHeader { get; set; } + public IEnumerable OrderDetail { get; set; } + } +} diff --git a/XYZStore/Areas/Admin/Controllers/OrderController.cs b/XYZStore/Areas/Admin/Controllers/OrderController.cs new file mode 100644 index 0000000..935bfcd --- /dev/null +++ b/XYZStore/Areas/Admin/Controllers/OrderController.cs @@ -0,0 +1,62 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Diagnostics; +using System.Security.Claims; +using XYZStore.DataAccess.Repository.IRepository; +using XYZStore.Models; +using XYZStore.Models.Models; +using XYZStore.Utility; + +namespace XYZStore.Areas.Admin.Controllers +{ + [Area("Admin")] + [Authorize] + public class OrderController : Controller + { + private readonly IUnitOfWork _unitOfWork; + public OrderController(IUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + } + public IActionResult Index() + { + return View(); + } + + #region API CALLS + [HttpGet] + public IActionResult GetAll(string status) + { + IEnumerable orderHeaders; + + if(User.IsInRole(SD.Role_Admin) || User.IsInRole(SD.Role_Employee)) { + orderHeaders = _unitOfWork.OrderHeader.GetAll(includeProperties: "ApplicationUser"); + } + else + { + var claimsIdentity = (ClaimsIdentity)User.Identity; + var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); + orderHeaders = _unitOfWork.OrderHeader.GetAll(u => u.ApplicationUserId==claim.Value, includeProperties: "ApplicationUser"); + } + switch (status) + { + case "pending": + orderHeaders = orderHeaders.Where(u => u.PaymentStatus == SD.PaymentStatusDelayedPayment); + break; + case "inprocess": + orderHeaders = orderHeaders.Where(u => u.OrderStatus == SD.StatusInProcess); + break; + case "completed": + orderHeaders = orderHeaders.Where(u => u.OrderStatus == SD.StatusShipped); + break; + case "approved": + orderHeaders = orderHeaders.Where(u => u.OrderStatus == SD.StatusApproved); + break; + default: + break; + } + return Json(new { data = orderHeaders }); + } + #endregion + } +} diff --git a/XYZStore/Areas/Admin/Views/Order/Index.cshtml b/XYZStore/Areas/Admin/Views/Order/Index.cshtml new file mode 100644 index 0000000..40d29ae --- /dev/null +++ b/XYZStore/Areas/Admin/Views/Order/Index.cshtml @@ -0,0 +1,75 @@ +@{ + var status = Context.Request.Query["status"]; + var pending = "text-primary"; + var inprocess = "text-primary"; + var completed = "text-primary"; + var approved = "text-primary"; + var all = "text-primary"; + + switch (status) + { + case "pending": + pending = "active text-white"; + break; + case "inprocess": + inprocess = "active text-white"; + break; + case "completed": + completed = "active text-white"; + break; + case "approved": + approved = "active text-white"; + break; + default : + all = "active text-white"; + break; + } +} +
    + +

    + + + + + + + + + + + + +
    IdNamePhone NumberEmailStatusTotal
    +
    +@section Scripts{ + +} \ No newline at end of file diff --git a/XYZStore/Areas/Customer/Controllers/CartController.cs b/XYZStore/Areas/Customer/Controllers/CartController.cs index 10a2985..a7e9174 100644 --- a/XYZStore/Areas/Customer/Controllers/CartController.cs +++ b/XYZStore/Areas/Customer/Controllers/CartController.cs @@ -6,9 +6,9 @@ using XYZStore.DataAccess.Repository.IRepository; using XYZStore.Utility; using Stripe.Checkout; -using static System.Net.WebRequestMethods; using Microsoft.Extensions.Options; using Stripe; +using XYZStore.Models; namespace XYZStore.Areas.Customer.Controllers { @@ -95,6 +95,18 @@ public IActionResult SummaryPOST() ShoppingCartVM.OrderHeader.OrderTotal += (cart.Price * cart.Count); } + ApplicationUser applicationUser = _unitOfWork.ApplicationUser.GetFirstOrDefault(u => u.Id == claim.Value); + + if (applicationUser.CompanyId.GetValueOrDefault() == 0) + { + ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusPending; + ShoppingCartVM.OrderHeader.OrderStatus = SD.StatusPending; + } + else + { + ShoppingCartVM.OrderHeader.PaymentStatus = SD.PaymentStatusDelayedPayment; + ShoppingCartVM.OrderHeader.OrderStatus = SD.StatusApproved; + } _unitOfWork.OrderHeader.Add(ShoppingCartVM.OrderHeader); _unitOfWork.Save(); @@ -110,52 +122,58 @@ public IActionResult SummaryPOST() _unitOfWork.OrderDetail.Add(orderDetail); _unitOfWork.Save(); } - //Stripe Settings - var domain = "https://localhost:44340/"; - var options = new SessionCreateOptions + if (applicationUser.CompanyId.GetValueOrDefault() == 0) { - PaymentMethodTypes = new List + //Stripe Settings + var domain = "https://localhost:44340/"; + var options = new SessionCreateOptions + { + PaymentMethodTypes = new List { "card", }, - LineItems = new List(), - - Mode = "payment", - SuccessUrl = domain+$"customer/cart/OrderConfirmation?id={ShoppingCartVM.OrderHeader.Id}", - CancelUrl = domain+$"customer/cart/index", - }; - foreach(var item in ShoppingCartVM.ListCart) - { - var sessionLineItem = new SessionLineItemOptions + LineItems = new List(), + + Mode = "payment", + SuccessUrl = domain + $"customer/cart/OrderConfirmation?id={ShoppingCartVM.OrderHeader.Id}", + CancelUrl = domain + $"customer/cart/index", + }; + foreach (var item in ShoppingCartVM.ListCart) { - PriceData = new SessionLineItemPriceDataOptions + var sessionLineItem = new SessionLineItemOptions { - UnitAmount = (long)(item.Price * 100), - Currency = "SEK", - ProductData = new SessionLineItemPriceDataProductDataOptions + PriceData = new SessionLineItemPriceDataOptions { - Name = item.Product.Title + UnitAmount = (long)(item.Price * 100), + Currency = "SEK", + ProductData = new SessionLineItemPriceDataProductDataOptions + { + Name = item.Product.Title + }, }, - }, - Quantity = item.Count, - }; - options.LineItems.Add(sessionLineItem); + Quantity = item.Count, + }; + options.LineItems.Add(sessionLineItem); + } + + var service = new SessionService(); + Session session = service.Create(options); + _unitOfWork.OrderHeader.UpdateStripePaymentID(ShoppingCartVM.OrderHeader.Id, session.Id, session.PaymentIntentId); + _unitOfWork.Save(); + Response.Headers.Add("Location", session.Url); + return new StatusCodeResult(303); + } + else + { + return RedirectToAction("OrderConfirmation", "Cart", new { id = ShoppingCartVM.OrderHeader.Id }); } - - var service = new SessionService(); - Session session = service.Create(options); - _unitOfWork.OrderHeader.UpdateStripePaymentID(ShoppingCartVM.OrderHeader.Id,session.Id,session.PaymentIntentId); - _unitOfWork.Save(); - Response.Headers.Add("Location", session.Url); - return new StatusCodeResult(303); - //_unitOfWork.ShoppingCart.RemoveRange(ShoppingCartVM.ListCart); - //_unitOfWork.Save(); - //return RedirectToAction("Index","Home"); } public IActionResult OrderConfirmation(int id) { OrderHeader orderHeader = _unitOfWork.OrderHeader.GetFirstOrDefault(u => u.Id == id); + if(orderHeader.PaymentStatus != SD.PaymentStatusDelayedPayment) + { var service = new SessionService(); Session session = service.Get(orderHeader.SessionId); //check the stripe status @@ -164,6 +182,7 @@ public IActionResult OrderConfirmation(int id) _unitOfWork.OrderHeader.UpdateStatus(id, SD.StatusApproved, SD.PaymentStatusApproved); _unitOfWork.Save(); } + } List shoppingCarts = _unitOfWork.ShoppingCart.GetAll(u => u.ApplicationUserId == orderHeader.ApplicationUserId).ToList(); _unitOfWork.ShoppingCart.RemoveRange(shoppingCarts); diff --git a/XYZStore/Views/Shared/_Layout.cshtml b/XYZStore/Views/Shared/_Layout.cshtml index 270dafc..3b67f16 100644 --- a/XYZStore/Views/Shared/_Layout.cshtml +++ b/XYZStore/Views/Shared/_Layout.cshtml @@ -20,23 +20,27 @@ - - @section Scripts { + } \ No newline at end of file diff --git a/XYZStore/Areas/Admin/Views/Order/PaymentConfirmation.cshtml b/XYZStore/Areas/Admin/Views/Order/PaymentConfirmation.cshtml new file mode 100644 index 0000000..edee7ac --- /dev/null +++ b/XYZStore/Areas/Admin/Views/Order/PaymentConfirmation.cshtml @@ -0,0 +1,14 @@ +@model int + +
    +
    +

    Payment Succesfull!

    + Order Number is : @Model

    + +
    +
    +
    + Payment has been placed successfully!
    + Back to Order Details +
    +
    diff --git a/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml b/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml index 5533351..c099c34 100644 --- a/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml +++ b/XYZStore/Areas/Admin/Views/Product/Upsert.cshtml @@ -23,7 +23,7 @@
    - +
    @@ -101,15 +101,6 @@ } - @await RenderSectionAsync("Scripts", required: false) diff --git a/XYZStore/XYZStore.csproj b/XYZStore/XYZStore.csproj index 0b93373..23e9f00 100644 --- a/XYZStore/XYZStore.csproj +++ b/XYZStore/XYZStore.csproj @@ -7,6 +7,8 @@ + + @@ -18,7 +20,8 @@ - + + diff --git a/XYZStore/appsettings.json b/XYZStore/appsettings.json index 8703012..d573833 100644 --- a/XYZStore/appsettings.json +++ b/XYZStore/appsettings.json @@ -7,11 +7,14 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=XYZStore;Trusted_Connection=True;", + "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=XYZStore1;Trusted_Connection=True;", "ApplicationDbContextConnection": "Server=(localdb)\\mssqllocaldb;Database=XYZStore;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Stripe": { "SecretKey": "sk_test_51Lji70F0vqBNmIPwSEx36D8gP655scaMRi4LIwjBY8cQDGSs7D5eEDCjInolh5DAKmvCiuBevsd62nTAoGqHr6hv00FDbADSRz", "PublishableKey": "pk_test_51Lji70F0vqBNmIPwRYtFEz8vXTstpYHrnLPfezaBSYNGcBofIsKcCZxdprZKuID8aNdfSW7B5JIZwCsnoTc4u8Ok00rMeELrdz" + }, + "SendGrid": { + "SecretKey": "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" } } \ No newline at end of file From 640e52df4997bfdcc6cb4ccfb980e2d9c7c02b09 Mon Sep 17 00:00:00 2001 From: Daniel Hammargren Date: Fri, 7 Oct 2022 08:39:43 +0200 Subject: [PATCH 12/12] commit --- XYZStore/appsettings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XYZStore/appsettings.json b/XYZStore/appsettings.json index d573833..077180f 100644 --- a/XYZStore/appsettings.json +++ b/XYZStore/appsettings.json @@ -14,7 +14,7 @@ "SecretKey": "sk_test_51Lji70F0vqBNmIPwSEx36D8gP655scaMRi4LIwjBY8cQDGSs7D5eEDCjInolh5DAKmvCiuBevsd62nTAoGqHr6hv00FDbADSRz", "PublishableKey": "pk_test_51Lji70F0vqBNmIPwRYtFEz8vXTstpYHrnLPfezaBSYNGcBofIsKcCZxdprZKuID8aNdfSW7B5JIZwCsnoTc4u8Ok00rMeELrdz" }, - "SendGrid": { - "SecretKey": "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" + //"SendGrid": { + // "SecretKey": "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" } } \ No newline at end of file