From 2490a34ad06ec3970b15a9b0e9f604691219392e Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 3 Aug 2026 15:28:09 +0200 Subject: [PATCH] update rooms.py/main.py --- backend/main.py | 71 +++++++++++++++++++++++++++++++++- backend/rooms.py | 88 +++++++++++++++++++++++++++++++++++++++++++ database/calendar.db | Bin 45056 -> 45056 bytes 3 files changed, 157 insertions(+), 2 deletions(-) diff --git a/backend/main.py b/backend/main.py index b65711c..80c2c6e 100644 --- a/backend/main.py +++ b/backend/main.py @@ -4,6 +4,7 @@ from pydantic import BaseModel from database import fetch_all from events import create_event from auth import create_user, verify_user +from rooms import create_room, search_room, accept_room class Login(BaseModel): username: str @@ -25,11 +26,23 @@ class EventCreate(BaseModel): status: str min_people: int +class RoomCreate(BaseModel): + room_name: str + creator_id: int + invite_code: str + +class RoomSearch(BaseModel): + user_id: int + invite_code: str + +class RoomJoin(BaseModel): + user_id: int + invite_code: str app = FastAPI( title="Calendar API", description="Room based agenda system", - version="0.1" + version="1.0" ) @@ -88,7 +101,7 @@ def api_create_user(user: UserCreate): user_id = create_user( username=user.username, - password=user.password + password=user.password, ) return { @@ -112,4 +125,58 @@ def api_login(login: Login): return { "status": "success", "user_id": user_id + } + +@app.post("/create_room") +def api_create_room(room: RoomCreate): + + room_id = create_room( + room.room_name, + room.creator_id, + room.invite_code + ) + + if room_id is None: + return { + "status": "failed" + } + + return { + "status": "success", + "room_id": room_id + } + +@app.post("/search-room") +def api_search_room(search_for_room: RoomSearch): + room_name = search_room( + search_for_room.invite_code + ) + + if room_name is None: + return { + "status": "failed" + } + + return { + "status": "success", + "room_name": room_name + } + +@app.post("/join-room") +def api_join_room(room: RoomJoin): + + result = accept_room( + room.user_id, + room.invite_code + ) + + if result is None: + return { + "status": "failed", + "reason": "room_not_found" + } + + return { + "status": "joined", + **result } \ No newline at end of file diff --git a/backend/rooms.py b/backend/rooms.py index e69de29..18fd35a 100644 --- a/backend/rooms.py +++ b/backend/rooms.py @@ -0,0 +1,88 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from database import execute, fetch_one + +DEFAULT_ROLE = "member" + +def create_room( + room_name, + creator_id, + invite_code +): + query = """ + INSERT INTO "main"."rooms" + ("name", "owner_id", "invite_code") + VALUES (?, ?, ?); + """ + room_id = execute( + query, + ( + room_name, + creator_id, + invite_code + ) + ) + + return room_id + +def search_room( + invite_code +): + query = """ + SELECT name + FROM rooms + WHERE invite_code = ? + """ + room = fetch_one( + query, + ( + invite_code, + ) + ) + + if room is None: + return None + + return room_name["name"] + + +def accept_room( + user_id, + invite_code +): + query = """ + SELECT id + FROM rooms + WHERE invite_code = ? + """ + room = fetch_one( + query, + ( + invite_code, + ) + ) + + if room is None: + return None + + room_id = room["id"] + role = DEFAULT_ROLE + query2 = """ + INSERT INTO "main"."room_members" + ("room_id", "user_id", "role") + VALUES (?, ?, ?); + """ + + member_id = execute( + query2, + ( + room_id, + user_id, + role + ) + ) + + return { + "room_id": room_id, + "member_id": member_id + } \ No newline at end of file diff --git a/database/calendar.db b/database/calendar.db index 1fd92262bbe0a0a44f493c439cbee7d6acb50720..399f296ccf60297915deef92347a4449f02dff61 100644 GIT binary patch delta 191 zcmZp8z|`=7X@WGP=0q81M$L^0Q|zUfIT@M78B2>(i;7uz85kIt`8P1|KjS~czhSeW z!XkbdDP~p%Sw_|D#KhwC#JqGC5F@iVCp9}ewP^Age+w>V{#y+E-}qni-`Xr_aE4z{ zfLWChSrPN(*YT1(Ec|B~_`mYM;J?j(7HIHZem))+7Dh%%W|rL4+$5k;xAQfDik>p? f|K|U~|CayhX2F1~{2c5+HH^$GESulf3mX6cVPrZg delta 133 zcmZp8z|`=7X@WGP`a~ILM)i#eQ|u*}I2oD68B2>(i;7uz85kIt_|Gu#KjS~MSy15s z|Kv0N7933cuNnBi@xR_IxZpnj>ke-5bbAU_vKCj?Bsov#U0 e@Rou9H~$y@xBO2x3r@Jf&&mOk-Tby**Z=^M&M4&o