chore: add storage logger and handler in /int

This commit is contained in:
d3m0k1d
2026-02-03 18:03:53 +03:00
parent c2bceaf479
commit a56fe30f83
9 changed files with 128 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
.PHONY: test build clean lint .PHONY: test build clean lint dev
test: test:
@@ -15,3 +15,7 @@ clean:
lint: lint:
golangci-lint run --fix golangci-lint run --fix
dev:
swag init -g ./cmd/main.go --parseDependency --parseInternal
go run ./cmd/main.go

View File

@@ -1,18 +1,31 @@
package main package main
import ( import (
docs "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/docs" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/docs"
_ "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/handlers"
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
) )
func main() { func main() {
log := logger.New(false)
router := gin.Default() router := gin.Default()
// Swagger config
docs.SwaggerInfo.BasePath = "/api/v1" docs.SwaggerInfo.BasePath = "/api/v1"
docs.SwaggerInfo.Title = "d3m0k1d.ru" docs.SwaggerInfo.Title = "d3m0k1d.ru API"
docs.SwaggerInfo.Version = "1.0" docs.SwaggerInfo.Version = "1.0"
err := router.Run() docs.SwaggerInfo.Description = "API for d3m0k1d.ru"
if err != nil { docs.SwaggerInfo.Host = "d3m0k1d.ru"
docs.SwaggerInfo.Schemes = []string{"https"}
router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
log.Info("Starting server on :8080...")
if err := router.Run(":8080"); err != nil {
log.Error("Error starting server: " + err.Error())
panic(err) panic(err)
} }
} }

View File

@@ -62,6 +62,7 @@ require (
golang.org/x/text v0.33.0 // indirect golang.org/x/text v0.33.0 // indirect
golang.org/x/tools v0.41.0 // indirect golang.org/x/tools v0.41.0 // indirect
google.golang.org/protobuf v1.36.11 // indirect google.golang.org/protobuf v1.36.11 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
modernc.org/libc v1.67.6 // indirect modernc.org/libc v1.67.6 // indirect

View File

@@ -169,6 +169,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -0,0 +1,7 @@
package handlers
import (
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger"
)
var log = logger.New(false)

View File

@@ -0,0 +1,45 @@
package logger
import (
"io"
"log/slog"
"os"
"path/filepath"
"gopkg.in/natefinch/lumberjack.v2"
)
type Logger struct {
*slog.Logger
}
func New(debug bool) *Logger {
logDir := "/var/log/banforge"
if err := os.MkdirAll(logDir, 0750); err != nil {
return nil
}
fileWriter := &lumberjack.Logger{
Filename: filepath.Join(logDir, "banforge.log"),
MaxSize: 500,
MaxBackups: 3,
MaxAge: 28,
Compress: true,
}
var level slog.Level
if debug {
level = slog.LevelDebug
} else {
level = slog.LevelInfo
}
multiWriter := io.MultiWriter(fileWriter, os.Stdout)
handler := slog.NewTextHandler(multiWriter, &slog.HandlerOptions{
Level: level,
})
return &Logger{
Logger: slog.New(handler),
}
}

View File

@@ -0,0 +1,32 @@
package storage
import (
"database/sql"
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger"
_ "modernc.org/sqlite"
"os"
)
var db_path = os.Getenv("DB_PATH")
func CreateTables() error {
logger := logger.New(false)
db, err := sql.Open("sqlite", db_path)
if err != nil {
logger.Error(err.Error())
return err
}
_, err = db.Exec(Migrations)
if err != nil {
logger.Error(err.Error())
return err
}
defer func() {
err = db.Close()
if err != nil {
logger.Error(err.Error())
}
}()
return nil
}

View File

@@ -0,0 +1,10 @@
package storage
const Migrations = `
CREATE TABLE IF NOT EXISTS posts(
id INTEGER PRIMARY KEY AUTOINCREMENT
title TEXT NOT NULL
content TEXT NOT NULL
CREATED_AT DATETIME DEFAULT CURRENT_TIMESTAMP
);
`

View File

@@ -0,0 +1,8 @@
package storage
type Post struct {
ID int `db:"id"`
Title string `db:"title"`
Content string `db:"content"`
CreatedAt string `db:"created_at"`
}