
    mic                        S SK JrJrJr  S SKJr  S SKJrJrJ	r	J
r
JrJrJrJr  S SKJrJr  S SKJr  S SKJrJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJ r   \" \S9r!/ SQr"S r#S r$S r%S r&S r'S r(S r)S r*S r+g)    )sessionrequestjsonify)db)StudentAssesmentResultTableStudentTableSubConceptTableSchoolTableTeacherAssessmentTableQuestionTableConceptTableRankingTable)datetimetimezone)error_response)Selectfunc)shuffle_question_optionsshuffle_questions_options_batch)update_student_rankings)OpenAI)OPEN_AI_API_KEY)SYSTEM_PROMPT)api_key)easymediumhardc                     [         R                  " S5      n U (       d  [        SS5      $ U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      n[        R                  " 5       nUR                  S5      nUR                  S	5      nUR                  S
5      nUR                  S/ 5      n	U(       d  [        SS5      $ 0 n
0 nSnU H  nUR                  S5      nUR                  SS5      nUR                  S5      nUR                  S5      nUU:H  nU(       a  US-  nX;  a  SSS.X'   X   S==   S-  ss'   U(       a  X   S==   S-  ss'   U(       d  M  U SU 3nUU;  a
  SSUUS.UU'   UU   S==   S-  ss'   U(       d  M  UU   S==   S-  ss'   M     U
R                  5        VVs/ s H  u  nnUUS   US   S.PM     nnnUR                  5        VVs/ s H  u  nnUS   US   US   US   S.PM     nnnUS-  nUS-  n[        [        5      R                  [        R                  U:H  5      n[        R                   R                  U5      R                  5       nU(       d  [        SSS.5      S4$ US :X  a  U(       a  [        [        5      R                  [        R                  U:H  [        R                   U:H  5      n[        R                   R                  U5      R                  5       nU(       a  [        S!S"S.5      S#4$ [        UUUUUU	UUS$9n[        R                   R#                  U5        U=R$                  U-  sl        U=R&                  U-  sl        [        R                   R)                  5         [        S!UR+                  5        S%3UUU[-        U5      S&.5      S'4$ s  snnf s  snnf )(NstudentNo active student found  idsectiongrade	school_idtypeanswersassesment_idconcepts_with_subconceptszMissing answers datar   concept
subconcept 
userAnsweranswer   totalcorrectr1   r2   ::)r1   r2   r*   r+   )r*   r1   r2   )r*   r+   r1   r2      FzStudent not foundsuccessmessage  
assessmentTzAlready submitted assessmenti  )
student_idr%   r(   concept_detailsubconcept_detailr)   r$   r#   z submitted successfully)r6   r7   coins_earnedgems_earnedcorrect_counttotal_questions   )r   getr   r   get_jsonitemsr   r   wherer"   r   executescalar_one_or_noner   r   r:   r(   addcoinsgemscommit
capitalizelen)r   r:   r#   r$   r%   bodysubmit_typer'   r(   r)   concept_statssubconcept_statsr?   ansr*   r+   user_answercorrect_answer
is_correctsubconcept_keykvr;   r<   r=   r>   stmtstudent_userisSubmitted
new_results                                 @D:\beyond school\05_solvesmart\server\src\controller\students.pysubmit_funcr^      s	   kk)$G7==T"Jkk)$GKK EK(ID((6"Khhy!G88N+L $)Db I4c::MM'')$WW\2.
ggl+* !N2
QM '/0Q%?M"w'1,'"9-2- : 'y:,7N%55 &",	4 0 ^,W5:5z 0;q@;C J "''))DAq '
q|D)   %**, -DAq |L/wZ|		
 -   !2%L!#K,%%loo&CDD::%%d+>>@L*
   	 l"|1288'22j@'44D
 jj((.AAC9   
 -!%+";	J JJNN:,&$JJ!,,.//FG$"&w<  	 u
s   O< Oc                  &   [         R                  " S5      n U (       d  [        SSS.5      S4$ U R                  S5      n[        [        5      R                  [        R                  U:H  5      n[        R                   R                  U5      R                  5       R                  5       nU(       d  [        SSS.5      S4$ 0 nU H  nUR                   Hz  nUR                  S	5      =(       d    UR                  S
5      nUR                  SS5      nUR                  SS5      n	Xt;  a  SSS.XG'   XG   S==   U-  ss'   XG   S==   U	-  ss'   M|     M     0 n
U GH  nUR                  (       d  M  UR                   H  nUR                  S	5      nUR                  S5      nUR                  SS5      nUR                  SS5      n	X;  a  0 X'   XU   ;  aq  [        R                   R                  [        5      R                  [        R                   U:H  5      R#                  5       nU(       a  UR$                  OS nSSUS.X   U'   X   U   S==   U-  ss'   X   U   S==   U	-  ss'   M     GM     / nUR'                  5        H;  u  nnUS   S:  a  US   US   -  S-  OSnUR)                  UUUS   US   S.5        M=     UR+                  S S9  US S nU(       d  [        SSS.5      S4$ / n[-        U5       H  u  nnUS	   n/ nUU
;   ar  U
U   R'                  5        HK  u  nnUS   S:  a  US   US   -  S-  OSnUR)                  UUUS   US   UR                  S5      S.5        MM     UR+                  S S9  UnUR)                  US-   U[/        US   S5      US   US   U Vs/ s H0  nUS   [/        US   S5      US   US   UR                  S5      S.PM2     snS.5        M     [        SS [1        U5      US!.5      S"4$ s  snf )#Nr   FzUnauthorized userr5     r"   zANo assessment history found. Please complete an assessment first.r8   r*   conceptnamer1   r   r2   r0   r+   )r1   r2   subconcept_idd   )r*   accuracyr1   r2   c                     U S   $ Nrd    xs    r]   <lambda>#practice_set_func.<locals>.<lambda>   s    *    )key
   z)Not enough data to generate practice setsrb   )r+   rd   r1   r2   rb   c                     U S   $ rf   rg   rh   s    r]   rj   rk      s    1Z=rl   r/   rd      )namerd   r1   r2   rb   )
set_numbermain_conceptmain_concept_accuracymain_concept_totalmain_concept_correctweakest_subconceptsTz$Practice sets generated successfully)r6   r7   
total_setspractice_setsrA   )r   rB   r   r   r   rE   r:   r   rF   scalarsallr;   r<   queryr	   filterrq   firstr"   rD   appendsort	enumerateroundrM   )r   r:   rY   all_resultsconcept_performanceresultcrq   r1   r2   subconcept_performancescr*   r+   subconcept_objrb   concept_accuracystatsrd   weakest_conceptsry   idxweak_conceptconcept_namesubconcept_accuracyrw   subs                              r]   practice_set_funcr      s   kk)$G*
   	
 T"J-.44#..*<D **$$T*22488:KZ
   	
 &&A55#;quu]';DEE'1%EeeIq)G.67A,F#)%g.%7.%i0G;0 '   ###..&&+VVL1
w*&&A.868*3G%DD%'ZZ%5%5o%F%M%M',,
:&eg # :HN$5$5TM "##$)6C*3J? '/
;GDMD&/
;IF'QF1 / 8 -335@EgQR@RE)$uW~5<XY 7^Y'	!
 	 6 56',B
   	
 M&'78\#I. 11%;L%I%O%O%Q!
EHMgYZHZE),uW~=D`a#**", ("7^$Y/%*YY%?,  &R  $$)@$A1'(%*<
+CQ%G".w"7$0$; /	$ /C  - %c*oq 9 \"9~%(WW_%= /	$
 	' 9J 9-(&	 
 	 	$s   /7Pc                     [         R                  " 5       n U R                  S5      nU R                  S5      nU(       a  U(       d  [        SS5      $ [	        [
        5      R                  [
        R                  U:H  5      n[        R                  R                  U5      R                  5       nU(       d  [        SS5      $ UR                  (       a#  UR                  U5      (       d  [        SS5      $ OUR                  U5        SUl        [	        [        5      R                  [        R                   UR"                  :H  5      n[        R                  R                  U5      R                  5       nU(       d  [        SS5      $ [$        R&                  " [(        R*                  5      nUR,                  R/                  5       nU(       a@  UR/                  5       U-
  R0                  n	U	S	:X  a  U=R2                  S	-  sl        OS	Ul        Xtl        [5        UR                   UR6                  UR8                  UR"                  S
9n
[        R                  R;                  5         UR                   UR                  UR                   UR6                  UR8                  UR<                  S.[        S'   [?        SSS[        S   UR@                  URB                  URD                  UR2                  U
S   U
S   S.S.	5      S4$ )NusernamepasswordzPlease fill the required fieldr8   zInvalid username or passwordr!   TSomething went wrongr/   )r:   r$   r#   r%   )r"   r   r%   r$   r#   streamr   zstudent login successfullyclass_rankingsschool_rankings)classschool)	r6   roler7   usersavatarrI   rJ   streakrankingsrA   )#r   rC   rB   r   r   r   rE   r   r   r   rF   rG   
isLoggedIncheck_passwordset_passwordr
   r"   r%   r   nowr   utc
last_logindatedaysr   r   r$   r#   rK   r   r   r   rI   rJ   )rN   r   r   rY   userstmt2r   r   last_login_date
delta_daysr   s              r]   
login_funcr     sQ   Dxx
#Hxx
#H8>DD,%%l&;&;x&GHD::d#668D<cBB""8,,!"@#FF - 	(#;%%knn&FGEZZ&99;F4c::
,,x||
$Coo**,Ohhj?288
?KK1KDKO '77jj..	H JJ ggMMYY<<--GI /#++		++./01
  	 rl   c                     [         R                  " S5      n U (       d  [        SS5      $ U R                  S5      nU R                  S5      n[        R                  " 5       nUR                  S5      nU(       a  U(       a  U(       d  [        SSS	.5      S
4$ [        [        5      R                  [        R                  U:H  5      n[        R                   R                  U5      R                  5       n/ n[        5       nUR                   HY  n	U	R                  S5      n
U	R                  SS5      nU
 SU 3nX;  d  M4  UR                  U5        UR!                  U
US.5        M[     UR                  UR"                  UR$                  UR&                  UR(                  UR*                  UUR                  UR,                  R/                  S5      S.	n[        SSS	.UE5      S4$ )Nr   r    r8   r$   r#   r(   Fr   r5   r!   r*   r+   r,   r3   )r*   r+   %Y-%m-%d %H:%M:%S)	r(   r%   
created_byr$   r#   conceptsr)   	assesment
created_atTzGot Assessment successfullyrA   )r   rB   r   r   rC   r   r   r   rE   r"   r   rF   rG   set	questionsrH   r   r%   r   r$   r#   r   r   strftime)r   r$   r#   rN   r(   assesment_stmtselected_assessmentr)   
seen_pairsquestionr*   r+   pairassesment_datas                 r]   get_ass_funcr   g  s   kk)$G7==KK Ekk)$GD88N+L|-
   	 	%&	%((L8	9 
 **,,^<OOQ !#J'11,,y)\\,3
"ZL)!NN4 %,,"(.  2 ,..(22)44$**&..'00%>(22)44==>QR
N 0   		 rl   c                  r   [         R                  " 5       n U R                  S5      nU R                  SS5      nU(       d  [        SS5      $ SU SU 3n[        R
                  R                  R                  SS	[        S
.SUS
./S9nUR                  S   R                  R                  n[        SUS.5      $ )Nr   user_promptzuser_prompt is emptyzQuestion is requiredr!   z
Question: z
User_Prompt: zgpt-4o-minisystem)r   contentr   )modelmessagesr   T)r6   ai_response)r   rC   rB   r   clientchatcompletionscreater   choicesr7   r   r   )rN   r   r   user_contentresponseai_texts         r]   ai_funcr     s    Dxx
#H((=*@AK4c::zFL{{&&--!m<L9 . 
H q!))11G"
  rl   c                     [         R                  " S5      n [        R                  " 5       nUR                  S5      nUR                  S5      nUR                  S5      nU R                  S5      nU (       a  U(       d  [	        SS5      $ U(       a  U(       d  [	        SS	5      $ S
nUS:X  a  SnOUS:X  a  SnUS:X  a  Sn[        [        5      R                  [        R                  U:H  5      n[        R                   R                  U5      R                  5       nU(       d  [	        SS	5      $ U=R                  Xd-  -  sl        [        R                   R                  5         [        [        5      R                  [        R                  U:H  [        R                   U:H  5      R#                  [$        R&                  " 5       5      R)                  S5      n	[        R                   R                  U	5      R+                  5       R-                  5       n
U
(       d  [/        SSS.5      S4$ [1        U
5      n[        [2        5      R                  [2        R                  U:H  5      n[        R                   R                  U5      R                  5       nU(       d  [/        SSS.5      S4$ [        [4        R6                  5      R                  [4        R                  UR8                  :H  5      n[        R                   R                  U5      R                  5       nU(       d  [/        SSS.5      S4$ [/        SSUUR6                  US.5      $ )Nr   subConcept_idlevelpracAnsr"   r    r8   zMissing the required fieldsr!   rn   r   (   r   P   r   r/   zNo Student record found   Fz)No such question available for your grader5   zNetwork error  zConcept Not foundTzfetched question successfully)r6   r7   datasub_conceptr*   )r   rB   r   rC   r   r   r   rE   r"   r   rF   rG   rI   rK   r   rb   
difficultyorder_byr   randomlimitrz   r{   r   r   r	   r   rq   
concept_id)r   rN   r   r   r   stu_idper_ques_coinstu_stmtsturY   all_quesquestion_liststmt_sub_idsub_constmt_conceptr*   s                   r]   difficulty_funcr     s   kk)$GDHH_-MHHWEhhy!G[[F&7==;SAAM	&!|l#)),//V*CDH
**

X
&
9
9
;C7==II((IJJ - &&##}4  E) ht{{}eeAh 	
 zz!!$'//1557HB
   	 4H=M)//0B0Bm0STKjj  -@@BG&
   	
 ,++,22<??gFXFX3XYLjj  .AACG*
   	
 2||  rl   c            	         [         R                  " S5      n [        R                  " 5       nUR                  S5      nUR                  S5      nUR                  S5      nU (       d  [	        SSS.5      S4$ U R                  S	5      nU(       a  Ub  Uc  [	        SS
S.5      S4$  [        UUU[        U5      [        R                  " [        R                  5      S9n[        R                   R                  U5        [        R                   R                  5         [	        SSS.5      $ ! [         a  n[	        SSS.5      S4s S nA$ S nAff = f)Nr   ques_idr2   timeFr    r5   r8   r"   zMissing required fieldsr!   r:   question_idrU   time_taken_secattempted_atTzAnswer submitted successfullyzFailed to save answerr   )r   rB   r   rC   r   r   floatr   r   r   r   r   rH   rK   	Exception)r   rN   r   rU   
time_takenr   new_rankinges           r]   submit_ans_funcr     sJ   kk)$GDhhy!G)$J&!J0
   	
 [[Fj(J,>0
   	"! ,!hll3
 	

{#


6
  	  .
   	s   %BD( (
E2EEEc                     [         R                  " S5      n [        R                  " 5       nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nUR                  S5      nU (       d  [	        SS	S
.5      S4$ U R                  S5      nU(       a|  Uby  Ubv   [        UUU[        U5      [        R                  " [        R                  5      S9n	[        R                   R                  U	5        [        R                   R                  5         U[         ;  a  Sn[         R#                  U5      nU(       d  SnO<U(       a#  U[%        [         5      S-
  :  a  [         US-      nOUS:  a  [         US-
     nU(       a  U(       d  [	        SSS
.5      S4$ ['        [(        5      R+                  [(        R                   U:H  [(        R,                  U:H  5      R/                  [0        R2                  " 5       5      R5                  S5      n[        R                   R7                  U5      R9                  5       R;                  5       nU(       d  [	        SSS
.5      S4$ [=        UR>                  UR@                  URB                  5      u  p['        [D        5      R+                  [D        RF                  U:H  5      n[        R                   R7                  U5      RI                  5       nU(       d  [	        SSS
.5      S4$ ['        [J        RL                  5      R+                  [J        RF                  URN                  :H  5      n[        R                   R7                  U5      RI                  5       nU(       d  [	        SSS
.5      S4$ [	        SSUR>                  URQ                  5        VVs/ s H  u  nnUUS.PM     snnUR                   UURF                  URL                  US.	5      $ ! [         a)  n
[        R                   R                  5          S n
A
GNS n
A
ff = fs  snnf )Nr   
subConceptrb   r   r   r2   r   Fr    r5   r8   r"   r   r   r/   r   zMissing the required fieldzNo question foundr   zSubConcept not foundzConcept not foundTzFetched Question successfully)rm   value)	r6   r7   r   optionsr   rT   r   r   r*   ))r   rB   r   rC   r   r   r   r   r   r   r   r   rH   rK   r   rollbackr   indexrM   r   r   rE   rb   r   r   r   r   rF   rz   r~   r   r   r   rT   r	   r"   rG   r   rq   r   rD   )r   rN   sub_Conceptrb   r   prev_quest_idisCorrectAttemptr   r   r   r   r   	stmt_quesr   shuffled_optionsshuffled_correct_keystmt_subr   r   r*   rW   rX   s                         r]   adaptive_funcr  3  s   kk)$GD((<(KHH_-MHHWEHHY'Mxx	*XXf%N0
   	
 [[F )5.:T	"&!)+$^4%\\(,,7K JJNN;'JJ
 J


5
!CS_q(("37+Qw"37+m3
   	 }%++  E)##}4 ht{{}eeAh 
 ::i(00288:D*
   	 .F.* o&,,_-?-?=-PQHjj  *==?G-
   	 ,++,22<??gFXFX3XYLjj  .AACG*
   	 2MM7G7M7M7OP7Otq!A*7OP.77||
 
 
G  	"JJ!!	"N Qs   A5P Q
QP??Qc                  $   [         R                  " S5      n U (       d  [        SS5      $ U R                  S5      nU R                  S5      nU R                  S5      nU R                  S5      nU(       a  U(       d  [        SS	5      $ [        [        5      R                  [        R                  U:H  [        R                  [        U5      :H  [        R                  U:H  [        R                  S
:H  5      R                  [        R                  R                  5       5      R                  S5      n[        R                   R!                  U5      R#                  5       R%                  5       nU(       d  ['        SSS.5      S4$ [        [(        5      R                  [(        R*                  U:H  [(        R                  U:H  5      n[        R                   R!                  U5      R#                  5       R%                  5        Vs0 s H  nUR,                  U_M     n	n/ n
/ nU GHJ  nU	R                  UR.                  5      nU(       a  [1        S UR2                   5       5      n[1        S UR2                   5       5      nUR.                  UR4                  [7        UR8                  5      UR                  R;                  S5      S
UUUS:  a  [=        X-  S-  S5      OSS.UR>                  R;                  S5      S.nURA                  U5        M  UR.                  UR4                  [7        UR8                  5      UR                  R;                  S5      SSSS.nU
RA                  U5        GMM     X-   n['        S
S[7        U5      US.5      S4$ s  snf )zo
Get top 10 teacher assignments with attempt status and marks
Sorted: Not attempted first, then attempted ones
r   r    r`   r"   r%   r$   r#   zInvalid student datar!   Trn   Fz#No assignments found for your classr5   r8   c              3   D   #    U  H  oR                  S S5      v   M     g7f)r1   r   NrB   .0r*   s     r]   	<genexpr>*teacher_assignment_func.<locals>.<genexpr>  s     !_I^g++gq"9"9I^    c              3   D   #    U  H  oR                  S S5      v   M     g7f)r2   r   Nr  r  s     r]   r  r    s     !aK`++i";";K`r	  r   r   rc   rp   )r2   r1   
percentage)assignment_idr   r@   r   is_attemptedmarkssubmitted_atNattempt_now)r  r   r@   r   r  r  actionz(Teacher assignments fetched successfully)r6   r7   total_assignmentsassignmentsrA   )!r   rB   r   r   r   rE   r%   r$   strr#   is_verifiedr   r   descr   r   rF   rz   r{   r   r   r:   r(   r"   sumr;   r   rM   r   r   r   r  r   )r   r:   r%   r$   r#   stmt_assessmentsassessmentsstmt_resultsr   attempted_resultsnot_attempted	attemptedr9   r@   correct_answersassignment_infoassignments_datas                    r]   teacher_assignment_funcr!    s7   
 kk)$G7==T"JK(IKK Ekk)$G4c:: 	%&	",,	9"((CJ6"**g5"..$6	

 
(3388:	;	r  **$$%56>>@DDFK<
   	 56<<#..*<#--:L jj((6>>@DDFFF 	V#F   MI!
"&&z}}5!!_I^I^!__O!!a6K`K`!aaO ",&//#&z';';#<(33<<=PQ $.,YhklYl%)JS)PST"Urs
 !' 3 3 < <=P QO _- ",&//#&z';';#<(33<<=PQ %'O   1C "H %0= !12'	 
 	 _s    NN),flaskr   r   r   srcr   
src.modelsr   r   r	   r
   r   r   r   r   r   r   src.utils.responser   
sqlalchemyr   r   src.utils.randomr   r   src.utils.rankingsr   openair   envr   src.utils.promptr   r   r   r^   r   r   r   r   r   r   r  r!  rg   rl   r]   <module>r,     s    + + 	 	 	 ( - # 7   *		('
{|@FGT7t4IX)Xk\_rl   