aboutsummaryrefslogtreecommitdiff
path: root/api/routes
diff options
context:
space:
mode:
authorParker <contact@pkrm.dev>2024-11-10 23:11:17 -0600
committerParker <contact@pkrm.dev>2024-11-10 23:11:17 -0600
commit8985eecfeac5887f59fdf36d9b3f2584692ff5ed (patch)
tree908b05eacbad8def836dae7ccf67c534675bb912 /api/routes
parent691aa744a0398f185b3ca98a36fbd83806c7786c (diff)
Add log routes and update dashboard
Diffstat (limited to 'api/routes')
-rw-r--r--api/routes/auth_routes.py13
-rw-r--r--api/routes/log_routes.py72
-rw-r--r--api/routes/user_routes.py4
3 files changed, 87 insertions, 2 deletions
diff --git a/api/routes/auth_routes.py b/api/routes/auth_routes.py
index c51557f..24e1391 100644
--- a/api/routes/auth_routes.py
+++ b/api/routes/auth_routes.py
@@ -7,8 +7,10 @@ from typing import Annotated
from api.util.authentication import (
create_access_token,
authenticate_user,
+ get_current_user,
)
from api.util.db_dependency import get_db
+from api.schemas.auth_schemas import User
router = APIRouter(prefix="/auth", tags=["auth"])
@@ -44,3 +46,14 @@ async def login_for_access_token(
# secure=True, # Cookies are only sent over HTTPS
)
return response
+
+
+# Check if the user is logged in
+@router.get("/check", summary="Check if the user is logged in")
+async def check_login(
+ current_user: Annotated[User, Depends(get_current_user)],
+):
+ """
+ If the user actually makes it to this endpoint, they are logged in
+ """
+ return {"success": True}
diff --git a/api/routes/log_routes.py b/api/routes/log_routes.py
new file mode 100644
index 0000000..84b8c51
--- /dev/null
+++ b/api/routes/log_routes.py
@@ -0,0 +1,72 @@
+from fastapi import APIRouter, status, Path, Depends
+from fastapi.exception_handlers import HTTPException
+from typing import Annotated
+import string
+import random
+import datetime
+import validators
+
+from api.util.db_dependency import get_db
+from models import Link, Log
+from api.schemas.links_schemas import URLSchema
+from api.schemas.auth_schemas import User
+from api.util.authentication import get_current_user
+
+
+router = APIRouter(prefix="/logs", tags=["logs"])
+
+
+@router.get("", summary="Get all of the logs associated with your account")
+async def get_logs(
+ current_user: Annotated[User, Depends(get_current_user)],
+ db=Depends(get_db),
+):
+ logs = (
+ db.query(Log)
+ .filter(Log.owner == current_user.id)
+ .order_by(Log.timestamp.desc())
+ .all()
+ )
+ if not logs:
+ raise HTTPException(
+ status_code=status.HTTP_404_NOT_FOUND, detail="No logs found"
+ )
+ return logs
+
+
+@router.get("/{log_id}", summary="Get a specific log")
+async def get_log(
+ log_id: Annotated[int, Path(title="ID of log to delete")],
+ current_user: Annotated[User, Depends(get_current_user)],
+ db=Depends(get_db),
+):
+ log = (
+ db.query(Log)
+ .filter(Log.id == log_id, Log.owner == current_user.id)
+ .first()
+ )
+ if not log:
+ raise HTTPException(
+ status_code=status.HTTP_404_NOT_FOUND, detail="Log not found"
+ )
+ return log
+
+
+@router.delete("/{log_id}", summary="Delete a log")
+async def delete_log(
+ log_id: Annotated[int, Path(title="ID of log to delete")],
+ current_user: Annotated[User, Depends(get_current_user)],
+ db=Depends(get_db),
+):
+ log = (
+ db.query(Log)
+ .filter(Log.id == log_id, Log.owner == current_user.id)
+ .first()
+ )
+ if not log:
+ raise HTTPException(
+ status_code=status.HTTP_404_NOT_FOUND, detail="Log not found"
+ )
+ db.delete(log)
+ db.commit()
+ return status.HTTP_204_NO_CONTENT
diff --git a/api/routes/user_routes.py b/api/routes/user_routes.py
index cf9be52..618f721 100644
--- a/api/routes/user_routes.py
+++ b/api/routes/user_routes.py
@@ -22,7 +22,7 @@ router = APIRouter(prefix="/users", tags=["users"])
@router.delete("/{user_id}", summary="Delete your account")
async def delete_user(
- user_id: Annotated[int, Path(title="Link to delete")],
+ user_id: Annotated[int, Path(title="ID of user to delete")],
current_user: Annotated[User, Depends(get_current_user)],
db=Depends(get_db),
):
@@ -51,7 +51,7 @@ async def delete_user(
@router.post("/{user_id}/password", summary="Update your account password")
async def update_pass(
- user_id: Annotated[int, Path(title="Link to update")],
+ user_id: Annotated[int, Path(title="ID of user to update")],
update_data: UpdatePasswordSchema,
current_user: Annotated[User, Depends(get_current_user)],
db=Depends(get_db),