File size: 3,445 Bytes
f44e85b
 
 
b6ccbb2
f44e85b
4686d63
 
f44e85b
b6ccbb2
f44e85b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4686d63
f44e85b
4686d63
 
 
 
 
 
 
 
 
b6ccbb2
4686d63
 
 
 
f44e85b
d971f44
 
 
 
446c76e
 
88cdfa2
4686d63
 
 
5919721
4686d63
f44e85b
 
4686d63
f44e85b
ec7f7d1
b6ccbb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4686d63
 
 
 
 
 
 
 
 
 
 
 
f44e85b
4686d63
f44e85b
 
 
 
 
b6ccbb2
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
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from motor.motor_asyncio import AsyncIOMotorClient
from typing import List
from fastapi.middleware.cors import CORSMiddleware
import os

# MongoDB connection URI
MONGO_URI = os.getenv("MONGO_URI")

# Initialize FastAPI app
app = FastAPI()

# Allow CORS for all origins
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Allows all origins, change this to more specific if needed
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# MongoDB client
client = AsyncIOMotorClient(MONGO_URI)
db = client.disease  # MongoDB database
disease_collection = db.diseases  # MongoDB collection

# Pydantic model to represent the Disease schema
class DiseaseDesc(BaseModel):
    diseaseName: str
    symptoms: str
    diseaseCauses: str

class DiseaseRemedy(BaseModel):
    title: str
    diseaseRemedyShortDesc: str
    diseaseRemedy: str

class Disease(BaseModel):
    key: str
    plantName: str
    botanicalName: str
    diseaseDesc: DiseaseDesc
    diseaseRemedyList: List[DiseaseRemedy]

# Root route to show a welcome message
@app.get("/")
def welcome():
    return {"message": "Welcome to the Disease Information API! Visit /docs for API documentation."}
@app.get("/check/{plant_name}")
async def get_disease(plant_name: str):
    return {"plantName":plant_name}
# API endpoint to fetch disease details by plant name
@app.get("/disease/{plant_name}", response_model=Disease)
async def get_disease(plant_name: str):
    disease = await disease_collection.find_one({"key": plant_name})

    if disease is None:
        raise HTTPException(status_code=404, detail="Disease not found")

    disease_data = Disease(
        key=disease["key"],
        plantName=disease["plantName"],
        botanicalName=disease["botanicalName"],
        diseaseDesc=DiseaseDesc(
            diseaseName=disease["diseaseDesc"]["diseaseName"],
            symptoms=disease["diseaseDesc"]["symptoms"],
            diseaseCauses=disease["diseaseDesc"]["diseaseCauses"]
        ),
        diseaseRemedyList=[DiseaseRemedy(
            title=remedy["title"],
            diseaseRemedyShortDesc=remedy["diseaseRemedyShortDesc"],
            diseaseRemedy=remedy["diseaseRemedy"]
        ) for remedy in disease["diseaseRemedyList"]]
    )

    return disease_data

# New endpoint to fetch disease details by key
@app.get("/kotlinback/{key}", response_model=Disease)
async def get_disease_by_key(key: str):
    disease = await disease_collection.find_one({"key": key})

    if disease is None:
        raise HTTPException(status_code=404, detail="Disease not found")

    disease_data = Disease(
        key=disease["key"],
        plantName=disease["plantName"],
        botanicalName=disease["botanicalName"],
        diseaseDesc=DiseaseDesc(
            diseaseName=disease["diseaseDesc"]["diseaseName"],
            symptoms=disease["diseaseDesc"]["symptoms"],
            diseaseCauses=disease["diseaseDesc"]["diseaseCauses"]
        ),
        diseaseRemedyList=[DiseaseRemedy(
            title=remedy["title"],
            diseaseRemedyShortDesc=remedy["diseaseRemedyShortDesc"],
            diseaseRemedy=remedy["diseaseRemedy"]
        ) for remedy in disease["diseaseRemedyList"]]
    )

    return disease_data

# Run the FastAPI server using Uvicorn
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=5000)