|
| 1 | +import re |
| 2 | +from fastapi import FastAPI, HTTPException |
| 3 | +from fastapi.security import OAuth2PasswordBearer |
| 4 | +from typing import Annotated, List, Dict, Optional |
| 5 | +from uuid import UUID |
| 6 | +from models import ( |
| 7 | + User, UserCreate, |
| 8 | + Dataset, DatasetCreate, |
| 9 | + Model, ModelCreate, |
| 10 | + Experiment, ExperimentCreate, |
| 11 | + Artifact |
| 12 | +) |
| 13 | +from database import supabase |
| 14 | +from utils.supabase import get_supabase_client |
| 15 | +from utils.mongodb import get_mongo_collection |
| 16 | +from routes.artifacts import router as artifacts_router |
| 17 | + |
| 18 | +app = FastAPI() |
| 19 | + |
| 20 | +# CRUD for Users |
| 21 | +@app.port("/users", response_model=User) |
| 22 | +async def create_user(user: UserCreate): |
| 23 | + try: |
| 24 | + response = supabase.table("users").insert(user.dict(exclude_unset=True)).execute() |
| 25 | + return response.data[0] |
| 26 | + except Exception as e: |
| 27 | + raise HTTPException(status_code=400, detail=str(e)) |
| 28 | + |
| 29 | +@app.get("/users", response_model=List[User]): |
| 30 | +async def list_users(): |
| 31 | + response = supabase.table("users").select("*").execute() |
| 32 | + return response.data |
| 33 | + |
| 34 | +@app.get("/users/{user_id}", response_model=User) |
| 35 | +async def get_user(user_id: UUID): |
| 36 | + response = supabase.table("users").select("*").eq("id", str(user_id)).execute() |
| 37 | + if not response.data: |
| 38 | + raise HTTPException(status_code=404, detail="User not found") |
| 39 | + return response.data[0] |
| 40 | + |
| 41 | +@app.put("/users/{user_id}", response_model=User) |
| 42 | +async def update_user(user_id: UUID, user: UserCreate): |
| 43 | + response = supabase.table("users").update(user.dict(exclude_unset=True)).eq("id", str(user_id)).execute() |
| 44 | + if not response.data: |
| 45 | + raise HTTPException(status_code=404, detail="User not found") |
| 46 | + return response.data[0] |
| 47 | + |
| 48 | +@app.delete("/users/{user_id}") |
| 49 | +async def delete_user(user_id: UUID): |
| 50 | + response = supabase.table("users").delete().eq("id", str(user_id)).execute() |
| 51 | + if not response.data: |
| 52 | + raise HTTPException(status_code=404, detail="User not found") |
| 53 | + return {"message": "User deleted"} |
| 54 | + |
| 55 | +# CRUD for Datasets |
| 56 | +@app.post("/datasets", response_model=Dataset) |
| 57 | +async def create_dataset(dataset: DatasetCreate): |
| 58 | + try: |
| 59 | + response = supabase.table("datasets").insert(dataset.dict(exclude_unset=True)).execute() |
| 60 | + return response.data[0] |
| 61 | + except Exception as e: |
| 62 | + raise HTTPException(status_code=400, detail=str(e)) |
| 63 | + |
| 64 | +@app.get("/datasets", response_model=List[Dataset]) |
| 65 | +async def list_datasets(): |
| 66 | + response = supabase.table("datasets").select("*").execute() |
| 67 | + return response.data |
| 68 | + |
| 69 | +# CRUD for Models |
| 70 | +@app.post("/models", response_model=Model) |
| 71 | +async def create_model(model: ModelCreate): |
| 72 | + try: |
| 73 | + response = supabase.table("models").insert(model.dict(exclude_unset=True)).execute() |
| 74 | + return response.data[0] |
| 75 | + except Exception as e: |
| 76 | + raise HTTPException(status_code=400, detail=str(e)) |
| 77 | + |
| 78 | +@app.get("/models", response_model=List[Model]) |
| 79 | +async def list_models(): |
| 80 | + response = supabase.table("models").select("*").execute() |
| 81 | + return response.data |
| 82 | + |
| 83 | +# CRUD for Experiments |
| 84 | +@app.post("/experiments", response_model=Experiment) |
| 85 | +async def create_experiment(experiment: ExperimentCreate): |
| 86 | + try: |
| 87 | + response = supabase.table("experiments").insert(experiment.dict(exclude_unset=True)).execute() |
| 88 | + return response.data[0] |
| 89 | + except Exception as e: |
| 90 | + raise HTTPException(status_code=400, detail=str(e)) |
| 91 | + |
| 92 | +@app.get("/experiments", response_model=List[Experiment]) |
| 93 | +async def list_experiments(): |
| 94 | + response = supabase.table("experiments").select("*").execute() |
| 95 | + return response.data |
| 96 | + |
| 97 | +# Seed Dummy Data |
| 98 | +@app.post("/seed-data") |
| 99 | +async def seed_data(): |
| 100 | + try: |
| 101 | + # Insert users |
| 102 | + users = generate_dummy_users(3) |
| 103 | + user_response = supabase.table("users").insert(users).execute() |
| 104 | + user_ids = [user["id"] for user in user_response.data] |
| 105 | + |
| 106 | + # Insert datasets |
| 107 | + datasets = generate_dummy_datasets(3) |
| 108 | + dataset_response = supabase.table("datasets").insert(datasets).execute() |
| 109 | + dataset_ids = [dataset["id"] for dataset in dataset_response.data] |
| 110 | + |
| 111 | + # Insert models |
| 112 | + models = generate_dummy_models(3, dataset_ids, user_ids) |
| 113 | + model_response = supabase.table("models").insert(models).execute() |
| 114 | + model_ids = [model["id"] for model in model_response.data] |
| 115 | + |
| 116 | + # Insert experiments |
| 117 | + experiments = generate_dummy_experiments(3, model_ids, user_ids) |
| 118 | + supabase.table("experiments").insert(experiments).execute() |
| 119 | + |
| 120 | + return {"message": "Dummy data inserted successfully"} |
| 121 | + except Exception as e: |
| 122 | + raise HTTPException(status_code=400, detail=str(e)) |
0 commit comments