File size: 4,032 Bytes
27ff250
 
 
 
bbd997e
27ff250
bbd997e
 
27ff250
 
 
 
bbd997e
27ff250
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbd997e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
from io import BytesIO
from dotenv import load_dotenv
import os
from gamification.objects import SimpleIndividualUserLevel
from controller.utils import *
from fastapi import FastAPI, File, HTTPException, Header, UploadFile,status
from controller.tokenManagement import *
from controller.jwtcoding import *
from fastapi.responses import JSONResponse
import docx
import fitz
from gamification.routes import gamification
from controller.scraper import scrapeCourse
import asyncio
from google import genai 
from typing import Optional,List
from pydantic import BaseModel
import re
from bson.json_util import dumps
import threading
import concurrent.futures
from gamification.pointLogic import get_all_simple_points_func,get_dream_job
from pydantic import BaseModel
from datetime import datetime
from bson import ObjectId
import os 
import re
from urllib.parse import urlparse

from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=5)


load_dotenv()

CX = os.getenv("SEARCH_ENGINE_ID")
API_KEY = os.getenv("GOOGLE_API_KEY")
PINECONE_API_KEY=os.getenv("PINECONE_API_KEY")
GEMINI_API_KEY=os.getenv("GEMINI_API_KEY")
MONGO_URI=os.getenv("MONGO_URI")

class UserBody(BaseModel):
    firstName: Optional[str] = None
    lastName: Optional[str] = None
    email:str
    password:str
    
class AiAnalysis(BaseModel):
    query:str
    
class Token(BaseModel):
    refreshToken:str


class RecommendedCourse(BaseModel):
    courseTitle:Optional[str]=None
    courseLink:Optional[str]=None
    duration:Optional[str]=None
    courseLevel:Optional[str]=None
    interimRoleBenefit:Optional[str]=None
    dreamRoleBenefit:Optional[str]=None
    courseDescription:Optional[str]=None
    courseProvider:Optional[str]=None
class UserCourse(BaseModel):
    employmentStatus:str
    interimRole:bool
    interimRoleOptions:Optional[List[str]]=None
    dreamRole:str
    motivation:str
    learningPreference:str
    timeCommitmentPerDay:str
    challenges:list
    timeframeToAchieveDreamRole:str
    recommendedCourses: Optional[List[RecommendedCourse]]=None
    
class LeaderBoardRanking(BaseModel):
    userId:str
    firstName:str
    lastName:str
    totalpoints:float
    lastUpdated:datetime
    careerPath:str
    class Config:
        json_encoder ={
        ObjectId:str
        }
    
    

class CourseRecommendation(BaseModel):
    courseName: str
    completionTime: str






def extract_provider(url):
    # Parse the URL
    parsed_url = urlparse(url)
    
    # Extract domain and split it to get the main part
    domain = parsed_url.netloc.split('.')[1]
    
    # Extract course name
    match = re.search(r'/course/([^/]+)/', url)
    course_name = match.group(1) if match else "Not found"
    
    return domain

def get_course_func(query):
# Example search query
    results = google_search(query, API_KEY, CX)
    content=[]
   
    if results:
        for item in results.get('items', []):
            title = item.get('title')
            link = item.get('link')
            snippet = item.get('snippet')
            provider = extract_provider(link)

            content_structure={}
            content_structure["courseTitle"]=title
            content_structure["courseLink"]=link
            content_structure["courseSnippet"]= snippet
            content_structure["scrapedCourseDetails"]= scrapeCourse(url=link)
            content.append(content_structure)

    return content
            

def extract_course_info(text: str) -> CourseRecommendation:
    # Example regex patterns – adjust these as needed based on the response format.
    course_pattern =r'"coursename":\s*"([^"]+)"'
    time_pattern = r"(\d+\s*-\s*\d+\s*months)"

    course_match = re.search(course_pattern, text)
    time_match = re.search(time_pattern, text)

    coursename = course_match.group(1).strip() if course_match else "Unknown"
    completiontime = time_match.group(0).strip() if time_match else "Unknown"

    return CourseRecommendation(courseName=coursename, completionTime=completiontime)