update endpoints
This commit is contained in:
@@ -36,4 +36,20 @@ def count_confirmations(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,)
|
||||
)
|
||||
|
||||
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 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:")
|
||||
|
||||
+31
-1
@@ -201,4 +201,34 @@ def get_room(room_id, user_id):
|
||||
"members": [dict(member) for member in members],
|
||||
"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