Update code in endpoints/music.post.py
This commit is contained in:
parent
ed5420f53a
commit
f5504157b7
69
endpoints/music.post.py
Normal file
69
endpoints/music.post.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
Sure, here's an example of a FastAPI endpoint that adds music and artist to the database using SQLAlchemy models and Pydantic schemas:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from typing import List
|
||||||
|
from fastapi import APIRouter, Depends
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from database import get_db
|
||||||
|
from models import Music, Artist
|
||||||
|
from schemas import MusicCreate, ArtistCreate
|
||||||
|
|
||||||
|
from app.api.models.music_model import *
|
||||||
|
from app.api.schemas.music_schema import *
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
# SQLAlchemy models
|
||||||
|
|
||||||
|
@router.post("/music", response_model=List[MusicCreate])
|
||||||
|
def create_music(musics: List[MusicCreate], artists: List[ArtistCreate], db: Session = Depends(get_db)):
|
||||||
|
db_artists = [Artist(name=artist.name) for artist in artists]
|
||||||
|
db.add_all(db_artists)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_artists)
|
||||||
|
|
||||||
|
db_musics = [Music(title=music.title, artist_id=db_artists[music.artist_id - 1].id) for music in musics]
|
||||||
|
db.add_all(db_musics)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_musics)
|
||||||
|
|
||||||
|
return [MusicCreate(title=music.title, artist_id=music.artist_id) for music in db_musics]
|
||||||
|
```
|
||||||
|
|
||||||
|
Here's a breakdown of the code:
|
||||||
|
|
||||||
|
1. We import the necessary modules and dependencies.
|
||||||
|
2. We define the `Music` and `Artist` SQLAlchemy models with a one-to-many relationship.
|
||||||
|
3. We define the `MusicCreate` and `ArtistCreate` Pydantic schemas for data validation and serialization.
|
||||||
|
4. We create a FastAPI router with a `POST` endpoint at `/music`.
|
||||||
|
5. The `create_music` function takes two lists of `MusicCreate` and `ArtistCreate` objects, as well as a database session (`db`).
|
||||||
|
6. We create `Artist` objects from the `ArtistCreate` objects and add them to the database.
|
||||||
|
7. We create `Music` objects from the `MusicCreate` objects, associating them with the appropriate `Artist` objects based on the `artist_id`.
|
||||||
|
8. We add the `Music` objects to the database and commit the changes.
|
||||||
|
9. We return a list of `MusicCreate` objects representing the newly created music entries.
|
||||||
|
|
||||||
|
To use this endpoint, you would send a POST request to `/music` with a JSON payload containing lists of `MusicCreate` and `ArtistCreate` objects, for example:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"musics": [
|
||||||
|
{
|
||||||
|
"title": "Song 1",
|
||||||
|
"artist_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Song 2",
|
||||||
|
"artist_id": 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"artists": [
|
||||||
|
{
|
||||||
|
"name": "Artist 1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Artist 2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This would create two new artists and two new music entries associated with those artists in the database.
|
Loading…
x
Reference in New Issue
Block a user