86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"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() {
|
|
// Создаем директории если они не существуют
|
|
if err := os.MkdirAll("data/files", 0755); err != nil {
|
|
log.Fatal("Failed to create data/files directory:", err)
|
|
}
|
|
|
|
db, err := sql.Open("sqlite3", "data/transcriber.db")
|
|
if err != nil {
|
|
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 := 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()
|
|
|
|
// Настраиваем роуты
|
|
api := r.Group("/api")
|
|
{
|
|
api.POST("/transcribe/audio", transcribeHandler.CreateTranscribeJob)
|
|
api.GET("/transcribe/:id", transcribeHandler.GetTranscribeJobStatus)
|
|
}
|
|
|
|
// Добавляем middleware для обработки больших файлов
|
|
r.MaxMultipartMemory = 32 << 20 // 32 MiB
|
|
|
|
// Добавляем базовый роут для проверки работоспособности
|
|
r.GET("/health", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{
|
|
"status": "ok",
|
|
"message": "Transcriber service is running",
|
|
})
|
|
})
|
|
|
|
log.Println("Starting server on :8080")
|
|
if err := r.Run(":8080"); err != nil {
|
|
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
|
|
}
|