Refactoring: clean architecture project structure

This commit is contained in:
2025-08-09 15:18:42 +03:00
parent 40e207bdb2
commit 8e133630d4
12 changed files with 265 additions and 188 deletions

49
main.go
View File

@@ -1,12 +1,18 @@
package main
import (
"database/sql"
"fmt"
"log"
"os"
"git.vakhrushev.me/av/transcriber/database"
"git.vakhrushev.me/av/transcriber/handlers"
"git.vakhrushev.me/av/transcriber/internal/controller/http"
"git.vakhrushev.me/av/transcriber/internal/repo/sqlite"
"github.com/doug-martin/goqu/v9"
_ "github.com/doug-martin/goqu/v9/dialect/sqlite3"
"github.com/gin-gonic/gin"
_ "github.com/mattn/go-sqlite3"
"github.com/pressly/goose/v3"
)
func main() {
@@ -15,29 +21,37 @@ func main() {
log.Fatal("Failed to create data/files directory:", err)
}
// Инициализируем базу данных
db, err := database.New("data/transcriber.db")
db, err := sql.Open("sqlite3", "data/transcriber.db")
if err != nil {
log.Fatal("Failed to initialize database:", err)
log.Fatalf("failed to open database: %v", err)
}
defer db.Close()
if err := db.Ping(); err != nil {
log.Fatalf("failed to ping database: %v", err)
}
gq := goqu.New("sqlite3", db)
// Запускаем миграции
if err := db.RunMigrations("migrations"); err != nil {
if err := RunMigrations(db, "migrations"); err != nil {
log.Fatal("Failed to run migrations:", err)
}
fileRepo := sqlite.NewFileRepository(db, gq)
jobRepo := sqlite.NewTranscriptJobRepository(db, gq)
// Инициализируем обработчики
transcribeHandler := http.NewTranscribeHandler(jobRepo, fileRepo)
// Создаем Gin роутер
r := gin.Default()
// Инициализируем обработчики
transcribeHandler := handlers.NewTranscribeHandler(db)
// Настраиваем роуты
api := r.Group("/api")
{
api.POST("/transcribe", transcribeHandler.UploadAndTranscribe)
api.GET("/transcribe/:id", transcribeHandler.GetJobStatus)
api.POST("/transcribe/audio", transcribeHandler.CreateTranscribeJob)
api.GET("/transcribe/:id", transcribeHandler.GetTranscribeJobStatus)
}
// Добавляем middleware для обработки больших файлов
@@ -56,3 +70,16 @@ func main() {
log.Fatal("Failed to start server:", err)
}
}
func RunMigrations(db *sql.DB, migrationsDir string) error {
if err := goose.SetDialect("sqlite3"); err != nil {
return fmt.Errorf("failed to set goose dialect: %w", err)
}
if err := goose.Up(db, migrationsDir); err != nil {
return fmt.Errorf("failed to run migrations: %w", err)
}
log.Println("Migrations completed successfully")
return nil
}