gitscope
← marzneshin / Diff · 41ba8cb → 41ba8cb
Changes 41ba8cb..41ba8cb
Patch commit
diff --git a/app/dependencies.py b/app/dependencies.py
index aa13cea..469de6d 100644
--- a/app/dependencies.py
+++ b/app/dependencies.py
@@ -1,3 +1,4 @@
+from datetime import datetime
from typing import Annotated
from fastapi import Depends, HTTPException, status
@@ -82,8 +83,24 @@ def get_user(username: str,
return db_user
+def parse_start_date(start: str | None = None):
+ if not start:
+ return datetime.fromtimestamp(datetime.utcnow().timestamp() - 30 * 24 * 3600)
+ else:
+ return datetime.fromisoformat(start)
+
+
+def parse_end_date(end: str | None = None):
+ if not end:
+ return datetime.utcnow()
+ else:
+ return datetime.fromisoformat(end)
+
+
SubUserDep = Annotated[User, Depends(get_subscription_user)]
UserDep = Annotated[User, Depends(get_user)]
AdminDep = Annotated[Admin, Depends(get_current_admin)]
SudoAdminDep = Annotated[Admin, Depends(sudo_admin)]
DBDep = Annotated[Session, Depends(get_db)]
+StartDateDep = Annotated[datetime, Depends(parse_start_date)]
+EndDateDep = Annotated[datetime, Depends(parse_end_date)]
diff --git a/app/routes/node.py b/app/routes/node.py
index d66058d..070111b 100644
--- a/app/routes/node.py
+++ b/app/routes/node.py
@@ -8,7 +8,7 @@ from fastapi import HTTPException, WebSocket
from app import marznode
from app.db import crud, get_tls_certificate
-from app.dependencies import DBDep, SudoAdminDep, sudo_admin
+from app.dependencies import DBDep, SudoAdminDep, sudo_admin, EndDateDep, StartDateDep
from app.marznode import MarzNodeGRPC
from app.models.admin import Admin
from app.models.node import (NodeCreate, NodeModify, NodeResponse,
@@ -152,21 +152,11 @@ async def remove_node(node_id: int,
@router.get("/api/nodes/usage", response_model=NodesUsageResponse)
def get_usage(db: DBDep,
admin: SudoAdminDep,
- start: str = None,
- end: str = None):
+ start_date: StartDateDep,
+ end_date: EndDateDep):
"""
Get nodes usage
"""
- if start is None:
- start_date = datetime.fromtimestamp(datetime.utcnow().timestamp() - 30 * 24 * 3600)
- else:
- start_date = datetime.fromisoformat(start)
-
- if end is None:
- end_date = datetime.utcnow()
- else:
- end_date = datetime.fromisoformat(end)
-
usages = crud.get_nodes_usage(db, start_date, end_date)
return {"usages": usages}
diff --git a/app/routes/subscription.py b/app/routes/subscription.py
index 6c59454..fe5bfb0 100644
--- a/app/routes/subscription.py
+++ b/app/routes/subscription.py
@@ -1,12 +1,11 @@
import re
-from datetime import datetime
from fastapi import APIRouter
from fastapi import Header, HTTPException, Path, Request, Response
from fastapi.responses import HTMLResponse
from app.db import crud
-from app.dependencies import DBDep, SubUserDep
+from app.dependencies import DBDep, SubUserDep, StartDateDep, EndDateDep
from app.models.user import UserResponse
from app.templates import render_template
from app.utils.share import encode_title, generate_subscription, generate_v2ray_links
@@ -99,19 +98,8 @@ def user_subscription_info(db_user: SubUserDep):
@router.get("/sub/{username}/{key}/usage")
def user_get_usage(db_user: SubUserDep,
db: DBDep,
- start: str = None,
- end: str = None):
-
- if start is None:
- start_date = datetime.fromtimestamp(datetime.utcnow().timestamp() - 30 * 24 * 3600)
- else:
- start_date = datetime.fromisoformat(start)
-
- if end is None:
- end_date = datetime.utcnow()
- else:
- end_date = datetime.fromisoformat(end)
-
+ start_date: StartDateDep,
+ end_date: EndDateDep):
usages = crud.get_user_usages(db, db_user, start_date, end_date)
return {"usages": usages, "username": db_user.username}
diff --git a/app/routes/user.py b/app/routes/user.py
index 0f1946f..49f9a13 100644
--- a/app/routes/user.py
+++ b/app/routes/user.py
@@ -9,7 +9,7 @@ from fastapi import HTTPException, Query
from app import marznode
from app.db import crud
-from app.dependencies import DBDep, AdminDep, SudoAdminDep, UserDep
+from app.dependencies import DBDep, AdminDep, SudoAdminDep, UserDep, StartDateDep, EndDateDep
from app.models.user import (UserCreate, UserModify, UserResponse,
UsersResponse, UserStatus, UserUsagesResponse)
from app.utils import report
@@ -26,7 +26,7 @@ async def add_user(new_user: UserCreate,
Add a new user
- **username** must have 3 to 32 characters and is allowed to contain a-z, 0-9, and underscores in between
- - **expire** must be an UTC timestamp
+ - **expire** must be a UTC timestamp
- **data_limit** must be in Bytes, e.g. 1073741824B = 1GB
- **services** list of service ids
"""
@@ -234,22 +234,11 @@ async def reset_users_data_usage(db: DBDep,
@router.get("/api/user/{username}/usage", response_model=UserUsagesResponse)
def get_user_usage(db: DBDep,
db_user: UserDep,
- start: str = None,
- end: str = None):
+ start_date: StartDateDep,
+ end_date: EndDateDep):
"""
Get users usage
"""
- if start is None:
- start_date = datetime.fromtimestamp(
- datetime.utcnow().timestamp() - 30 * 24 * 3600)
- else:
- start_date = datetime.fromisoformat(start)
-
- if end is None:
- end_date = datetime.utcnow()
- else:
- end_date = datetime.fromisoformat(end)
-
usages = crud.get_user_usages(db, db_user, start_date, end_date)
return {"usages": usages, "username": db_user.username}