diff --git a/endpoints/music.post.py b/endpoints/music.post.py new file mode 100644 index 0000000..8af6e07 --- /dev/null +++ b/endpoints/music.post.py @@ -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. \ No newline at end of file