Advertisement
simonradev

Tests

Sep 16th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.55 KB | None | 0 0
  1. -- Used to get userGameId from the BALI game by @USERNAME
  2. CREATE FUNCTION udf_GetUserGamesIdFromBali(@username varchar(50))
  3. RETURNS INT
  4. AS
  5. BEGIN
  6.     DECLARE @userGameId int = (SELECT ug.Id
  7.          FROM Users AS u
  8.          INNER JOIN UsersGames AS ug
  9.          ON u.Id = ug.UserId AND
  10.             u.Username = @username
  11.          INNER JOIN Games AS g
  12.          ON g.Name = 'Bali' AND
  13.             ug.GameId = g.Id);
  14.  
  15.     RETURN @userGameId;
  16. END
  17. GO
  18.  
  19. -- Gets all userGames Ids from the BALI GAME
  20. CREATE FUNCTION udf_UsersGamesIdsToUseFromBali()
  21. RETURNS TABLE
  22. AS
  23. RETURN( SELECT ug.Id
  24.         FROM Users AS u
  25.         INNER JOIN UsersGames AS ug
  26.         ON u.Id = ug.UserId AND
  27.             u.Username IN ('baleremuda', 'loosenoise', 'inguinalself', 'buildingdeltoid', 'monoxidecos')
  28.         INNER JOIN Games AS g
  29.         ON g.Name = 'Bali' AND
  30.             ug.GameId = g.Id)
  31. GO
  32.  
  33. -- Gets all items in range of ids
  34. CREATE FUNCTION udf_GetGroupOfItemsById(@minId int, @maxId int)
  35. RETURNS TABLE
  36. AS
  37.  RETURN (SELECT i.Id, i.Name, i.Price, i.MinLevel
  38.           FROM Items AS i
  39.           WHERE Id >= @minId AND Id <= @maxId)
  40. GO
  41.  
  42. -- When inserted into UserGameItems checks if the user level is enough and if it is it takes cash from him
  43. ALTER TRIGGER T_UserGameItems_AFTER_INSERT
  44. ON UserGameItems
  45. INSTEAD OF INSERT
  46. AS
  47. BEGIN
  48.  
  49. -- INSERT THE DATA INTO THE TABLE
  50. INSERT INTO UserGameItems (ItemId, UserGameId)
  51.     SELECT ins.ItemId, ins.UserGameId
  52.      FROM inserted AS ins
  53.      INNER JOIN Items AS i
  54.      ON ins.ItemId = i.Id
  55.      INNER JOIN UsersGames AS ug
  56.      ON i.MinLevel <= ug.Level AND
  57.         ug.Id = ins.UserGameId
  58.  
  59. -- CURSOR FOR EVERY SINGLE ITEM
  60. DECLARE inserted_Cursor CURSOR
  61. FOR (SELECT ins.ItemId, ins.UserGameId
  62.      FROM inserted AS ins
  63.      INNER JOIN Items AS i
  64.      ON ins.ItemId = i.Id
  65.      INNER JOIN UsersGames AS ug
  66.      ON i.MinLevel <= ug.Level AND
  67.         ug.Id = ins.UserGameId)
  68.  
  69. OPEN inserted_Cursor
  70.  
  71. DECLARE @currentItemId int;
  72. DECLARE @currentUsersGamesId int;
  73.  
  74. FETCH NEXT FROM inserted_Cursor
  75. INTO @currentItemId, @currentUsersGamesId
  76.  
  77. WHILE @@FETCH_STATUS = 0
  78. BEGIN
  79.  
  80.     UPDATE UsersGames
  81.      SET Cash -= (SELECT i.Price
  82.                    FROM Items AS i
  83.                    WHERE i.Id = @currentItemId)
  84.      WHERE Id = @currentUsersGamesId
  85.    
  86.     FETCH NEXT FROM inserted_Cursor
  87.     INTO @currentItemId, @currentUsersGamesId
  88. END
  89.  
  90. CLOSE inserted_Cursor;  
  91. DEALLOCATE inserted_Cursor;
  92.  
  93. END
  94. GO
  95.  
  96. CREATE PROC usp_AddTheTwoSetOfItemsToPlayer (@username varchar(50))
  97. AS
  98. BEGIN
  99.     INSERT INTO UserGameItems (ItemId, UserGameId)
  100.     SELECT i.Id, dbo.udf_GetUserGamesIdFromBali(@username)
  101.      FROM dbo.udf_GetGroupOfItemsById(251, 299) AS i
  102.    
  103.     INSERT INTO UserGameItems (ItemId, UserGameId)
  104.     SELECT i.Id, dbo.udf_GetUserGamesIdFromBali(@username)
  105.      FROM dbo.udf_GetGroupOfItemsById(501, 539) AS i
  106. END
  107. GO
  108.  
  109. UPDATE UsersGames
  110.  SET Cash += 50000
  111.  WHERE Id IN (SELECT * FROM dbo.udf_UsersGamesIdsToUseFromBali())
  112.  
  113. EXEC usp_AddTheTwoSetOfItemsToPlayer 'baleremuda';
  114. EXEC usp_AddTheTwoSetOfItemsToPlayer 'loosenoise';
  115. EXEC usp_AddTheTwoSetOfItemsToPlayer 'inguinalself';
  116. EXEC usp_AddTheTwoSetOfItemsToPlayer 'buildingdeltoid';
  117. EXEC usp_AddTheTwoSetOfItemsToPlayer 'monoxidecos';
  118.  
  119. SELECT ug.Id,
  120.        u.Username,
  121.        ug.Cash,
  122.        g.Name,
  123.        i.Name,
  124.        i.Price,
  125.        i.Id
  126.  FROM Users AS u
  127.  INNER JOIN UsersGames AS ug
  128.  ON u.Id = ug.UserId AND
  129.     u.Username IN ('baleremuda',
  130.                    'loosenoise',
  131.                    'inguinalself',
  132.                    'buildingdeltoid',
  133.                    'monoxidecos')
  134.  INNER JOIN Games AS g
  135.  ON ug.GameId = g.Id AND
  136.     g.Name = 'Bali'
  137.  INNER JOIN UserGameItems AS ugi
  138.  ON ug.Id = ugi.UserGameId
  139.  INNER JOIN Items AS i
  140.  ON ugi.ItemId = i.Id
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement