180 lines
4.9 KiB
Go
180 lines
4.9 KiB
Go
package public
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"git.ma-al.com/goc_marek/timetracker/app/config"
|
|
"git.ma-al.com/goc_marek/timetracker/app/service/repoService"
|
|
"git.ma-al.com/goc_marek/timetracker/app/utils/pagination"
|
|
"git.ma-al.com/goc_marek/timetracker/app/view"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
// RepoHandler handles endpoints asking for repository data (to create charts)
|
|
type RepoHandler struct {
|
|
repoService *repoService.RepoService
|
|
config *config.Config
|
|
}
|
|
|
|
// NewRepoHandler creates a new RepoHandler instance
|
|
func NewRepoHandler() *RepoHandler {
|
|
repoService := repoService.New()
|
|
return &RepoHandler{
|
|
repoService: repoService,
|
|
config: config.Get(),
|
|
}
|
|
}
|
|
|
|
// RepoHandlerRoutes registers all repo routes
|
|
func RepoHandlerRoutes(r fiber.Router) fiber.Router {
|
|
handler := NewRepoHandler()
|
|
|
|
r.Get("/get-repos", handler.GetRepoIDs)
|
|
r.Get("/get-years", handler.GetYears)
|
|
r.Get("/get-quarters", handler.GetQuarters)
|
|
r.Get("/get-issues", handler.GetIssues)
|
|
|
|
return r
|
|
}
|
|
|
|
func (h *RepoHandler) GetRepoIDs(c fiber.Ctx) error {
|
|
userID, ok := c.Locals("userID").(uint)
|
|
if !ok {
|
|
return c.Status(view.GetErrorStatus(view.ErrInvalidBody)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrInvalidBody),
|
|
})
|
|
}
|
|
|
|
response, err := h.repoService.GetRepositoriesForUser(userID)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(err)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, err),
|
|
})
|
|
}
|
|
|
|
return c.JSON(response)
|
|
}
|
|
|
|
func (h *RepoHandler) GetYears(c fiber.Ctx) error {
|
|
userID, ok := c.Locals("userID").(uint)
|
|
if !ok {
|
|
return c.Status(view.GetErrorStatus(view.ErrInvalidBody)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrInvalidBody),
|
|
})
|
|
}
|
|
|
|
repoID_attribute := c.Query("repoID")
|
|
repoID, err := strconv.Atoi(repoID_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadRepoIDAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadRepoIDAttribute),
|
|
})
|
|
}
|
|
|
|
response, err := h.repoService.GetYearsForUser(userID, uint(repoID))
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(err)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, err),
|
|
})
|
|
}
|
|
|
|
return c.JSON(response)
|
|
}
|
|
|
|
func (h *RepoHandler) GetQuarters(c fiber.Ctx) error {
|
|
userID, ok := c.Locals("userID").(uint)
|
|
if !ok {
|
|
return c.Status(view.GetErrorStatus(view.ErrInvalidBody)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrInvalidBody),
|
|
})
|
|
}
|
|
|
|
repoID_attribute := c.Query("repoID")
|
|
repoID, err := strconv.Atoi(repoID_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadRepoIDAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadRepoIDAttribute),
|
|
})
|
|
}
|
|
|
|
year_attribute := c.Query("year")
|
|
year, err := strconv.Atoi(year_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadYearAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadYearAttribute),
|
|
})
|
|
}
|
|
|
|
response, err := h.repoService.GetQuartersForUser(userID, uint(repoID), uint(year))
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(err)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, err),
|
|
})
|
|
}
|
|
|
|
return c.JSON(response)
|
|
}
|
|
|
|
func (h *RepoHandler) GetIssues(c fiber.Ctx) error {
|
|
userID, ok := c.Locals("userID").(uint)
|
|
if !ok {
|
|
return c.Status(view.GetErrorStatus(view.ErrInvalidBody)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrInvalidBody),
|
|
})
|
|
}
|
|
|
|
repoID_attribute := c.Query("repoID")
|
|
repoID, err := strconv.Atoi(repoID_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadRepoIDAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadRepoIDAttribute),
|
|
})
|
|
}
|
|
|
|
year_attribute := c.Query("year")
|
|
year, err := strconv.Atoi(year_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadYearAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadYearAttribute),
|
|
})
|
|
}
|
|
|
|
quarter_attribute := c.Query("quarter")
|
|
quarter, err := strconv.Atoi(quarter_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadQuarterAttribute)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadQuarterAttribute),
|
|
})
|
|
}
|
|
|
|
page_number_attribute := c.Query("page_number")
|
|
page_number, err := strconv.Atoi(page_number_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadPaging)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadPaging),
|
|
})
|
|
}
|
|
|
|
elements_per_page_attribute := c.Query("quarter")
|
|
elements_per_page, err := strconv.Atoi(elements_per_page_attribute)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(view.ErrBadPaging)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, view.ErrBadPaging),
|
|
})
|
|
}
|
|
|
|
var paging pagination.Paging
|
|
paging.Page = uint(page_number)
|
|
paging.Elements = uint(elements_per_page)
|
|
|
|
response, err := h.repoService.GetIssuesForUser(userID, uint(repoID), uint(year), uint(quarter), paging)
|
|
if err != nil {
|
|
return c.Status(view.GetErrorStatus(err)).JSON(fiber.Map{
|
|
"error": view.GetErrorCode(c, err),
|
|
})
|
|
}
|
|
|
|
return c.JSON(response)
|
|
}
|