72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"astra-events/model"
|
|
"astra-events/services"
|
|
"github.com/labstack/echo/v4"
|
|
"net/http"
|
|
"strconv"
|
|
)
|
|
|
|
func (h *Handler) CreateEvent(c echo.Context) (err error) {
|
|
newEvent := new(model.Event)
|
|
event := new(model.CreateEvent)
|
|
authorId, err := strconv.Atoi(c.Request().Header.Get("UserId"))
|
|
|
|
if err != nil {
|
|
return c.NoContent(http.StatusUnauthorized)
|
|
}
|
|
|
|
if err = c.Bind(event); err != nil {
|
|
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)
|
|
if err != nil {
|
|
return c.HTML(http.StatusBadGateway, err.Error())
|
|
}
|
|
|
|
newEvent.Start = event.Start
|
|
newEvent.End = event.End
|
|
newEvent.AuthorId = uint(authorId)
|
|
newEvent.EmployeeId = event.EmployeeId
|
|
newEvent.MemberId = event.MemberId
|
|
newEvent.MedicalCardId = event.MedicalCardId
|
|
newEvent.Status = event.Status
|
|
|
|
h.DB.Begin()
|
|
|
|
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
|
|
|
|
return c.JSON(http.StatusCreated, newEvent)
|
|
}
|