mirror of
https://github.com/OMGeeky/gpt-pilot.git
synced 2025-12-30 08:03:32 +01:00
164 lines
4.6 KiB
Python
164 lines
4.6 KiB
Python
from playhouse.shortcuts import model_to_dict
|
|
from peewee import *
|
|
|
|
from utils.utils import hash_data
|
|
from database.models.components.base_models import database
|
|
from database.models.user import User
|
|
from database.models.app import App
|
|
from database.models.project_description import ProjectDescription
|
|
from database.models.user_stories import UserStories
|
|
from database.models.user_tasks import UserTasks
|
|
from database.models.architecture import Architecture
|
|
from database.models.development_planning import DevelopmentPlanning
|
|
from database.models.development_steps import DevelopmentSteps
|
|
from database.models.environment_setup import EnvironmentSetup
|
|
from database.models.development import Development
|
|
|
|
|
|
def save_user(user_id, email="email", password="password"):
|
|
try:
|
|
user = User.get(User.id == user_id)
|
|
return user
|
|
except DoesNotExist:
|
|
return User.create(id=user_id, email=email, password=password)
|
|
|
|
|
|
def save_app(user_id, app_id, app_type):
|
|
try:
|
|
app = App.get(App.id == app_id)
|
|
except DoesNotExist:
|
|
user = save_user(user_id)
|
|
app = App.create(id=app_id, user=user, app_type=app_type)
|
|
|
|
return app
|
|
|
|
|
|
def save_progress(app_id, step, data):
|
|
progress_table_map = {
|
|
'project_description': ProjectDescription,
|
|
'user_stories': UserStories,
|
|
'user_tasks': UserTasks,
|
|
'architecture': Architecture,
|
|
'development_planning': DevelopmentPlanning,
|
|
'environment_setup': EnvironmentSetup,
|
|
'development': Development,
|
|
}
|
|
|
|
data['step'] = step
|
|
|
|
ProgressTable = progress_table_map.get(step)
|
|
if not ProgressTable:
|
|
raise ValueError(f"Invalid step: {step}")
|
|
|
|
app = get_app(app_id)
|
|
|
|
# Use the get_or_create method, which attempts to retrieve a record
|
|
# or creates a new one if it does not exist.
|
|
progress, created = ProgressTable.get_or_create(app=app, defaults=data)
|
|
|
|
# If the record was not created, it already existed and we should update it
|
|
if not created:
|
|
for key, value in data.items():
|
|
setattr(progress, key, value)
|
|
progress.save()
|
|
|
|
return progress
|
|
|
|
|
|
def get_app(app_id):
|
|
try:
|
|
app = App.get(App.id == app_id)
|
|
return app
|
|
except DoesNotExist:
|
|
raise ValueError(f"No app with id: {app_id}")
|
|
|
|
|
|
def get_progress_steps(app_id, step=None):
|
|
progress_table_map = {
|
|
'project_description': ProjectDescription,
|
|
'user_stories': UserStories,
|
|
'user_tasks': UserTasks,
|
|
'architecture': Architecture,
|
|
'development_planning': DevelopmentPlanning,
|
|
'environment_setup': EnvironmentSetup,
|
|
'development': Development,
|
|
}
|
|
|
|
if step:
|
|
ProgressTable = progress_table_map.get(step)
|
|
if not ProgressTable:
|
|
raise ValueError(f"Invalid step: {step}")
|
|
|
|
try:
|
|
progress = ProgressTable.get(ProgressTable.app_id == app_id)
|
|
return model_to_dict(progress)
|
|
except DoesNotExist:
|
|
return None
|
|
else:
|
|
steps = {}
|
|
for step, ProgressTable in progress_table_map.items():
|
|
try:
|
|
progress = ProgressTable.get(ProgressTable.app_id == app_id)
|
|
steps[step] = model_to_dict(progress)
|
|
except DoesNotExist:
|
|
steps[step] = None
|
|
|
|
return steps
|
|
|
|
|
|
def save_development_step(app_id, messages):
|
|
app = get_app(app_id)
|
|
hash_id = hash_data(messages)
|
|
try:
|
|
dev_step = DevelopmentSteps.create(app=app, hash_id=hash_id, messages=messages)
|
|
except IntegrityError:
|
|
print(f"A Development Step with hash_id {hash_id} already exists.")
|
|
return None
|
|
return dev_step
|
|
|
|
|
|
def get_development_step_by_hash_id(hash_id):
|
|
try:
|
|
dev_step = DevelopmentSteps.get(DevelopmentSteps.hash_id == hash_id)
|
|
except DoesNotExist:
|
|
print(f"No Development Step found with hash_id {hash_id}")
|
|
return None
|
|
return dev_step
|
|
|
|
|
|
def create_tables():
|
|
with database:
|
|
database.create_tables([
|
|
User,
|
|
App,
|
|
ProjectDescription,
|
|
UserStories,
|
|
UserTasks,
|
|
Architecture,
|
|
DevelopmentPlanning,
|
|
DevelopmentSteps,
|
|
EnvironmentSetup,
|
|
Development
|
|
])
|
|
|
|
|
|
def drop_tables():
|
|
with database:
|
|
database.drop_tables([
|
|
User,
|
|
App,
|
|
ProjectDescription,
|
|
UserStories,
|
|
UserTasks,
|
|
Architecture,
|
|
DevelopmentPlanning,
|
|
DevelopmentSteps,
|
|
EnvironmentSetup,
|
|
Development
|
|
])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
drop_tables()
|
|
create_tables()
|