WIP service

This commit is contained in:
andrusyakka
2023-07-14 18:39:50 +03:00
parent 99becdea85
commit 6752536325
12 changed files with 183 additions and 74 deletions

View File

@@ -2,7 +2,9 @@ package handler
import (
"astra-events/model"
"astra-events/pkg/utils"
"astra-events/services"
"github.com/hashicorp/go-set"
"github.com/labstack/echo/v4"
"net/http"
"strconv"
@@ -21,16 +23,15 @@ func (h *Handler) CreateEvent(c echo.Context) (err error) {
return c.NoContent(http.StatusBadRequest)
}
// TODO: Add gorutine
employee, err := services.GetUser(event.EmployeeId, c.Request().Header)
if err != nil {
return c.HTML(http.StatusBadGateway, err.Error())
}
author, err := services.GetUser(uint(authorId), c.Request().Header)
usersMap, err := services.GetUsers([]uint{event.EmployeeId, uint(authorId)}, c.Request().Header)
if err != nil {
return c.HTML(http.StatusBadGateway, err.Error())
}
employee := usersMap[event.EmployeeId]
author := usersMap[uint(authorId)]
newEvent.Start = event.Start
newEvent.End = event.End
newEvent.AuthorId = uint(authorId)
@@ -38,34 +39,74 @@ func (h *Handler) CreateEvent(c echo.Context) (err error) {
newEvent.MemberId = event.MemberId
newEvent.MedicalCardId = event.MedicalCardId
newEvent.Status = event.Status
h.DB.Begin()
newEvent.Services = event.Services
tx := h.DB.Create(&newEvent)
if tx.RowsAffected == 0 {
h.DB.Rollback()
return c.NoContent(http.StatusBadGateway)
}
eventsServices := []model.EventsServices{}
for _, service := range event.Services {
eventsServices = append(eventsServices, model.EventsServices{EventId: newEvent.ID, ServiceId: service})
}
tx = h.DB.Create(eventsServices)
if tx.RowsAffected == 0 {
h.DB.Rollback()
return c.NoContent(http.StatusBadGateway)
}
h.DB.Commit()
newEvent.Services = event.Services
newEvent.Author = *author
newEvent.Employee = *employee
newEvent.Author = author
newEvent.Employee = employee
return c.JSON(http.StatusCreated, newEvent)
}
func (h *Handler) GetEvents(c echo.Context) (err error) {
var events []model.Event
query := c.Request().URL.Query()
_, _, filterMap := utils.GetFilterParams(query)
tx := h.DB
if len(filterMap) > 0 {
tx = tx.Where("start >= ?", filterMap["start"]).Where("\"end\" <= ?", filterMap["end"])
}
tx.Find(&events)
ids := set.New[uint](len(events) * 2)
for _, event := range events {
ids.Insert(event.EmployeeId)
ids.Insert(event.AuthorId)
}
usersMap, err := services.GetUsers(ids.Slice(), c.Request().Header)
if err != nil {
return c.HTML(http.StatusBadGateway, err.Error())
}
for i, event := range events {
events[i].Author = usersMap[event.AuthorId]
events[i].Employee = usersMap[event.EmployeeId]
}
return c.JSON(http.StatusOK, events)
}
func (h *Handler) GetEvent(c echo.Context) error {
var event model.Event
id := c.Param("id")
tx := h.DB.First(&event, id)
if tx.RowsAffected == 0 {
return c.NoContent(http.StatusNotFound)
}
return c.JSON(http.StatusOK, event)
}
func (h *Handler) DeleteEvent(c echo.Context) error {
id := c.Param("id")
tx := h.DB.Delete(&model.Event{}, id)
if tx.RowsAffected == 0 {
return c.NoContent(http.StatusNotFound)
}
return c.NoContent(http.StatusOK)
}