==xhis{wTM_wl*D4Zup;J5_1j1MF`kR_ zmN@4N^OnK-;6cmT9t-&l(j$b@gO)fyXE3y_7~i_TdBiP|C|MHW@V#>W;lffjKUplS zXVYR)Dn>(;h>#PThs+486)i|Rrau~)j>ouAByJg;9A9ia^~qRhf{V>t#`$^6S(U)O zmciPxkR4LaLvl&=M-4U}RhLa^QH2_e#`w@kq&A}=ONXvbZQz$^~g#m$z&Ti}w1HK1vR7 z**rXKd?;FHKC!~8sIwkv)6~j%q|j!z(@<$Nreat1VS17^^`jiURrM%`+^s&OqbNw^ zbtR#twmQ_qHK`6MS?lW9#USKNt2MA6_He<}VV)Y^-5%t!=*&UdaoF@^`$gK&A39iP z4N?=(nS;FD*UBE`V9g+E8xZYN>g#?`ZR+FVX7e_!MhIj}YpcShzVT} a%gE? zYFTT|tG39b&8zv-0`6vN@*#E2Z$GN~{=N?LUYfpA7+qb SyXI+rKJg zbGpiww|iSvwj8WgHf`OckL5@BnAWLVTGCe&>*;fecr+9t*-h|~xN<#EyUu2|BON2Y zxz^a_4@yD1Uk++IZn;SNTziu}9kkn>m(VL6cS*cd5%VdrZu3wL_`1Ned2$uJm!urJ zvehl$2 z%PPrO@o(zq=y19F|+nCh$+X o5GhMXEUy~NA6Jq=7+w;Ym4M_FkmJNAygY(ec?YrD+mooS>{ z%n7U6Eip~Y*gOuO6SAv~2dyS;5kcDRFXS`XVoq$*VJN3FDU?bZg<^VCC@nYUGA*Vm z#cX+Vx-8_@8iUEMY@PmkboD{{z4^RZtQP+hS;tSbLjN$Hv%R7Jz=SP zd+wlQ$5%FVc1&B5V#m^IM>9K?Lax=0l|+qp+}zr#X4O1=hZ-kDI(8=_l}9BaZFF8a z(%xx4b;@`(Clg7Pv+LP%mH^S#4%G3`0 B5eN)@wf zKBkkr->ZYPYLX1CjT zB_x4dT;zij*`=aD3t1Y?mPq5-Y`U|p7H`uy8fop2yY{3lj?+k=-1(&|sqzfzr*%9P z;5|d3whr^l-K}6W&1KQvbay)$3g}WsJC5nc1wQzjubO$sM~)h(zCi!MR~Y)Q_I|GS z%{`y&d3DzlUGM4|>inZlcgOoWn1g>!0`UO>5C8!XxMl)tcXgW2oHlNsmWI#NyWS8T zThk5OoK&tyiAZQF!INj*06!-Wn9{ovDfS>8tJ4jxN@IA{yBGDygF~+{lbZ{YW4Dx} zbXQ!T-3cW-C7)`XT{4mHyoX+OXQ%o8VdM7QQVyXx-E*ycw?qGi($({m_8zazv}LmT zGDwNZ#duIY>fq3}@mQysvl_QgHRi93Oi&v70?51X+MxtB3G0g>2huXg2c~7Xqh%SC zhyD68$h*xul%XbJeHr9HeHm5 DvzRL@umAG-g@-o~d|4o&a>FB=V`kdp1FBYo h^@WcOjFno(`}ylWoft2TRc|LX7zN13mN`#bTQgZ?KVwawg;zd1bPf#|D4 zz0$}fes!qre{RNK9j P< ?eEDb#U+2i?6F|MNZG z-@v%QHFHD)5C8!X009sH0T2KI5C8!X009uV6$u=tg;vJ}?mG475B=v|@Axx}3*3rT zi86x#2!H?xfB*=900@8p2!H?xfWS2qI6+gW;{u=f&`&?|_3!@APhec&nmHl?2!H?x zfB*=900@8p2!H?xfB*>GiUdxQLZ4K}1s?g`JO1I@SNK 3PeteLbo z 3m3-NSuPrkjm<{JW77+4aAedOUGObTa8aK>8k(5SWISni%Hy@B-D$zfuqlr< z>2TYu8Asabb+WD`<77$2cGJpL#|7Gc{nVpx+TbVY`vOMO-x _XVCZn4Y>#P8_EJ z0w4eaAOHd&00JNY0w4eaAOHd&P$kgOK0pTu$c`F)fd?*r`N{X3E_{c|3bgf~Ao>F2 z4?Z9O0w4eaAOHd&00JNY0w4ea&qD&+Yi&)O?Ok@SkV<>KR);&8vNDX9xZS&)tkuDK zgp{30GAY3kFXYOFTs%5K{%X$lWV5xiJ-;!MNNsE~m56h4%)36EobdQJeam8k-yGQ( z<|EEc*5*4ue|hUX$BGl|bdcTjj4UsOJ&rZc()@XrINMK+PR5+mgSM)^sSMHF<1-?l11x#POIZ>cgAOHd&00JNY0w4eaAOHd&00JNY0=p16+ M2ZBKW1V8`;KmY_l00ck)1V8`;KmY`8 z6#|{@19YUIt%bh8mDlxN{><;r9-#UH?R|riz5w~c2LwO>1V8`;KmY_l00ck)1fItP zwkz!eiDQOi$IhJ5O=_QU3!+!B3s$e-%~% ir;w!@iVR~yhela#$iHLLM zVr0~@$&V~8*=L*?Z#J?r5%w-!xDa+sF##sZyMz3UE4(l>n&5p7Hy;~`#@wNxZ_LIp z8OE8kS<}w6-O6O_ZmW<^6P17z!@6DRlsn_}KwltX=;|_bckN}mKVKo4EF_7JANi|Q zvtIX~o8rhP#BuY&5?$lR#q>g8eRMfBGF{G0uLovqOQVcC?kXnYD+}wZ%=prHDi~VW z%6W3E?|gV>%xTLOCv(fT;>^Z!aCx3cDvYtSTr?OPn~jXerWe@Y$fz^A;9HpBqCS5# zG%=mYc+&2a$7@Zy(}I;@Qyy#5;kH>bj sd@C1EdpxyM4q%T0e@Bsl3009sH0T2KI5C8!X009sH0T9?X0#r6&FC$Iu`>rqW zt5^OH^ZuUEpOD7|9;NyMk3wN!-zpvl1_2NN0T2KI5C8!X009sH0T2Lz8%N+s`x#@+ zyD06~tS>P5oiBF3&gNQ>#|6GY^##5Gg@GGaMK}@&fB*=900@8p2!H?xfB*=900=x6 z1iIRfNkazhjrsycS{~JpApW)^U)wq}`TtE%g|lVRk|`8(LfPUp95%GI8D3_wkf;a9 za*{0VWN9PI5wg&I>PI@By3ykMfZ^QM+CdU%G(AnD95X%L|7*QleTnY(_WHZn&aZT2 z4s3SZ)3$QpKEvzVUScp@H6QLYTdl?ig|d)b6}i${L@XytVliG=5%Z<`?IZpe&&7F5 zob!cw%V2%*pyh0jg?t9-5kl!fOPrsJTOv`iB*Ni)<*;yJDVv`x7S^+AvDiFHM97KF zLuQ24iWa0D(;tmY$75V561NOajxRPAYcdv^;9~QZaem%%RxRDVmciPxkR4LaLvl&= zM-4U}RhLa^Q9a>cG{%QUBDEO}Sz>&UkMR*dKdpyWBD@9(rXfo-VhQkJo{;r((|#_% z_YB>Cq{BRIH5#({w0OC6X_c7GqEIOpq-|Z^az!oL>reXV)o_2Od3f0PP_(XUV}(^w zSF_Tlsa3^Fp?j)V8nZ>6>q*wsk8<=@)uSA8xB8Hdq9Bpim4ues>QE2Yq&lQzt*c`f zgOD?=*1&$)!v#}^d1`ofdyvbbGY4tM;j2TvQbT{}V4XEcO+aT3@^)V AIp#MF|AX# zw4|>l*3;(_@n|SQvYX%|apiiTcAd?x71A-{n`@0-{-6}J`{kgf oyP7fUgTYn VIjVAzt_EL6 zb?OuER-H6%i_3sqXE&xgt3}$^j=yKbLZ!^-wfo*`j#}8xhu~7Aizo#NcrooS zRPyD<{ WkYAjv=u3KEUk7lvtudbTJ2a#)M&@e zt*vTS&BJ%7aYCeHcOp`GR3g$w=anPvo#s=gj8}6qkyJUmo-Jny5N+*19S<$w8gS^+ zG}4G?%d1T;ZULdJ?X7)!3W%jtF}qgI7V=Hn1xdD4C~EgvRRi>s#?%;pM$FedP4x^p z4|JGEPPH^H?OX^+ZT;YO!q{ncyNy>u63E3xJ~)wGDhjlarO|AOG@i|-JKJjUHjSf^ z)(*LAPuk)*jr7T#U%HYi&yapv$5R2`GZbp;Fu&a03P#gh7VS-U(`S0}k*6c1YwEbb z|N6OiZGQBrpFc!(2gzW7!SuN4{d5%{5C8!X009sH0T2KI5C8!X009sHft!QCi`v?G zv%}_KY#xWr=5jDj$6_cg=F4QPg-fT!wC9}doaaSGEtZY7+Z~LZT@2;PIFqpIFN$Qq zhQ@M}Gm^##)Nz54Pk+nV|BAwoC}&E4`={>&-~$3600JNY0w4eaAOHd&00JNY0w8en z5wNuL#+^n8+Fsbscgqo)4-Sx1x`Qky)p3Ep@A&iw?)&%)KiAj)n4zolD~7(;)xO`~ z`IYD59e*-7v0{8H{0J1EhMUTd!1Uz7ho6xj0Xe{B_z~#cI_T?T NZ>`)q z LeWScqsz>h%hRtY}>_z~2(*usxMOv8_W_+j5#egwpAeHeZO zvb#iUKY}i0n4?Bt;PV#ao6dgux4*teeF3T~aFi_27pUtwcXueQ@n4sn?`v;npf6B$ zDx>a&(nBru1&E^^xnpi2_i*cv3qW5$RTp_4j0-?tK$DxnxIn%90LBIMIzQ6YuXV={ zeF14Gqw1(!bp(gLK&|JurXc`*0isc+w5vv+?&i<^RkLay4t)Vdmjn6&`CD9HpvI5j zcRqAE_vR0LK~%;JRBb^j5vYImSAy{c0w4eaAOHd&00JNY0w4eaAOHd&@Ej7j5q<>H z^S {c!KShu(AOc+cy4*yr$!ku?Z_00@8p z2!H?xfWXZ|AaSTGam;z___1R)x5vl18M~Dw(pFZ+>)@>3pvz-rSclJV3%Xg}VK0lN zGIepa+B{Z=)8eq*XQTh=?sPGmUn$Wwx@`CKbS2LF{l|}=4tN5rFW_gbfq=thWq4cA z%GvFV)yw#8jGGOxHb)>>DOZZ3MbRPOv^b?qNHOdli`{V_W53UCJIA^ikIU<=MzZ7z z`SNnflFeH((gEZ$gbVp}A Es<&Ht6+P8C%e1 z{z0Cv9>^m57GjW>UpWxNr3oy!o(XO)#J01 zqWQf6vdOX@Qa*Qp3)UCNEhBO^7Rcey5b5ivTol&DRoPyq3psIvSg&X) 3FoXo_Z&5Jo<+tenN!hHNZWA{1Tc8;;KZXaR5 z_&uagAvWm`25oM}$2wU;p{`?b$)#vwCJuELgiVX9p%l4FDVvgu5hHVXq?Ze%0bBe+ zjz|P yse?w`%c##m8gVa!F$ZYGy^Nc*(};T++Gsn|p6K4ohy$_V z8r{JU_CLTq_$$BvTYY`6GjtH$!QQRDME84p{aq|o9F+fcWDab0+|#yl;6B6a+g@TY zTs0q-r!5wAGmcV^aM^3VDsv`pAE})TvOZXIE2KwITr{9NSXj#D)%nW@p*v`abG|Td zQRcj+mZJJ!%9AkbY$vWwVXk;S(U=XcKaGz0HTn;YUTDO{U&(~jhH}W=CY6_tvai!v zH=ag~-?F{{wDkKisr?00hk0ta)nuyG)-IPtH>bU{<1lmwpGW!v&>e)n0AJge(_TQ8 z4m>M&=FlCi`a!o6mVv$i^aTn*Aw{NO=kr2xRcxZwsoeiSUm$K7)b8%2yN()RF9lO` z{eb5}Uw}OQl+CA38L#H#=c`mXyH4hn6HCf(^JMKn-7}RIMSGfRxZ`b*6V;_@R9lE= z%d6s`BGOt_@qq4NzNEajqmiD-E)|7xws5QJ3pCXo{6y|+r(d_#{?$F|4$@-`kVUUO zAn6$HGG=zbaBgd@ul@UmqejMHx~Kn%-k0~j_|V_>%yzxA>te?*bv$t3kptW9Ki7V! z?WfwhjK5`MjLd$IJv2N&*6MyW)h*Wd9ntvOU7hALr;XdEv-z}mnLc;X@DSaoJ`R;m zDor>M2~8z Aec_pE_YLBEId2r|z=1%h|l4G}&qa?6XpWO*1 zJ0+iLoLw@J)p~|rb!Vsf{$b iJ1~kJo0}GFg2Ylur7r z_Mp9OJl1LEtj6tAjrmLUqdwVI3n1^lYljllB&;uj97qM8=sA+!bZFanN6RuO!r^k% zY8m9+<{ipVld!%F+I_KBhSdStv`$JGC??HV nH@`!w2_3}$81V#)uG|WK^y6=y 4fix`XuHf@5T%V*!$@0r|!U1V8`; zKmY_l00ck)1V8`;KmY_l;JG1iBXkF)=X+ImuzV`;(l4&P_MECa_}rWpas>ep009sH z0T2KI5C8!X009sH0T6hW2+-gDHQmAc`BzTA<}Ls6%c}0+vs4CT0|Fob0w4eaAOHd& z00JNY0w4eaAn@D}sL>t#$Ui3L@BjKMe~7*>FtC&F|M&IY|IbaqZ?;^aFQBRpKwm(} z=1RA$zQDHeXj4T6>J KVPd6x{P;m~bloH^>e4MxVxoJNa z;CqIkFF+d-rE?83p^`_Urp^(JLSLW=eF2Nk*OVyYNI>-J#OnIExVfvbDf$gM5AQ`q zVaHNyZL03h^)!9x3qW50`T~&1yxAl&p)ZhI)2T}KP>C@~Cs6exc=$^{xbl+qMbjR2 z2M>|-bX?&&bq9aWU?O7=O*IE~ii1>j5W0g^83}q}mIdOVJNP`&9qfO?@Leit`RwQp zlH8y>NR?h_OOq#2(KKSzd*vFvBTea9KWoSyluDsHc)4_GHCq-Jg-W>~X=*kIo9Yy+ zq-W#9&>bACds0(}8Jaw)Nyw;*YV$#wYZ#cIhOhRv^#xEG#dVDmL3faVZBU+StQbu} zox+wM;%j8oF)k42NBEdF`%r`4x}@Dj;i)3G`au;g5s!u H5C?Xlau@9aOJ%UJ^-D`rVRvsUqf6V%_GU8nLvxz_WQG zr+qI;IRxFouqyi3 d0<|-8<94s_}=HKe&+K)chDMN`TiF_{r5?7%Jf6s33k#Qypx1eJRM}g2LwO> z1V8`;KmY_l00ck)1V8`;K;YRWa3gdFrDuBeeSuH@%KYCHPM1Ck-N9$KB9R*ifB*=9 z00@8p2!H?xfB*=900=xs1nBSmn(p9B-@7$1*!S8)&>eh^Y6IDV00@8p2!H?xfB*=9 z00@8p2!Oz|OMv E-@+j1b6{)>eg0Ni4WQc5DZEJAX8y>DS*Dx`X{s7+)pb#+|9VjgzmK^;gi| zR&^yu*KXrzlL$qiJ6J5WZt6Wl&>fuMV)K@9eqPa}+p$^tvIU(&yH1L-c`L4p2h#T3 zJWdN)!D`YL5uiIr+P5t9oX~_G!-dpJp;G4aLUMHnF-GVPis|OoNQ5j?m12>oj&4qu zg~s^^+Ua F@yo5C8!X009sH0T2KI5C8!X z009u#e*!l`caT2&YvTg1{vW~jf8#$UzX09A{jWUa00JNY0w4eaAOHd&00JNY0w4ea zHvs|qJHMtc@UeG%-R3k;ork`_O;9r^0tkQr2!H?xfB*=900@8p2!H?x>_34TeSuH^ z(hvO1Yu7&Wfj#OA945u1x`o%LFVOZ=h8|5{K+_gzP!^CC25x?DVdx9oaD9QUi^l(K z<=Zd&gD%$l_RG8PQalqwkpMqu8LSZns7W|ziAF3s0Se8_bWrj893o|azCdX$B9^JM zvZAOUyEIo_pXJ>HEvPpn)KjkpQs+qdz=K2gAL%epTa5-u)1h=}HCu+hz_?D?LRL{2 zv`ofAs@Ei;r`YVh_3qJRhvZ~7B>PF~{g!Jy+7-2is-JI3X M&0Y?_Rak6iRyK2x-URtKt4m^YF0op=h0tvJ_k`y0mF(<)JKvY7WZE z=`?i`r!lDmv+Up)jq5}q^c-vazm=o6svPBzyVZtt6s6APbtU2Lq%Y9_MEk|PG<2oc z)(MHod-}-%hN#c_LkH{ZK@P7PguD%X0Zp=?rs*qutGM=~=|f+jIeg`+y1($DFQ8s2 zp)b(juD^q~xk77lxsVqlm0VIRsu#nmx4$ls94V76=63M;k8c!$LaJOS?j{bPX$WYS z-)fFp81x02>jzY2E1HMzP~$yA >rcfjh009sH z0T2KI5C8!X009sH0T8(H1n7JJn(pAtrQQcm|Haq;6ypLn9yE>!0w4eaAOHd&00JNY z0w4eaAOHe4A%Pm*!M^|fxgY+a?|x=&kGg{c (%Ev9)Rv3(L5XK znKgX(45{doQZ-Oa)BtpKEs?uZ!JdeOrV_kG(Oj&FttYP0uGYG2R{c*HezKX`BTWF^ zL9y6Eg>F!i?wTwX*0brVHcyREovi-XOu}w(Mp&(g4T3%`mF;d}-NF7R4qko+x`QOS z7rKKnJ~R@sjPvt4t x>893|h+M0fBwNl)i2p!$XQfB*=900@8p2!H?x zfB*=900@8p2;5i#H$rz%dS+L32Uj0;m43$cSC2z?@WxgYjs^lC00JNY0w4eaAOHd& z00JNY0yilE`g^{nJ9zwwH+}kF-*W$D=nLGWwS{7V00@8p2!H?xfB*=900@8p2!Ozi zB|zWx*K`MG`#v}D)pI}g1jYq!EMy!F1V8`;KmY_l00ck)1V8`;KmY`8QUW!)gMV`P zCx2A9`?1gLQFoAP4$}Dyu1|Nc;{ikafo;Q~zm+rxnPzH()qT(%Y}6ejs(_z|?jRL{ zs|wc0`bl>wY9EUBUXAjhqOhdO3K21`!TRJ>`%noV>bhuLZ>GXW!xg BRx2WjBP $(&^R7`-s@g1(9Ba@ZlO-j05t>tIRxNoyl;(P04Bf$1kqQCsQX7)ckW%OJI{iyk zih@z-4i@Epyubg6_93&?YJBLRPW_2?1af%QmgVifW;#&S=$aT*Z3Aj56{?r@+c82Q zTUuKcHk<21(Yza!ry4DzruECGQs4S(iwxbt$aFl$g(7hxz^Ly!`8kTSTv|{qf!O+NgP#^w;N7H%az(s@L|KR9%ZL zRU0dG2dlRRk_NcHkk4d`Ig#}K#H9HVzABuj+(AqVrP4;Bm>v~M%MAj?gVSQFQp}b& zr^`ZatudG!o`e@k<+qA4xm?JLkxDLE)l{w)Q5U#-LE{^RppYsTihN#3uI_L~;X-Pq zP$~0ya?){rF0Q{{(!zE=1eZ#QrBaY6vWsbdp^`5*;)CvBy-hUg4thWNfk%Z0-trsD z7{;CC`$p*wo+QUQK^D?27`n)U4+ww&2!H?xfB*=900@8p2!H?xfWR{&a3gdFrDt?i zcW~m;=O1|F_+1}Xbq7s-{U`bcpIIT18U#Q91V8`;KmY_l00ck)1a55t+m-f##4*FM zV`t8EZL<>zLsyrfyDQ@sM6X~MtX{#Ju`&+PZuMkXm(}jgq}|D+=y5a2F(EHrB+D2V z;pz9w%3`T}E>+0U9WRUX)A4iu=ma;#kxz)@=7lA?#&dyGFcwIyyMr!qd?qlRn)HsJ zkBn_hEcxOq!v$e_YdL-~Hd={@bLC=W)UnBrEG^k*oEdL6vN93&E?u|~c1$q=Cd#{m z{ERESFf*FqeGWGt8;Qo;p`dTf#xNPinY3Bc&a~aiWbAIMkWRB!M~Y$Hu5`+saeB7b z+6EE>hJk^5?$MpM%kC9YX|LDna3@n%hVi }!9gZ(>6VcJ>xe0f4GT^a^HizI8 ztqzBau`(XF! 2hXzJuqWi8fDyZS1}P^Sy*3X z#+SxZ!O+51&XZ$(=fg8&PFuD(nOn9MXEv6D%k$)v$Jkje8jOw2M#f{)3v6&?)EQmy zElhAxpFbL!n9gK8X?M!wwWi%^!OE~Hk2UFV+pHN!+Ua$&t|a4RN!z5q-)p*qZ$J75 z_V@nhe}7ih7cjls^mnF*ZtWI~(t`j9fB*=900@8p2!H?xfB*=9z|BqIY &psyZzd@z}2^GeRwMStsl|G1-@;1)bz!hn;uFB0w4eaAOHd& z00JNY0w4eaAOHd&KnNUZKVz(U7p47h`#nben;LDV_ItYZ?=g^6)bC%LkKn&@C%)}_ z>F>W)8y9%W^bON@Ko Od2w1?`$8SBL!_8 z?E`dxfSgm!d<1`b>Bmq0j}yJ$*yDTzbdE#1T;F^Iy)QNx5B)8jk6`=2c6H`~=4&^< zy7<~%o#r#AjoYUs&2*~6N(G2R`LuXhr?Yxek$O!;LQ@HzXp08;Ig2EIuf?v{r!P@y z`bYuu5wxCGpbA))YQ}s7nrTrD^QNXHNu1Z37L7MJ)c=IxC!5W{KockvDagX;GWF{2 zffh3`RAVg43H26U4WwmJ!iVlZ(qW#q8VyogQUsB&X+DD97k3_|GUX2nb)v_z=6=;+ z LHBdDKhf|^2&lC`wsaQ_nrz2@Oz z<3rK9ij{(^^(t+eT2-qQx~E#DF|SoGUOD1pflj2|;*VlJ0zS@L{M@vk3y_vJ+0#M$&3UQYteaz?ZWHqn z4EnN#MiG4VroJ(x$?dsvnXiiWOY;isl(a 57`z^^W~@(iM^?67&Tu&=(;7Y}A>uw5SRy z1fwxNG!m)xl^?Ri_#hwSBYu8b4^1*F;*>vRiAF2|K3wDH+WX>zm#2nzmyVEZTJKOU z?SQ@jaki|j49Z1<-B=kCGOF9ryfS15MZG6>aD1^&qCvO4AJzbU0n*H_Rlh=(Rv5I@ z3Rpm20Qv$goBDp}3z(j4dw1yc?mc;pN=%7NjNbls^Xb#Z*QDwcVoKGnr_|L-8HQe4 zdMxBa`?OlAp4OTYB$2MID1O<2Y-w#(*lg~84SfNAu0|SZa=DNfBb8iIEUMV6&g{BC z; m2)-w~kx26vF<7+D6$LR}4Lcqdsp$U@&8=p_r)D(oi<9a^As6&xlD)iI>+ z7|?eM$Z(-FCIQ_+0s GIs|I;1-@1)^H-){@aaA13#ex} zL{_d#Ux2=ZU^G2Vk8`K#>AsCVU++?{t@~}=%bnlq$RBv*z;@ev+e(ICXmijg^5?4g zc;_|DN`AD~F{J9ggjvaDr^Z@GRmGS1y1a((Kk>{aoFBMwSBLrf-Hwl34VydnJgxcR zR(7HK PFb!vni z{Tp|%J-t78jeV(Q)p@891FJ3ay_P{We_FtyMw6{^F_#ay&pzf?w(gL7^)q#K k-2@+rE48;n#SBWvh;OcmYQ Ioxyucuy4~9hel_?y;Oi6b2A{@l@Y_@><_5yA z7D<6mca#>@+-t9z%HC#IO(_{c(n8*$XNW!8VZL?`?Vbnwk96+pq21lArl|G8L%Y6L zP&;O!RN5#M)1yLZxv>RLi>XR6Ti%>53%Rw%;2q`zR}X*7duaO$m3+CeQzdqMcy~LN z+mOB5p_IC|=S-3vU)j)g{8Bt!tj=b3thTIcQW{Va={gyuW|~V3Jfj)lo&6o=kyEXl zzPVI6yPhp)NvC43u6JBH(${G|b;@`(C-cx^RpT72qoGBq>3M7JSR1Z+x-^X};@R?Q z<27n9Ae6Pewf8##v6L!i*Ql3%lU6~JEfK%{CLyFLHSV1e^EFq<8|poOy9x|U_H@uk zpLxk>N|#o%WpS}2UaE+BBCb%od8o#G>H^Q^iE0^n&^|`}0c!LG{`*4m-1i0#TBs9% z(e${1{Kp3bKmY_l00ck)1V8`;KmY_l00cnbmLu>YV>@ql*c^<_ H zN?7$5MKX%xIcGcPA*WTNFJSh(^G~ik_WD=p{0OKnfT|5Z^#Q16fcj1K1?W1}6rlP7 zGz|Iz1Oh%F00JNY0w4eaAOHd&00JNY0wC}#5V%qL0-EmNN8j}750Aa)ukNSg0!Gu9 z4CFsPAOHd&00JNY0w4eaAOHd&00JNY0=FoE7q;`=JH0eOPK&zvYvTgFzij?(YyU$h zFi+tvTHz=*2!H?xfB*=900@8p2!H?xfB* 8aBW9J zY!Cne5C8!X009sH0T2KI5C8!X0D)VHKqoEiX7O#GdS~zjk3I2c2ky-M+40ZdeSur4 z3Q<-N009sH0T2KI5C8!X009sH0T8%u0$ntvIxg_iz++qYzU${U@xH)y^F%@r009sH z0T2KI5C8!X009sH0T8&A2z1lJs^bD5d%WYTSAPEL58{1+Td4|BRuBLI5C8!X009sH z0T2KI5C8!XxNZW{s{!h`z_H`+8GYZs{?ZA&FL2#Fkq`tx00ck)1V8`;KmY_l00ck) z1a2h)y|l3ExPbWXKX~KGgHQfC-WRx)st{!b0T2KI5C8!X009sH0T2KI5CDPeCLj#~ zsN(`x`oH+V!vj}7j&XtO=81$L00JNY0w4eaAOHd&00JNY0w8cJ5$LCdRmTN#{cjBZ z$FG0YiE)8jsR~h65C8!X009sH0T2KI5C8!X009uVZUQEnQXLogjmPdEd*sT$z6<&S z*Ub|NK>!3m00ck)1V8`;KmY_l00cnbRw8hi7FHb>*nFK3|ML%S{RG|@xRt69Wd#8c z009sH0T2KI5C8!X009sHf$Ju4gr-!-1%7(*wR8XU@W1^Y-WRxTo=6A+AOHd&00JNY z0w4eaAOHd&00OrXfuppr>bSrs-tlVR=Prl-6z>b%N>zxmf&d7B00@8p2!H?xfB*=9 z00@A 1c5C8!X009sH0T2KI5C8!X0D w^a^XL~H< zGf0k5&7-YkeCz(?Q4FOAEpdJ>Ziz(6k_d #R=-uI46f9&TlOQmEeaTABro*}`P>6;V^Y%F$cZu5!rTs#7|O zLR4N?64uqGdblRFDJ5%No4eSPoM{#5ewfq!cXpWfVop+vs4)k5kLl{rF{w9t=wO{a z$l=w}%iH~}EJ6;}OhVe+xi?Tl$HmR&oq`%6kS(pP3Y+@gL+c{cM&GPUYH43;S!)ff zw#cN@Q1hn++|AhJL+aY^epL3Atvlo^$C +!JE809sAIp#M zF|AX#w1lT7*2Cix@n|SQvYX%|apiiTcAd?x71A-{n`@0-{-6}J`{kgf UM84_|@R+fUi%y8+;nKMXxIpzA^BtMcUVXwr7Yv+F=fz-u Qg^eOqSi~V t1IpITgCx>bj?xx(?7@85g4+Mpc5BT$ zyhx##6IQcZVw#q*c^p0`WLFyxT20y_g0$OT$Y-*}oY PcwTdyhT*!-&N-kNwkF0{x1@2zZ_(mZpq{@XNpQpFl zt O`sgz+ot5(JRT3{%NM9t@Z62yQle)mOdGa88FG)$B<_vezr*3sz;HjsE zUhq4iKl~XwF3^AQ6^8z+y`SrSbI&JxUfuOX*SorgI{&EC-SNH-=HOqGKzu*|1V8`; zu9?8vsZR5m)5h)7(y*C&BOIb*YSj^oQoGWLCnBM#1W%rE1N@vcP%7OvOR)#(7@clV zRT{gi-q5H=9vpgwh1_wF9J{3)r5ok?>`p4#Dfv|6?2?ImGd}dH7j~NOA2x2^E#(lJ z(>>2hH)M 3vQii)*mO**QuP=kV`>q|zP?NB}4052p4684YP3xqDfzqLO zwYs{N$eEQ4YfY;rwmvH<4b7!$TGG8TIpdQ}&zL4q3Qkv5>ebzMv^e8x48>mRi%~se z`M`ri_n+9?7-GvI>HYgfqvf!&WIO5roqBs*d%vxJ7^w}}eR!#6I9fjMn& Yz^z!7C^HCv00@8p2!H?xfB*=900@8p2wXFP<1~djF7P4S z)4zXkru;O<1+JMR5`X{*fB*=900@8p2!H?xfB*=9z^zE&1TC~WF7VX<`j1}bb>f2< z7q}Ix5@iMf5C8!X009sH0T2KI5C8!X0D)^JaFV1rsg4V5{CD>^K0eyz#<;*Wb3_6V z009sH0T2KI5C8!X009sH0T8$q3AEEftK$McGVm)Weq-^o@1o-ZM$=OU@?RP^Ae;2P z0=iJY1NEEEWkA=dMgi3?q+xWupDc7r1G;^fEGDwh Wa%QyQL-E%3qBwK0w4ea zAOHd&00JNY0w4eaAOHf_N5Im~8yz+WWAiv{HkX5OIu=7|F<&NALvrb~m~MMvJKrrw zu(5W#gR!%Vp*)#4Q|M?P==Mc@BwPBNu8j+v`3Upf+0pqdeW*8@`V8bhJ|F-BAOHd& z00JNY0w4eaAOHd&@cbaKy=ELp3>XFm?zyLHo1I7)y1ESAU1_^lw0W4M)tyc|t&B%> zSiSC)-RcrDj6-nRQg+tnD OXYK^LXK>{EY45I&-tSh+!RMXAD zmgpMKM_jHXJDW~&xvi;iVv?IIxICrHG0qi_Oic5aS7$~tzOZXH7g(B@n2kltqu$D_ zJ-c2W4HPpAsod0s3% 9SPsud@L|B5@f^SL|n9cY=Xdw)}$?! zvNA4D#+ppqoz}F?ktAUbx8Smoij`aj)b|BW{K(_~{x9qQsJt)mcLvknJwK`*X9)rz z00JNY0w4eaAOHd&00JNY0=E-^Gwq4)y$ooObFR@Bc-7{c4*ct1ec`pTAHlZ`rf=U) zRB$dJ00JNY0w4eaAOHd&00JNY0wD1GCSYp6hq@1F?=cV>HTnYoefPh;?+?EH=mH%V zXfu6>=nIfPRc!!OS3v!SzQFU_oN)Fa00JNY0w4eaAOHd&00JNY0?#dhYu6X(Y#%Vj zqZ4f{^aXrBKKl4azEV6wWd+*$PY`_p@&_Lf009sH0T2KI5C8!X009sHf#)HC?X|Wh z&h{BL5jypSswa^&HY{MDT8$)@%rb)&QW z9P3(*#y1^_^>Oc(-!l=9C7hcJOmfq)v_7@q%|tv~OLLnAXRw@bW^%I?ah{!tr&s1} z=@cVov&7jx93GvU^>Z`MvC(NC%ejMGV03 hz?XjbJwM*VzT~U&xWE^QzJTeAHzNp?2?Rg@ z1V8`;KmY_l00ck)1V8`;Kwwt_huiO=UIW^j8g0Aj3)nWVd~>q%AHPM%1=>yDp!x#e zAPNIin~?ewsJa5`H}nN|tpY><0T2KI5C8!X009sH0T2KI5CDOFBd}+Efv)yr#xX9! zx9_4a@QFv3GM9wkew6A9wD%24`U2z&9}oZm5C8!X009sH0T2KI5O^LF*sin>B#s%5 z9XoSIH>thDk?{yD>$av{p0t%=yu{Dm>m(lc874y}iT7rl8Foy_ix V z?y`EBjA&&9r<2Ta?@d}$jKghDChbYP=!U*P!qC-a= nB*o4E>G!ljB~{!6Vv?V)tQluFYKDl1(qfzW@FLvsJAj} zsq81I5fjDn}$0e36k^&an^<1QP7jScr={5~Px2fsv6Q8xAMpqTOQ?1Xd( ADtouH@>ztSI+P$7?980c{FE5uY*}NqqrB4^L`IS<*kWUx# zT)t3V7K@g(N^-lso0P@xKX&|h(C+qeUfyMO`8{4MWAn3Cug%U_oi2x;@z_0n8|$kt zi-(kjwUY8Tl*Q}T3gc-gOeVXUlZ)cd=Ea<_-PffM8TQ+PE+ alT* zHR$l!old_!;Px~SVPqnXCZ*5{!88;?Ph?&!TLc}I!=03h`}pyf`fa?;?_-06h0kMU ze55EoA9*v~>9GYlx6A1dc({5hZkdX+NqJbUKn}G)!cw7J6xPL6naFe@CvK415iNzh zg;bLzzAWU#(zdBXswngE^PJc3cCp@o)fcc4L~aLX _ERIb{vL#i>GyMd60b!f%0%f+z}K&i?qZ3L4-F-vT? zvR)Loj~$>qxRb}d#O`gZo%32fyqi>!jm$2{u{ K&($~ zX=(v997-`{AQ6ESNm#XvW=rKlanmwE&{T3;?UV|!oB@(E=XCLYV!w7$n4rgI (5cDCUK2lTj+j@#9uI&%1(N z2eDIIkW`L?8Y}PcSZ(&8-y0yU%kE?93&P6A+N6i`+BFVrgR$yqj8%xa=~^`D&O69* zQXLogQ0aXmA7Orffxa)$)4wFmQ%HOXUT$Jchx)(V|8W27$xeJg00ck)1V8`;KmY_l z00ck)1VG^02+;T6_cGSkBSqZ9KwLMCxR u z<^YYjm*Eo0k6 q;{2G5X5?#cYl|qL9CuVmsN?e4!f@+ehq6g|)R{emI^F zPmZvzG4@hC8Ctn$+bHF1rDAH>ZZBlwQ}I>C9gHN4u0)=37E)!qm?~c07@piDitRIe zAjr(l&iTft5+S0{A9l<}7~g^;I_sXC^@SpKyEkP|l6T27EF)N%WX5GpvYwPxU~CyX zn`Sdfw}ANw^p%}qQw~p>cqF*fY4RREsa|U` x>Ss^;fd*J?Dr=}4@Pd$;_aiFhpG++1Lin~tURsReH);@Mi7+blSP<%Bbno2`iR z>`XkpGH*+#7%`hARUHnG&dvI{8RyvOw2$T7K`t;lKRFxpCBn0j2_Mg-y*3-;N|WNI zomPf;4UjdP-RezwZH|mLX&1cd?KR^-VxZo>pI7q{-0}JcU)lMt*zd~k3%s1pNAPmY zNPzAi1V8`;KmY_l00ck)1V8`;KmY`;g8+38*vqJy WD*-y$fc}k}1J^enL5;q^&sMg6 z=DT DX?>vxfFvl2$v`^iFG5op}QWHFKDBw1+s zZnAWd
kOdzQ009sH0T2KI5C8!X009sH0T2Lz>m$%YU!c3)Y@Fu8;rWBtsxR=D z|MjvrWQ5PXm_F1WJj81H0%R2*5C8!X009sH0T2KI5C8!^f$hq{fdu)1%se!t^Rs6e zCL^XCWEMVqn)unf9fH;4aJa2ruQTZ+TW+VrT@qGTH>EpvX-)IKmUgxFzmCjBVrz3t z+}1`cIU!6fT~1Fk!)!RT=2{m=#-l51=QoN%Asb0KW2I SmH;-n3NGZuNMQ z8RADy6arFSr`^tYp)bHrBn(|$hVHJty!AaM%ft?y1PqAsn<{-05dWp$e8NunaCT-rN zHN`mG_GHqYw2SWTwYDbC_Rtsbhz_gQow8e9LWXe&PFu>(+I)p%vXJyeedMoJ&1AE6 zE%OnVE6L8LlU#0VDx8?)CJQc4>2i#7#Um5b{N>e|k&G|wn#~24CMITM(ekLbGHcJS zmq!D|%t9(hBo%y-ky*~M5Do+q?9^C@i#igdl4F69ksuomC*q>rV-o~cBz2o2avv^F z#+ppqoz}F?ktAUbx8SmoZjHVgpv^~+@_p@x+CJFzLHT_FhUyD2P#Dm6{#XYA5C8!X z009sH0T2KI5C8!Xc)k;$vH^P;1eE3}yv6hd5_hcpX87lPFO|myen-_8_#G$=Jm0Mz z=MMrP00JNY0w4eaAOHd&00JQJoDw+NJ|w#aXs;j~+z)+$&;IP2d+vS2^BOuX&|&&> zgXzyrPno`9`jUw%3_xGtIW+-f4gw$m0w4eaAOHd&00JNY0w4eabp&ek1*ob37oOx} z9oMffuyXZ*Cx3h@dYtMDbo6+1`T}GF9}oZm5C8!X009sH0T8Gou)Wnmr?Rheu@{+S zns}}f-&=Q*%x>=TB*}d68JpEfT-C|M=A!6Lv)t;MSQO|V=^j>E(_C_;UD_{V4O7}r zl-C?{=fw^0dUDJ;wZ&%Rn`6vm^8D25W+XnJNHXUyu5jb*{OruyRwU+~wy#7y6A@;e ztvGz_rEGfR!iA9qhkw!^j08p;es>}o<>DhVzPYh+c9a|S1t#NOkC%10oW#4Hb-TzZ zq#3K=CLZ_pbeeHw1lBEx9_S0`r?lV8o6=)KPApx_=7@Yc`Kwj8UQNBBvPbMog|)R{ zemI^FPmZvzG4@hC8Ctn$+bHF1rDAH>ZZBlwQ}I>C9gHN4u0)=37E)!qm?~c07@piD z9@sN{Ajr(l&iTft5+UMoA9l<}7~g^;I_sXC^@SpKyEkP|I=$8m%LrB`nQ;+&^`xu< zW6RjtG@D7fh3!iFK;oF;*s(KbbYc?F7f7c`3wPRBYck`tSyQY{aJf<`ku>voAy+Qs z;?W86SF38W*}7fxbF6DM8sBsz*2leDe$PZamT+z^Fv(5F()!ebHxuz}EzNBfoWXL! znaRyo#Cdimo?e-^rBjTU&627PhezjT{oIUmY;@Yka_%4(7@eP-4f+z{*~o;CXVPAq zjWlOc+_clmupWl2+3Z$t%4>6Eyh*#@O>eImn@B38?OxI5VUk2@gQmQ_^#xA<*=s5< z`^uMpN`7D9P*q>xkm=oZmjG;n00@8p2!H?xfB*=900@8p2!O!tM1aZ$>}6oH<95~; zV7uP`%F>T|KPit3yxCxSv+3KWM@@fhg2KS t n%@J4HwSz0} zG(S9C7`qg5UmRyE?sPm_Soh7jBcZK}BZ=W@_wsUL-IsLmlm2LC%Cj-HHJqE8_9YUj z^TP~hALGgF=2Ibmbb2fh8()ZV^V9M9m^%?%aJiyUS1d7^a8I~0?o2W*q^x$k=p|Fx zr@Uk;dym^nJ?!mCF_U(9?9dk=KaiP+hIB6HdzredB&@D(PIKY#ytJlOy0oixrAOu> zv9-A+Zfhf!oDim#E~lrNVKy9EbFGUbkd36Au~M|M9FC2yR=D`an8QCe z6ByodaThMk&G ^qi}iBR)+BsKYOo}c-&_g(su0L zj5EWI33>4%S;n{sPrtR=raM|!c5vz o1KpY2fap~5< zP4E>0$t8Df#>BK~Yx*Z?V>Dat(uiQG)GF1j^cBR_2XONpL 3o#ofKYmq**XjeReser-q4)KH1W6w}E1ijnBLJmcQviZDn? z<6Prfzcf8w|EAeKqk@!Evz#~EBVWKEiLMHbs`ilcA-CJMyuO!N-u_(WN{ca0qm)~N z3*QSnR%gh{CzHTpy;ieZnH=r9neDM?;2boYQP3XO%+p9aJR8@XQ5K7Vj8w2&Ze)?z zbDWU+jk?t)p)7LXxNentUf7dKFKUv|zO1bfdD=^+$f2n#sY 4OlxL zT|eGbx1R5w)GPm?xUtwTP@I3r7bwn=F!1#!08bzQ0SG_<0uX=z1Rwwb2tZ)f1s1UZ zzgVm-AYVYP3%tBeH}B)y%Vi(IY?&`GL&CtSk8*q;1Rwwb2tWV=5P$##AOHaf{9A!M OIpFgqvBKZw3%mhOOx$V! delta 168 zcmX>wOZi1Yh nps^KZ8CpDi=PA6^3qvH&qFOg!dwM&$cP zPmFnif?QlZO#J11Px<0`AMyJ0?Bmhl-pDP<)w6k`K>^qHGy9mzS!F?*;fB^Pf3CYS quPX+mnVZX$X}iZ3rvLmBaKpI^J(LdpmE__A$@AH5k3YinlOF)m**JXw diff --git a/API/appsettings.Development.json b/API/appsettings.Development.json index 4be8d50..9bd68a8 100644 --- a/API/appsettings.Development.json +++ b/API/appsettings.Development.json @@ -7,5 +7,6 @@ }, "ConnectionStrings": { "DefaultConnection": "Data Source=activity-hub.db" - } + }, + "TokenKey": "887aa8d55236124da3ae8da02e0809d2140470eb9aa6583686fafed91b9586eb" } diff --git a/Application/Core/Result.cs b/Application/Core/Result.cs index e2696a2..4290b16 100644 --- a/Application/Core/Result.cs +++ b/Application/Core/Result.cs @@ -8,11 +8,11 @@ public class Result public static Result Success(T value) { - return new Result () { IsSuccess = true, Value = value }; + return new Result { IsSuccess = true, Value = value }; } public static Result Failure(string error) { - return new Result () { IsSuccess = false, Error = error }; + return new Result { IsSuccess = false, Error = error }; } } diff --git a/Domain/Domain.csproj b/Domain/Domain.csproj index 2292000..70cb6fe 100644 --- a/Domain/Domain.csproj +++ b/Domain/Domain.csproj @@ -6,4 +6,8 @@ disable ++ + diff --git a/Domain/Entities/User.cs b/Domain/Entities/User.cs new file mode 100644 index 0000000..3ed7994 --- /dev/null +++ b/Domain/Entities/User.cs @@ -0,0 +1,9 @@ +using Microsoft.AspNetCore.Identity; + +namespace Domain.Entities; + +public class User : IdentityUser +{ + public string DisplayName { get; set; } + public string Bio { get; set; } +} diff --git a/Persistence/DataContext.cs b/Persistence/DataContext.cs index 2888a52..84ec6cb 100644 --- a/Persistence/DataContext.cs +++ b/Persistence/DataContext.cs @@ -1,9 +1,10 @@ using Domain.Entities; +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace Persistence; -public class DataContext(DbContextOptions options) : DbContext(options) +public class DataContext(DbContextOptions options) : IdentityDbContext+ (options) { public DbSet Activities { get; set; } } diff --git a/Persistence/Migrations/20240805112415_InitialCreate.Designer.cs b/Persistence/Migrations/20240805112415_InitialCreate.Designer.cs deleted file mode 100644 index 04bdf9d..0000000 --- a/Persistence/Migrations/20240805112415_InitialCreate.Designer.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Persistence; - -#nullable disable - -namespace Persistence.Migrations -{ - [DbContext(typeof(DataContext))] - [Migration("20240805112415_InitialCreate")] - partial class InitialCreate - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.7"); - - modelBuilder.Entity("Domain.features.activity.Activity", b => - { - b.Property ("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property ("Category") - .HasColumnType("TEXT"); - - b.Property ("City") - .HasColumnType("TEXT"); - - b.Property ("Date") - .HasColumnType("TEXT"); - - b.Property ("Description") - .HasColumnType("TEXT"); - - b.Property ("Title") - .HasColumnType("TEXT"); - - b.Property ("Venue") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Activities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Persistence/Migrations/20240805112415_InitialCreate.cs b/Persistence/Migrations/20240805112415_InitialCreate.cs deleted file mode 100644 index 04f8673..0000000 --- a/Persistence/Migrations/20240805112415_InitialCreate.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Persistence.Migrations -{ - /// - public partial class InitialCreate : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Activities", - columns: table => new - { - Id = table.Column (type: "TEXT", nullable: false), - Title = table.Column (type: "TEXT", nullable: true), - Date = table.Column (type: "TEXT", nullable: false), - Description = table.Column (type: "TEXT", nullable: true), - Category = table.Column (type: "TEXT", nullable: true), - City = table.Column (type: "TEXT", nullable: true), - Venue = table.Column (type: "TEXT", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Activities", x => x.Id); - }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Activities"); - } - } -} diff --git a/Persistence/Migrations/20240820065605_InitialCreate.Designer.cs b/Persistence/Migrations/20240820065605_InitialCreate.Designer.cs new file mode 100644 index 0000000..ef127ec --- /dev/null +++ b/Persistence/Migrations/20240820065605_InitialCreate.Designer.cs @@ -0,0 +1,303 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Persistence; + +#nullable disable + +namespace Persistence.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20240820065605_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.8"); + + modelBuilder.Entity("Domain.Entities.Activity", b => + { + b.Property ("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property ("Category") + .HasColumnType("TEXT"); + + b.Property ("City") + .HasColumnType("TEXT"); + + b.Property ("Date") + .HasColumnType("TEXT"); + + b.Property ("Description") + .HasColumnType("TEXT"); + + b.Property ("Title") + .HasColumnType("TEXT"); + + b.Property ("Venue") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Activities"); + }); + + modelBuilder.Entity("Domain.Entities.User", b => + { + b.Property ("Id") + .HasColumnType("TEXT"); + + b.Property ("AccessFailedCount") + .HasColumnType("INTEGER"); + + b.Property ("Bio") + .HasColumnType("TEXT"); + + b.Property ("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property ("DisplayName") + .HasColumnType("TEXT"); + + b.Property ("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property ("EmailConfirmed") + .HasColumnType("INTEGER"); + + b.Property ("LockoutEnabled") + .HasColumnType("INTEGER"); + + b.Property ("LockoutEnd") + .HasColumnType("TEXT"); + + b.Property ("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property ("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property ("PasswordHash") + .HasColumnType("TEXT"); + + b.Property ("PhoneNumber") + .HasColumnType("TEXT"); + + b.Property ("PhoneNumberConfirmed") + .HasColumnType("INTEGER"); + + b.Property ("SecurityStamp") + .HasColumnType("TEXT"); + + b.Property ("TwoFactorEnabled") + .HasColumnType("INTEGER"); + + b.Property ("UserName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property ("Id") + .HasColumnType("TEXT"); + + b.Property ("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property ("Name") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property ("NormalizedName") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim ", b => + { + b.Property ("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property ("ClaimType") + .HasColumnType("TEXT"); + + b.Property ("ClaimValue") + .HasColumnType("TEXT"); + + b.Property ("RoleId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim ", b => + { + b.Property ("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property ("ClaimType") + .HasColumnType("TEXT"); + + b.Property ("ClaimValue") + .HasColumnType("TEXT"); + + b.Property ("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin ", b => + { + b.Property ("LoginProvider") + .HasColumnType("TEXT"); + + b.Property ("ProviderKey") + .HasColumnType("TEXT"); + + b.Property ("ProviderDisplayName") + .HasColumnType("TEXT"); + + b.Property ("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole ", b => + { + b.Property ("UserId") + .HasColumnType("TEXT"); + + b.Property ("RoleId") + .HasColumnType("TEXT"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken ", b => + { + b.Property ("UserId") + .HasColumnType("TEXT"); + + b.Property ("LoginProvider") + .HasColumnType("TEXT"); + + b.Property ("Name") + .HasColumnType("TEXT"); + + b.Property ("Value") + .HasColumnType("TEXT"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + 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("Domain.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin ", b => + { + b.HasOne("Domain.Entities.User", 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("Domain.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken ", b => + { + b.HasOne("Domain.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Persistence/Migrations/20240820065605_InitialCreate.cs b/Persistence/Migrations/20240820065605_InitialCreate.cs new file mode 100644 index 0000000..09c0dd7 --- /dev/null +++ b/Persistence/Migrations/20240820065605_InitialCreate.cs @@ -0,0 +1,244 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Persistence.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Activities", + columns: table => new + { + Id = table.Column (type: "TEXT", nullable: false), + Title = table.Column (type: "TEXT", nullable: true), + Date = table.Column (type: "TEXT", nullable: false), + Description = table.Column (type: "TEXT", nullable: true), + Category = table.Column (type: "TEXT", nullable: true), + City = table.Column (type: "TEXT", nullable: true), + Venue = table.Column (type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Activities", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoles", + columns: table => new + { + Id = table.Column (type: "TEXT", nullable: false), + Name = table.Column (type: "TEXT", maxLength: 256, nullable: true), + NormalizedName = table.Column (type: "TEXT", maxLength: 256, nullable: true), + ConcurrencyStamp = table.Column (type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetUsers", + columns: table => new + { + Id = table.Column (type: "TEXT", nullable: false), + DisplayName = table.Column (type: "TEXT", nullable: true), + Bio = table.Column (type: "TEXT", nullable: true), + UserName = table.Column (type: "TEXT", maxLength: 256, nullable: true), + NormalizedUserName = table.Column (type: "TEXT", maxLength: 256, nullable: true), + Email = table.Column (type: "TEXT", maxLength: 256, nullable: true), + NormalizedEmail = table.Column (type: "TEXT", maxLength: 256, nullable: true), + EmailConfirmed = table.Column (type: "INTEGER", nullable: false), + PasswordHash = table.Column (type: "TEXT", nullable: true), + SecurityStamp = table.Column (type: "TEXT", nullable: true), + ConcurrencyStamp = table.Column (type: "TEXT", nullable: true), + PhoneNumber = table.Column (type: "TEXT", nullable: true), + PhoneNumberConfirmed = table.Column (type: "INTEGER", nullable: false), + TwoFactorEnabled = table.Column (type: "INTEGER", nullable: false), + LockoutEnd = table.Column (type: "TEXT", nullable: true), + LockoutEnabled = table.Column (type: "INTEGER", nullable: false), + AccessFailedCount = table.Column (type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AspNetUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AspNetRoleClaims", + columns: table => new + { + Id = table.Column (type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + RoleId = table.Column (type: "TEXT", nullable: false), + ClaimType = table.Column (type: "TEXT", nullable: true), + ClaimValue = table.Column (type: "TEXT", 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: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + UserId = table.Column (type: "TEXT", nullable: false), + ClaimType = table.Column (type: "TEXT", nullable: true), + ClaimValue = table.Column (type: "TEXT", 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: "TEXT", nullable: false), + ProviderKey = table.Column (type: "TEXT", nullable: false), + ProviderDisplayName = table.Column (type: "TEXT", nullable: true), + UserId = table.Column (type: "TEXT", 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: "TEXT", nullable: false), + RoleId = table.Column (type: "TEXT", 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: "TEXT", nullable: false), + LoginProvider = table.Column (type: "TEXT", nullable: false), + Name = table.Column (type: "TEXT", nullable: false), + Value = table.Column (type: "TEXT", 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); + + 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); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Activities"); + + 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/Persistence/Migrations/DataContextModelSnapshot.cs b/Persistence/Migrations/DataContextModelSnapshot.cs index 228347e..bcfb0f2 100644 --- a/Persistence/Migrations/DataContextModelSnapshot.cs +++ b/Persistence/Migrations/DataContextModelSnapshot.cs @@ -15,9 +15,9 @@ partial class DataContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "8.0.7"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.8"); - modelBuilder.Entity("Domain.features.activity.Activity", b => + modelBuilder.Entity("Domain.Entities.Activity", b => { b.Property ("Id") .ValueGeneratedOnAdd() @@ -45,6 +45,255 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Activities"); }); + + modelBuilder.Entity("Domain.Entities.User", b => + { + b.Property ("Id") + .HasColumnType("TEXT"); + + b.Property ("AccessFailedCount") + .HasColumnType("INTEGER"); + + b.Property ("Bio") + .HasColumnType("TEXT"); + + b.Property ("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("TEXT"); + + b.Property ("DisplayName") + .HasColumnType("TEXT"); + + b.Property ("Email") + .HasMaxLength(256) + .HasColumnType("TEXT"); + + b.Property