Files
calendar/backend/main.py
T
2026-08-03 15:47:28 +02:00

186 lines
3.4 KiB
Python

from fastapi import FastAPI
from pydantic import BaseModel
from database import fetch_all
from events import create_event
from auth import create_user, verify_user, create_token
from rooms import create_room, search_room, accept_room
class Login(BaseModel):
username: str
password: str
class UserCreate(BaseModel):
username: str
password: str
class EventCreate(BaseModel):
room_id: int
creator_id: int
type: str
title: str
description: str
start_time: str
end_time: str
visibility: str
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="1.0"
)
@app.get("/")
def home():
return {
"status": "online",
"service": "Calendar API",
"cheese": "tasty"
}
@app.get("/database")
def database_status():
tables = fetch_all(
"SELECT name FROM sqlite_master WHERE type='table';"
)
return {
"tables": [table["name"] for table in tables]
}
@app.post("/events")
def api_create_event(event: EventCreate):
event_id = create_event(
room_id=event.room_id,
creator_id=event.creator_id,
type=event.type,
title=event.title,
description=event.description,
start_time=event.start_time,
end_time=event.end_time,
visibility=event.visibility,
status=event.status,
min_people=event.min_people
)
return {
"status": "created",
"event_id": event_id
}
@app.get("/events")
def get_events():
events = fetch_all("SELECT * FROM events;")
return {
"events": [dict(event) for event in events]
}
@app.post("/create-user")
def api_create_user(user: UserCreate):
user_id = create_user(
username=user.username,
password=user.password,
)
return {
"status": "created",
"user_id": user_id
}
@app.post("/login")
def api_login(login: Login):
user_id = verify_user(
login.username,
login.password
)
if user_id is None:
return {
"status": "failed"
}
token = create_token(user_id)
return {
"status": "success",
"access_token": token,
"token_type": "bearer"
}
@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
}