123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- from pydantic import BaseModel
- from peewee import *
- from playhouse.shortcuts import model_to_dict
- from typing import List, Union, Optional
- import time
- from utils.utils import decode_token
- from utils.misc import get_gravatar_url
- from apps.web.internal.db import DB
- import json
- ####################
- # Prompts DB Schema
- ####################
- class Prompt(Model):
- command = CharField(unique=True)
- user_id = CharField()
- title = CharField()
- content = TextField()
- timestamp = DateField()
- class Meta:
- database = DB
- class PromptModel(BaseModel):
- command: str
- user_id: str
- title: str
- content: str
- timestamp: int # timestamp in epoch
- ####################
- # Forms
- ####################
- class PromptForm(BaseModel):
- command: str
- title: str
- content: str
- class PromptsTable:
- def __init__(self, db):
- self.db = db
- self.db.create_tables([Prompt])
- def insert_new_prompt(self, user_id: str,
- form_data: PromptForm) -> Optional[PromptModel]:
- prompt = PromptModel(
- **{
- "user_id": user_id,
- "command": form_data.command,
- "title": form_data.title,
- "content": form_data.content,
- "timestamp": int(time.time()),
- })
- try:
- result = Prompt.create(**prompt.model_dump())
- if result:
- return prompt
- else:
- return None
- except:
- return None
- def get_prompt_by_command(self, command: str) -> Optional[PromptModel]:
- try:
- prompt = Prompt.get(Prompt.command == command)
- return PromptModel(**model_to_dict(prompt))
- except:
- return None
- def get_prompts(self) -> List[PromptModel]:
- return [
- PromptModel(**model_to_dict(prompt)) for prompt in Prompt.select()
- # .limit(limit).offset(skip)
- ]
- def update_prompt_by_command(
- self, command: str,
- form_data: PromptForm) -> Optional[PromptModel]:
- try:
- query = Prompt.update(
- title=form_data.title,
- content=form_data.content,
- timestamp=int(time.time()),
- ).where(Prompt.command == command)
- query.execute()
- prompt = Prompt.get(Prompt.command == command)
- return PromptModel(**model_to_dict(prompt))
- except:
- return None
- def delete_prompt_by_command(self, command: str) -> bool:
- try:
- query = Prompt.delete().where((Prompt.command == command))
- query.execute() # Remove the rows, return number of rows removed.
- return True
- except:
- return False
- Prompts = PromptsTable(DB)
|