James Tombleson
a1324ee1c1
* basic output looks to be working * cron was updated to add to the queue and post messages * new route to make discord webhook subscriptions * updated swag tags * swag * Updated delete subscription call * removed the time value as it throws off the msg template * updated logging * updated swagger * updated new subscription route * Updated logging and remove items from the queue if they dont have a subscription * updated getArticles to return the 50 newest for the portal * added endpoint to see if an item exists already * formatting * updated listArticles * added colors and updated the image * Updated to use the pointer in twitch * added the twitch login command to cron... it works now * found a better way to disable http2 for reddit. Test worked right away too * updated the cron tasks to run collected once and hour or longer depending on the service
116 lines
3.0 KiB
Go
116 lines
3.0 KiB
Go
package routes
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
|
|
//"net/http"
|
|
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
_ "github.com/lib/pq"
|
|
httpSwagger "github.com/swaggo/http-swagger"
|
|
|
|
"github.com/jtom38/newsbot/collector/database"
|
|
"github.com/jtom38/newsbot/collector/services/config"
|
|
)
|
|
|
|
type Server struct {
|
|
Router *chi.Mux
|
|
Db *database.Queries
|
|
ctx *context.Context
|
|
}
|
|
|
|
var (
|
|
ErrIdValueMissing string = "id value is missing"
|
|
ErrValueNotUuid string = "a value given was expected to be a uuid but was not correct."
|
|
ErrNoRecordFound string = "no record was found."
|
|
ErrUnableToConvertToJson string = "Unable to convert to json"
|
|
)
|
|
|
|
func NewServer(ctx context.Context) *Server {
|
|
s := &Server{
|
|
ctx: &ctx,
|
|
}
|
|
|
|
db, err := openDatabase(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
s.Db = db
|
|
|
|
s.Router = chi.NewRouter()
|
|
s.MountMiddleware()
|
|
s.MountRoutes()
|
|
return s
|
|
}
|
|
|
|
func openDatabase(ctx context.Context) (*database.Queries, error) {
|
|
_env := config.New()
|
|
connString := _env.GetConfig(config.Sql_Connection_String)
|
|
db, err := sql.Open("postgres", connString)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
queries := database.New(db)
|
|
return queries, err
|
|
}
|
|
|
|
func (s *Server) MountMiddleware() {
|
|
s.Router.Use(middleware.Logger)
|
|
s.Router.Use(middleware.Recoverer)
|
|
//s.Router.Use(middleware.Heartbeat())
|
|
}
|
|
|
|
func (s *Server) MountRoutes() {
|
|
s.Router.Get("/swagger/*", httpSwagger.Handler(
|
|
httpSwagger.URL("http://localhost:8081/swagger/doc.json"), //The url pointing to API definition
|
|
))
|
|
|
|
/* Root Routes */
|
|
s.Router.Get("/api/helloworld", helloWorld)
|
|
s.Router.Get("/api/hello/{who}", helloWho)
|
|
s.Router.Get("/api/ping", ping)
|
|
|
|
/* Article Routes */
|
|
s.Router.Get("/api/articles", s.listArticles)
|
|
s.Router.Route("/api/articles/{ID}", func(r chi.Router) {
|
|
r.Get("/", s.getArticleById)
|
|
})
|
|
s.Router.Get("/api/articles/by/sourceid", s.GetArticlesBySourceId)
|
|
|
|
/* Discord Queue */
|
|
s.Router.Get("/api/discord/queue", s.GetDiscordQueue)
|
|
|
|
/* Discord WebHooks */
|
|
s.Router.Post("/api/discord/webhooks/new", s.NewDiscordWebHook)
|
|
s.Router.Get("/api/discord/webhooks", s.GetDiscordWebHooks)
|
|
s.Router.Get("/api/discord/webhooks/byId", s.GetDiscordWebHooksById)
|
|
|
|
/* Settings */
|
|
s.Router.Get("/api/settings", s.getSettings)
|
|
|
|
/* Source Routes */
|
|
s.Router.Get("/api/config/sources", s.listSources)
|
|
|
|
/* Reddit Source Routes */
|
|
|
|
s.Router.Post("/api/config/sources/new/reddit", s.newRedditSource)
|
|
|
|
s.Router.Post("/api/config/sources/new/youtube", s.newYoutubeSource)
|
|
s.Router.Post("/api/config/sources/new/twitch", s.newTwitchSource)
|
|
s.Router.Route("/api/config/sources/{ID}", func(r chi.Router) {
|
|
r.Get("/", s.getSources)
|
|
r.Delete("/", s.deleteSources)
|
|
r.Post("/disable", s.disableSource)
|
|
r.Post("/enable", s.enableSource)
|
|
})
|
|
|
|
/* Subscriptions */
|
|
s.Router.Get("/api/subscriptions", s.ListSubscriptions)
|
|
s.Router.Get("/api/subscriptions/byDiscordId", s.GetSubscriptionsByDiscordId)
|
|
s.Router.Get("/api/subscriptions/bySourceId", s.GetSubscriptionsBySourceId)
|
|
s.Router.Post("/api/subscriptions/new/discordwebhook", s.newDiscordWebHookSubscription)
|
|
}
|