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.SetTimezone(os.Getenv("TIMEZONE")); err != nil { a.logger.Error("OpenDatabase", err) } 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.Responsible{}); 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", }) }