diff --git a/handler/event.go b/handler/event.go index 4cac512..2403d25 100644 --- a/handler/event.go +++ b/handler/event.go @@ -11,6 +11,11 @@ import ( "net/http" ) +// swagger:route POST /events/ Events CreateEvent +// +// responses: +// 200: Event + func (h *Handler) CreateEvent(c echo.Context) (err error) { var person *model.PersonalInformation event := new(model.CreateEvent) @@ -80,6 +85,11 @@ func (h *Handler) CreateEvent(c echo.Context) (err error) { return c.JSON(http.StatusCreated, newEvent) } +// swagger:route GET /events/ Events GetEvents +// +// responses: +// 200: []Event + func (h *Handler) GetEvents(c echo.Context) (err error) { var events []model.Event query := c.Request().URL.Query() @@ -118,6 +128,11 @@ func (h *Handler) GetEvents(c echo.Context) (err error) { return c.JSON(http.StatusOK, events) } +// swagger:route GET /events/{uuid} Events GetEvent +// +// responses: +// 200: Event + func (h *Handler) GetEvent(c echo.Context) error { var event model.Event id := c.Param("id") @@ -148,6 +163,11 @@ func (h *Handler) GetEvent(c echo.Context) error { return c.JSON(http.StatusOK, event) } +// swagger:route DELETE /events/{uuid} Events DeleteEvent +// +// responses: +// 200 + func (h *Handler) DeleteEvent(c echo.Context) error { id := c.Param("id") orgId, err := uuid.Parse(c.Request().Header.Get("UserOrganizationId")) diff --git a/model/event.go b/model/event.go index 55e4d7b..584347c 100644 --- a/model/event.go +++ b/model/event.go @@ -6,6 +6,7 @@ import ( "time" ) +// swagger:model Event type Event struct { gorm.Model ID uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primarykey"` @@ -20,9 +21,27 @@ type Event struct { OrgId uuid.UUID `json:"-"` } +// swagger:model CreateEvent type CreateEvent struct { - Start time.Time `json:"start" validate:"required,gt"` - End time.Time `json:"end" validate:"required,gtfield=Start"` - Person *PersonalInformation `json:"person" validate:"required,dive"` - MedicId uuid.UUID `json:"medic_id" validate:"required"` + // The event start time + // example: 2023-08-02T19:21:23.617Z + // required: true + Start time.Time `json:"start" validate:"required,gt"` + // The event end time + // example: 2023-08-02T19:21:23.617Z + // required: true + End time.Time `json:"end" validate:"required,gtfield=Start"` + // The person information + // required: true + Person *PersonalInformation `json:"person" validate:"required,dive"` + // The UUID of a medic + // example: 6204037c-30e6-408b-8aaa-dd8219860b4b + // required: true + MedicId uuid.UUID `json:"medic_id" validate:"required"` +} + +// swagger:parameters CreateEvent +type CreateEventArg struct { + //in: body + CreateEvent *CreateEvent } diff --git a/model/pd.go b/model/pd.go index 86cb02b..beb7c20 100644 --- a/model/pd.go +++ b/model/pd.go @@ -2,12 +2,23 @@ package model import "github.com/google/uuid" +// swagger:model PersonalInformation type PersonalInformation struct { - ID uuid.UUID `json:"id,omitempty" validate:"required_without_all=FirstName LastName Patronymic Phone"` - FirstName string `json:"first_name,omitempty" validate:"required_without=ID"` - LastName string `json:"last_name,omitempty" validate:"required_without=ID"` - Patronymic string `json:"patronymic,omitempty" validate:"required_without=ID"` - Phone string `json:"phone,omitempty" validate:"required_without=ID"` + // The UUID of a person + // example: 6204037c-30e6-408b-8aaa-dd8219860b4b + ID uuid.UUID `json:"id,omitempty" validate:"required_without_all=FirstName LastName Patronymic Phone"` + // The first name of a person + // example: Иван + FirstName string `json:"first_name,omitempty" validate:"required_without=ID"` + // The last name of a person + // example: Иванов + LastName string `json:"last_name,omitempty" validate:"required_without=ID"` + // The patronymic of a person + // example: Иванович + Patronymic string `json:"patronymic,omitempty" validate:"required_without=ID"` + // The first name of a person + // example: 79206321370 + Phone string `json:"phone,omitempty" validate:"required_without=ID"` } type PersonalInformationCreate struct { diff --git a/swagger/swagger.json b/swagger/swagger.json new file mode 100644 index 0000000..464d1f2 --- /dev/null +++ b/swagger/swagger.json @@ -0,0 +1,260 @@ +{ + "swagger": "2.0", + "paths": { + "/events/": { + "get": { + "tags": [ + "Events" + ], + "operationId": "GetEvents", + "responses": { + "200": { + "description": "Event", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Event" + } + } + } + } + }, + "post": { + "tags": [ + "Events" + ], + "operationId": "CreateEvent", + "parameters": [ + { + "name": "CreateEvent", + "in": "body", + "schema": { + "$ref": "#/definitions/CreateEvent" + } + } + ], + "responses": { + "200": { + "description": "Event", + "schema": { + "$ref": "#/definitions/Event" + } + } + } + } + }, + "/events/{uuid}": { + "get": { + "tags": [ + "Events" + ], + "operationId": "GetEvent", + "responses": { + "200": { + "description": "Event", + "schema": { + "$ref": "#/definitions/Event" + } + } + } + }, + "delete": { + "tags": [ + "Events" + ], + "operationId": "DeleteEvent", + "responses": {} + } + } + }, + "definitions": { + "CreateEvent": { + "type": "object", + "required": [ + "medic_id" + ], + "properties": { + "end": { + "description": "The event end time", + "type": "string", + "format": "date-time", + "x-go-name": "End", + "example": "2023-08-02T19:21:23.617Z" + }, + "medic_id": { + "description": "The UUID of a medic", + "type": "string", + "format": "uuid", + "x-go-name": "MedicId", + "example": "6204037c-30e6-408b-8aaa-dd8219860b4b" + }, + "person": { + "$ref": "#/definitions/PersonalInformation" + }, + "start": { + "description": "The event start time", + "type": "string", + "format": "date-time", + "x-go-name": "Start", + "example": "2023-08-02T19:21:23.617Z" + } + }, + "x-go-package": "astra-events/model" + }, + "DeletedAt": { + "$ref": "#/definitions/NullTime" + }, + "Event": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string", + "format": "date-time" + }, + "DeletedAt": { + "$ref": "#/definitions/DeletedAt" + }, + "ID": { + "type": "string", + "format": "uuid" + }, + "UpdatedAt": { + "type": "string", + "format": "date-time" + }, + "author": { + "$ref": "#/definitions/User" + }, + "end": { + "type": "string", + "format": "date-time", + "x-go-name": "End" + }, + "medic": { + "$ref": "#/definitions/User" + }, + "person": { + "$ref": "#/definitions/PersonalInformation" + }, + "start": { + "type": "string", + "format": "date-time", + "x-go-name": "Start" + } + }, + "x-go-package": "astra-events/model" + }, + "Model": { + "description": "type User struct {\ngorm.Model\n}", + "type": "object", + "title": "Model a basic GoLang struct which includes the following fields: ID, CreatedAt, UpdatedAt, DeletedAt\nIt may be embedded into your model or you may build your own model without it", + "properties": { + "CreatedAt": { + "type": "string", + "format": "date-time" + }, + "DeletedAt": { + "$ref": "#/definitions/DeletedAt" + }, + "ID": { + "type": "integer", + "format": "uint64" + }, + "UpdatedAt": { + "type": "string", + "format": "date-time" + } + }, + "x-go-package": "gorm.io/gorm" + }, + "NullTime": { + "description": "NullTime implements the Scanner interface so\nit can be used as a scan destination, similar to NullString.", + "type": "object", + "title": "NullTime represents a time.Time that may be null.", + "properties": { + "Time": { + "type": "string", + "format": "date-time" + }, + "Valid": { + "type": "boolean" + } + }, + "x-go-package": "database/sql" + }, + "PersonalInformation": { + "type": "object", + "properties": { + "first_name": { + "description": "The first name of a person", + "type": "string", + "x-go-name": "FirstName", + "example": "Иван" + }, + "id": { + "description": "The UUID of a person", + "type": "string", + "format": "uuid", + "x-go-name": "ID", + "example": "6204037c-30e6-408b-8aaa-dd8219860b4b" + }, + "last_name": { + "description": "The last name of a person", + "type": "string", + "x-go-name": "LastName", + "example": "Иванов" + }, + "patronymic": { + "description": "The patronymic of a person", + "type": "string", + "x-go-name": "Patronymic", + "example": "Иванович" + }, + "phone": { + "description": "The first name of a person", + "type": "string", + "x-go-name": "Phone", + "example": "79206321370" + } + }, + "x-go-package": "astra-events/model" + }, + "User": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string", + "format": "date-time" + }, + "DeletedAt": { + "$ref": "#/definitions/DeletedAt" + }, + "ID": { + "type": "string", + "format": "uuid" + }, + "UpdatedAt": { + "type": "string", + "format": "date-time" + }, + "first_name": { + "type": "string", + "x-go-name": "FirstName" + }, + "last_name": { + "type": "string", + "x-go-name": "LastName" + }, + "password": { + "type": "string", + "x-go-name": "Password" + }, + "user_name": { + "type": "string", + "x-go-name": "UserName" + } + }, + "x-go-package": "astra-events/model" + } + } +} \ No newline at end of file