Crea i esborra playlists quan es creen i esborren sessions

This commit is contained in:
marc
2025-12-20 21:20:58 +01:00
parent 43706af7c4
commit 5428d49e89
5 changed files with 1241 additions and 6 deletions

24
AGENTS.md Normal file
View File

@@ -0,0 +1,24 @@
# Development Commands
## Build/Lint/Test
- **Run development server**: `JWT_SECRET=12345 uvicorn folkugat_web.main:app --reload --reload-include "*.html" --host 0.0.0.0`
- **Build for production**: `./build.sh`
## Code Style Guidelines
### Python
- **Type hints**: Use strict typing with `from typing import` and custom types from `folkugat_web.typing`
- **Imports**: Standard library first, third-party, then local imports. Use absolute imports for local modules.
- **Naming**: snake_case for variables/functions, PascalCase for classes, UPPER_CASE for constants
- **Error handling**: Use Result[ResultT, ErrorT] pattern from utils for service functions
- **Async**: Use async/await for I/O operations, FastAPI endpoints are async
### Frontend
- **CSS**: Use Tailwind CSS classes with custom brown/beige theme
- **Templates**: Jinja2 templates in folkugat_web/assets/templates/
- **Static files**: Organized in folkugat_web/assets/static/
### Architecture
- **Structure**: api/routes/, config/, dal/, fragments/, model/, services/
- **Database**: SQLite with custom DAL layer in dal/sql/
- **Authentication**: JWT-based with cookie storage

6
flake.lock generated
View File

@@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1753432016, "lastModified": 1766125104,
"narHash": "sha256-cnL5WWn/xkZoyH/03NNUS7QgW5vI7D1i74g48qplCvg=", "narHash": "sha256-l/YGrEpLromL4viUo5GmFH3K5M1j0Mb9O+LiaeCPWEM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6027c30c8e9810896b92429f0092f624f7b1aace", "rev": "7d853e518814cca2a657b72eeba67ae20ebf7059",
"type": "github" "type": "github"
}, },
"original": { "original": {

File diff suppressed because one or more lines are too long

View File

@@ -31,7 +31,7 @@ def delete_playlist(
DELETE FROM playlists DELETE FROM playlists
WHERE id = :id WHERE id = :id
""" """
data = dict(playlist_id=playlist_id) data = dict(id=playlist_id)
with get_connection(con) as con: with get_connection(con) as con:
cur = con.cursor() cur = con.cursor()
_ = cur.execute(query, data) _ = cur.execute(query, data)

View File

@@ -4,6 +4,7 @@ from datetime import date as Date
from folkugat_web.config import date as config from folkugat_web.config import date as config
from folkugat_web.dal.sql import Connection, get_connection from folkugat_web.dal.sql import Connection, get_connection
from folkugat_web.dal.sql.playlists import write as playlists_write
from folkugat_web.dal.sql.sessions import playlists as session_playlists from folkugat_web.dal.sql.sessions import playlists as session_playlists
from folkugat_web.dal.sql.sessions import query, write from folkugat_web.dal.sql.sessions import query, write
from folkugat_web.model import sessions as model from folkugat_web.model import sessions as model
@@ -66,7 +67,10 @@ def get_session(session_id: int) -> model.Session | None:
def insert_session(session: model.Session): def insert_session(session: model.Session):
return write.insert_session(session) created_session = write.insert_session(session)
if created_session.id is not None:
_create_session_playlists(created_session.id)
return created_session
def set_session(session: model.Session): def set_session(session: model.Session):
@@ -74,6 +78,7 @@ def set_session(session: model.Session):
def delete_session(session_id: int): def delete_session(session_id: int):
_delete_session_playlists(session_id)
write.delete_session_by_id(session_id) write.delete_session_by_id(session_id)
@@ -160,3 +165,56 @@ def get_commonly_played_temes(
tema_id: int, tema_id: int,
) -> list[temes_model.CommonlyPlayedTema]: ) -> list[temes_model.CommonlyPlayedTema]:
return session_playlists.get_commonly_played_tunes(tema_id=tema_id) return session_playlists.get_commonly_played_tunes(tema_id=tema_id)
def _create_session_playlists(session_id: int):
with get_connection() as con:
setlist_playlist_id = playlists_write.create_playlist(con=con)
slowjam_playlist_id = playlists_write.create_playlist(con=con)
session_playlists.insert_playlist(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SETLIST,
playlist_id=setlist_playlist_id,
con=con,
)
session_playlists.insert_playlist(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SLOWJAM,
playlist_id=slowjam_playlist_id,
con=con,
)
def _delete_session_playlists(session_id: int):
with get_connection() as con:
setlist_playlist_id = session_playlists.get_playlist_id(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SETLIST,
con=con
)
slowjam_playlist_id = session_playlists.get_playlist_id(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SLOWJAM,
con=con
)
if setlist_playlist_id is not None:
playlists_write.delete_playlist(
playlist_id=setlist_playlist_id,
con=con,
)
session_playlists.delete_playlist(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SETLIST,
con=con
)
if slowjam_playlist_id is not None:
playlists_write.delete_playlist(
playlist_id=slowjam_playlist_id,
con=con,
)
session_playlists.delete_playlist(
session_id=session_id,
playlist_type=PlaylistType.SESSION_SLOWJAM,
con=con
)