182 lines
6.1 KiB
Transact-SQL
182 lines
6.1 KiB
Transact-SQL
-- ============================================================
|
|
-- spAdminClients: Client (organization) management
|
|
-- ============================================================
|
|
CREATE OR ALTER PROCEDURE [dbo].[spAdminClients]
|
|
@action VARCHAR(50),
|
|
@rqst NVARCHAR(MAX),
|
|
@resp NVARCHAR(MAX) OUTPUT
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE @j NVARCHAR(MAX) = ISNULL(@rqst, N'{}');
|
|
|
|
------------------------------------------------------------------------
|
|
-- ACTION: create
|
|
------------------------------------------------------------------------
|
|
IF @action = 'create'
|
|
BEGIN
|
|
DECLARE @cName NVARCHAR(200) = NULLIF(JSON_VALUE(@j, '$.clientName'), '');
|
|
|
|
IF @cName IS NULL
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"clientName is required"}';
|
|
RETURN;
|
|
END
|
|
|
|
IF EXISTS (SELECT 1 FROM dbo.tbClient WHERE cltName = @cName)
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"Client name already exists"}';
|
|
RETURN;
|
|
END
|
|
|
|
DECLARE @cId UNIQUEIDENTIFIER = NEWID();
|
|
INSERT INTO dbo.tbClient (cltId, cltName, cltStatus)
|
|
VALUES (@cId, @cName, 'Active');
|
|
|
|
SET @resp = (
|
|
SELECT
|
|
CAST(1 AS BIT) AS ok,
|
|
@cId AS clientId,
|
|
@cName AS clientName,
|
|
'Active' AS status
|
|
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
|
|
);
|
|
RETURN;
|
|
END
|
|
|
|
------------------------------------------------------------------------
|
|
-- ACTION: get
|
|
------------------------------------------------------------------------
|
|
IF @action = 'get'
|
|
BEGIN
|
|
DECLARE @gId UNIQUEIDENTIFIER = TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(@j, '$.clientId'));
|
|
|
|
IF @gId IS NULL
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"clientId is required"}';
|
|
RETURN;
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM dbo.tbClient WHERE cltId = @gId)
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"Client not found"}';
|
|
RETURN;
|
|
END
|
|
|
|
SET @resp = (
|
|
SELECT
|
|
CAST(1 AS BIT) AS ok,
|
|
c.cltId AS clientId,
|
|
c.cltName AS clientName,
|
|
c.cltStatus AS status,
|
|
c.cltCreatedUtc AS createdAt,
|
|
(SELECT COUNT(*) FROM dbo.tbUserClientRole WHERE ucrCltId = c.cltId) AS userCount,
|
|
(SELECT COUNT(*) FROM dbo.tbAdAccount WHERE accCltId = c.cltId) AS accountCount
|
|
FROM dbo.tbClient c WHERE c.cltId = @gId
|
|
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
|
|
);
|
|
RETURN;
|
|
END
|
|
|
|
------------------------------------------------------------------------
|
|
-- ACTION: list
|
|
------------------------------------------------------------------------
|
|
IF @action = 'list'
|
|
BEGIN
|
|
DECLARE @lStatus VARCHAR(20) = NULLIF(JSON_VALUE(@j, '$.status'), '');
|
|
DECLARE @lPage INT = ISNULL(TRY_CAST(JSON_VALUE(@j, '$.page') AS INT), 1);
|
|
DECLARE @lPageSize INT = ISNULL(TRY_CAST(JSON_VALUE(@j, '$.pageSize') AS INT), 50);
|
|
|
|
DECLARE @clients NVARCHAR(MAX);
|
|
SELECT @clients = (
|
|
SELECT
|
|
c.cltId AS clientId,
|
|
c.cltName AS clientName,
|
|
c.cltStatus AS status,
|
|
c.cltCreatedUtc AS createdAt,
|
|
(SELECT COUNT(*) FROM dbo.tbUserClientRole WHERE ucrCltId = c.cltId) AS userCount
|
|
FROM dbo.tbClient c
|
|
WHERE @lStatus IS NULL OR c.cltStatus = @lStatus
|
|
ORDER BY c.cltName
|
|
OFFSET (@lPage - 1) * @lPageSize ROWS
|
|
FETCH NEXT @lPageSize ROWS ONLY
|
|
FOR JSON PATH
|
|
);
|
|
|
|
DECLARE @lTotal INT;
|
|
SELECT @lTotal = COUNT(*) FROM dbo.tbClient WHERE @lStatus IS NULL OR cltStatus = @lStatus;
|
|
|
|
SET @resp = (
|
|
SELECT
|
|
CAST(1 AS BIT) AS ok,
|
|
JSON_QUERY(ISNULL(@clients, '[]')) AS clients,
|
|
@lTotal AS totalCount,
|
|
@lPage AS page,
|
|
@lPageSize AS pageSize
|
|
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
|
|
);
|
|
RETURN;
|
|
END
|
|
|
|
------------------------------------------------------------------------
|
|
-- ACTION: update
|
|
------------------------------------------------------------------------
|
|
IF @action = 'update'
|
|
BEGIN
|
|
DECLARE @uId UNIQUEIDENTIFIER = TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(@j, '$.clientId'));
|
|
DECLARE @uName NVARCHAR(200) = NULLIF(JSON_VALUE(@j, '$.clientName'), '');
|
|
DECLARE @uStatus VARCHAR(20) = NULLIF(JSON_VALUE(@j, '$.status'), '');
|
|
|
|
IF @uId IS NULL
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"clientId is required"}';
|
|
RETURN;
|
|
END
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM dbo.tbClient WHERE cltId = @uId)
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"Client not found"}';
|
|
RETURN;
|
|
END
|
|
|
|
UPDATE dbo.tbClient
|
|
SET cltName = ISNULL(@uName, cltName),
|
|
cltStatus = ISNULL(@uStatus, cltStatus)
|
|
WHERE cltId = @uId;
|
|
|
|
SET @resp = (
|
|
SELECT
|
|
CAST(1 AS BIT) AS ok,
|
|
cltId AS clientId,
|
|
cltName AS clientName,
|
|
cltStatus AS status
|
|
FROM dbo.tbClient WHERE cltId = @uId
|
|
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
|
|
);
|
|
RETURN;
|
|
END
|
|
|
|
------------------------------------------------------------------------
|
|
-- ACTION: delete (soft delete)
|
|
------------------------------------------------------------------------
|
|
IF @action = 'delete'
|
|
BEGIN
|
|
DECLARE @dId UNIQUEIDENTIFIER = TRY_CONVERT(UNIQUEIDENTIFIER, JSON_VALUE(@j, '$.clientId'));
|
|
|
|
IF @dId IS NULL
|
|
BEGIN
|
|
SET @resp = N'{"ok":false,"error":"clientId is required"}';
|
|
RETURN;
|
|
END
|
|
|
|
UPDATE dbo.tbClient SET cltStatus = 'Inactive' WHERE cltId = @dId;
|
|
|
|
SET @resp = (SELECT CAST(1 AS BIT) AS ok, @@ROWCOUNT AS rowsAffected FOR JSON PATH, WITHOUT_ARRAY_WRAPPER);
|
|
RETURN;
|
|
END
|
|
|
|
SET @resp = N'{"ok":false,"error":"Unknown action"}';
|
|
END
|
|
GO
|