diff --git a/repository/permission_repository.go b/repository/permission_repository.go index 6804321..d16d768 100644 --- a/repository/permission_repository.go +++ b/repository/permission_repository.go @@ -131,9 +131,12 @@ func GetUserByID(userID string) (*models.User, error) { log.Printf("[Repository] GetUserByID - userID=%s", userID) query := ` - SELECT users_id, email_address, role_id, is_deleted - FROM uess_user_management.users - WHERE users_id = ? + SELECT u.users_id, u.email_address, COALESCE(MIN(ur.role_id), 0) AS role_id, u.is_deleted + FROM uess_user_management.users u + LEFT JOIN uess_user_management.user_roles ur + ON ur.users_id = u.users_id AND u.is_deleted = 0 + WHERE u.users_id = ? + GROUP BY u.users_id, u.email_address, u.is_deleted ` var user models.User diff --git a/repository/permission_repository_test.go b/repository/permission_repository_test.go index ca9346a..3d6c068 100644 --- a/repository/permission_repository_test.go +++ b/repository/permission_repository_test.go @@ -107,7 +107,7 @@ func TestGetUserByIDSuccess(t *testing.T) { rows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("user123", "john@example.com", 7, "0") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnRows(rows) @@ -134,7 +134,7 @@ func TestGetUserByIDNotFound(t *testing.T) { mock, cleanup := setupMockDB(t) defer cleanup() - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("nonexistent"). WillReturnError(sql.ErrNoRows) @@ -155,7 +155,7 @@ func TestGetUserByIDDeletedUserFilteredOut(t *testing.T) { rows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("deleted-user", "deleted@example.com", 3, "1") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("deleted-user"). WillReturnRows(rows) @@ -329,7 +329,7 @@ func TestGetUserByIDEmptyID(t *testing.T) { rows := sqlmock.NewRows([]string{"users_id", "email_address"}) - mock.ExpectQuery(`SELECT users_id, email_address`). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs(""). WillReturnRows(rows) @@ -348,7 +348,7 @@ func TestGetUserByIDDatabaseError(t *testing.T) { mock, cleanup := setupMockDB(t) defer cleanup() - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnError(errors.New("database connection failed")) diff --git a/services/authorize_test.go b/services/authorize_test.go index e9807d8..9bd5ac6 100644 --- a/services/authorize_test.go +++ b/services/authorize_test.go @@ -43,7 +43,7 @@ func TestAuthorize_PermissionNotFound(t *testing.T) { userRows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("user123", "john@example.com", 1, "0") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnRows(userRows) @@ -82,7 +82,7 @@ func TestAuthorize_Success(t *testing.T) { userRows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("user123", "john@example.com", 1, "0") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnRows(userRows) @@ -139,7 +139,7 @@ func TestAuthorize_UserAttributesError(t *testing.T) { userRows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("user123", "john@example.com", 1, "0") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnRows(userRows) @@ -183,7 +183,7 @@ func TestAuthorize_PolicyAttributesError(t *testing.T) { userRows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("user123", "john@example.com", 1, "0") - mock.ExpectQuery("SELECT users_id, email_address"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("user123"). WillReturnRows(userRows) @@ -269,7 +269,7 @@ func TestAuthorize_DeletedUserRedirectsToLogin(t *testing.T) { userRows := sqlmock.NewRows([]string{"users_id", "email_address", "role_id", "is_deleted"}). AddRow("deleted-user", "deleted@example.com", 1, "1") - mock.ExpectQuery("SELECT users_id, email_address, role_id, is_deleted"). + mock.ExpectQuery(`SELECT u.users_id, u.email_address, COALESCE\(MIN\(ur.role_id\), 0\) AS role_id, u.is_deleted`). WithArgs("deleted-user"). WillReturnRows(userRows)