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  }