From ca60f001e2a0554f028a087bac6b931aa822fcff Mon Sep 17 00:00:00 2001 From: cedrick2711 Date: Wed, 15 Jul 2026 16:29:58 -0400 Subject: [PATCH] =?UTF-8?q?r=C3=A9gler=20probl=C3=A8me=20avec=20les=20lien?= =?UTF-8?q?s=20TRN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/models.cpython-313.pyc | Bin 18761 -> 22452 bytes __pycache__/seed.cpython-313.pyc | Bin 16718 -> 18740 bytes instance/team_tryouts.db | Bin 126976 -> 135168 bytes models.py | 87 ++++++++++++++++++++- routes/__pycache__/main.cpython-313.pyc | Bin 7682 -> 9665 bytes routes/__pycache__/matches.cpython-313.pyc | Bin 26566 -> 26519 bytes routes/__pycache__/tryouts.cpython-313.pyc | Bin 22509 -> 22616 bytes routes/__pycache__/users.cpython-313.pyc | Bin 18080 -> 20716 bytes routes/users.py | 66 +++++++++++++--- seed.py | 83 ++++++++++++++++---- templates/pages/edit_profile.html | 82 ++++++++++++++++--- templates/pages/edit_user.html | 79 +++++++++++++++++-- templates/pages/profile.html | 18 +++-- 13 files changed, 368 insertions(+), 47 deletions(-) diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 4e4b0093769c266096c1c415f70b7c559b325c53..f4abcd0bd4c6d922544c6cbe04a1a01322d9bbfe 100644 GIT binary patch delta 7109 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 delta 3790 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 diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index 3aee32444df85fbf0b350241455d8b927e0b4aa5..f3d14f2e1891c54df68f3486f7fc5574ce058776 100644 GIT binary patch literal 135168 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 U`o}EvQOu TRN code) +PLATFORM_CODES = { + 'Ubisoft': 'ubi', + 'PlayStation': 'psn', + 'Xbox': 'xbl', + 'Nintendo Switch': 'switch', + 'PC': 'pc', + 'Mobile': 'mobile', + 'Steam': 'steam', + 'Epic': 'epic', +} + +# TRN URL mapping for each game +TRN_URLS = { + 'Valorant': 'https://tracker.gg/valorant/profile/riot/{username}', + 'League of Legends': 'https://tracker.gg/lol/profile/{username}', + 'Counter-Strike 2': 'https://tracker.gg/cs2/profile/steam/{username}', + 'Apex Legends': 'https://tracker.gg/apex/profile/{platform}/{username}', + 'Overwatch 2': 'https://tracker.gg/overwatch/profile/{platform}/{username}', + 'Rainbow Six Siege': 'https://r6.tracker.network/r6siege/profile/{platform_code}/{username}', + 'Fortnite': 'https://tracker.gg/fortnite/profile/{platform}/{username}', + 'Rocket League': 'https://rocketleague.tracker.network/rocket-league/profile/{platform_code}/{username}', + 'Call of Duty': 'https://tracker.gg/call-of-duty/profile/{platform}/{username}', + 'Dota 2': 'https://tracker.gg/dota2/profile/steam/{username}', + 'Super Smash Bros.': 'https://tracker.gg/smash/profile/{username}', + 'Street Fighter 6': 'https://tracker.gg/streetfighter/profile/{username}', +} + + +class UserGamertag(db.Model): + """Store gamertag per game for each user.""" + __tablename__ = 'user_gamertags' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) + game = db.Column(db.String(50), nullable=False) + gamertag = db.Column(db.String(120), nullable=False) + platform = db.Column(db.String(30), nullable=True) # For games that need platform (e.g., PSN, Xbox Live) + + user = db.relationship('User', backref='gamertags') + + __table_args__ = ( + db.UniqueConstraint('user_id', 'game', name='unique_user_game'), + ) + + def get_trn_url(self): + """Generate the TRN URL for this gamertag.""" + if self.game not in TRN_URLS: + return None + + url = TRN_URLS[self.game] + # URL-encode the gamertag to handle special characters like #, spaces, etc. + encoded_gamertag = quote(self.gamertag, safe='') + + # Check for platform_code placeholder (used for R6 and Rocket League) + if '{platform_code}' in url and '{username}' in url: + platform_code = PLATFORM_CODES.get(self.platform, self.platform.lower().replace(' ', '-')) if self.platform else '' + return url.format(platform_code=platform_code, username=encoded_gamertag) + elif '{platform}' in url and '{username}' in url: + return url.format(platform=self.platform.lower().replace(' ', '-'), username=encoded_gamertag) + elif '{username}' in url: + return url.format(username=encoded_gamertag) + return url + + class OrgTeam(db.Model): """Persistent organization teams (e.g., Varsity, JV) that exist across tryouts.""" __tablename__ = 'org_teams' diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index dfbe9b2034b587e00aa85987c29189c2c613cdc3..00814b32b92edc40a28a7015a414f55490bb5208 100644 GIT binary patch delta 2511 zcma)6YfK#16}~gGkJNrxbH20o!@Ajws*80$5F#&v6=oocEXBaSm z(VlgUx}jTF-6hiOH$G1 z*&fslkd%IWL{TOBv@FqQdY`=04%)MN@XDI?jdO7%7RBye8e1$dez zn2;77JHaqHLIc1XSVQtu-CmV=W2#U3qbAt=g1S>*Qv<5pLr8swKy#m}C%>yo^_4YB z_i2~CcLabsFd3JMx;7o&>>;n}q8i?m8p8KUg9cagkc$3xJ_U*(lZGam3DdMKVu@@CfT1S4Od+*p_hZ)GjX(Wfl|V50ahWX=JA&R_cGIcsu) zS8M{=1q2eYSpg{g2j}7W33AL1fC+@r0dG5rklA*H)~Uvz#EUus=E5A$jM|xcRi#5Duc>lJV6AaNQ-Ew#v1+rEtGpJrvDRD^p%pvOzA!`_y{_6a2!XQk~aoNQ@mmQML zB9~c6F9~V9ejhiX1>C37xh#ARArh3V6X8l>QIxgHfvmxXvYF?8B&L-ePLSSoy+R*> z27E(A`lsvMN$AEhs$(GQW^#FvgD{R2D#xc4UYW{syi5t42yt(h^#UgdxdIQJlIT9X zDi*St6^J_pwBcjTd?Cj}^b~+>sJVk3Y{0rv5K%KtD{a$Q^Icpiax#tmJc7(>(swYx zfdSf?927)ZmnjxGJ}YbUnTuRrre|Scv6#NNB2%+m07Z*bJ`2wv1k|7@;ex|h9+71C z;3~wW0AE0pOhIl|@l-Y!^O+S6Dwz~y>%O1+IfDJz*qRg4#d`0T2~jqEUEdD?cYj1& zSeA*R;6lLg|Bi^F!T_c;WHZ9t#X<&V;S$nu&V@F5`+JRk?P{40KGJ~(_qy?_Q8KS- zs~+E)x$5-Z@^##C9$Y(9b$iz*OOtCu{|Yo;@4eQ0z5iPOd%Zh>W0k<^a^Un`yKCKA zvTnq;5}S##z2mOkU$M88?Jd93+|d78U$%EW)KX2>f9rtF@%Hpjxjj9w_#T--D0V${ zEmaAwc9nx&ckS+VTgkR@Z0p44iL(75*3BjJh6xcOcu0YJ-k$sU;`-~Q*MHGdiFKD_ z-8IY_pg%@X!eSZCAASBk?O%1MT;oJG1f92MzCzf8=_g z*L3Yq1hET-?tr0PaP$-4+XeF# jFuw!lKLLSV5R+~Mdjn~LI7>XF0BOfl@PS6zP{{ua#Z5Bz delta 774 zcmZ8f%WD%s7@u!n*|ceFy4`FZUGwP15J9xoLg~X=N?UE9v0b8-M%uNT+Df`g!el- z+7OLd^UAHu;jM5CzHH?ejWjZmDHgkC6s)9C1+vJLD%}GdD@6#a6?Og;*_M@LU;qv^ zQ%<0PLx`~E`?;X+R|00+|B8Q=v77CM5HY|8i9Ci2asfPHwdJgkU(kRF;&8)ajCKu@ zms}E}oIM*avHceXnUFwE|tWc)Mw_nRLj8Buwv>g2WhHkHlO1Dr->FnbxIb5^9Y zf-Wv0U_eXXD^nR3?gr8oj)(lbaL%X`%C47vl z%bGA-h!e+f!d_dmQL}0*Yt@arI6{6K$7k59AN0d2Ls6Cvwv$IT>UOJEJ&#wZ#(rOO vji&EB0PLcvPiSfvo!de2T{QO@&F!EhspW>^eNcpb9&w#4>3ag>2TlJ1@xP&e diff --git a/routes/__pycache__/matches.cpython-313.pyc b/routes/__pycache__/matches.cpython-313.pyc index 36f6716fb365fdf7ae2cbddcc19024926288f487..f836925b500ff2ed28bb661602cca6756fa45555 100644 GIT binary patch delta 1987 zcmaKtYfPI}7{_~7`nI$yE0=OFH*u`MxJ<_kmn91*V;k3vjIl~v=!=xmg6Az7W|Xfc zMz{I6fJ?xk^Ew&B*ZD!5iHY&U62pfjet5r46BDB*F8hYgc>d?bR*A7me|^sLoXc}N zr{8R{g-zyu;C4GL;95-MGxmbMp=?>x2CV}Qx@XU(-)to;haNiDOTBgJ zCmnUlL5348mNHA{uI`sC78fLIcOiZ2^08d~XP1l7!`-W_gRZ+v*ipLUE>@lr^LZ!z z;x1?Hl#y}SIU*Ff;;WIqno+QezVqDL)!?Li6&3ngrfN;^v{>TyLHj@x-M3}y4c<9h zniy3}j}8~+&`6Gx`RIP(8Y`idqU`cxrXOb?6?@9hVA9V@i@)@I8~y6qOTQNtuzvCu ze_G{t@Om+iHvk>L0pLmCD6sAER&jW~7h{irp^QhT5-R5*Xyk%EsI60KoTo!4+_3P2 zKof8rNS)J&VF4gdJOQa2=mF%h{g4I#(*Yro;p;qc5~_A!5I7AC2^emawJ|s|6`m7C z=fg?efu!yXCZ7cYz|#~fIpoxY7!qI2s^2KNXw`cvm_y{Iulh&-xKJC8X&zB|aCFX$ z1aa~x@HmhSOj59>wD6n|4Qn(WBc@P|b25jituHGJ5Ep5=b#Dym=C1>?z$m8S zh=dbrP)qRb)WRz3jRJ35r$;AK#WWmRBFq!PNWxImctre~RW;AS@;8Ai)Yz7*ED2G| zCpM5ze}>X2-j>01{l&H~Gn-x$mMu>#oEV!>wYsseXuwFA^JG@}MeKr<@G(FIWQq%S zw7}>ST)AUc#W*FS_fh;a*v%ARQiIu4siMj0smjf#T5@Oku#vn{AxIA3 zDzE~)4J6CR@e=WO0C{b%L3$TR1M+}W+TO!3AE>v?3(5?l-uxpVnS<>oBce{J;?1}Y z+iu`}-~-@e0l(L5+5gD9yv#c?!dJ1-yvIVS{>SUG2Fpz#<-$6Kp8!krM}Ixr&}#?A z?F!n5-=f7c<-ue@Wb^nl{wLvBWCv`30;B@^976;o9|-^UMQo@1;YxN}ZyOHST(TWy zC-&2|VEKGV%r;z+@LX_uJovn-p8Kg)X#6=l%OUfhtchXMW~QPEnQX(3Wnu>|@2zZ; z)Lr)e?Tsv+kv1_s%MB$Kjf=lN-f1Zmz8=GY9+_0bk%-33yL^L2LJjOIx)3T8PvXtc zbL_5O6`rtW-NkgP*(B1dC0dE>V}^bw@(8QMe;UWT%DVs^*Z^(=Sj!E{9QU#B_4@Gz F_80vP$Y=ln delta 2056 zcma)-ZERCj7{_~dx7%)|vt#SFGP<>l0Nr3?FfiGG2mvOJy|6Nn7wyY>#|nL!r?--6 z!Xz=#F9`C8i$by?zF|a!3rbYPMB_Jw#qi}yVu*&sFMcsGy2Rl5pF3LI2V;}|`kd!E z=brogpXZ!T++^S0WUk*`t}>hWEc|5G!6TPkON$*9Jd@M4Y^xC~Zf5KVy;8Ec)Niw; ziw1223Y}Fejqgk5Gxnl!SDjI+LRBlo>OmC@d8DlnQ&+QUs&HOvsA(w;Ia<^;OoYY9 zZ|f@RdC6vT!cuw~>8{hqYK{9&C$rBK`Inh2NM)`IY%5)J)i*vNR+vgOnKaeWWOPj9 zX6bM)nGC0+DUClaf_xkOYP*zN(z| zZl)jHSBo~4(b3(T=zdF+@kd3SQra&Pvk%$_*2=_Ic*aVqLq3^Bsm!Qe+V+7a+Sp!6 zKY6QYUsV}vpgRjLdi*VpQ2D=dQ+h%)Rp(Oz&#fmmZwcM2^Rm#%g;(16X1whdfuMu8 z!d?k%1y%uF0P=m1*N+RM<2x{R3z+I~BB^Vf$Ka6*2H;kbTAG)_w;fmmtOa_2!ai*n zdI7m(FRVU5q(8fD2-Z%(5>{CBxvy*cAY6EHz8lyB>=iIwx)x2fg{{J5`To3bRo=G` zlb-^f2Ex=^|7clGm=W>KRvO3aPbluG_G!=3TTLC)o{npwY0qOu!y@KjAqq6z3yz3+ zrX$1S8V|?DtkjS=KLoS`l|YhKHa9Ft3DZ;(=`eo;&b)d&Mv3M&br+nRrkZ!E-7ve2 zndYBeYo3RV?9VgqhkXo?QcBsRo_S3yQMc0kjwjh(I@FQ&%nf1nVfwAZ$A)NL=dzl( zaGY1H0?YCZW5xmM?)0m&>M?qzbF~|(@&w=n4$`syT8~UqChUUq1z;!L?R;5%1Lm8Q zS+`_2s=;3a@-J;V;!#}-XLUZSJfgB4Q2*IzCU&q;Ytxa{qg)TibyL;Saq&y6-&04fD2_we6d`K|Jco(_) zYwUaybEYWJALu>{^HoIcR%<`>WQ48(r-3t=w9@LQLWSh?LYc;8nPfN4treajPqnPP z1H-p~bHLj`zGl1{!*>ALa__==4=4s|fI_dmk6|s)Y8w}ng2}`EA)I*?X0MO9mej=k zaRIS;z~jXcY48-GSdl=-)@ zM6voozSt!3_%e3KI2~_fn<660b3iw66}S%E0I-(d0Rq4xpi#hdtV?C$xumv%|8jYF Gg8c(+!O}JW diff --git a/routes/__pycache__/tryouts.cpython-313.pyc b/routes/__pycache__/tryouts.cpython-313.pyc index b0599702d292934e1cab5b80e5a1371a6cf5e373..c8536fd252f36ebe89231dd8b5a34e5e525c7e5e 100644 GIT binary patch delta 928 zcmaF6p7F*8M&8f7yj%=Gz<(q>%W)&GKMP~>=2({dl1!&~CLa{_-P|qriH)&*bDe5F z6Qkzjcj~f?cP8^_M6+5jFyzmid_YZP@;^BNrch2GQYGST}VHJcn+8n35gi)^o z=-MI{5FrX8Oo4=^bdd*$9R?z5fy6DwqM}L=r)si+zNT3FQO^&Pk;0hxI~Ts)I? zvV)A&W;ufc%=OU;*Q0YUM(19SF25LE{(*tPnaPFe0+r@uE++0&G2UG z@C8}|)P4hObNxVA{XkOj1`sLg-B4uIn_OwKDKLWR=O-qRtA2hGV2}x7EVc!P(?Ncb zNG6tp>bgMkgpeacBs116DFDjPo|%wY$&6IBW7=$2)A(LDF+4&v(*iT(bGR z(?nLFc%nxG+Z2%a)XC31>bN^VOh62G_sxdCxe8H2E1*q?m?`p;s zlk5CcxK{#YwHblYyoCW2&68gRJ8$OlFJ=ZCE)N$Gxkkx3)W^_vw2hS zWky?2;wYK{BIbdJB_LuMhyWQ^v<5`TfCyO-AqOOGaoFVMr@dd B7Q+Al delta 800 zcmcbyf${BnM&8f7yj%=Gpi&i<<-U>EpM}wRb1ch!Nv2gilMjmeZtj-*#KxGuxlT2o ziBWR$J9SycGn08Vq9?OzSxmmK5d)${rSdpKB{e{%070T414FQIknZF}7h!oxQ$~oW zKVvXYs1!Ce!cr(|BtxZwMJ6B6T+NuZIY;X@lR1-)f+kB*KG2w=0w8fqs3bKp*D$^y zC$TcMC_XPSH?tqKRsm)>r2bk+E?XFvTU$peTZW(&fGW0@1;sqdSnRMMU z?V@Gc70ZmvGMSewGd4KRkC+*8T~_~!to}vIj1J!mGMP8X*ZR!VX@Sjq(d4Tpo1C&3f8LVG{P{_MK_-Z?*bwOcgZv^9Ml1)_b%EpwAxDM? zbDj&9x)C;9mlSm)8F{V<$ValVU6qoL#gGG_XwriBF##ZnJF2Wkz{WloZVZ5eq=XG7zx>M63o8>n8Ju$ue%+tQ)4y1OQ2U{EYwr diff --git a/routes/__pycache__/users.cpython-313.pyc b/routes/__pycache__/users.cpython-313.pyc index a0aac6dcc5d36c07de4eafa16168f100f8d4b4de..34d7a036c5648668fb02865248c3f69f807adfc3 100644 GIT binary patch delta 6321 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 OA71{$(JEp_`~L%*PhX<| diff --git a/routes/users.py b/routes/users.py index 0afe1cc..c21e8ad 100644 --- a/routes/users.py +++ b/routes/users.py @@ -1,7 +1,7 @@ from flask import Blueprint, render_template, redirect, url_for, flash, request, jsonify from flask_login import login_required, current_user from extensions import db, hash_password -from models import User, ROLES, ESPORT_GAMES, PlayerDisponibility +from models import User, ROLES, ESPORT_GAMES, PlayerDisponibility, UserGamertag, GAME_PLATFORMS from datetime import datetime, timedelta users_bp = Blueprint('users', __name__, url_prefix='/users') @@ -34,10 +34,9 @@ def edit_user(user_id): if role not in ROLES: flash('Invalid role selected.', 'danger') - return render_template('pages/edit_user.html', user=user, roles=ROLES, esport_games=ESPORT_GAMES) + return render_template('pages/edit_user.html', user=user, roles=ROLES, esport_games=ESPORT_GAMES, game_platforms=GAME_PLATFORMS) selected_games = request.form.getlist('games') - trn_username = request.form.get('trn_username', '').strip() discord_username = request.form.get('discord_username', '').strip() league_os_profile = request.form.get('league_os_profile', '').strip() @@ -47,10 +46,33 @@ def edit_user(user_id): user.role = role user.is_active_account = is_active user.games = ','.join(selected_games) if selected_games else None - user.trn_username = trn_username or None user.discord_username = discord_username or None user.league_os_profile = league_os_profile or None + # Handle gamertags - save or delete based on form input + # First, get all existing gamertags for this user + existing_gamertags = {gt.game: gt for gt in user.gamertags} + + for game in selected_games: + gamertag = request.form.get(f'gamertag_{game}', '').strip() + platform = request.form.get(f'platform_{game}', '').strip() if GAME_PLATFORMS.get(game) else None + + existing = existing_gamertags.get(game) + if gamertag: + if existing: + existing.gamertag = gamertag + existing.platform = platform + else: + gt = UserGamertag(user_id=user.id, game=game, gamertag=gamertag, platform=platform) + db.session.add(gt) + elif existing: + db.session.delete(existing) + + # Remove gamertags for games that are no longer selected + for game in existing_gamertags: + if game not in selected_games: + db.session.delete(existing_gamertags[game]) + password = request.form.get('password') if password: user.password_hash = hash_password(password) @@ -59,7 +81,8 @@ def edit_user(user_id): flash(f'User {user.full_name} updated successfully!', 'success') return redirect(url_for('users.list_users')) - return render_template('pages/edit_user.html', user=user, roles=ROLES, esport_games=ESPORT_GAMES) + user_gamertags = {gt.game: {'gamertag': gt.gamertag, 'platform': gt.platform} for gt in user.gamertags} + return render_template('pages/edit_user.html', user=user, roles=ROLES, esport_games=ESPORT_GAMES, game_platforms=GAME_PLATFORMS, user_gamertags=user_gamertags) @users_bp.route('//delete', methods=['POST']) @login_required @@ -135,22 +158,44 @@ def edit_profile(): phone = request.form.get('phone') selected_games = request.form.getlist('games') - trn_username = request.form.get('trn_username', '').strip() discord_username = request.form.get('discord_username', '').strip() league_os_profile = request.form.get('league_os_profile', '').strip() if email != current_user.email and User.query.filter_by(email=email).first(): flash('Email already in use.', 'danger') - return render_template('pages/edit_profile.html', user=current_user, esport_games=ESPORT_GAMES) + return render_template('pages/edit_profile.html', user=current_user, esport_games=ESPORT_GAMES, game_platforms=GAME_PLATFORMS) current_user.full_name = full_name current_user.email = email current_user.phone = phone current_user.games = ','.join(selected_games) if selected_games else None - current_user.trn_username = trn_username or None current_user.discord_username = discord_username or None current_user.league_os_profile = league_os_profile or None + # Handle gamertags - save or delete based on form input + # First, get all existing gamertags for this user + existing_gamertags = {gt.game: gt for gt in current_user.gamertags} + + for game in selected_games: + gamertag = request.form.get(f'gamertag_{game}', '').strip() + platform = request.form.get(f'platform_{game}', '').strip() if GAME_PLATFORMS.get(game) else None + + existing = existing_gamertags.get(game) + if gamertag: + if existing: + existing.gamertag = gamertag + existing.platform = platform + else: + gt = UserGamertag(user_id=current_user.id, game=game, gamertag=gamertag, platform=platform) + db.session.add(gt) + elif existing: + db.session.delete(existing) + + # Remove gamertags for games that are no longer selected + for game in existing_gamertags: + if game not in selected_games: + db.session.delete(existing_gamertags[game]) + password = request.form.get('password') if password: current_user.password_hash = hash_password(password) @@ -159,7 +204,8 @@ def edit_profile(): flash('Profile updated successfully!', 'success') return redirect(url_for('users.profile')) - return render_template('pages/edit_profile.html', user=current_user, esport_games=ESPORT_GAMES) + user_gamertags = {gt.game: {'gamertag': gt.gamertag, 'platform': gt.platform} for gt in current_user.gamertags} + return render_template('pages/edit_profile.html', user=current_user, esport_games=ESPORT_GAMES, game_platforms=GAME_PLATFORMS, user_gamertags=user_gamertags) # Day names for disponibility @@ -332,4 +378,4 @@ def delete_disponibility(disponibility_id): db.session.delete(disponibility) db.session.commit() - return jsonify({'success': True}) + return jsonify({'success': True}) \ No newline at end of file diff --git a/seed.py b/seed.py index 3b05c83..8ce6229 100644 --- a/seed.py +++ b/seed.py @@ -1,6 +1,6 @@ from sqlalchemy import text from extensions import db, hash_password -from models import User, Tryout, TryoutRegistration, Evaluation, Team, TeamMember, OrgTeam, PlayerDisponibility +from models import User, Tryout, TryoutRegistration, Evaluation, Team, TeamMember, OrgTeam, PlayerDisponibility, UserGamertag from datetime import datetime, timedelta, time import random @@ -16,6 +16,7 @@ def seed_database(): db.session.execute(text('DELETE FROM tryout_registrations')) db.session.execute(text('DELETE FROM tryouts')) db.session.execute(text('DELETE FROM org_teams')) + db.session.execute(text('DELETE FROM user_gamertags')) db.session.execute(text('DELETE FROM users')) db.session.commit() @@ -30,25 +31,45 @@ def seed_database(): {'username': 'scout1', 'password': 'password', 'role': 'scout', 'full_name': 'Alex Rivera', 'email': 'alex@teampro.com', 'phone': '555-0107'}, ] - # Create players with E-Sports profile data + # Create players with E-Sports profile data (gamertags per game) player_data = [ - {'username': 'jplayer1', 'full_name': 'James Wilson', 'email': 'james@email.com', 'games': 'Valorant,Counter-Strike 2', 'trn': 'jameswilson_tr', 'discord': 'JamesW#7291', 'league_os': 'https://leagueos.gg/player/jameswilson'}, - {'username': 'jplayer2', 'full_name': 'Emma Garcia', 'email': 'emma@email.com', 'games': 'League of Legends,Valorant', 'trn': 'emmagarcia_gg', 'discord': 'EmmaG#4452', 'league_os': 'https://leagueos.gg/player/emmagarcia'}, - {'username': 'jplayer3', 'full_name': 'Liam Brown', 'email': 'liam@email.com', 'games': 'Apex Legends,Fortnite', 'trn': 'liambrown_fn', 'discord': 'LiamB#8103', 'league_os': 'https://leagueos.gg/player/liambrown'}, - {'username': 'jplayer4', 'full_name': 'Sophia Lee', 'email': 'sophia@email.com', 'games': 'Overwatch 2,Valorant', 'trn': 'sophialee_ow', 'discord': 'SophiaL#3327', 'league_os': 'https://leagueos.gg/player/sophialee'}, - {'username': 'jplayer5', 'full_name': 'Noah Taylor', 'email': 'noah@email.com', 'games': 'Counter-Strike 2,Rainbow Six Siege', 'trn': 'noahtaylor_r6', 'discord': 'NoahT#6614', 'league_os': 'https://leagueos.gg/player/noahtaylor'}, - {'username': 'jplayer6', 'full_name': 'Olivia Martin', 'email': 'olivia@email.com', 'games': 'Rocket League,Fortnite', 'trn': 'oliviamartin_rl', 'discord': 'OliviaM#2298', 'league_os': 'https://leagueos.gg/player/oliviamartin'}, - {'username': 'jplayer7', 'full_name': 'Ethan Clark', 'email': 'ethan@email.com', 'games': 'Valorant,Apex Legends', 'trn': 'ethanclark_val', 'discord': 'EthanC#7743', 'league_os': 'https://leagueos.gg/player/ethanclark'}, - {'username': 'jplayer8', 'full_name': 'Ava White', 'email': 'ava@email.com', 'games': 'League of Legends,Counter-Strike 2', 'trn': 'avawhite_lol', 'discord': 'AvaW#5561', 'league_os': 'https://leagueos.gg/player/avawhite'}, - {'username': 'jplayer9', 'full_name': 'Mason Hall', 'email': 'mason@email.com', 'games': 'Call of Duty,Rocket League', 'trn': 'masonhall_cod', 'discord': 'MasonH#1189', 'league_os': 'https://leagueos.gg/player/masonhall'}, - {'username': 'jplayer10', 'full_name': 'Isabella Adams', 'email': 'isabella@email.com', 'games': 'Overwatch 2,Dota 2', 'trn': 'isabellaadams_ow', 'discord': 'IsabellaA#4437', 'league_os': 'https://leagueos.gg/player/isabellaadams'}, + {'username': 'jplayer1', 'full_name': 'James Wilson', 'email': 'james@email.com', 'games': 'Valorant,Counter-Strike 2', + 'gamertags': {'Valorant': 'jameswilson_val', 'Counter-Strike 2': 'jameswilson_cs'}, + 'discord': 'JamesW#7291', 'league_os': 'https://leagueos.gg/player/jameswilson'}, + {'username': 'jplayer2', 'full_name': 'Emma Garcia', 'email': 'emma@email.com', 'games': 'League of Legends,Valorant', + 'gamertags': {'League of Legends': 'emmagarcia_lol', 'Valorant': 'emmagarcia_val'}, + 'discord': 'EmmaG#4452', 'league_os': 'https://leagueos.gg/player/emmagarcia'}, + {'username': 'jplayer3', 'full_name': 'Liam Brown', 'email': 'liam@email.com', 'games': 'Apex Legends,Fortnite', + 'gamertags': {'Apex Legends': 'liambrown_apex', 'platform': 'PC', 'Fortnite': 'liambrown_fn', 'platform_fn': 'PC'}, + 'discord': 'LiamB#8103', 'league_os': 'https://leagueos.gg/player/liambrown'}, + {'username': 'jplayer4', 'full_name': 'Sophia Lee', 'email': 'sophia@email.com', 'games': 'Overwatch 2,Valorant', + 'gamertags': {'Overwatch 2': 'sophialee_ow', 'platform_ow': 'PC', 'Valorant': 'sophialee_val'}, + 'discord': 'SophiaL#3327', 'league_os': 'https://leagueos.gg/player/sophialee'}, + {'username': 'jplayer5', 'full_name': 'Noah Taylor', 'email': 'noah@email.com', 'games': 'Counter-Strike 2,Rainbow Six Siege', + 'gamertags': {'Counter-Strike 2': 'noahtaylor_cs', 'Rainbow Six Siege': 'noahtaylor_r6', 'platform_r6': 'PC'}, + 'discord': 'NoahT#6614', 'league_os': 'https://leagueos.gg/player/noahtaylor'}, + {'username': 'jplayer6', 'full_name': 'Olivia Martin', 'email': 'olivia@email.com', 'games': 'Rocket League,Fortnite', + 'gamertags': {'Rocket League': 'oliviamartin_rl', 'platform_rl': 'PC', 'Fortnite': 'oliviamartin_fn', 'platform_fn': 'PC'}, + 'discord': 'OliviaM#2298', 'league_os': 'https://leagueos.gg/player/oliviamartin'}, + {'username': 'jplayer7', 'full_name': 'Ethan Clark', 'email': 'ethan@email.com', 'games': 'Valorant,Apex Legends', + 'gamertags': {'Valorant': 'ethanclark_val', 'Apex Legends': 'ethanclark_apex', 'platform_apex': 'PC'}, + 'discord': 'EthanC#7743', 'league_os': 'https://leagueos.gg/player/ethanclark'}, + {'username': 'jplayer8', 'full_name': 'Ava White', 'email': 'ava@email.com', 'games': 'League of Legends,Counter-Strike 2', + 'gamertags': {'League of Legends': 'avawhite_lol', 'Counter-Strike 2': 'avawhite_cs'}, + 'discord': 'AvaW#5561', 'league_os': 'https://leagueos.gg/player/avawhite'}, + {'username': 'jplayer9', 'full_name': 'Mason Hall', 'email': 'mason@email.com', 'games': 'Call of Duty,Rocket League', + 'gamertags': {'Call of Duty': 'masonhall_cod', 'platform_cod': 'PC', 'Rocket League': 'masonhall_rl', 'platform_rl': 'PC'}, + 'discord': 'MasonH#1189', 'league_os': 'https://leagueos.gg/player/masonhall'}, + {'username': 'jplayer10', 'full_name': 'Isabella Adams', 'email': 'isabella@email.com', 'games': 'Overwatch 2,Dota 2', + 'gamertags': {'Overwatch 2': 'isabellaadams_ow', 'platform_ow': 'PC', 'Dota 2': 'isabellaadams_dota'}, + 'discord': 'IsabellaA#4437', 'league_os': 'https://leagueos.gg/player/isabellaadams'}, ] for i, data in enumerate(player_data, start=10): users_data.append({ 'username': data['username'], 'password': 'password', 'role': 'player', 'full_name': data['full_name'], 'email': data['email'], 'phone': f'555-01{i:02d}', - 'games': data['games'], 'trn_username': data['trn'], + 'games': data['games'], 'gamertags': data.get('gamertags', {}), 'discord_username': data['discord'], 'league_os_profile': data['league_os'] }) @@ -63,7 +84,6 @@ def seed_database(): email=data['email'], phone=data.get('phone', ''), games=data.get('games'), - trn_username=data.get('trn_username'), discord_username=data.get('discord_username'), league_os_profile=data.get('league_os_profile') ) @@ -82,6 +102,41 @@ def seed_database(): scout = user_map['scout1'] players = [user_map[f'jplayer{i}'] for i in range(1, 11)] + # Create gamertags for players + gamertag_data = [ + {'user': users[7], 'game': 'Valorant', 'gamertag': 'jameswilson_val'}, + {'user': users[7], 'game': 'Counter-Strike 2', 'gamertag': 'jameswilson_cs'}, + {'user': users[8], 'game': 'League of Legends', 'gamertag': 'emmagarcia_lol'}, + {'user': users[8], 'game': 'Valorant', 'gamertag': 'emmagarcia_val'}, + {'user': users[9], 'game': 'Apex Legends', 'gamertag': 'liambrown_apex', 'platform': 'PC'}, + {'user': users[9], 'game': 'Fortnite', 'gamertag': 'liambrown_fn', 'platform': 'PC'}, + {'user': users[10], 'game': 'Overwatch 2', 'gamertag': 'sophialee_ow', 'platform': 'PC'}, + {'user': users[10], 'game': 'Valorant', 'gamertag': 'sophialee_val'}, + {'user': users[11], 'game': 'Counter-Strike 2', 'gamertag': 'noahtaylor_cs'}, + {'user': users[11], 'game': 'Rainbow Six Siege', 'gamertag': 'noahtaylor_r6', 'platform': 'Ubisoft'}, + {'user': users[12], 'game': 'Rocket League', 'gamertag': 'oliviamartin_rl', 'platform': 'Epic'}, + {'user': users[12], 'game': 'Fortnite', 'gamertag': 'oliviamartin_fn', 'platform': 'PC'}, + {'user': users[13], 'game': 'Valorant', 'gamertag': 'ethanclark_val'}, + {'user': users[13], 'game': 'Apex Legends', 'gamertag': 'ethanclark_apex', 'platform': 'PC'}, + {'user': users[14], 'game': 'League of Legends', 'gamertag': 'avawhite_lol'}, + {'user': users[14], 'game': 'Counter-Strike 2', 'gamertag': 'avawhite_cs'}, + {'user': users[15], 'game': 'Call of Duty', 'gamertag': 'masonhall_cod', 'platform': 'PC'}, + {'user': users[15], 'game': 'Rocket League', 'gamertag': 'masonhall_rl', 'platform': 'Epic'}, + {'user': users[16], 'game': 'Overwatch 2', 'gamertag': 'isabellaadams_ow', 'platform': 'PC'}, + {'user': users[16], 'game': 'Dota 2', 'gamertag': 'isabellaadams_dota'}, + ] + + for gt in gamertag_data: + gamertag = UserGamertag( + user_id=gt['user'].id, + game=gt['game'], + gamertag=gt['gamertag'], + platform=gt.get('platform') + ) + db.session.add(gamertag) + db.session.commit() + print(f"[OK] Created {len(gamertag_data)} user gamertags") + # Create Organization Teams (OrgTeams) org_teams_data = [ {'name': 'Varsity', 'coach': coaches[0], 'creator': president}, diff --git a/templates/pages/edit_profile.html b/templates/pages/edit_profile.html index ca97748..4d43df3 100644 --- a/templates/pages/edit_profile.html +++ b/templates/pages/edit_profile.html @@ -42,17 +42,44 @@ Select all games you're signing in for. -
-
- - - Others can click your TRN to view your stats on tracker.gg. + + +