Spaces:
Running
Running
from Ars.core import db | |
from bson import ObjectId | |
from fastapi import HTTPException | |
from typing import Optional, List | |
from motor.motor_asyncio import AsyncIOMotorDatabase | |
from Ars.objects import UserResilienceScoreCreate, UserResilienceScoreOut,BreakDownByDomainCreate,BreakDownByDomainOut,FlaggedRiskAreasCreate,FlaggedRiskAreasOut,BoostSuggestionsCreate,BoostSuggestionsOut,BoostSuggestionsUpdate,UserResilienceScoreUpdate,FlaggedRiskAreasUpdate,BreakDownByDomainUpdate | |
import pymongo | |
async def create_new_hashed_doc_entry(data: dict): | |
try: | |
# Attempt to insert the document, ensuring hashed_doc is unique due to the index | |
result = await db.resume_resilience_analysis.insert_one(document=data) | |
return {"inserted_id": result.inserted_id,"error":None} # Return the inserted ID | |
except pymongo.errors.DuplicateKeyError: | |
# Handle the case where a document with the same 'hashed_doc' already exists | |
return {"error": "Document with this 'hashed_doc' already exists"} | |
except Exception as e: | |
# Catch other exceptions (e.g., database connection issues) | |
return {"error": str(e)} | |
async def get_document_by_hashed_doc(hashed_doc: str): | |
try: | |
# Find the document using the hashed_doc field | |
document = await db.resume_resilience_analysis.find_one({"hashed_doc": hashed_doc}) | |
if document: | |
return document['resume'] | |
else: | |
return None | |
except Exception as e: | |
# Handle any other errors, like database issues | |
return {"error": str(e)} | |
async def get_document_by_hashed_doc_complete(hashed_doc: str): | |
try: | |
# Find the document using the hashed_doc field | |
document = await db.resume_resilience_analysis.find_one({"hashed_doc": hashed_doc}) | |
if document: | |
return document | |
else: | |
return None | |
except Exception as e: | |
# Handle any other errors, like database issues | |
return {"error": str(e)} | |
async def get_document_by_userId(userId: str): | |
try: | |
# Find the document using the hashed_doc field | |
document = await db.resume_resilience_analysis.find_one({"userId": userId}) | |
if document: | |
return document['resume'] | |
else: | |
return None | |
except Exception as e: | |
# Handle any other errors, like database issues | |
return {"error": str(e)} | |
async def create_user_resilience( data: UserResilienceScoreCreate) -> UserResilienceScoreOut: | |
""" | |
Create a new UserResilienceScore in the database. | |
Args: | |
db: The MongoDB database instance. | |
data: A Pydantic object containing the fields to create. | |
Returns: | |
The newly created object. | |
""" | |
result = await db.user_resilience.insert_one(data.model_dump()) | |
created = await db.user_resilience.find_one({"_id": result.inserted_id}) | |
out = UserResilienceScoreOut(**created) | |
return out | |
async def get_user_resilience( object_id: str) -> Optional[UserResilienceScoreOut]: | |
""" | |
Retrieve a UserResilienceScore by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to retrieve. | |
Returns: | |
An bject, or raises 404 if not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.user_resilience.find_one({"_id": ObjectId(object_id)}) | |
if result is None: | |
raise HTTPException(status_code=404, detail="Object not found") | |
out =UserResilienceScoreOut(**result) | |
return out | |
async def update_user_resilience( object_id: str, data: UserResilienceScoreUpdate) -> UserResilienceScoreOut: | |
""" | |
Update a UserResilienceScore by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to update. | |
data: A Pydantic object with the updated fields. | |
Returns: | |
The updated object dictionary. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
update_data = {k: v for k, v in data.dict().items() if v is not None} | |
result = await db.user_resilience.update_one( | |
{"_id": ObjectId(object_id)}, | |
{"$set": update_data} | |
) | |
if result.matched_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
updateresult =await db.user_resilience.find_one({"_id": ObjectId(object_id)}) | |
out = UserResilienceScoreOut(**updateresult) | |
return out | |
async def delete_user_resilience( object_id: str) -> dict: | |
""" | |
Delete a UserResilienceScore by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to delete. | |
Returns: | |
A confirmation message or raises 404 if object is not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.user_resilience.delete_one({"_id": ObjectId(object_id)}) | |
if result.deleted_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
return {"message": "Object deleted successfully"} | |
async def create_breakdown_by_domain( data: BreakDownByDomainCreate) -> BreakDownByDomainOut: | |
""" | |
Create a new BreakDownByDomain in the database. | |
Args: | |
db: The MongoDB database instance. | |
data: A Pydantic object containing the fields to create. | |
Returns: | |
A dictionary representing the newly created object. | |
""" | |
result = await db.breakdown_by_domain.insert_one(data.dict()) | |
created = await db.breakdown_by_domain.find_one({"_id": result.inserted_id}) | |
out = BreakDownByDomainOut(**created) | |
return out | |
async def get_breakdown_by_domain( object_id: str) -> Optional[ BreakDownByDomainOut]: | |
""" | |
Retrieve a BreakDownByDomain by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to retrieve. | |
Returns: | |
A dictionary of the found object, or raises 404 if not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.breakdown_by_domain.find_one({"_id": ObjectId(object_id)}) | |
if result is None: | |
raise HTTPException(status_code=404, detail="Object not found") | |
out = BreakDownByDomainOut(**result) | |
return out | |
async def update_breakdown_by_domain( object_id: str, data: BreakDownByDomainUpdate) -> BreakDownByDomainOut: | |
""" | |
Update a BreakDownByDomain by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to update. | |
data: A Pydantic object with the updated fields. | |
Returns: | |
The updated object dictionary. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
update_data = {k: v for k, v in data.dict().items() if v is not None} | |
result = await db.breakdown_by_domain.update_one( | |
{"_id": ObjectId(object_id)}, | |
{"$set": update_data} | |
) | |
if result.matched_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
updateresult =await db. breakdown_by_domain.find_one({"_id": ObjectId(object_id)}) | |
out = BreakDownByDomainOut(**updateresult) | |
return out | |
async def delete_breakdown_by_domain( object_id: str) -> dict: | |
""" | |
Delete a BreakDownByDomain by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to delete. | |
Returns: | |
A confirmation message or raises 404 if object is not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.breakdown_by_domain.delete_one({"_id": ObjectId(object_id)}) | |
if result.deleted_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
return {"message": "Object deleted successfully"} | |
async def create_flagged_risk_areas( data: FlaggedRiskAreasCreate) -> FlaggedRiskAreasOut: | |
""" | |
Create a new BreakDownByDomain in the database. | |
Args: | |
db: The MongoDB database instance. | |
data: A Pydantic object containing the fields to create. | |
Returns: | |
A dictionary representing the newly created object. | |
""" | |
result = await db.flagged_risk_areas.insert_one(data.dict()) | |
created = await db.flagged_risk_areas.find_one({"_id": result.inserted_id}) | |
out = FlaggedRiskAreasOut(**created) | |
return out | |
async def get_flagged_risk_areas( object_id: str) -> Optional[FlaggedRiskAreasOut]: | |
""" | |
Retrieve a FlaggedRiskAreas by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to retrieve. | |
Returns: | |
A dictionary of the found object, or raises 404 if not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.flagged_risk_areas.find_one({"_id": ObjectId(object_id)}) | |
if result is None: | |
raise HTTPException(status_code=404, detail="Object not found") | |
out =FlaggedRiskAreasOut(**result) | |
return out | |
async def update_flagged_risk_areas( object_id: str, data: FlaggedRiskAreasUpdate) -> FlaggedRiskAreasOut: | |
""" | |
Update a FlaggedRiskAreas by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to update. | |
data: A Pydantic object with the updated fields. | |
Returns: | |
The updated object dictionary. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
update_data = {k: v for k, v in data.dict().items() if v is not None} | |
result = await db.flagged_risk_areas.update_one( | |
{"_id": ObjectId(object_id)}, | |
{"$set": update_data} | |
) | |
if result.matched_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
updateresult =await db.flagged_risk_areas.find_one({"_id": ObjectId(object_id)}) | |
out = FlaggedRiskAreasOut(**updateresult) | |
return out | |
async def delete_flagged_risk_areas( object_id: str) -> dict: | |
""" | |
Delete a FlaggedRiskAreas by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to delete. | |
Returns: | |
A confirmation message or raises 404 if object is not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.flagged_risk_areas.delete_one({"_id": ObjectId(object_id)}) | |
if result.deleted_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
return {"message": "Object deleted successfully"} | |
async def create_boost_suggestions( data: BoostSuggestionsCreate) -> BoostSuggestionsOut: | |
""" | |
Create a new BoostSuggestions in the database. | |
Args: | |
db: The MongoDB database instance. | |
data: A Pydantic object containing the fields to create. | |
Returns: | |
A dictionary representing the newly created object. | |
""" | |
result = await db.boost_suggestions.insert_one(data.dict()) | |
created = await db.boost_suggestions.find_one({"_id": result.inserted_id}) | |
out = BoostSuggestionsOut(**created) | |
return out | |
async def get_boost_suggestions( object_id: str) -> Optional[BoostSuggestionsOut]: | |
""" | |
Retrieve a BoostSuggestions by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to retrieve. | |
Returns: | |
A dictionary of the found object, or raises 404 if not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.boost_suggestions.find_one({"_id": ObjectId(object_id)}) | |
if result is None: | |
raise HTTPException(status_code=404, detail="Object not found") | |
out =BoostSuggestionsOut(**result) | |
return out | |
async def update_boost_suggestions( object_id: str, data: BoostSuggestionsUpdate) -> BoostSuggestionsOut: | |
""" | |
Update a BoostSuggestions by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to update. | |
data: A Pydantic object with the updated fields. | |
Returns: | |
The updated object dictionary. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
update_data = {k: v for k, v in data.dict().items() if v is not None} | |
result = await db.boost_suggestions.update_one( | |
{"_id": ObjectId(object_id)}, | |
{"$set": update_data} | |
) | |
if result.matched_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
updateresult =await db.boost_suggestions.find_one({"_id": ObjectId(object_id)}) | |
out = BoostSuggestionsOut(**updateresult) | |
return out | |
async def delete_boost_suggestions( object_id: str) -> dict: | |
""" | |
Delete a BoostSuggestions by its ID. | |
Args: | |
db: The MongoDB database instance. | |
object_id: The ID of the object to delete. | |
Returns: | |
A confirmation message or raises 404 if object is not found. | |
""" | |
if not ObjectId.is_valid(object_id): | |
raise HTTPException(status_code=400, detail="Invalid ID format") | |
result = await db.boost_suggestions.delete_one({"_id": ObjectId(object_id)}) | |
if result.deleted_count == 0: | |
raise HTTPException(status_code=404, detail="Object not found") | |
return {"message": "Object deleted successfully"} | |