472bf8b732
Co-Authored-By: Codex <noreply@openai.com>
60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package service
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/basketikun/infinite-canvas/model"
|
|
"github.com/basketikun/infinite-canvas/repository"
|
|
)
|
|
|
|
func ListPrompts(q model.Query) (model.PromptList, error) {
|
|
items, total, err := repository.ListPrompts(q)
|
|
if err != nil {
|
|
return model.PromptList{}, err
|
|
}
|
|
tags, err := repository.ListPromptTags(q)
|
|
if err != nil {
|
|
return model.PromptList{}, err
|
|
}
|
|
categories := promptCategoryCodes(ListPromptCategories())
|
|
return model.PromptList{Items: items, Tags: tags, Categories: categories, Total: int(total)}, nil
|
|
}
|
|
|
|
func ListPromptCategories() []model.PromptCategory {
|
|
categories, _ := repository.ListPromptCategories()
|
|
return categories
|
|
}
|
|
|
|
func SavePrompt(item model.Prompt) (model.Prompt, error) {
|
|
now := time.Now().Format(time.RFC3339)
|
|
if item.Category == "" {
|
|
item.Category = repository.PromptCategories()[0].Category
|
|
}
|
|
if item.ID == "" {
|
|
item.ID = newID(item.Category)
|
|
item.CreatedAt = now
|
|
}
|
|
item.UpdatedAt = now
|
|
category, ok := repository.PromptCategoryByCode(item.Category)
|
|
if !ok {
|
|
category = repository.PromptCategories()[0]
|
|
item.Category = category.Category
|
|
}
|
|
item.GithubURL = ""
|
|
return repository.SavePrompt(item)
|
|
}
|
|
|
|
func DeletePrompt(id string) error {
|
|
return repository.DeletePrompt(id)
|
|
}
|
|
|
|
func promptCategoryCodes(items []model.PromptCategory) []string {
|
|
codes := []string{}
|
|
for _, item := range items {
|
|
if item.Category != "" {
|
|
codes = append(codes, item.Category)
|
|
}
|
|
}
|
|
return codes
|
|
}
|