Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

project_dao.go 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package dao
  2. import (
  3. "context"
  4. "fmt"
  5. "git.x2erp.com/qdy/go-svc-configure/internal/tables"
  6. "github.com/jmoiron/sqlx"
  7. )
  8. // CreateProject 创建项目
  9. func CreateProject(ctx context.Context, tx *sqlx.Tx, projectID, description, mcpURL, creator string) (int64, error) {
  10. id := fmt.Sprintf("project.%s", projectID)
  11. query := `
  12. INSERT INTO config_project
  13. (id, project_id, description, mcp_url, creator, created_at)
  14. VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
  15. `
  16. result, err := tx.ExecContext(ctx, query, id, projectID, description, mcpURL, creator)
  17. if err != nil {
  18. return -1, fmt.Errorf("创建项目失败: %v", err)
  19. }
  20. return ValidateResultRowsAffected(result, err, 1)
  21. }
  22. // GetProjectByProjectID 根据项目ID查询项目
  23. func GetProjectByProjectID(ctx context.Context, db *sqlx.DB, projectID string) (*tables.ProjectDB, error) {
  24. var project tables.ProjectDB
  25. query := `
  26. SELECT id, project_id, description, mcp_url, creator, created_at
  27. FROM config_project
  28. WHERE project_id = ?
  29. `
  30. err := db.GetContext(ctx, &project, query, projectID)
  31. if err != nil {
  32. return nil, fmt.Errorf("查询项目失败: %v", err)
  33. }
  34. return &project, nil
  35. }
  36. // ListProjects 查询项目列表
  37. func ListProjects(ctx context.Context, db *sqlx.DB) ([]tables.ProjectDB, error) {
  38. var projects []tables.ProjectDB
  39. query := `
  40. SELECT id, project_id, description, mcp_url, creator, created_at
  41. FROM config_project
  42. ORDER BY created_at DESC
  43. `
  44. err := db.SelectContext(ctx, &projects, query)
  45. if err != nil {
  46. return nil, fmt.Errorf("查询项目列表失败: %v", err)
  47. }
  48. return projects, nil
  49. }
  50. // UpdateProject 更新项目信息
  51. func UpdateProject(ctx context.Context, tx *sqlx.Tx, projectID, description, mcpURL string) (int64, error) {
  52. query := `
  53. UPDATE config_project
  54. SET description = ?, mcp_url = ?
  55. WHERE project_id = ?
  56. `
  57. result, err := tx.ExecContext(ctx, query, description, mcpURL, projectID)
  58. if err != nil {
  59. return -1, fmt.Errorf("更新项目失败: %v", err)
  60. }
  61. return ValidateResultRowsAffected(result, err, 1)
  62. }
  63. // DeleteProject 删除项目
  64. func DeleteProject(ctx context.Context, tx *sqlx.Tx, projectID string) (int64, error) {
  65. query := `DELETE FROM config_project WHERE project_id = ?`
  66. result, err := tx.ExecContext(ctx, query, projectID)
  67. if err != nil {
  68. return -1, fmt.Errorf("删除项目失败: %v", err)
  69. }
  70. return ValidateResultRowsAffected(result, err, 1)
  71. }
  72. // CheckProjectExists 检查项目是否存在
  73. func CheckProjectExists(ctx context.Context, db *sqlx.DB, projectID string) (bool, error) {
  74. var count int
  75. query := `SELECT COUNT(*) FROM config_project WHERE project_id = ?`
  76. err := db.GetContext(ctx, &count, query, projectID)
  77. if err != nil {
  78. return false, fmt.Errorf("检查项目存在性失败: %v", err)
  79. }
  80. return count > 0, nil
  81. }