correctly return HTTP 201
All checks were successful
Build and Publish / build_and_publish (push) Successful in 30s

This commit is contained in:
Nexus 2024-07-02 01:10:49 +01:00
parent 24206d1e2f
commit 295a805959
Signed by: nex
GPG key ID: 0FA334385D0B689F

View file

@ -8,7 +8,7 @@ import db
import requests import requests
from fastapi import FastAPI, Request, HTTPException, status, Form from fastapi import FastAPI, Request, HTTPException, status, Form
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.responses import RedirectResponse from fastapi.responses import RedirectResponse, JSONResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from tortoise.contrib.fastapi import RegisterTortoise from tortoise.contrib.fastapi import RegisterTortoise
@ -94,6 +94,7 @@ async def list_redirects():
@app.post("/api/create", response_model=db.RedirectPydantic) @app.post("/api/create", response_model=db.RedirectPydantic)
async def create_redirect( async def create_redirect(
response: JSONResponse,
destination: str = Form(...), destination: str = Form(...),
expires: typing.Optional[datetime.datetime] = Form(None), expires: typing.Optional[datetime.datetime] = Form(None),
max_visits: typing.Optional[int] = Form(None), max_visits: typing.Optional[int] = Form(None),
@ -108,6 +109,7 @@ async def create_redirect(
existing = await db.Redirect.get_or_none(destination=destination) existing = await db.Redirect.get_or_none(destination=destination)
if existing is not None: if existing is not None:
response.status_code = 200
return await db.RedirectPydantic.from_tortoise_orm(existing) return await db.RedirectPydantic.from_tortoise_orm(existing)
match slug_type: match slug_type:
@ -135,6 +137,7 @@ async def create_redirect(
while await db.Redirect.get_or_none(slug=slug) is not None: while await db.Redirect.get_or_none(slug=slug) is not None:
slug = secrets.token_urlsafe(slug_length // 2) slug = secrets.token_urlsafe(slug_length // 2)
redirect = await db.Redirect.create(destination=destination, expires=expires, max_visits=max_visits, slug=slug) redirect = await db.Redirect.create(destination=destination, expires=expires, max_visits=max_visits, slug=slug)
response.status_code = 201
return await db.RedirectPydantic.from_tortoise_orm(redirect) return await db.RedirectPydantic.from_tortoise_orm(redirect)