newsbot-api/cmd/server.go

91 lines
2.0 KiB
Go
Raw Normal View History

package main
import (
"context"
"database/sql"
"errors"
"fmt"
"os"
2024-04-26 16:02:14 -07:00
_ "github.com/glebarez/go-sqlite"
"github.com/pressly/goose/v3"
2024-04-23 07:15:38 -07:00
"git.jamestombleson.com/jtom38/newsbot-api/docs"
2024-05-01 18:27:03 -07:00
v1 "git.jamestombleson.com/jtom38/newsbot-api/internal/handler/v1"
2024-04-23 07:15:38 -07:00
"git.jamestombleson.com/jtom38/newsbot-api/internal/services"
"git.jamestombleson.com/jtom38/newsbot-api/internal/services/cron"
)
// @title NewsBot collector
// @version 0.1
// @BasePath /api
// @securityDefinitions.apikey Bearer
// @in header
// @name Authorization
// @description Type "Bearer" followed by a space and JWT token.
func main() {
2024-04-26 16:02:14 -07:00
ctx := context.Background()
2024-04-23 07:15:38 -07:00
cfg := services.NewConfig()
2024-04-26 16:02:14 -07:00
configs := services.GetEnvConfig()
2024-04-23 07:15:38 -07:00
address := cfg.GetConfig(services.ServerAddress)
docs.SwaggerInfo.Host = fmt.Sprintf("%v:8081", address)
2024-04-26 16:02:14 -07:00
db, err := sql.Open("sqlite", "newsbot.db")
if err != nil {
panic(err)
}
err = migrateDatabase(db)
2024-04-26 16:02:14 -07:00
if err != nil {
fmt.Print(err)
}
2024-05-01 18:27:03 -07:00
c := cron.NewScheduler(ctx, db)
c.Start()
2024-05-02 17:38:30 -07:00
server := v1.NewServer(ctx, configs, db)
fmt.Println("API is online and waiting for requests.")
2024-04-26 16:02:14 -07:00
fmt.Printf("API: http://%v:8081/api\r\n", configs.ServerAddress)
fmt.Printf("Swagger: http://%v:8081/swagger/index.html\r\n", configs.ServerAddress)
2024-05-02 17:38:30 -07:00
server.Router.Start(":8081")
}
func migrateDatabase(db *sql.DB) error {
err := goose.SetDialect("sqlite3")
if err != nil {
panic(err)
}
err = goose.Up(db, "../internal/database/migrations")
if err != nil {
panic(err)
}
_, err = os.Stat("./migrations")
if err == nil {
err = goose.Up(db, "../internal/database/migrations")
if err != nil {
panic(err)
}
return nil
}
_, err = os.Stat("../internal/database/migrations")
if err == nil {
err = goose.Up(db, "../internal/database/migrations")
if err != nil {
panic(err)
}
return nil
}
return errors.New("failed to find the migration files")
}