prompts.py 2.56 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
from fastapi import Depends, FastAPI, HTTPException, status
from datetime import datetime, timedelta
from typing import List, Union, Optional

from fastapi import APIRouter
from pydantic import BaseModel
import json

from apps.web.models.prompts import Prompts, PromptForm, PromptModel

11
from utils.utils import get_current_user, get_admin_user
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from constants import ERROR_MESSAGES

router = APIRouter()

############################
# GetPrompts
############################


@router.get("/", response_model=List[PromptModel])
async def get_prompts(user=Depends(get_current_user)):
    return Prompts.get_prompts()


############################
# CreateNewPrompt
############################


@router.post("/create", response_model=Optional[PromptModel])
32
async def create_new_prompt(form_data: PromptForm, user=Depends(get_admin_user)):
Timothy J. Baek's avatar
Timothy J. Baek committed
33
34
35
36
37
38
    prompt = Prompts.get_prompt_by_command(form_data.command)
    if prompt == None:
        prompt = Prompts.insert_new_prompt(user.id, form_data)

        if prompt:
            return prompt
39
        raise HTTPException(
Timothy J. Baek's avatar
Timothy J. Baek committed
40
            status_code=status.HTTP_400_BAD_REQUEST,
41
            detail=ERROR_MESSAGES.DEFAULT(),
42
        )
43
44
45
46
    raise HTTPException(
        status_code=status.HTTP_400_BAD_REQUEST,
        detail=ERROR_MESSAGES.COMMAND_TAKEN,
    )
47
48
49
50
51
52
53


############################
# GetPromptByCommand
############################


54
@router.get("/command/{command}", response_model=Optional[PromptModel])
55
async def get_prompt_by_command(command: str, user=Depends(get_current_user)):
Timothy J. Baek's avatar
Timothy J. Baek committed
56
    prompt = Prompts.get_prompt_by_command(f"/{command}")
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

    if prompt:
        return prompt
    else:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail=ERROR_MESSAGES.NOT_FOUND,
        )


############################
# UpdatePromptByCommand
############################


72
73
@router.post("/command/{command}/update", response_model=Optional[PromptModel])
async def update_prompt_by_command(
74
    command: str, form_data: PromptForm, user=Depends(get_admin_user)
75
):
Timothy J. Baek's avatar
Timothy J. Baek committed
76
    prompt = Prompts.update_prompt_by_command(f"/{command}", form_data)
77
78
79
80
81
82
83
84
85
86
87
88
89
90
    if prompt:
        return prompt
    else:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail=ERROR_MESSAGES.ACCESS_PROHIBITED,
        )


############################
# DeletePromptByCommand
############################


91
@router.delete("/command/{command}/delete", response_model=bool)
92
async def delete_prompt_by_command(command: str, user=Depends(get_admin_user)):
Timothy J. Baek's avatar
Timothy J. Baek committed
93
    result = Prompts.delete_prompt_by_command(f"/{command}")
94
    return result