Files
memberDB/api/apiHandler.go
2025-11-13 16:20:04 +01:00

106 lines
2.6 KiB
Go

package api
import (
"fmt"
"net/http"
"os"
"path/filepath"
"gitea.tecamino.com/paadi/memberDB/handlers"
"gitea.tecamino.com/paadi/memberDB/models"
"gitea.tecamino.com/paadi/tecamino-logger/logging"
"github.com/gin-gonic/gin"
)
type APIHandler struct {
DbHandler *handlers.DatabaseHandler
//dataHandler *dbHandler.DBHandler
logger *logging.Logger
}
func NewAPIHandler(logger *logging.Logger) (aH *APIHandler, err error) {
if logger == nil {
logger, err = logging.NewLogger("memberDb.log", logging.DefaultConfig())
if err != nil {
return nil, err
}
}
logger.Debug("NewAPIHandler", "initialize new api handler")
aH = &APIHandler{logger: logger}
return
}
func (a *APIHandler) DBHandlerIsInitialized() bool {
return a.DbHandler != nil
}
func (a *APIHandler) OpenDatabase(c *gin.Context) {
var database models.Database
var err error
if err := c.BindJSON(&database); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"message": err.Error(),
})
return
}
if database.Path == "" {
a.logger.Debug("OpenDatabase", "set default database path")
database.SetDefaultPath()
}
if database.Token == "" {
a.logger.Debug("OpenDatabase", "set default token")
database.SetDefaultToken()
}
if _, err := os.Stat(database.Path); err != nil && !database.Create {
a.logger.Error("OpenDatabase", fmt.Sprintf("%s not found", database.Path))
c.JSON(http.StatusBadRequest, gin.H{
"message": fmt.Sprintf("%s not found", database.Path),
})
return
}
dbName := filepath.Base(database.Path)
folderpath := filepath.Dir(database.Path)
a.DbHandler, err = handlers.NewDatabaseHandler(dbName, folderpath, a.logger)
if err != nil {
a.logger.Error("OpenDatabase", err)
c.JSON(http.StatusInternalServerError, nil)
return
}
if err := a.DbHandler.AddNewTable(&models.Member{}); err != nil {
a.logger.Error("OpenDatabase", err)
c.JSON(http.StatusInternalServerError, nil)
return
}
if err := a.DbHandler.AddNewTable(&models.Event{}); err != nil {
a.logger.Error("OpenDatabase", err)
c.JSON(http.StatusInternalServerError, nil)
return
}
if err := a.DbHandler.AddNewTable(&models.Person{}); err != nil {
a.logger.Error("OpenDatabase", err)
c.JSON(http.StatusInternalServerError, nil)
return
}
if err := a.DbHandler.AddNewTable(&models.Group{}); err != nil {
a.logger.Error("OpenDatabase", err)
c.JSON(http.StatusInternalServerError, nil)
return
}
a.DbHandler.SetToken(database.Token)
c.JSON(http.StatusOK, gin.H{
"message": "database opened",
})
}