From d2bd05c660b1276beb7b44e9c38c4d739cfe550f Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 4 Aug 2026 10:11:46 +0200 Subject: [PATCH] rm db / updates main.py rooms.py --- backend/main.py | 36 +++++++++++++++- backend/rooms.py | 96 ++++++++++++++++++++++++++++++++++++++++++- database/calendar.db | Bin 49152 -> 0 bytes database/db_init.py | 2 +- 4 files changed, 129 insertions(+), 5 deletions(-) delete mode 100644 database/calendar.db diff --git a/backend/main.py b/backend/main.py index d1d8e9b..4802143 100644 --- a/backend/main.py +++ b/backend/main.py @@ -3,7 +3,7 @@ from pydantic import BaseModel from database import fetch_all, fetch_one from auth import create_user, verify_user, create_token, get_current_user -from rooms import create_room, search_room, accept_room +from rooms import create_room, search_room, accept_room, get_rooms, delete_room, get_room from permissions import has_role from events import create_event, get_user_events, check_event_threshold @@ -18,6 +18,9 @@ class Login(BaseModel): username: str password: str +class GetRooms(BaseModel): + user_id: str + class UserCreate(BaseModel): username: str @@ -191,7 +194,7 @@ def api_create_room( except sqlite3.IntegrityError: raise HTTPException( status_code=409, - detail="invite_code already exists" + detail="invite_code or roomname already exists" ) return { @@ -356,6 +359,35 @@ def respond_event( "going": count_confirmations(event_id) } +@app.get("/part_of_rooms") +def get_the_rooms( + user_id: int = Depends(get_current_user) +): + rooms = get_rooms(user_id) + + return { + "rooms": [dict(room) for room in rooms] + } + +@app.get("/rooms/{room_id}") +def api_get_room( + room_id: int, + user_id: int = Depends(get_current_user) +): + + room = get_room( + room_id, + user_id + ) + + if room is None: + raise HTTPException( + status_code=404, + detail="room not found or no permission" + ) + + return room + print() print("YOU CAN NOT START THE SERVER WITH PYTHON") print("start with:") diff --git a/backend/rooms.py b/backend/rooms.py index c2b4933..868a98d 100644 --- a/backend/rooms.py +++ b/backend/rooms.py @@ -1,6 +1,6 @@ from fastapi import FastAPI from pydantic import BaseModel -from database import execute, fetch_one +from database import execute, fetch_one, fetch_all DEFAULT_ROLE = "member" @@ -109,4 +109,96 @@ def accept_room(user_id, invite_code): return { "room_id": room_id, "member_id": member_id - } \ No newline at end of file + } + +def get_rooms(user_id): + query = """ + SELECT + rooms.id, + rooms.name, + rooms.owner_id, + rooms.invite_code, + room_members.role + FROM rooms + JOIN room_members + ON rooms.id = room_members.room_id + WHERE room_members.user_id = ? + """ + + rooms = fetch_all( + query, + ( + user_id, + ) + ) + + return rooms + +def delete_room(room_id): + execute( + """ + DELETE FROM rooms + WHERE id = ? + """, + (room_id,) + ) + + return {"status":"deleted"} + +def get_room(room_id, user_id): + + room = fetch_one( + """ + SELECT + rooms.id, + rooms.name, + rooms.owner_id, + room_members.role + FROM rooms + JOIN room_members + ON rooms.id = room_members.room_id + WHERE rooms.id = ? + AND room_members.user_id = ? + """, + ( + room_id, + user_id + ) + ) + + if room is None: + return None + + + members = fetch_all( + """ + SELECT + users.id, + users.username, + room_members.role + FROM room_members + JOIN users + ON users.id = room_members.user_id + WHERE room_members.room_id = ? + """, + (room_id,) + ) + + + events = fetch_all( + """ + SELECT * + FROM events + WHERE room_id = ? + ORDER BY start_time + """, + (room_id,) + ) + + + return { + "room": dict(room), + "members": [dict(member) for member in members], + "events": [dict(event) for event in events] + } + \ No newline at end of file diff --git a/database/calendar.db b/database/calendar.db deleted file mode 100644 index dbb42e86c031d408595192862ef0768ea431f649..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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 diff --git a/database/db_init.py b/database/db_init.py index 1aa6652..2622578 100644 --- a/database/db_init.py +++ b/database/db_init.py @@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS users ( cur.execute(""" CREATE TABLE IF NOT EXISTS rooms ( id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, + name TEXT NOT NULL UNIQUE, owner_id INTEGER NOT NULL, invite_code TEXT NOT NULL UNIQUE,