@@ -45,7 +45,7 @@ func SaveModelProvider(config ModelProvider) error {
4545
4646 // Update
4747 _ , err := DB .NamedExec (`
48- UPDATE model_providers
48+ UPDATE projects
4949 SET name = :name, type = :type, api_key = :api_key, base_url = :base_url, updated_at = CURRENT_TIMESTAMP
5050 WHERE id = :id
5151 ` , config )
@@ -68,3 +68,63 @@ func ListModelProviders() ([]ModelProvider, error) {
6868 }
6969 return configs , nil
7070}
71+
72+ // GetProject retrieves a project by ID
73+ func GetProject (id int ) (* Project , error ) {
74+ var project Project
75+ err := DB .Get (& project , "SELECT * FROM projects WHERE id = ?" , id )
76+ if err != nil {
77+ if errors .Is (err , sql .ErrNoRows ) {
78+ return nil , nil // Not found
79+ }
80+ return nil , err
81+ }
82+ return & project , nil
83+ }
84+
85+ // SaveProject saves or updates a project
86+ func SaveProject (project Project ) (* Project , error ) {
87+ if project .ID == 0 {
88+ // Insert
89+ result , err := DB .NamedExec (`
90+ INSERT INTO projects (name, description, workflow, cover_image, created_at, updated_at)
91+ VALUES (:name, :description, :workflow, :cover_image, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
92+ ` , project )
93+ if err != nil {
94+ return nil , err
95+ }
96+ id , err := result .LastInsertId ()
97+ if err != nil {
98+ return nil , err
99+ }
100+ project .ID = int (id )
101+ return GetProject (project .ID )
102+ }
103+
104+ // Update
105+ _ , err := DB .NamedExec (`
106+ UPDATE projects
107+ SET name = :name, description = :description, workflow = :workflow, cover_image = :cover_image, updated_at = CURRENT_TIMESTAMP
108+ WHERE id = :id
109+ ` , project )
110+ if err != nil {
111+ return nil , err
112+ }
113+ return GetProject (project .ID )
114+ }
115+
116+ // DeleteProject deletes a project
117+ func DeleteProject (id int ) error {
118+ _ , err := DB .Exec ("DELETE FROM projects WHERE id = ?" , id )
119+ return err
120+ }
121+
122+ // ListProjects lists all projects
123+ func ListProjects () ([]Project , error ) {
124+ var projects []Project
125+ err := DB .Select (& projects , "SELECT * FROM projects ORDER BY updated_at DESC" )
126+ if err != nil {
127+ return nil , err
128+ }
129+ return projects , nil
130+ }
0 commit comments