step 2 : search with pagination

This commit is contained in:
sindhu
2024-05-24 15:10:55 +07:00
parent 9f6785a59e
commit 35b1daf2c5
5 changed files with 282 additions and 27 deletions

View File

@@ -804,27 +804,71 @@ func (su *ServicesMasterMenuUser) GetListMasterUserGroupSearch() ([]models.UserG
}
// versi 2
func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error) {
func (su *ServicesMasterMenuUser) GetUserGroupData() ([]models.UserGroupV1, error) {
logger, _ := zap.NewProduction()
defer logger.Sync()
var userList []models.UserGroupV1
queryList := `
SELECT *
FROM m_usergroup
WHERE M_UserGroupIsActive = 'Y'
order by M_UserGroupID ASC
LIMIT 0, 1
`
logger.Info("QUERY SEARCH INITIAL DATA USERGROUP",
zap.String("query search", queryList),
)
if err := dbx.Handlex.Select(&userList, queryList); err != nil {
return nil, fmt.Errorf("error querying database initial USERGROUP: %v", err)
}
return userList, nil
}
func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, usergroup string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error) {
logger, _ := zap.NewProduction()
defer logger.Sync()
var userList []models.MasterUser
var totalData int
offset := (currentPage - 1) * rowPerPage
var searchUserGroup string = ""
if usergroup != "0" {
searchUserGroup = usergroup
}
prm := "%" + strings.TrimSpace(search) + "%"
querytotal := `
// search dropdown dan inputan search
if usergroup != "0" {
querytotal := `
SELECT COUNT(*)
FROM m_user
JOIN m_usergroup
ON M_UserM_UserGroupID = M_UserGroupID
AND M_UserIsActive = 'Y'
AND M_UserGroupIsActive = 'Y'
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
AND M_UserGroupID = ?
JOIN r_reportgroup
ON M_UserR_ReportGroupID = R_ReportGroupID
AND R_ReportGroupIsActive = 'Y'
`
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
}
query := `
logger.Info("QUERY SEARCH INITIAL TOTAL COUNT",
zap.String("query search", querytotal),
)
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm, searchUserGroup); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
}
query := `
SELECT
ROW_NUMBER() OVER () AS nomor,
M_UserID,
@@ -851,7 +895,8 @@ func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage
ON M_UserM_UserGroupID = M_UserGroupID
AND M_UserIsActive = 'Y'
AND M_UserGroupIsActive = 'Y'
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
AND M_UserGroupID = ?
JOIN r_reportgroup
ON M_UserR_ReportGroupID = R_ReportGroupID
AND R_ReportGroupIsActive = 'Y'
@@ -859,9 +904,79 @@ func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage
LIMIT ? OFFSET ?
`
if err := dbx.Handlex.Select(&userList, query, prm, prm, rowPerPage, offset); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
logger.Info("QUERY SEARCH INITIAL",
zap.String("query search", query),
)
if err := dbx.Handlex.Select(&userList, query, prm, prm, searchUserGroup, rowPerPage, offset); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
}
} else {
// search hanya inputan search
querytotal := `
SELECT COUNT(*)
FROM m_user
JOIN m_usergroup
ON M_UserM_UserGroupID = M_UserGroupID
AND M_UserIsActive = 'Y'
AND M_UserGroupIsActive = 'Y'
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
JOIN r_reportgroup
ON M_UserR_ReportGroupID = R_ReportGroupID
AND R_ReportGroupIsActive = 'Y'
`
logger.Info("QUERY SEARCH INITIAL TOTAL COUNT",
zap.String("query search", querytotal),
)
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
}
query := `
SELECT
ROW_NUMBER() OVER () AS nomor,
M_UserID,
IFNULL(M_UserEmail, '') AS M_UserEmail,
IFNULL(M_UserFullName, '') AS M_UserFullName,
IFNULL(M_UserLastAccess, '') AS M_UserLastAccess,
IFNULL(M_UserIsLoggedIn, '') AS M_UserIsLoggedIn,
IFNULL(M_UserActiveToken, '') AS M_UserActiveToken,
IFNULL(M_UserExpiredToken, '') AS M_UserExpiredToken,
IFNULL(M_UserIsActive, '') AS M_UserIsActive,
IFNULL(M_UserCreated, '') AS M_UserCreated,
IFNULL(M_UserCreatedUserID, '') AS M_UserCreatedUserID,
IFNULL(M_UserLastUpdated, '') AS M_UserLastUpdated,
IFNULL(M_UserLastUpdatedUserID, '') AS M_UserLastUpdatedUserID,
IFNULL(M_UserDeletedUserID, '') AS M_UserDeletedUserID,
IFNULL(M_UserDeleted, '') AS M_UserDeleted,
IFNULL(M_UserGroupCode, '') AS M_UserGroupCode,
IFNULL(M_UserGroupName, '') AS M_UserGroupName,
IFNULL(M_UserM_UserGroupID, '') AS M_UserM_UserGroupID,
IFNULL(M_UserGroupID, '') AS M_UserGroupID,
M_UserIsActive
FROM m_user
JOIN m_usergroup
ON M_UserM_UserGroupID = M_UserGroupID
AND M_UserIsActive = 'Y'
AND M_UserGroupIsActive = 'Y'
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
JOIN r_reportgroup
ON M_UserR_ReportGroupID = R_ReportGroupID
AND R_ReportGroupIsActive = 'Y'
order by M_UserID ASC
LIMIT ? OFFSET ?
`
logger.Info("QUERY SEARCH INITIAL",
zap.String("query search", query),
)
if err := dbx.Handlex.Select(&userList, query, prm, prm, rowPerPage, offset); err != nil {
return nil, 0, fmt.Errorf("error querying database: %v", err)
}
}
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
return userList, totalPage, nil