go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/chirp/pkg/controller/search.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package controller 9 10 import ( 11 "go.charczuk.com/projects/chirp/pkg/config" 12 "go.charczuk.com/projects/chirp/pkg/model" 13 "go.charczuk.com/sdk/apputil" 14 "go.charczuk.com/sdk/web" 15 ) 16 17 type Search struct { 18 apputil.BaseController 19 20 Config config.Config 21 Model model.Manager 22 } 23 24 type SearchViewModel struct { 25 Query string 26 Users []model.UserFull 27 } 28 29 func (s Search) Register(app *web.App) { 30 app.Get("/search", web.NestMiddleware(s.search, web.SessionRequired)) 31 app.Post("/search", web.NestMiddleware(s.postSearch, web.SessionRequired)) 32 } 33 34 func (s Search) search(r web.Context) web.Result { 35 return r.Views().View("search", SearchViewModel{}) 36 } 37 38 func (s Search) postSearch(r web.Context) web.Result { 39 query, err := web.FormValue[string](r, "query") 40 if err != nil { 41 return r.Views().BadRequest(err) 42 } 43 users, err := s.Model.SearchUsers(r, s.GetUserID(r), query) 44 if err != nil { 45 return r.Views().InternalError(err) 46 } 47 return r.Views().View("search", SearchViewModel{ 48 Users: users, 49 Query: query, 50 }) 51 }