add today endpoint
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
|||||||
.idea
|
.idea
|
||||||
build
|
build
|
||||||
.env
|
.env
|
||||||
|
test
|
||||||
@@ -8,7 +8,9 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/go-set"
|
"github.com/hashicorp/go-set"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
|
"gorm.io/gorm"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// swagger:route POST /events/ Events CreateEvent
|
// swagger:route POST /events/ Events CreateEvent
|
||||||
@@ -91,7 +93,6 @@ func (h *Handler) CreateEvent(c echo.Context) (err error) {
|
|||||||
// 200: []Event
|
// 200: []Event
|
||||||
|
|
||||||
func (h *Handler) GetEvents(c echo.Context) (err error) {
|
func (h *Handler) GetEvents(c echo.Context) (err error) {
|
||||||
var events []model.Event
|
|
||||||
query := c.Request().URL.Query()
|
query := c.Request().URL.Query()
|
||||||
orgId, err := uuid.Parse(c.Request().Header.Get("X-User-Organization-Id"))
|
orgId, err := uuid.Parse(c.Request().Header.Get("X-User-Organization-Id"))
|
||||||
|
|
||||||
@@ -105,30 +106,29 @@ func (h *Handler) GetEvents(c echo.Context) (err error) {
|
|||||||
tx = tx.Where("start >= ?", query.Get("start")).Where("\"end\" <= ?", query.Get("end"))
|
tx = tx.Where("start >= ?", query.Get("start")).Where("\"end\" <= ?", query.Get("end"))
|
||||||
}
|
}
|
||||||
|
|
||||||
tx.Find(&events)
|
return h.queryEvents(tx, c)
|
||||||
|
}
|
||||||
|
|
||||||
userIds := set.New[uuid.UUID](len(events) * 2)
|
// swagger:route GET /events/today Events GetEventsToday
|
||||||
personIds := set.New[uuid.UUID](len(events))
|
//
|
||||||
|
// responses:
|
||||||
|
// 200: []Event
|
||||||
|
|
||||||
for _, event := range events {
|
func (h *Handler) GetEventsToday(c echo.Context) (err error) {
|
||||||
userIds.Insert(event.MedicId)
|
orgId, err := uuid.Parse(c.Request().Header.Get("X-User-Organization-Id"))
|
||||||
userIds.Insert(event.AuthorId)
|
|
||||||
personIds.Insert(event.PersonId)
|
|
||||||
}
|
|
||||||
|
|
||||||
usersMap, err := services.GetUsers(userIds.Slice(), c.Request().Header)
|
|
||||||
personsMap, err := services.GetPersons(personIds.Slice(), c.Request().Header)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.HTML(http.StatusBadGateway, err.Error())
|
return c.NoContent(http.StatusUnauthorized)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, event := range events {
|
tx := h.DB.Where("org_id = ?", orgId)
|
||||||
events[i].Author = usersMap[event.AuthorId]
|
|
||||||
events[i].Medic = usersMap[event.MedicId]
|
|
||||||
events[i].Person = personsMap[event.PersonId]
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.JSON(http.StatusOK, events)
|
currentDate := time.Now().Format(time.DateOnly)
|
||||||
|
nextDate := time.Now().Add(24 * time.Hour).Format(time.DateOnly)
|
||||||
|
|
||||||
|
tx = tx.Where("start >= ?", currentDate).Where("\"end\" < ?", nextDate)
|
||||||
|
|
||||||
|
return h.queryEvents(tx, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
// swagger:route GET /events/{uuid} Events GetEvent
|
// swagger:route GET /events/{uuid} Events GetEvent
|
||||||
@@ -187,3 +187,31 @@ func (h *Handler) DeleteEvent(c echo.Context) error {
|
|||||||
|
|
||||||
return c.NoContent(http.StatusOK)
|
return c.NoContent(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handler) queryEvents(tx *gorm.DB, c echo.Context) error {
|
||||||
|
var events []model.Event
|
||||||
|
tx.Find(&events)
|
||||||
|
|
||||||
|
userIds := set.New[uuid.UUID](len(events) * 2)
|
||||||
|
personIds := set.New[uuid.UUID](len(events))
|
||||||
|
|
||||||
|
for _, event := range events {
|
||||||
|
userIds.Insert(event.MedicId)
|
||||||
|
userIds.Insert(event.AuthorId)
|
||||||
|
personIds.Insert(event.PersonId)
|
||||||
|
}
|
||||||
|
|
||||||
|
usersMap, err := services.GetUsers(userIds.Slice(), c.Request().Header)
|
||||||
|
personsMap, err := services.GetPersons(personIds.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].Medic = usersMap[event.MedicId]
|
||||||
|
events[i].Person = personsMap[event.PersonId]
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusOK, events)
|
||||||
|
}
|
||||||
|
|||||||
@@ -43,6 +43,25 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/events/today": {
|
||||||
|
"get": {
|
||||||
|
"tags": [
|
||||||
|
"Events"
|
||||||
|
],
|
||||||
|
"operationId": "GetEvents",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "Event",
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Event"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/events/{uuid}": {
|
"/events/{uuid}": {
|
||||||
"get": {
|
"get": {
|
||||||
"tags": [
|
"tags": [
|
||||||
@@ -68,9 +87,26 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
"Contact": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Category"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Value"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "astra-events/model"
|
||||||
|
},
|
||||||
"CreateEvent": {
|
"CreateEvent": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
|
"start",
|
||||||
|
"end",
|
||||||
|
"person",
|
||||||
"medic_id"
|
"medic_id"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -115,8 +151,8 @@
|
|||||||
"$ref": "#/definitions/DeletedAt"
|
"$ref": "#/definitions/DeletedAt"
|
||||||
},
|
},
|
||||||
"ID": {
|
"ID": {
|
||||||
"type": "string",
|
"type": "integer",
|
||||||
"format": "uuid"
|
"format": "uint64"
|
||||||
},
|
},
|
||||||
"UpdatedAt": {
|
"UpdatedAt": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@@ -130,11 +166,16 @@
|
|||||||
"format": "date-time",
|
"format": "date-time",
|
||||||
"x-go-name": "End"
|
"x-go-name": "End"
|
||||||
},
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"x-go-name": "ID"
|
||||||
|
},
|
||||||
"medic": {
|
"medic": {
|
||||||
"$ref": "#/definitions/User"
|
"$ref": "#/definitions/User"
|
||||||
},
|
},
|
||||||
"person": {
|
"person": {
|
||||||
"$ref": "#/definitions/PersonalInformation"
|
"$ref": "#/definitions/PersonalInformationApi"
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
@@ -219,6 +260,40 @@
|
|||||||
},
|
},
|
||||||
"x-go-package": "astra-events/model"
|
"x-go-package": "astra-events/model"
|
||||||
},
|
},
|
||||||
|
"PersonalInformationApi": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"birth_date": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "BirthDate"
|
||||||
|
},
|
||||||
|
"contacts": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Contact"
|
||||||
|
},
|
||||||
|
"x-go-name": "Contacts"
|
||||||
|
},
|
||||||
|
"first_name": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "FirstName"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uuid",
|
||||||
|
"x-go-name": "ID"
|
||||||
|
},
|
||||||
|
"last_name": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "LastName"
|
||||||
|
},
|
||||||
|
"patronymic": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Patronymic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "astra-events/model"
|
||||||
|
},
|
||||||
"User": {
|
"User": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|||||||
Reference in New Issue
Block a user