mirror of https://github.com/pikami/cosmium.git
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package repositories
|
|
|
|
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"
|
|
)
|
|
|
|
func GetAllDatabases() ([]repositorymodels.Database, repositorymodels.RepositoryStatus) {
|
|
return maps.Values(storeState.Databases), repositorymodels.StatusOk
|
|
}
|
|
|
|
func GetDatabase(id string) (repositorymodels.Database, repositorymodels.RepositoryStatus) {
|
|
if database, ok := storeState.Databases[id]; ok {
|
|
return database, repositorymodels.StatusOk
|
|
}
|
|
|
|
return repositorymodels.Database{}, repositorymodels.StatusNotFound
|
|
}
|
|
|
|
func DeleteDatabase(id string) repositorymodels.RepositoryStatus {
|
|
if _, ok := storeState.Databases[id]; !ok {
|
|
return repositorymodels.StatusNotFound
|
|
}
|
|
|
|
delete(storeState.Databases, id)
|
|
|
|
return repositorymodels.StatusOk
|
|
}
|
|
|
|
func CreateDatabase(newDatabase repositorymodels.Database) (repositorymodels.Database, repositorymodels.RepositoryStatus) {
|
|
if _, ok := storeState.Databases[newDatabase.ID]; ok {
|
|
return repositorymodels.Database{}, repositorymodels.Conflict
|
|
}
|
|
|
|
newDatabase.TimeStamp = time.Now().Unix()
|
|
newDatabase.ResourceID = resourceid.New()
|
|
newDatabase.ETag = fmt.Sprintf("\"%s\"", uuid.New())
|
|
newDatabase.Self = fmt.Sprintf("dbs/%s/", newDatabase.ResourceID)
|
|
|
|
storeState.Databases[newDatabase.ID] = newDatabase
|
|
storeState.Collections[newDatabase.ID] = make(map[string]repositorymodels.Collection)
|
|
storeState.Documents[newDatabase.ID] = make(map[string]map[string]repositorymodels.Document)
|
|
|
|
return newDatabase, repositorymodels.StatusOk
|
|
}
|