memory.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package dbmanager
  2. import (
  3. "fmt"
  4. "git.linuxforward.com/byop/byop-engine/models"
  5. )
  6. // MemoryDbManager implements DbManager using in-memory storage
  7. type MemoryDbManager struct {
  8. // In-memory database storage
  9. // User storage
  10. users map[string]*models.User
  11. // Client storage
  12. clients map[string]*models.Client
  13. // Deployment storage
  14. deployments map[string]*models.Deployment
  15. // Other entity storage
  16. // ...
  17. }
  18. // NewMemoryDbManager creates a new MemoryDbManager
  19. func NewMemoryDbManager() *MemoryDbManager {
  20. return &MemoryDbManager{
  21. users: make(map[string]*models.User),
  22. clients: make(map[string]*models.Client),
  23. deployments: make(map[string]*models.Deployment),
  24. }
  25. }
  26. // Connect establishes a connection to the in-memory database
  27. func (m *MemoryDbManager) Connect() error {
  28. // No action needed for in-memory storage
  29. return nil
  30. }
  31. // Disconnect closes the connection to the in-memory database
  32. func (m *MemoryDbManager) Disconnect() error {
  33. // No action needed for in-memory storage
  34. return nil
  35. }
  36. // Exec executes a query against the in-memory database
  37. func (m *MemoryDbManager) Exec(query string, args ...interface{}) (interface{}, error) {
  38. // In-memory storage does not support complex queries
  39. // Implement simple query execution if needed
  40. return nil, fmt.Errorf("exec not supported in in-memory storage")
  41. }
  42. // Create creates a new entity in the in-memory database
  43. func (m *MemoryDbManager) Create(entityType string, entity interface{}) error {
  44. switch entityType {
  45. case "users":
  46. user, ok := entity.(*models.User)
  47. if !ok {
  48. return fmt.Errorf("invalid user type")
  49. }
  50. m.users[user.ID] = user
  51. case "clients":
  52. client, ok := entity.(*models.Client)
  53. if !ok {
  54. return fmt.Errorf("invalid client type")
  55. }
  56. m.clients[client.ID] = client
  57. case "deployments":
  58. deployment, ok := entity.(*models.Deployment)
  59. if !ok {
  60. return fmt.Errorf("invalid deployment type")
  61. }
  62. m.deployments[deployment.ID] = deployment
  63. default:
  64. return fmt.Errorf("unsupported entity type: %s", entityType)
  65. }
  66. return nil
  67. }
  68. // GetByID retrieves an entity by ID from the in-memory database
  69. func (m *MemoryDbManager) GetByID(entityType string, id string) (interface{}, error) {
  70. switch entityType {
  71. case "users":
  72. user, exists := m.users[id]
  73. if !exists {
  74. return nil, fmt.Errorf("user not found")
  75. }
  76. return user, nil
  77. case "clients":
  78. client, exists := m.clients[id]
  79. if !exists {
  80. return nil, fmt.Errorf("client not found")
  81. }
  82. return client, nil
  83. case "deployments":
  84. deployment, exists := m.deployments[id]
  85. if !exists {
  86. return nil, fmt.Errorf("deployment not found")
  87. }
  88. return deployment, nil
  89. default:
  90. return nil, fmt.Errorf("unsupported entity type: %s", entityType)
  91. }
  92. }
  93. // Update updates an existing entity in the in-memory database
  94. func (m *MemoryDbManager) Update(entityType string, entity interface{}) error {
  95. switch entityType {
  96. case "users":
  97. user, ok := entity.(*models.User)
  98. if !ok {
  99. return fmt.Errorf("invalid user type")
  100. }
  101. m.users[user.ID] = user
  102. case "clients":
  103. client, ok := entity.(*models.Client)
  104. if !ok {
  105. return fmt.Errorf("invalid client type")
  106. }
  107. m.clients[client.ID] = client
  108. case "deployments":
  109. deployment, ok := entity.(*models.Deployment)
  110. if !ok {
  111. return fmt.Errorf("invalid deployment type")
  112. }
  113. m.deployments[deployment.ID] = deployment
  114. default:
  115. return fmt.Errorf("unsupported entity type: %s", entityType)
  116. }
  117. return nil
  118. }
  119. // Delete deletes an entity by ID from the in-memory database
  120. func (m *MemoryDbManager) Delete(entityType string, id string) error {
  121. switch entityType {
  122. case "users":
  123. delete(m.users, id)
  124. case "clients":
  125. delete(m.clients, id)
  126. case "deployments":
  127. delete(m.deployments, id)
  128. default:
  129. return fmt.Errorf("unsupported entity type: %s", entityType)
  130. }
  131. return nil
  132. }
  133. // ListByFilter retrieves entities based on a filter from the in-memory database
  134. func (m *MemoryDbManager) List(entityType string, filter map[string]interface{}) ([]interface{}, error) {
  135. switch entityType {
  136. case "users":
  137. users := make([]interface{}, 0, len(m.users))
  138. for _, user := range m.users {
  139. if matchesFilter(user, filter) {
  140. users = append(users, user)
  141. }
  142. }
  143. return users, nil
  144. case "clients":
  145. clients := make([]interface{}, 0, len(m.clients))
  146. for _, client := range m.clients {
  147. if matchesFilter(client, filter) {
  148. clients = append(clients, client)
  149. }
  150. }
  151. return clients, nil
  152. case "deployments":
  153. deployments := make([]interface{}, 0, len(m.deployments))
  154. for _, deployment := range m.deployments {
  155. if matchesFilter(deployment, filter) {
  156. deployments = append(deployments, deployment)
  157. }
  158. }
  159. return deployments, nil
  160. default:
  161. return nil, fmt.Errorf("unsupported entity type: %s", entityType)
  162. }
  163. }
  164. // matchesFilter checks if an entity matches the given filter
  165. func matchesFilter(entity interface{}, filter map[string]interface{}) bool {
  166. // Implement your filtering logic here
  167. // For example, check if the entity's fields match the filter criteria
  168. return true // Placeholder, implement actual filtering logic
  169. }