update endpoints

This commit is contained in:
ben
2026-08-04 11:02:28 +02:00
parent 44dab73045
commit b77f1ddaa9
6 changed files with 439 additions and 8 deletions
+16
View File
@@ -37,3 +37,19 @@ def count_confirmations(event_id):
)
return result["amount"]
def get_event_responses(event_id):
return fetch_all(
"""
SELECT
users.id,
users.username,
event_signups.status
FROM event_signups
JOIN users
ON users.id = event_signups.user_id
WHERE event_signups.event_id = ?
""",
(event_id,)
)
+58
View File
@@ -116,3 +116,61 @@ def check_event_threshold(event_id):
""",
(event_id,)
)
def delete_event(event_id):
from database import execute
execute(
"""
DELETE FROM events
WHERE id = ?
""",
(event_id,)
)
def update_event(
event_id,
title,
description,
start_time,
end_time,
min_people
):
from database import execute
execute(
"""
UPDATE events
SET
title = COALESCE(?, title),
description = COALESCE(?, description),
start_time = COALESCE(?, start_time),
end_time = COALESCE(?, end_time),
min_people = COALESCE(?, min_people)
WHERE id = ?
""",
(
title,
description,
start_time,
end_time,
min_people,
event_id
)
)
def get_room_events(room_id):
from database import fetch_all
return fetch_all(
"""
SELECT *
FROM events
WHERE room_id = ?
ORDER BY start_time
""",
(room_id,)
)
+333 -6
View File
@@ -14,6 +14,8 @@ import sqlite3
from typing import Literal
from fastapi.middleware.cors import CORSMiddleware
from events import delete_event
class Login(BaseModel):
username: str
password: str
@@ -51,6 +53,13 @@ class RoomSearch(BaseModel):
class RoomJoin(BaseModel):
invite_code: str
class EventUpdate(BaseModel):
title: str | None = None
description: str | None = None
start_time: str | None = None
end_time: str | None = None
min_people: int | None = None
app = FastAPI(
title="Calendar API",
@@ -134,10 +143,17 @@ def api_login(login: Login):
def get_me(
user_id: int = Depends(get_current_user)
):
return {
"user_id": user_id
}
user = fetch_one(
"""
SELECT id, username
FROM users
WHERE id = ?
""",
(user_id,)
)
return dict(user)
# rooms
@@ -157,7 +173,9 @@ def delete_room(
"reason": "no_permission"
}
return {
"status": "deleted"
"status": "not deleted",
"reason": "you are a poopie",
"actual Reason": "i have not built it yet"
}
@@ -359,8 +377,8 @@ def respond_event(
"going": count_confirmations(event_id)
}
@app.get("/part_of_rooms")
def get_the_rooms(
@app.get("/rooms")
def api_get_rooms(
user_id: int = Depends(get_current_user)
):
rooms = get_rooms(user_id)
@@ -388,6 +406,315 @@ def api_get_room(
return room
@app.get("/rooms/{room_id}/members")
def api_room_members(
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"
)
members = get_room_members(room_id)
return {
"members": [dict(member) for member in members]
}
@app.get("/events/{event_id}")
def api_get_event(
event_id: int,
user_id: int = Depends(get_current_user)
):
event = fetch_one(
"""
SELECT *
FROM events
WHERE id = ?
""",
(event_id,)
)
if event is None:
raise HTTPException(
status_code=404,
detail="event not found"
)
member = fetch_one(
"""
SELECT *
FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
event["room_id"],
user_id
)
)
if member is None:
raise HTTPException(
status_code=403,
detail="no access"
)
return dict(event)
@app.get("/events/{event_id}/responses")
def api_event_responses(
event_id: int,
user_id: int = Depends(get_current_user)
):
event = fetch_one(
"""
SELECT room_id
FROM events
WHERE id = ?
""",
(event_id,)
)
if event is None:
raise HTTPException(
status_code=404,
detail="event not found"
)
member = fetch_one(
"""
SELECT *
FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
event["room_id"],
user_id
)
)
if member is None:
raise HTTPException(
status_code=403,
detail="no access"
)
responses = get_event_responses(event_id)
return {
"responses": [dict(r) for r in responses]
}
@app.get("/users/{user_id}")
def api_get_user(
user_id: int,
current_user: int = Depends(get_current_user)
):
user = fetch_one(
"""
SELECT id, username
FROM users
WHERE id = ?
""",
(user_id,)
)
if user is None:
raise HTTPException(
status_code=404,
detail="user not found"
)
return dict(user)
@app.delete("/events/{event_id}")
def api_delete_event(
event_id: int,
user_id: int = Depends(get_current_user)
):
event = fetch_one(
"""
SELECT creator_id
FROM events
WHERE id = ?
""",
(event_id,)
)
if event is None:
raise HTTPException(
status_code=404,
detail="event not found"
)
if event["creator_id"] != user_id:
raise HTTPException(
status_code=403,
detail="not event owner"
)
delete_event(event_id)
return {
"status": "deleted"
}
@app.patch("/events/{event_id}")
def api_update_event(
event_id: int,
event: EventUpdate,
user_id: int = Depends(get_current_user)
):
old = fetch_one(
"""
SELECT creator_id
FROM events
WHERE id = ?
""",
(event_id,)
)
if old is None:
raise HTTPException(
status_code=404,
detail="event not found"
)
if old["creator_id"] != user_id:
raise HTTPException(
status_code=403,
detail="not owner"
)
update_event(
event_id,
event.title,
event.description,
event.start_time,
event.end_time,
event.min_people
)
return {
"status": "updated"
}
@app.delete("/rooms/{room_id}/members/me")
def api_leave_room(
room_id: int,
user_id: int = Depends(get_current_user)
):
member = fetch_one(
"""
SELECT *
FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
room_id,
user_id
)
)
if member is None:
raise HTTPException(
status_code=404,
detail="not member"
)
leave_room(
room_id,
user_id
)
return {
"status": "left"
}
@app.get("/rooms/{room_id}/events")
def api_room_events(
room_id: int,
user_id: int = Depends(get_current_user)
):
member = fetch_one(
"""
SELECT *
FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
room_id,
user_id
)
)
if member is None:
raise HTTPException(
status_code=403,
detail="no access"
)
events = get_room_events(room_id)
return {
"events": [
dict(event)
for event in events
]
}
from fastapi.responses import PlainTextResponse
import requests
@app.get("/ascii-art", response_class=PlainTextResponse)
def ascii_art():
response = requests.get(
"http://localhost:8000/me"
)
data = response.json()
me_endpoint = data
status = "online"
return f"""
██████╗ █████╗ ██╗ ███████╗███╗ ██╗██████╗ █████╗ ██████╗
██╔════╝██╔══██╗██║ ██╔════╝████╗ ██║██╔══██╗██╔══██╗██╔══██╗
██║ ███████║██║ █████╗ ██╔██╗ ██║██║ ██║███████║██████╔╝
██║ ██╔══██║██║ ██╔══╝ ██║╚██╗██║██║ ██║██╔══██║██╔══██╗
╚██████╗██║ ██║███████╗███████╗██║ ╚████║██████╔╝██║ ██║██║ ██║
╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
status: {status}
"You are a stinky Poo"
- Ben de Roo, programmer
"""
print()
print()
print()
print("YOU CAN NOT START THE SERVER WITH PYTHON")
print("start with:")
+30
View File
@@ -202,3 +202,33 @@ def get_room(room_id, user_id):
"events": [dict(event) for event in events]
}
def get_room_members(room_id):
return fetch_all(
"""
SELECT
users.id,
users.username
FROM room_members
JOIN users
ON users.id = room_members.user_id
WHERE room_members.room_id = ?
""",
(room_id,)
)
def leave_room(room_id, user_id):
from database import execute
execute(
"""
DELETE FROM room_members
WHERE room_id = ?
AND user_id = ?
""",
(
room_id,
user_id
)
)
Binary file not shown.
Binary file not shown.