2024-02-10 21:05:08 +02:00
|
|
|
package repositories
|
|
|
|
|
2025-01-06 20:45:43 +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-10 21:05:08 +02:00
|
|
|
|
2024-12-18 19:39:57 +02:00
|
|
|
func (r *DataRepository) GetAllStoredProcedures(databaseId string, collectionId string) ([]repositorymodels.StoredProcedure, repositorymodels.RepositoryStatus) {
|
2025-01-06 20:45:43 +02:00
|
|
|
r.storeState.RLock()
|
|
|
|
defer r.storeState.RUnlock()
|
|
|
|
|
|
|
|
return maps.Values(r.storeState.StoredProcedures[databaseId][collectionId]), repositorymodels.StatusOk
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *DataRepository) GetStoredProcedure(databaseId string, collectionId string, spId string) (repositorymodels.StoredProcedure, repositorymodels.RepositoryStatus) {
|
|
|
|
r.storeState.RLock()
|
|
|
|
defer r.storeState.RUnlock()
|
|
|
|
|
|
|
|
if _, ok := r.storeState.Databases[databaseId]; !ok {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, ok := r.storeState.Collections[databaseId][collectionId]; !ok {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if sp, ok := r.storeState.StoredProcedures[databaseId][collectionId][spId]; ok {
|
|
|
|
return sp, repositorymodels.StatusOk
|
|
|
|
}
|
|
|
|
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *DataRepository) DeleteStoredProcedure(databaseId string, collectionId string, spId string) repositorymodels.RepositoryStatus {
|
|
|
|
r.storeState.Lock()
|
|
|
|
defer r.storeState.Unlock()
|
|
|
|
|
|
|
|
if _, ok := r.storeState.Databases[databaseId]; !ok {
|
|
|
|
return repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, ok := r.storeState.Collections[databaseId][collectionId]; !ok {
|
|
|
|
return repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, ok := r.storeState.StoredProcedures[databaseId][collectionId][spId]; !ok {
|
|
|
|
return repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
delete(r.storeState.StoredProcedures[databaseId][collectionId], spId)
|
|
|
|
|
|
|
|
return repositorymodels.StatusOk
|
|
|
|
}
|
|
|
|
|
|
|
|
func (r *DataRepository) CreateStoredProcedure(databaseId string, collectionId string, sp repositorymodels.StoredProcedure) (repositorymodels.StoredProcedure, repositorymodels.RepositoryStatus) {
|
|
|
|
r.storeState.Lock()
|
|
|
|
defer r.storeState.Unlock()
|
|
|
|
|
|
|
|
var ok bool
|
|
|
|
var database repositorymodels.Database
|
|
|
|
var collection repositorymodels.Collection
|
|
|
|
if sp.ID == "" {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.BadRequest
|
|
|
|
}
|
|
|
|
|
|
|
|
if database, ok = r.storeState.Databases[databaseId]; !ok {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if collection, ok = r.storeState.Collections[databaseId][collectionId]; !ok {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.StatusNotFound
|
|
|
|
}
|
|
|
|
|
|
|
|
if _, ok = r.storeState.StoredProcedures[databaseId][collectionId][sp.ID]; ok {
|
|
|
|
return repositorymodels.StoredProcedure{}, repositorymodels.Conflict
|
|
|
|
}
|
|
|
|
|
|
|
|
sp.TimeStamp = time.Now().Unix()
|
|
|
|
sp.ResourceID = resourceid.NewCombined(database.ResourceID, collection.ResourceID, resourceid.New())
|
|
|
|
sp.ETag = fmt.Sprintf("\"%s\"", uuid.New())
|
|
|
|
sp.Self = fmt.Sprintf("dbs/%s/colls/%s/sprocs/%s/", database.ResourceID, collection.ResourceID, sp.ResourceID)
|
|
|
|
|
|
|
|
r.storeState.StoredProcedures[databaseId][collectionId][sp.ID] = sp
|
|
|
|
|
|
|
|
return sp, repositorymodels.StatusOk
|
2024-02-10 21:05:08 +02:00
|
|
|
}
|