Skip to content

Commit 2175348

Browse files
Merge pull request #20 from hackclub/endpoint-refactor
API endpoint refactor
2 parents b84d4d3 + 1d3615d commit 2175348

File tree

19 files changed

+44
-39
lines changed

19 files changed

+44
-39
lines changed

api/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# pylint: disable=C0114
2+
from . import v1
3+
4+
__all__ = ["v1"]
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

v1/auth/main.py renamed to api/v1/auth/main.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
import json
44
import os
5+
import pathlib
56
import secrets
67
from datetime import datetime, timedelta, timezone
78
from email.message import EmailMessage
89
from enum import Enum
910
from functools import wraps
10-
from typing import Callable, Any, Awaitable, Optional
11+
from typing import Any, Awaitable, Callable, Optional
1112

1213
import aiosmtplib
1314
import dotenv
@@ -18,21 +19,21 @@
1819
import sqlalchemy
1920
from fastapi import APIRouter, Depends, Request
2021
from fastapi.exceptions import HTTPException # , RequestValidationError
21-
from fastapi.responses import RedirectResponse, Response, JSONResponse
22+
from fastapi.responses import JSONResponse, RedirectResponse, Response
2223
from pydantic import BaseModel, field_validator
23-
from sqlalchemy.ext.asyncio import AsyncSession
24-
from sqlalchemy.exc import IntegrityError
2524
from sqlalchemy import select
25+
from sqlalchemy.exc import IntegrityError
26+
from sqlalchemy.ext.asyncio import AsyncSession
2627

27-
from v1.db import get_db
28-
from v1.models.user import User
28+
from db import get_db
29+
from models.user import User
2930

3031
dotenv.load_dotenv()
3132

3233
HOST = "redis" if os.getenv("USING_DOCKER") == "true" else "localhost"
3334
r = redis.Redis(password=os.getenv("REDIS_PASSWORD", ""), host=HOST)
3435

35-
with open("v1/auth/otp.html", "r", encoding="utf8") as f:
36+
with open(pathlib.Path(__file__).parent / "otp.html", "r", encoding="utf8") as f:
3637
OTP_EMAIL_TEMPLATE = f.read()
3738

3839

@@ -205,7 +206,7 @@ async def is_user_authenticated(request: Request) -> AuthJwt:
205206
return decoded_jwt
206207

207208

208-
@router.post("/auth/refresh_session")
209+
@router.post("/refresh_session")
209210
async def refresh_token(
210211
request: Request, response: Response, session_request: SessionClientRequest
211212
):
@@ -258,14 +259,14 @@ async def send_otp_code(to_email: str, old_email: Optional[str] = None) -> bool:
258259
return True
259260

260261

261-
@router.post("/auth/send_otp")
262+
@router.post("/send_otp")
262263
async def send_otp(_request: Request, otp_request: OtpClientRequest):
263264
"""Send OTP to the user's email"""
264265
await send_otp_code(to_email=otp_request.email)
265266
return Response(status_code=204)
266267

267268

268-
@router.post("/auth/validate_otp")
269+
@router.post("/validate_otp")
269270
async def validate_otp(
270271
otp_client_response: OtpClientResponse,
271272
session: AsyncSession = Depends(get_db),
File renamed without changes.
File renamed without changes.
File renamed without changes.

v1/projects/main.py renamed to api/v1/projects/main.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from sqlalchemy.orm import selectinload
1515
import validators
1616

17-
from v1.auth import require_auth # type: ignore
18-
from v1.db import get_db # , engine
19-
from v1.models.user import User, UserProject
17+
from api.v1.auth import require_auth # type: ignore
18+
from db import get_db # , engine
19+
from models.user import User, UserProject
2020

2121
CDN_HOST = "hc-cdn.hel1.your-objectstorage.com"
2222

@@ -98,7 +98,7 @@ def validate_repo(repo: HttpUrl | None):
9898

9999

100100
# @protect
101-
@router.patch("/api/projects/{project_id}")
101+
@router.patch("/{project_id}")
102102
@require_auth
103103
async def update_project(
104104
request: Request,
@@ -160,7 +160,7 @@ async def update_project(
160160
return Response(status_code=500)
161161

162162

163-
@router.get("/api/projects")
163+
@router.get("/")
164164
@require_auth
165165
async def return_projects_for_user(
166166
request: Request, session: AsyncSession = Depends(get_db)
@@ -180,7 +180,7 @@ async def return_projects_for_user(
180180
return projects_ret
181181

182182

183-
@router.get("/api/projects/{project_id}")
183+
@router.get("/{project_id}")
184184
@require_auth
185185
async def return_project_by_id(
186186
request: Request, project_id: int, session: AsyncSession = Depends(get_db)
@@ -200,7 +200,7 @@ async def return_project_by_id(
200200
return ProjectResponse.from_model(project)
201201

202202

203-
@router.get("/api/projects/{project_id}/model-test")
203+
@router.get("/{project_id}/model-test")
204204
@require_auth
205205
async def model_test(
206206
request: Request, project_id: int, session: AsyncSession = Depends(get_db)
@@ -220,7 +220,7 @@ async def model_test(
220220
return project.update_hackatime()
221221

222222

223-
@router.post("/api/projects")
223+
@router.post("/")
224224
@require_auth
225225
async def create_project(
226226
request: Request,

0 commit comments

Comments
 (0)