Files
ZelWiki/TightWiki.Repository/Scripts/GetAllPublicProfilesPaged.sql
2025-01-22 23:31:03 +08:00

63 lines
2.2 KiB
SQL

--This proc is exactly like GetAllUsersPaged except it has no filter on personal infomation so it can be used for public info.
SELECT
U.UserId,
U.AccountName,
U.Navigation,
(select UC.ClaimValue from AspNetUserClaims as UC WHERE UC.UserId = U.UserId AND UC.ClaimType = 'timezone') as TimeZone,
(select UC.ClaimValue from AspNetUserClaims as UC WHERE UC.UserId = U.UserId AND UC.ClaimType = 'language') as Language,
(select UC.ClaimValue from AspNetUserClaims as UC WHERE UC.UserId = U.UserId AND UC.ClaimType LIKE '%/country') as Country,
U.CreatedDate,
U.ModifiedDate,
UCR.ClaimValue as Role,
@PageSize as PaginationPageSize,
(
SELECT
CAST((Count(0) + (@PageSize - 1.0)) / @PageSize AS INTEGER)
FROM
Profile as P
INNER JOIN AspNetUserClaims as UCR
ON UCR.UserId = U.UserId
AND UCR.ClaimType LIKE '%/role'
INNER JOIN Role as R
ON R.Name = UCR.ClaimValue
LEFT OUTER JOIN AspNetUserClaims as UCFirstName
ON UCFirstName.UserId = U.UserId
AND UCFirstName.ClaimType = 'firstname'
LEFT OUTER JOIN AspNetUserClaims as UCLastName
ON UCLastName.UserId = U.UserId
AND UCLastName.ClaimType = 'lastname'
WHERE
@SearchToken IS NULL
OR U.AccountName LIKE '%' || @SearchToken || '%'
OR ANU.Email LIKE '%' || @SearchToken || '%'
OR UCFirstName.ClaimValue LIKE '%' || @SearchToken || '%'
OR UCLastName.ClaimValue LIKE '%' || @SearchToken || '%'
) as PaginationPageCount
FROM
Profile as U
INNER JOIN AspNetUsers as ANU
ON ANU.Id = U.UserId
INNER JOIN AspNetUserClaims as UCR
ON UCR.UserId = U.UserId
AND UCR.ClaimType LIKE '%/role'
LEFT OUTER JOIN AspNetUserClaims as UCFirstName
ON UCFirstName.UserId = U.UserId
AND UCFirstName.ClaimType = 'firstname'
LEFT OUTER JOIN AspNetUserClaims as UCLastName
ON UCLastName.UserId = U.UserId
AND UCLastName.ClaimType = 'lastname'
INNER JOIN Role as R
ON R.Name = UCR.ClaimValue
WHERE
@SearchToken IS NULL
OR U.AccountName LIKE '%' || @SearchToken || '%'
OR ANU.Email LIKE '%' || @SearchToken || '%'
OR UCFirstName.ClaimValue LIKE '%' || @SearchToken || '%'
OR UCLastName.ClaimValue LIKE '%' || @SearchToken || '%'
ORDER BY
U.AccountName,
U.UserId
LIMIT @PageSize
OFFSET (@PageNumber - 1) * @PageSize