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 dbb42e8..0000000 Binary files a/database/calendar.db and /dev/null differ 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,