initial import

This commit is contained in:
2026-01-23 14:41:49 +02:00
commit 772657d9be
37 changed files with 11382 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
package server
import (
//"io/ioutil"
"os"
"os/signal"
"os/user"
//"os/user"
//"path/filepath"
//"strconv"
//"sync"
"syscall"
//"time"
"mstore/app/database"
"mstore/app/handler"
"mstore/app/logger"
"mstore/app/operator"
"mstore/app/service"
)
type Server struct {
oper *operator.Operator
svc *service.Service
db *database.Database
hand *handler.Handler
logg *logger.Logger
}
func NewServer() (*Server, error) {
var err error
srv := &Server{}
srv.logg = logger.NewLogger("server")
return srv, err
}
func (srv *Server) Handler() *handler.Handler {
return srv.hand
}
func (srv *Server) Configure() error {
var err error
srv.logg.Infof("Server configure")
return err
}
func (srv *Server) Build() error {
var err error
srv.logg.Infof("Server build")
// Database create
databaseParams := &database.DatabaseParams{}
srv.db, err = database.NewDatabase(databaseParams)
if err != nil {
return err
}
// Operator create
operatorParams := &operator.OperatorParams{
Database: srv.db,
}
srv.oper, err = operator.NewOperator(operatorParams)
if err != nil {
return err
}
// Handler create
handlerParams := &handler.HandlerParams{
Operator: srv.oper,
}
srv.hand, err = handler.NewHandler(handlerParams)
if err != nil {
return err
}
// Service create
serviceParams := &service.ServiceParams{
Handler: srv.hand,
}
srv.svc, err = service.NewService(serviceParams)
if err != nil {
return err
}
// Service build
err = srv.svc.Build()
if err != nil {
return err
}
return err
}
func (srv *Server) Run() error {
var err error
currUser, err := user.Current()
if err != nil {
return err
}
srv.logg.Infof("Server run as user %s", currUser.Username)
sigs := make(chan os.Signal, 1)
svcDone := make(chan error, 1)
// Service run
startService := func(svc *service.Service, done chan error) {
err = svc.Run()
if err != nil {
srv.logg.Errorf("Service error: %v", err)
done <- err
}
}
go startService(srv.svc, svcDone)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
var signal os.Signal
select {
case signal = <-sigs:
srv.logg.Infof("Services stopped by signal: %v", signal)
srv.svc.Stop()
case err = <-svcDone:
srv.logg.Infof("Service stopped by service error: %v", err)
srv.svc.Stop()
}
return err
}