Updating config and application struct and modifying api paths

Signed-off-by: Ethan Wellenreiter <ewellenreiter@gmail.com>
This commit is contained in:
Ethan Wellenreiter 2025-06-23 13:10:06 -04:00
parent b687b43b35
commit 9b9305db29

View File

@ -14,33 +14,43 @@ import (
"github.com/go-chi/httprate"
// "git.ewellenr.ca/receipt_indexer/backend/internal/auth"
"git.ewellenr.ca/receipt_indexer/backend/internal/env"
"git.ewellenr.ca/receipt_indexer/backend/internal/logger"
"git.ewellenr.ca/receipt_indexer/backend/internal/ratelimiter"
"git.ewellenr.ca/receipt_indexer/backend/internal/storage"
auth_storage "git.ewellenr.ca/receipt_indexer/backend/internal/storage/auth"
"git.ewellenr.ca/receipt_indexer/backend/internal/storage/cache"
)
type application struct {
// set up the configs stuff here
config config
auth auth_storage.AuthStorage
store storage.Storage
logger logger.Logger
cacheStorage cache.Storage
rateLimiter ratelimiter.Limiter
environment env.Environment
store storage.Storage // for user storage. also stores authentication stuff
logger logger.Logger // logging events/actions/issues
cacheStorage cache.Storage // for caching the storage
rateLimiter ratelimiter.Limiter // rate limiting users
environment env.Environment // accessing environment variables for the setup
}
type config struct {
addr string
storeCfg storeConfig
envCfg envConfig
apiUrl string
frontendUrl string
auth authConfig
mail mailConfig
cacheCfg redisConfig
rateLimiter ratelimiter.Config
redisCfg redisConfig
// holds the different stuff like rate limiter, store, authenticator
}
type storeConfig struct {
db dbConfig
authStore authConfig
}
type redisConfig struct {
addr string
pw string
@ -108,36 +118,49 @@ func (app *application) mount() http.Handler {
r.Route("/{groupID}", func(r chi.Router) {
r.Use(app.addGroupToContextMiddleware)
r.Get("/", app.getUsersGroupHandler)
r.Delete("/", app.removeUserGroupHandler) // maybe this should expect authentication headers to reverify the password when deleting a group you own.
r.Put("/owner", app.setGroupOwnerHandler)
r.Get("/owner", app.getGroupOwnerHandler)
r.Post("/moderator", app.addGroupModeratorHandler)
r.Put("/moderator", app.addGroupModeratorHandler)
r.Delete("/moderator/{secondaryuserID}", app.removeModeratorPriviligesHandler)
r.Get("/users", app.getGroupUsersHandler)
r.Post("/users", app.addGroupUserHandler) // needs to create a new user/do the whole invite thing if they don't already exist
r.Delete("/users/{secondaryuserID}", app.removeUserFromGroupHandler) // needs to check if the user is an owner/moderator
r.Route("/users", func(r chi.Router) {
r.Use(app.CheckGroupRoleMiddleware) // need to verify that they are an owner/moderator
r.Get("/", app.getGroupUsersHandler)
r.Post("/", app.addGroupUserHandler) // needs to create a new user/do the whole invite thing if they don't already exist
r.Delete("/{secondaryuserID}", app.removeUserFromGroupHandler) // needs to check if the user is an owner/moderator
})
})
})
r.Route("/receipts", func(r chi.Router) {
r.Get("/", app.getReceiptsHandler)
r.Use(app.addQueryParamsToContextMiddleware)
r.Get("/", app.getReceiptsHandler) // batch get. should allow pagination and potentially a filter of some sort in the request. Does not return images or anything like that. Just the basic data (id, amount, date, location/store)
r.Route("/{receiptID}", func(r chi.Router) {
r.Use(app.receiptContextMiddleware)
r.Get("/", app.getReceiptHandler)
r.Delete("/", app.deleteReceiptHandler)
r.Route("/images", func(r chi.Router) {
r.Get("/", app.getReceiptImagesHandler)
r.Put("/", app.addReceiptImageHandler)
r.Post("/", app.addReceiptImageHandler)
r.Route("/{imageID}", func(r chi.Router) {
r.Get("/", app.getReceiptImageHandler)
r.Put("/", app.changeReceiptImageHandler)
r.Delete("/", app.deleteReceiptImageHandler)
r.Post("/confirm", app.confirmImageCreationHandler)
r.Put("/confirm", app.confirmImageCreationHandler)
})
})
})