66 lines
2.2 KiB
Go
Raw Normal View History

2024-02-10 17:17:34 +02:00
package repositories
2024-02-24 20:00:47 +02:00
import (
"fmt"
"time"
"github.com/google/uuid"
repositorymodels "github.com/pikami/cosmium/internal/repository_models"
"github.com/pikami/cosmium/internal/resourceid"
"golang.org/x/exp/maps"
2024-02-24 20:00:47 +02:00
)
func (r *DataRepository) GetAllDatabases() ([]repositorymodels.Database, repositorymodels.RepositoryStatus) {
r.storeState.RLock()
defer r.storeState.RUnlock()
2024-12-08 17:54:58 +02:00
return maps.Values(r.storeState.Databases), repositorymodels.StatusOk
2024-02-10 17:17:34 +02:00
}
func (r *DataRepository) GetDatabase(id string) (repositorymodels.Database, repositorymodels.RepositoryStatus) {
r.storeState.RLock()
defer r.storeState.RUnlock()
2024-12-08 17:54:58 +02:00
if database, ok := r.storeState.Databases[id]; ok {
return database, repositorymodels.StatusOk
2024-02-10 17:17:34 +02:00
}
return repositorymodels.Database{}, repositorymodels.StatusNotFound
2024-02-10 17:17:34 +02:00
}
func (r *DataRepository) DeleteDatabase(id string) repositorymodels.RepositoryStatus {
r.storeState.Lock()
defer r.storeState.Unlock()
2024-12-08 17:54:58 +02:00
if _, ok := r.storeState.Databases[id]; !ok {
return repositorymodels.StatusNotFound
2024-02-10 17:17:34 +02:00
}
delete(r.storeState.Databases, id)
return repositorymodels.StatusOk
2024-02-10 17:17:34 +02:00
}
func (r *DataRepository) CreateDatabase(newDatabase repositorymodels.Database) (repositorymodels.Database, repositorymodels.RepositoryStatus) {
r.storeState.Lock()
defer r.storeState.Unlock()
2024-12-08 17:54:58 +02:00
if _, ok := r.storeState.Databases[newDatabase.ID]; ok {
return repositorymodels.Database{}, repositorymodels.Conflict
2024-02-10 17:17:34 +02:00
}
2024-02-24 20:00:47 +02:00
newDatabase.TimeStamp = time.Now().Unix()
newDatabase.ResourceID = resourceid.New()
newDatabase.ETag = fmt.Sprintf("\"%s\"", uuid.New())
newDatabase.Self = fmt.Sprintf("dbs/%s/", newDatabase.ResourceID)
r.storeState.Databases[newDatabase.ID] = newDatabase
r.storeState.Collections[newDatabase.ID] = make(map[string]repositorymodels.Collection)
r.storeState.Documents[newDatabase.ID] = make(map[string]map[string]repositorymodels.Document)
r.storeState.Triggers[newDatabase.ID] = make(map[string]map[string]repositorymodels.Trigger)
r.storeState.StoredProcedures[newDatabase.ID] = make(map[string]map[string]repositorymodels.StoredProcedure)
r.storeState.UserDefinedFunctions[newDatabase.ID] = make(map[string]map[string]repositorymodels.UserDefinedFunction)
return newDatabase, repositorymodels.StatusOk
2024-02-10 17:17:34 +02:00
}