update endpoints
This commit is contained in:
@@ -36,4 +36,20 @@ def count_confirmations(event_id):
|
|||||||
(event_id,)
|
(event_id,)
|
||||||
)
|
)
|
||||||
|
|
||||||
return result["amount"]
|
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,)
|
||||||
|
)
|
||||||
@@ -116,3 +116,61 @@ def check_event_threshold(event_id):
|
|||||||
""",
|
""",
|
||||||
(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
@@ -14,6 +14,8 @@ import sqlite3
|
|||||||
from typing import Literal
|
from typing import Literal
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
from events import delete_event
|
||||||
|
|
||||||
class Login(BaseModel):
|
class Login(BaseModel):
|
||||||
username: str
|
username: str
|
||||||
password: str
|
password: str
|
||||||
@@ -51,6 +53,13 @@ class RoomSearch(BaseModel):
|
|||||||
class RoomJoin(BaseModel):
|
class RoomJoin(BaseModel):
|
||||||
invite_code: str
|
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(
|
app = FastAPI(
|
||||||
title="Calendar API",
|
title="Calendar API",
|
||||||
@@ -134,10 +143,17 @@ def api_login(login: Login):
|
|||||||
def get_me(
|
def get_me(
|
||||||
user_id: int = Depends(get_current_user)
|
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
|
# rooms
|
||||||
|
|
||||||
@@ -157,7 +173,9 @@ def delete_room(
|
|||||||
"reason": "no_permission"
|
"reason": "no_permission"
|
||||||
}
|
}
|
||||||
return {
|
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)
|
"going": count_confirmations(event_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
@app.get("/part_of_rooms")
|
@app.get("/rooms")
|
||||||
def get_the_rooms(
|
def api_get_rooms(
|
||||||
user_id: int = Depends(get_current_user)
|
user_id: int = Depends(get_current_user)
|
||||||
):
|
):
|
||||||
rooms = get_rooms(user_id)
|
rooms = get_rooms(user_id)
|
||||||
@@ -388,6 +406,315 @@ def api_get_room(
|
|||||||
|
|
||||||
return 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()
|
||||||
print("YOU CAN NOT START THE SERVER WITH PYTHON")
|
print("YOU CAN NOT START THE SERVER WITH PYTHON")
|
||||||
print("start with:")
|
print("start with:")
|
||||||
|
|||||||
+31
-1
@@ -201,4 +201,34 @@ def get_room(room_id, user_id):
|
|||||||
"members": [dict(member) for member in members],
|
"members": [dict(member) for member in members],
|
||||||
"events": [dict(event) for event in events]
|
"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.
Reference in New Issue
Block a user