import motor.motor_asyncio import os from bson.objectid import ObjectId MONGO_DETAILS = os.getenv("MONGO_DETAILS") client = motor.motor_asyncio.AsyncIOMotorClient(MONGO_DETAILS) database = client.fastapi_students students_collection = database.get_collection("students") # helpers def student_helper(student) -> dict: return { "id": str(student["_id"]), "name": student["name"], "email": student["email"], "password": student["password"], "year": student["year"], "branch": student["branch"], "division": student["division"], "pin": student["pin"], "gpa": student["gpa"], "phone": student["phone"], "address": student["address"], } # Retrieve all students present in the database async def get_all(): students = [] async for student in students_collection.find(): students.append(student_helper(student)) return students async def add(student_data: dict) -> dict: student = await students_collection.insert_one(student_data) new_student = await students_collection.find_one({"_id": student.inserted_id}) return student_helper(new_student) async def get(PIN: str) -> dict: student = await students_collection.find_one({"pin": PIN}) if student: return student_helper(student) async def update(PIN: str, updated_data: dict) -> dict: if not updated_data: return False student = await students_collection.find_one({"pin": PIN}) if student: students_collection.update_one({"pin": PIN}, {"$set": updated_data}) return True return False async def delete(PIN: str): student = await students_collection.find_one({"pin": PIN}) if student: await students_collection.delete_one({"pin": PIN}) return True return False