mirror of
https://github.com/pikami/cosmium.git
synced 2025-12-19 08:50:46 +00:00
DataStore is interface now. Liskov would be proud.
This commit is contained in:
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
repositorymodels "github.com/pikami/cosmium/internal/repository_models"
|
||||
"github.com/pikami/cosmium/internal/datastore"
|
||||
)
|
||||
|
||||
//export CreateCollection
|
||||
@@ -20,15 +20,15 @@ func CreateCollection(serverName *C.char, databaseId *C.char, collectionJson *C.
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
var collection repositorymodels.Collection
|
||||
var collection datastore.Collection
|
||||
err := json.NewDecoder(strings.NewReader(collectionStr)).Decode(&collection)
|
||||
if err != nil {
|
||||
return ResponseFailedToParseRequest
|
||||
}
|
||||
|
||||
_, code := serverInstance.repository.CreateCollection(databaseIdStr, collection)
|
||||
_, code := serverInstance.dataStore.CreateCollection(databaseIdStr, collection)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
//export GetCollection
|
||||
@@ -43,8 +43,8 @@ func GetCollection(serverName *C.char, databaseId *C.char, collectionId *C.char)
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
collection, code := serverInstance.repository.GetCollection(databaseIdStr, collectionIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
collection, code := serverInstance.dataStore.GetCollection(databaseIdStr, collectionIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -66,8 +66,8 @@ func GetAllCollections(serverName *C.char, databaseId *C.char) *C.char {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
collections, code := serverInstance.repository.GetAllCollections(databaseIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
collections, code := serverInstance.dataStore.GetAllCollections(databaseIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ func DeleteCollection(serverName *C.char, databaseId *C.char, collectionId *C.ch
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
code := serverInstance.repository.DeleteCollection(databaseIdStr, collectionIdStr)
|
||||
code := serverInstance.dataStore.DeleteCollection(databaseIdStr, collectionIdStr)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
repositorymodels "github.com/pikami/cosmium/internal/repository_models"
|
||||
"github.com/pikami/cosmium/internal/datastore"
|
||||
)
|
||||
|
||||
//export CreateDatabase
|
||||
@@ -19,15 +19,15 @@ func CreateDatabase(serverName *C.char, databaseJson *C.char) int {
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
var database repositorymodels.Database
|
||||
var database datastore.Database
|
||||
err := json.NewDecoder(strings.NewReader(databaseStr)).Decode(&database)
|
||||
if err != nil {
|
||||
return ResponseFailedToParseRequest
|
||||
}
|
||||
|
||||
_, code := serverInstance.repository.CreateDatabase(database)
|
||||
_, code := serverInstance.dataStore.CreateDatabase(database)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
//export GetDatabase
|
||||
@@ -41,8 +41,8 @@ func GetDatabase(serverName *C.char, databaseId *C.char) *C.char {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
database, code := serverInstance.repository.GetDatabase(databaseIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
database, code := serverInstance.dataStore.GetDatabase(databaseIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -63,8 +63,8 @@ func GetAllDatabases(serverName *C.char) *C.char {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
databases, code := serverInstance.repository.GetAllDatabases()
|
||||
if code != repositorymodels.StatusOk {
|
||||
databases, code := serverInstance.dataStore.GetAllDatabases()
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ func DeleteDatabase(serverName *C.char, databaseId *C.char) int {
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
code := serverInstance.repository.DeleteDatabase(databaseIdStr)
|
||||
code := serverInstance.dataStore.DeleteDatabase(databaseIdStr)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
repositorymodels "github.com/pikami/cosmium/internal/repository_models"
|
||||
"github.com/pikami/cosmium/internal/datastore"
|
||||
)
|
||||
|
||||
//export CreateDocument
|
||||
@@ -21,15 +21,15 @@ func CreateDocument(serverName *C.char, databaseId *C.char, collectionId *C.char
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
var document repositorymodels.Document
|
||||
var document datastore.Document
|
||||
err := json.NewDecoder(strings.NewReader(documentStr)).Decode(&document)
|
||||
if err != nil {
|
||||
return ResponseFailedToParseRequest
|
||||
}
|
||||
|
||||
_, code := serverInstance.repository.CreateDocument(databaseIdStr, collectionIdStr, document)
|
||||
_, code := serverInstance.dataStore.CreateDocument(databaseIdStr, collectionIdStr, document)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
//export GetDocument
|
||||
@@ -45,8 +45,8 @@ func GetDocument(serverName *C.char, databaseId *C.char, collectionId *C.char, d
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
document, code := serverInstance.repository.GetDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
document, code := serverInstance.dataStore.GetDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -69,8 +69,8 @@ func GetAllDocuments(serverName *C.char, databaseId *C.char, collectionId *C.cha
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
documents, code := serverInstance.repository.GetAllDocuments(databaseIdStr, collectionIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
documents, code := serverInstance.dataStore.GetAllDocuments(databaseIdStr, collectionIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return C.CString("")
|
||||
}
|
||||
|
||||
@@ -95,19 +95,19 @@ func UpdateDocument(serverName *C.char, databaseId *C.char, collectionId *C.char
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
var document repositorymodels.Document
|
||||
var document datastore.Document
|
||||
err := json.Unmarshal([]byte(documentStr), &document)
|
||||
if err != nil {
|
||||
return ResponseFailedToParseRequest
|
||||
}
|
||||
|
||||
code := serverInstance.repository.DeleteDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
if code != repositorymodels.StatusOk {
|
||||
return repositoryStatusToResponseCode(code)
|
||||
code := serverInstance.dataStore.DeleteDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
if code != datastore.StatusOk {
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
_, code = serverInstance.repository.CreateDocument(databaseIdStr, collectionIdStr, document)
|
||||
return repositoryStatusToResponseCode(code)
|
||||
_, code = serverInstance.dataStore.CreateDocument(databaseIdStr, collectionIdStr, document)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
//export DeleteDocument
|
||||
@@ -123,7 +123,7 @@ func DeleteDocument(serverName *C.char, databaseId *C.char, collectionId *C.char
|
||||
return ResponseServerInstanceNotFound
|
||||
}
|
||||
|
||||
code := serverInstance.repository.DeleteDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
code := serverInstance.dataStore.DeleteDocument(databaseIdStr, collectionIdStr, documentIdStr)
|
||||
|
||||
return repositoryStatusToResponseCode(code)
|
||||
return dataStoreStatusToResponseCode(code)
|
||||
}
|
||||
|
||||
@@ -4,13 +4,12 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/pikami/cosmium/api"
|
||||
"github.com/pikami/cosmium/internal/repositories"
|
||||
repositorymodels "github.com/pikami/cosmium/internal/repository_models"
|
||||
"github.com/pikami/cosmium/internal/datastore"
|
||||
)
|
||||
|
||||
type ServerInstance struct {
|
||||
server *api.ApiServer
|
||||
repository *repositories.DataRepository
|
||||
server *api.ApiServer
|
||||
dataStore datastore.DataStore
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -21,17 +20,18 @@ var (
|
||||
const (
|
||||
ResponseSuccess = 0
|
||||
|
||||
ResponseUnknown = 100
|
||||
ResponseFailedToParseConfiguration = 101
|
||||
ResponseFailedToLoadState = 102
|
||||
ResponseFailedToParseRequest = 103
|
||||
ResponseServerInstanceAlreadyExists = 104
|
||||
ResponseServerInstanceNotFound = 105
|
||||
ResponseFailedToStartServer = 106
|
||||
ResponseUnknown = 100
|
||||
ResponseFailedToParseConfiguration = 101
|
||||
ResponseFailedToLoadState = 102
|
||||
ResponseFailedToParseRequest = 103
|
||||
ResponseServerInstanceAlreadyExists = 104
|
||||
ResponseServerInstanceNotFound = 105
|
||||
ResponseFailedToStartServer = 106
|
||||
ResponseCurentDataStoreDoesNotSupportStateLoading = 107
|
||||
|
||||
ResponseRepositoryNotFound = 200
|
||||
ResponseRepositoryConflict = 201
|
||||
ResponseRepositoryBadRequest = 202
|
||||
ResponseDataStoreNotFound = 200
|
||||
ResponseDataStoreConflict = 201
|
||||
ResponseDataStoreBadRequest = 202
|
||||
)
|
||||
|
||||
func getInstance(serverName string) (*ServerInstance, bool) {
|
||||
@@ -61,16 +61,16 @@ func removeInstance(serverName string) {
|
||||
delete(serverInstances, serverName)
|
||||
}
|
||||
|
||||
func repositoryStatusToResponseCode(status repositorymodels.RepositoryStatus) int {
|
||||
func dataStoreStatusToResponseCode(status datastore.DataStoreStatus) int {
|
||||
switch status {
|
||||
case repositorymodels.StatusOk:
|
||||
case datastore.StatusOk:
|
||||
return ResponseSuccess
|
||||
case repositorymodels.StatusNotFound:
|
||||
return ResponseRepositoryNotFound
|
||||
case repositorymodels.Conflict:
|
||||
return ResponseRepositoryConflict
|
||||
case repositorymodels.BadRequest:
|
||||
return ResponseRepositoryBadRequest
|
||||
case datastore.StatusNotFound:
|
||||
return ResponseDataStoreNotFound
|
||||
case datastore.Conflict:
|
||||
return ResponseDataStoreConflict
|
||||
case datastore.BadRequest:
|
||||
return ResponseDataStoreBadRequest
|
||||
default:
|
||||
return ResponseUnknown
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
|
||||
"github.com/pikami/cosmium/api"
|
||||
"github.com/pikami/cosmium/api/config"
|
||||
"github.com/pikami/cosmium/internal/repositories"
|
||||
mapdatastore "github.com/pikami/cosmium/internal/datastore/map_datastore"
|
||||
)
|
||||
|
||||
//export CreateServerInstance
|
||||
@@ -32,20 +32,20 @@ func CreateServerInstance(serverName *C.char, configurationJSON *C.char) int {
|
||||
configuration.ApplyDefaultsToEmptyFields()
|
||||
configuration.PopulateCalculatedFields()
|
||||
|
||||
repository := repositories.NewDataRepository(repositories.RepositoryOptions{
|
||||
dataStore := mapdatastore.NewMapDataStore(mapdatastore.MapDataStoreOptions{
|
||||
InitialDataFilePath: configuration.InitialDataFilePath,
|
||||
PersistDataFilePath: configuration.PersistDataFilePath,
|
||||
})
|
||||
|
||||
server := api.NewApiServer(repository, &configuration)
|
||||
server := api.NewApiServer(dataStore, &configuration)
|
||||
err = server.Start()
|
||||
if err != nil {
|
||||
return ResponseFailedToStartServer
|
||||
}
|
||||
|
||||
addInstance(serverNameStr, &ServerInstance{
|
||||
server: server,
|
||||
repository: repository,
|
||||
server: server,
|
||||
dataStore: dataStore,
|
||||
})
|
||||
|
||||
return ResponseSuccess
|
||||
@@ -69,7 +69,7 @@ func GetServerInstanceState(serverName *C.char) *C.char {
|
||||
serverNameStr := C.GoString(serverName)
|
||||
|
||||
if serverInstance, ok := getInstance(serverNameStr); ok {
|
||||
stateJSON, err := serverInstance.repository.GetState()
|
||||
stateJSON, err := serverInstance.dataStore.DumpToJson()
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
@@ -85,11 +85,14 @@ func LoadServerInstanceState(serverName *C.char, stateJSON *C.char) int {
|
||||
stateJSONStr := C.GoString(stateJSON)
|
||||
|
||||
if serverInstance, ok := getInstance(serverNameStr); ok {
|
||||
err := serverInstance.repository.LoadStateJSON(stateJSONStr)
|
||||
if err != nil {
|
||||
return ResponseFailedToLoadState
|
||||
if mapDS, ok := serverInstance.dataStore.(*mapdatastore.MapDataStore); ok {
|
||||
err := mapDS.LoadStateJSON(stateJSONStr)
|
||||
if err != nil {
|
||||
return ResponseFailedToLoadState
|
||||
}
|
||||
return ResponseSuccess
|
||||
}
|
||||
return ResponseSuccess
|
||||
return ResponseCurentDataStoreDoesNotSupportStateLoading
|
||||
}
|
||||
|
||||
return ResponseServerInstanceNotFound
|
||||
|
||||
Reference in New Issue
Block a user