eintopf.info@v0.13.16/service/event/transport.go (about) 1 // Copyright (C) 2022 The Eintopf authors 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <https://www.gnu.org/licenses/>. 15 16 package event 17 18 import ( 19 "github.com/go-chi/chi/v5" 20 21 "eintopf.info/internal/crud" 22 "eintopf.info/internal/xhttp" 23 "eintopf.info/service/auth" 24 ) 25 26 // Router returns a new http router that handles crud event requests for a given 27 // event service. 28 func Router(storer Storer, authService auth.Service) func(chi.Router) { 29 handler := crud.NewHandler(storer) 30 return func(r chi.Router) { 31 r.Options("/", xhttp.CorsHandler) 32 33 // swagger:route GET /events/ event findEvents 34 // 35 // Retrieves all events. 36 // 37 // Parameters: 38 // + name: offset 39 // description: offset in event list 40 // in: query 41 // type: integer 42 // required: false 43 // + name: limit 44 // description: limits the event list 45 // in: query 46 // type: integer 47 // required: false 48 // + name: sort 49 // description: field that gets sorted 50 // in: query 51 // type: string 52 // required: false 53 // + name: order 54 // description: sort order ("ASC" or "DESC") 55 // in: query 56 // type: string 57 // required: false 58 // + name: filters 59 // description: filters get combined with AND logic 60 // in: query 61 // type: object 62 // required: false 63 // 64 // Responses: 65 // 200: findEventsResponse 66 // 400: badRequest 67 // 401: unauthorizedError 68 // 500: internalError 69 // 500: internalError 70 // 503: serviceUnavailable 71 r.With(auth.MiddlewareWithOpts(authService, auth.MiddlewareOpts{Validate: false})). 72 Get("/", handler.Find) 73 74 // swagger:route POST /events/ event createEvent 75 // 76 // Creates a new event with the given data. 77 // Security: 78 // bearer: [] 79 // 80 // Responses: 81 // 200: createEventResponse 82 // 400: badRequest 83 // 401: unauthorizedError 84 // 500: internalError 85 // 503: serviceUnavailable 86 r.With(auth.Middleware(authService)). 87 Post("/", handler.Create) 88 89 r.Options("/{id}", xhttp.CorsHandler) 90 91 // swagger:route GET /events/{id} event findEvent 92 // 93 // Finds the event with the given id. 94 // 95 // Responses: 96 // 200: findEventResponse 97 // 400: badRequest 98 // 401: unauthorizedError 99 // 500: internalError 100 // 503: serviceUnavailable 101 r.Get("/{id}", handler.FindByID) 102 103 // swagger:route PUT /events/{id} event updateEvent 104 // 105 // Updates the event with the given id. 106 // Security: 107 // bearer: [] 108 // 109 // Responses: 110 // 200: updateEventResponse 111 // 400: badRequest 112 // 401: unauthorizedError 113 // 500: internalError 114 // 503: serviceUnavailable 115 r.With(auth.Middleware(authService)). 116 Put("/{id}", handler.Update) 117 118 // swagger:route DELETE /events/{id} event deleteEvent 119 // 120 // Deletes the event with the given id. 121 // Security: 122 // bearer: [] 123 // 124 // Responses: 125 // 200: deleteEventResponse 126 // 400: badRequest 127 // 401: unauthorizedError 128 // 500: internalError 129 // 503: serviceUnavailable 130 r.With(auth.Middleware(authService)). 131 Delete("/{id}", handler.Delete) 132 } 133 } 134 135 // swagger:response findEventsResponse 136 type findResponse struct { 137 // in:body 138 Events []*Event 139 140 // in:header 141 TotalEvents int `json:"x-total-count"` 142 } 143 144 // swagger:parameters createEvent 145 type createRequest struct { 146 // in:body 147 Event *NewEvent 148 } 149 150 // swagger:response createEventResponse 151 type createResponse struct { 152 // in:body 153 Event *Event 154 } 155 156 // swagger:parameters findEvent 157 type findByIDRequest struct { 158 // in:query 159 ID string `json:"id"` 160 } 161 162 // swagger:response findEventResponse 163 type findByIDResponse struct { 164 // in:body 165 Event *Event 166 } 167 168 type FindResponse[Model any] struct { 169 // in:body 170 Model *Model 171 } 172 173 // swagger:parameters updateEvent 174 type updateRequest struct { 175 // in:body 176 Event *Event 177 } 178 179 // swagger:response updateEventResponse 180 type updateResponse struct { 181 // in:body 182 Event *Event 183 } 184 185 // swagger:parameters deleteEvent 186 type deleteRequest struct { 187 // in:query 188 ID string `json:"id"` 189 } 190 191 // swagger:response deleteEventResponse 192 type deleteResponse struct{}