Skip to content

Commit

Permalink
Merge branch 'main' into B-21438-MAIN
Browse files Browse the repository at this point in the history
  • Loading branch information
CoryKleinjanCACI authored Feb 17, 2025
2 parents 284c42f + c219df8 commit 48f94fc
Show file tree
Hide file tree
Showing 18 changed files with 715 additions and 116 deletions.
10 changes: 6 additions & 4 deletions pkg/handlers/adminapi/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,19 @@ func NewAdminAPI(handlerConfig handlers.HandlerConfig) *adminops.MymoveAPI {

adminAPI.ServeError = handlers.ServeCustomError

transportationOfficeFetcher := transportationoffice.NewTransportationOfficesFetcher()
userRolesCreator := usersroles.NewUsersRolesCreator()
newRolesFetcher := roles.NewRolesFetcher()

adminAPI.RequestedOfficeUsersIndexRequestedOfficeUsersHandler = IndexRequestedOfficeUsersHandler{
handlerConfig,
requestedofficeusers.NewRequestedOfficeUsersListFetcher(queryBuilder),
query.NewQueryFilter,
pagination.NewPagination,
transportationOfficeFetcher,
newRolesFetcher,
}

userRolesCreator := usersroles.NewUsersRolesCreator()
newRolesFetcher := roles.NewRolesFetcher()

adminAPI.RequestedOfficeUsersGetRequestedOfficeUserHandler = GetRequestedOfficeUserHandler{
handlerConfig,
requestedofficeusers.NewRequestedOfficeUserFetcher(queryBuilder),
Expand Down Expand Up @@ -124,7 +127,6 @@ func NewAdminAPI(handlerConfig handlers.HandlerConfig) *adminops.MymoveAPI {
pagination.NewPagination,
}

transportationOfficeFetcher := transportationoffice.NewTransportationOfficesFetcher()
adminAPI.TransportationOfficesGetOfficeByIDHandler = GetOfficeByIdHandler{
handlerConfig,
transportationOfficeFetcher,
Expand Down
62 changes: 38 additions & 24 deletions pkg/handlers/adminapi/requested_office_users.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ package adminapi
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"strings"

"github.com/go-openapi/runtime/middleware"
"github.com/gobuffalo/pop/v6"
"github.com/gofrs/uuid"
"github.com/spf13/viper"
"go.uber.org/zap"
Expand Down Expand Up @@ -154,15 +156,29 @@ type IndexRequestedOfficeUsersHandler struct {
services.RequestedOfficeUserListFetcher
services.NewQueryFilter
services.NewPagination
services.TransportationOfficesFetcher
services.RoleAssociater
}

var requestedOfficeUserFilterConverters = map[string]func(string) []services.QueryFilter{
"search": func(content string) []services.QueryFilter {
nameSearch := fmt.Sprintf("%s%%", content)
return []services.QueryFilter{
query.NewQueryFilter("email", "ILIKE", fmt.Sprintf("%%%s%%", content)),
query.NewQueryFilter("first_name", "ILIKE", nameSearch),
query.NewQueryFilter("last_name", "ILIKE", nameSearch),
var requestedOfficeUserFilterConverters = map[string]func(string) func(*pop.Query){
"search": func(content string) func(*pop.Query) {
return func(query *pop.Query) {
nameSearch := fmt.Sprintf("%%%s%%", content)
query.Where("office_users.email ILIKE ? AND office_users.status = 'REQUESTED' OR office_users.first_name ILIKE ? AND office_users.status = 'REQUESTED' OR office_users.last_name ILIKE ? AND office_users.status = 'REQUESTED'", nameSearch, nameSearch, nameSearch)
}
},

"offices": func(content string) func(*pop.Query) {
return func(query *pop.Query) {
nameSearch := fmt.Sprintf("%%%s%%", content)
query.Where("transportation_offices.name ILIKE ? AND office_users.status = 'REQUESTED'", nameSearch)
}
},

"rolesSearch": func(content string) func(*pop.Query) {
return func(query *pop.Query) {
nameSearch := fmt.Sprintf("%%%s%%", content)
query.Where("roles.role_name ILIKE ? AND office_users.status = 'REQUESTED'", nameSearch)
}
},
}
Expand All @@ -172,27 +188,25 @@ func (h IndexRequestedOfficeUsersHandler) Handle(params requested_office_users.I
return h.AuditableAppContextFromRequestWithErrors(params.HTTPRequest,
func(appCtx appcontext.AppContext) (middleware.Responder, error) {

// adding in filters for when a search or filtering is done
queryFilters := generateQueryFilters(appCtx.Logger(), params.Filter, requestedOfficeUserFilterConverters)
var filtersMap map[string]string
if params.Filter != nil && *params.Filter != "" {
err := json.Unmarshal([]byte(*params.Filter), &filtersMap)
if err != nil {
return handlers.ResponseForError(appCtx.Logger(), errors.New("invalid filter format")), err
}
}

// We only want users that are in a REQUESTED status
queryFilters = append(queryFilters, query.NewQueryFilter("status", "=", "REQUESTED"))
var filterFuncs []func(*pop.Query)
for key, filterFunc := range requestedOfficeUserFilterConverters {
if filterValue, exists := filtersMap[key]; exists {
filterFuncs = append(filterFuncs, filterFunc(filterValue))
}
}

// adding in pagination for the UI
pagination := h.NewPagination(params.Page, params.PerPage)
ordering := query.NewQueryOrder(params.Sort, params.Order)

// need to also get the user's roles
queryAssociations := query.NewQueryAssociationsPreload([]services.QueryAssociation{
query.NewQueryAssociation("User.Roles"),
})

officeUsers, err := h.RequestedOfficeUserListFetcher.FetchRequestedOfficeUsersList(appCtx, queryFilters, queryAssociations, pagination, ordering)
if err != nil {
return handlers.ResponseForError(appCtx.Logger(), err), err
}

totalOfficeUsersCount, err := h.RequestedOfficeUserListFetcher.FetchRequestedOfficeUsersCount(appCtx, queryFilters)
officeUsers, count, err := h.RequestedOfficeUserListFetcher.FetchRequestedOfficeUsersList(appCtx, filterFuncs, pagination, ordering)
if err != nil {
return handlers.ResponseForError(appCtx.Logger(), err), err
}
Expand All @@ -205,7 +219,7 @@ func (h IndexRequestedOfficeUsersHandler) Handle(params requested_office_users.I
payload[i] = payloadForRequestedOfficeUserModel(s)
}

return requested_office_users.NewIndexRequestedOfficeUsersOK().WithContentRange(fmt.Sprintf("requested office users %d-%d/%d", pagination.Offset(), pagination.Offset()+queriedOfficeUsersCount, totalOfficeUsersCount)).WithPayload(payload), nil
return requested_office_users.NewIndexRequestedOfficeUsersOK().WithContentRange(fmt.Sprintf("requested office users %d-%d/%d", pagination.Offset(), pagination.Offset()+queriedOfficeUsersCount, count)).WithPayload(payload), nil
})
}

Expand Down
Loading

0 comments on commit 48f94fc

Please sign in to comment.