eintopf.info@v0.13.16/service/user/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 user 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 user requests for a given 27 // user service. 28 func Router(storer Storer, authService auth.Service) func(chi.Router) { 29 handler := crud.NewHandler[NewUser, User, FindFilters](storer) 30 return func(r chi.Router) { 31 r.Options("/", xhttp.CorsHandler) 32 33 // swagger:route GET /users/ users findUsers 34 // 35 // Retrieves all users. 36 // Security: 37 // bearer: [] 38 // 39 // Responses: 40 // 200: findUsersResponse 41 // 400: badRequest 42 // 401: unauthorizedError 43 // 500: internalError 44 // 503: serviceUnavailable 45 r.With(auth.Middleware(authService)). 46 Get("/", handler.Find) 47 48 // swagger:route POST /users/ user createUser 49 // 50 // Creates a new new user. 51 // Security: 52 // bearer: [] 53 // 54 // Responses: 55 // 200: createUserResponse 56 // 400: badRequest 57 // 401: unauthorizedError 58 // 500: internalError 59 // 503: serviceUnavailable 60 r.With(auth.Middleware(authService)). 61 Post("/", handler.Create) 62 63 r.Options("/{id}", xhttp.CorsHandler) 64 65 // swagger:route GET /users/{id} user findUser 66 // 67 // Finds the user with the given id. 68 // Security: 69 // bearer: [] 70 // 71 // Responses: 72 // 200: findUserResponse 73 // 400: badRequest 74 // 401: unauthorizedError 75 // 500: internalError 76 // 503: serviceUnavailable 77 r.With(auth.Middleware(authService)). 78 Get("/{id}", handler.FindByID) 79 80 // swagger:route PUT /users/{id} user updateUser 81 // 82 // Updates the user with the given id. 83 // Security: 84 // bearer: [] 85 // 86 // Responses: 87 // 200: updateUserResponse 88 // 400: badRequest 89 // 401: unauthorizedError 90 // 500: internalError 91 // 503: serviceUnavailable 92 93 r.With(auth.Middleware(authService)). 94 Put("/{id}", handler.Update) 95 96 // swagger:route DELETE /users/{id} user deleteUser 97 // 98 // Deletes the user with the given id. 99 // Security: 100 // bearer: [] 101 // 102 // Responses: 103 // 200: deleteUserResponse 104 // 400: badRequest 105 // 401: unauthorizedError 106 // 500: internalError 107 // 503: serviceUnavailable 108 r.With(auth.Middleware(authService)). 109 Delete("/{id}", handler.Delete) 110 } 111 } 112 113 type router struct { 114 s Service 115 } 116 117 // swagger:parameters findUsers 118 type findRequest struct { 119 // in:query 120 Start int64 `json:"_start"` 121 // in:query 122 End int64 `json:"_end"` 123 // in:query 124 Sort string `json:"_sort"` 125 // in:query 126 Order SortOrder `json:"_order"` 127 128 // in:query 129 FilterID *string `json:"id"` 130 // in:query 131 FilterDeactivated *bool `json:"deactivated"` 132 // in:query 133 FilterEmail *string `json:"email"` 134 // in:query 135 FilterNickname *string `json:"nickname"` 136 // in:query 137 FilterRole *auth.Role `json:"role"` 138 } 139 140 // swagger:response findUsersResponse 141 type findResponse struct { 142 143 // in:body 144 Users []User 145 146 // in:header 147 TotalUsers int `json:"x-total-count"` 148 } 149 150 // swagger:parameters createUser 151 type createRequest struct { 152 153 // in:body 154 NewUser *NewUser 155 } 156 157 // swagger:response createUserResponse 158 type createResponse struct { 159 160 // in:body 161 User *User 162 } 163 164 // swagger:parameters updateUser 165 type updateRequest struct { 166 167 // in:body 168 User *User 169 } 170 171 //swagger:response updateUserResponse 172 type updateResponse struct { 173 174 // in:body 175 User *User 176 } 177 178 // swagger:parameters deleteUser 179 type deleteRequest struct { 180 181 // in:query 182 ID string `json:"id"` 183 } 184 185 // swagger:response deleteUserResponse 186 type deleteResponse struct{} 187 188 // swagger:parameters findUser 189 type findByIDRequest struct { 190 191 // in:query 192 ID string `json:"id"` 193 } 194 195 // swagger:response findUserResponse 196 type findByIDResponse struct { 197 198 // in:body 199 User *User 200 }