97 lines
2.0 KiB
Go
97 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"screenmark/screenmark/agents/client"
|
|
"screenmark/screenmark/auth"
|
|
"screenmark/screenmark/images"
|
|
"screenmark/screenmark/models"
|
|
"screenmark/screenmark/stacks"
|
|
|
|
ourmiddleware "screenmark/screenmark/middleware"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type TestAiClient struct {
|
|
ImageInfo client.ImageMessageContent
|
|
}
|
|
|
|
func (client TestAiClient) GetImageInfo(imageName string, imageData []byte) (client.ImageMessageContent, error) {
|
|
return client.ImageInfo, nil
|
|
}
|
|
|
|
func setupRouter(db *sql.DB) chi.Router {
|
|
imageModel := models.NewImageModel(db)
|
|
|
|
stackHandler := stacks.CreateStackHandler(db)
|
|
authHandler := auth.CreateAuthHandler(db)
|
|
imageHandler := images.CreateImageHandler(db)
|
|
|
|
notifier := NewNotifier[Notification](10)
|
|
|
|
// Only start event listeners if not in test environment
|
|
if os.Getenv("GO_TEST_ENVIRONMENT") != "true" {
|
|
go ListenNewImageEvents(db, ¬ifier)
|
|
go ListenProcessingImageStatus(db, imageModel, ¬ifier)
|
|
go ListenNewStackEvents(db)
|
|
}
|
|
|
|
r := chi.NewRouter()
|
|
|
|
r.Use(middleware.Logger)
|
|
r.Use(ourmiddleware.CorsMiddleware)
|
|
|
|
r.Route("/stacks", stackHandler.CreateRoutes)
|
|
r.Route("/auth", authHandler.CreateRoutes)
|
|
r.Route("/images", imageHandler.CreateRoutes)
|
|
|
|
r.Route("/notifications", func(r chi.Router) {
|
|
r.Use(ourmiddleware.GetUserIdFromUrl)
|
|
|
|
r.Get("/", CreateEventsHandler(¬ifier))
|
|
})
|
|
|
|
logWriter := DatabaseWriter{
|
|
dbPool: db,
|
|
}
|
|
|
|
r.Route("/logs", createLogHandler(&logWriter))
|
|
|
|
return r
|
|
}
|
|
|
|
func main() {
|
|
err := godotenv.Load()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
db, err := models.InitDatabase()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
router := setupRouter(db)
|
|
|
|
port, exists := os.LookupEnv("PORT")
|
|
if !exists {
|
|
panic("no port can be found")
|
|
}
|
|
|
|
portWithColon := fmt.Sprintf(":%s", port)
|
|
|
|
logger := createLogger("Main", os.Stdout)
|
|
|
|
logger.Info("Serving router", "port", portWithColon)
|
|
err = http.ListenAndServe(portWithColon, router)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|