diff --git a/endpoints/states.post.py b/endpoints/states.post.py new file mode 100644 index 0000000..cc7616f --- /dev/null +++ b/endpoints/states.post.py @@ -0,0 +1,59 @@ +Sure, here's an example of a FastAPI endpoint that saves states in France to the database using SQLAlchemy and Pydantic: + +```python +from typing import List +from fastapi import APIRouter, Depends +from sqlalchemy.orm import Session +from database import get_db +from models import State +from schemas import StateCreate, StateResponse + +router = APIRouter() + +@router.post("/states", response_model=List[StateResponse]) +def create_states(states: List[StateCreate], db: Session = Depends(get_db)): + db_states = [State(name=state.name, country="France") for state in states] + db.add_all(db_states) + db.commit() + return db_states + +# models.py +from sqlalchemy import Column, Integer, String +from database import Base + +from app.api.models.states_model import * +from app.api.schemas.states_schema import * +class StateCreate(StateBase): + pass + +class StateResponse(StateBase): + id: int + country: str + + class Config: + orm_mode = True +``` + +Here's a breakdown of the code: + +1. We import the necessary modules, including `typing`, `fastapi`, `sqlalchemy.orm`, our database module, models, and Pydantic schemas. +2. We create a new instance of `APIRouter` to define our endpoint routes. +3. We define the `/states` endpoint with the `POST` method using the `@router.post` decorator. The `response_model` parameter specifies that the response should be a list of `StateResponse` objects. +4. The `create_states` function accepts a list of `StateCreate` objects as input and a database session (`db`) obtained from the `get_db` dependency. +5. Inside the function, we create a list of `State` model instances from the input `StateCreate` objects, setting the `country` attribute to "France" for each state. +6. We add all the `State` instances to the database session using `db.add_all`, and then commit the changes using `db.commit()`. +7. Finally, we return the list of created `State` instances as `StateResponse` objects. +8. The `State` model is defined in `models.py`, with columns for `id`, `name`, and `country`. +9. The Pydantic schemas `StateBase`, `StateCreate`, and `StateResponse` are defined in `schemas.py`. `StateCreate` inherits from `StateBase` and is used for input validation. `StateResponse` inherits from `StateBase` and includes the `id` and `country` fields, with the `orm_mode` set to `True` to allow Pydantic to automatically convert SQLAlchemy model instances to Pydantic objects. + +To use this endpoint, you would send a `POST` request to `/states` with a JSON payload containing a list of state names: + +```json +[ + {"name": "Île-de-France"}, + {"name": "Normandie"}, + {"name": "Bretagne"} +] +``` + +The endpoint will create new `State` instances in the database with the provided names and the country set to "France". The response will be a list of `StateResponse` objects representing the created states, including their `id` values. \ No newline at end of file