James Tombleson
c161658487
* added a route to delete subscriptions based on the ID given * added a new route to find a record based on the name and source * added a route to query Discord Web Hooks by Server and Channel names * tested the endpoints and they seem good to test more
127 lines
3.6 KiB
Go
127 lines
3.6 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("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)
|
|
s.Router.Get("/api/discord/webhooks/by/serverAndChannel", s.GetDiscordWebHooksByServerAndChannel)
|
|
|
|
s.Router.Route("/api/discord/webhooks/{ID}", func(r chi.Router) {
|
|
r.Get("/", s.GetDiscordWebHooksById)
|
|
r.Delete("/", s.deleteDiscordWebHook)
|
|
r.Post("/disable", s.disableDiscordWebHook)
|
|
r.Post("/enable", s.enableDiscordWebHook)
|
|
})
|
|
|
|
/* Settings */
|
|
s.Router.Get("/api/settings", s.getSettings)
|
|
|
|
/* Source Routes */
|
|
s.Router.Get("/api/config/sources", s.listSources)
|
|
s.Router.Get("/api/config/sources/by/source", s.listSourcesBySource)
|
|
|
|
/* 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)
|
|
})
|
|
s.Router.Get("/api/config/sources/by/sourceAndName", s.GetSourceBySourceAndName)
|
|
|
|
/* 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)
|
|
s.Router.Delete("/api/subscriptions/discord/webhook/delete", s.DeleteDiscordWebHookSubscription)
|
|
}
|