Added SteamAPI and achievement searching
This commit is contained in:
parent
b229ff9a15
commit
627cc810ed
61 changed files with 2781 additions and 903 deletions
Binary file not shown.
639
sql/DataProcs.sql
Normal file
639
sql/DataProcs.sql
Normal file
|
@ -0,0 +1,639 @@
|
|||
---------------------------------------
|
||||
-- GET USER NAME AND STATS PROCEDURE --
|
||||
---------------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserNameAndStats(
|
||||
@userId INT,
|
||||
@username VARCHAR(32) OUTPUT,
|
||||
@completed INT OUTPUT,
|
||||
@average INT OUTPUT,
|
||||
@perfect INT OUTPUT
|
||||
)
|
||||
AS
|
||||
|
||||
SELECT @username = Username
|
||||
FROM [User]
|
||||
WHERE ID = @userId
|
||||
|
||||
IF @username IS NULL
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
|
||||
SELECT @completed = SUM(Completed)
|
||||
FROM GameCompletionByUser
|
||||
WHERE UserID = @userId
|
||||
|
||||
SELECT @average = AVG((Completed * 100) / Total)
|
||||
FROM GameCompletionByUser
|
||||
WHERE UserID = @userId
|
||||
|
||||
SELECT @perfect = COUNT(GameID)
|
||||
FROM GameCompletionByUser
|
||||
WHERE UserID = @userId AND Completed = Total
|
||||
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
SELECT * FROM [User]
|
||||
|
||||
----------------------------------
|
||||
-- GET USER PLATFORMS PROCEDURE --
|
||||
----------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserPlatforms(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT [Platform].ID, [PlatformName], (CASE WHEN UserID IS NOT NULL THEN 1 ELSE 0 END) AS Connected
|
||||
FROM [Platform]
|
||||
LEFT JOIN IsOn ON IsOn.PlatformID = [Platform].ID AND UserID = @userId
|
||||
ORDER BY [Platform].ID
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------------------------
|
||||
-- GET USER RATINGS PROCEDURE --
|
||||
--------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserRatings(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT Game.Name AS GameName, Achievement.Name AS AchievementName, Quality, Difficulty, Rating.[Description]
|
||||
FROM Rating
|
||||
JOIN Achievement ON Achievement.ID = Rating.AchievementID
|
||||
JOIN Game ON Game.ID = Achievement.GameID
|
||||
WHERE UserID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------------------
|
||||
-- GET USER IMAGE PROCEDURE --
|
||||
------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserImage(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT ProfileImage FROM [User] WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------
|
||||
-- SET USERNAME --
|
||||
------------------
|
||||
|
||||
CREATE PROCEDURE SetUsername(
|
||||
@userId INT,
|
||||
@username VARCHAR(32)
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
UPDATE [User] SET Username = @username WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------------------
|
||||
-- SET USER IMAGE PROCEDURE --
|
||||
------------------------------
|
||||
|
||||
CREATE PROCEDURE SetUserImage(
|
||||
@userId INT,
|
||||
@type ImageType,
|
||||
@oldType ImageType OUTPUT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT @oldType = ProfileImage FROM [User] WHERE ID = @userId
|
||||
UPDATE [User] SET ProfileImage = @type WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------------------
|
||||
-- ADD USER TO PLATFORM --
|
||||
--------------------------
|
||||
|
||||
CREATE PROCEDURE AddUserToPlatform(
|
||||
@userId INT,
|
||||
@platformId INT,
|
||||
@platformUserID VARCHAR(32)
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF EXISTS (SELECT * FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'User already exists on specified platform'
|
||||
RETURN 3
|
||||
END
|
||||
INSERT INTO IsOn VALUES (@userId, @platformId, @platformUserId)
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-------------------------------
|
||||
-- REMOVE USER FROM PLATFORM --
|
||||
-------------------------------
|
||||
|
||||
CREATE PROCEDURE RemoveUserFromPlatform(
|
||||
@userId INT,
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT EXISTS (SELECT UserID FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'User does not exist on specified platform'
|
||||
RETURN 3
|
||||
END
|
||||
DELETE FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId
|
||||
DELETE FROM Progress WHERE UserID = @userId AND PlatformID = @platformId
|
||||
DELETE FROM Owns WHERE UserID = @userId AND PlatformID = @platformId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------
|
||||
-- ADD PLATFORM --
|
||||
------------------
|
||||
|
||||
CREATE PROCEDURE AddPlatform(
|
||||
@name VARCHAR(32),
|
||||
@platformId INT OUTPUT
|
||||
)
|
||||
AS
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'Platform name cannot be null'
|
||||
RETURN 1
|
||||
END
|
||||
INSERT INTO [Platform] VALUES (@name)
|
||||
SET @platformId = @@IDENTITY
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------
|
||||
-- REMOVE PLATFORM --
|
||||
---------------------
|
||||
|
||||
CREATE PROCEDURE RemovePlatform(
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF @platformId IN (SELECT PlatformID FROM ExistsOn)
|
||||
BEGIN
|
||||
PRINT 'All games must be removed from the specified platform before it can be removed'
|
||||
RETURN 2
|
||||
END
|
||||
DELETE FROM [Platform] WHERE ID = @platformId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-------------------
|
||||
-- GET PLATFORMS --
|
||||
-------------------
|
||||
|
||||
CREATE PROCEDURE GetPlatforms
|
||||
AS
|
||||
SELECT ID, PlatformName FROM [Platform]
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-----------------------
|
||||
-- GET PLATFORM NAME --
|
||||
-----------------------
|
||||
|
||||
CREATE PROCEDURE GetPlatformName(
|
||||
@platformId INT,
|
||||
@name VARCHAR(32) OUTPUT
|
||||
)
|
||||
AS
|
||||
SELECT @name = PlatformName FROM [Platform] WHERE ID = @platformId
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-----------------------
|
||||
-- GET PLATFORM ICON --
|
||||
-----------------------
|
||||
|
||||
CREATE PROCEDURE GetPlatformIcon(
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT Icon FROM [Platform] WHERE ID = @platformId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------
|
||||
-- ADD GAME --
|
||||
--------------
|
||||
|
||||
CREATE PROCEDURE AddGame(
|
||||
@name VARCHAR(32),
|
||||
@image ImageType,
|
||||
@gameId INT OUTPUT
|
||||
)
|
||||
AS
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'Game name cannot be null'
|
||||
RETURN 1
|
||||
END
|
||||
IF @name IN (SELECT [Name] FROM Game)
|
||||
BEGIN
|
||||
PRINT 'Game with specified name already exists'
|
||||
RETURN 2
|
||||
END
|
||||
INSERT INTO Game VALUES (@name, @image)
|
||||
SET @gameId = @@IDENTITY
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------
|
||||
-- ADD IF NOT GAME --
|
||||
---------------------
|
||||
|
||||
CREATE PROCEDURE AddIfNotGame(
|
||||
@name VARCHAR(32),
|
||||
@image VARCHAR(11),
|
||||
@gameId INT OUTPUT
|
||||
)
|
||||
AS
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'Game name cannot be null'
|
||||
RETURN 1
|
||||
END
|
||||
-- Ideally game name wouldn't have to be unique, but I don't know of another way to sync games across platforms when they share no IDing system
|
||||
IF NOT @name IN (SELECT [Name] FROM Game)
|
||||
BEGIN
|
||||
INSERT INTO Game VALUES (@name, @image)
|
||||
END
|
||||
SELECT @gameId = ID FROM Game WHERE [Name] = @name
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-----------------
|
||||
-- REMOVE GAME --
|
||||
-----------------
|
||||
|
||||
CREATE PROCEDURE RemoveGame(
|
||||
@gameId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
DELETE FROM Game WHERE ID = @gameId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-------------------
|
||||
-- GET GAME ICON --
|
||||
-------------------
|
||||
|
||||
CREATE PROCEDURE GetGameIcon(
|
||||
@gameId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM [Game])
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT Icon FROM [Game] WHERE ID = @gameId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
----------------------
|
||||
-- ADD GAME TO USER --
|
||||
----------------------
|
||||
|
||||
CREATE PROCEDURE AddGameToUser(
|
||||
@gameId INT,
|
||||
@userId INT,
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 3
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'User is not on specified platform'
|
||||
RETURN 4
|
||||
END
|
||||
IF EXISTS (SELECT * FROM Owns WHERE GameID = @gameId AND UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'Game is already owned by specified user on specified platform'
|
||||
RETURN 5
|
||||
END
|
||||
INSERT INTO Owns VALUES (@userId, @gameId, @platformId)
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------------
|
||||
-- REMOVE GAME FROM USER --
|
||||
---------------------------
|
||||
|
||||
CREATE PROCEDURE RemoveGameFromUser(
|
||||
@gameId INT,
|
||||
@userId INT,
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 3
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM Owns WHERE GameID = @gameId AND UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'Game is not owned by specified user on specified platform'
|
||||
RETURN 4
|
||||
END
|
||||
DELETE FROM Owns WHERE UserID = @userId AND GameID = @gameId AND PlatformID = @platformId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------------------
|
||||
-- ADD GAME TO PLATFORM --
|
||||
--------------------------
|
||||
|
||||
CREATE PROCEDURE AddGameToPlatform(
|
||||
@gameId INT,
|
||||
@platformId INT,
|
||||
@platformGameId VARCHAR(32)
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF EXISTS (SELECT * FROM ExistsOn WHERE GameID = @gameId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'Game already exists on specified platform'
|
||||
RETURN 3
|
||||
END
|
||||
INSERT INTO ExistsOn VALUES (@gameId, @platformId, @platformGameId)
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
-------------------------------
|
||||
-- REMOVE GAME FROM PLATFORM --
|
||||
-------------------------------
|
||||
|
||||
CREATE PROCEDURE RemoveGameFromPlatform(
|
||||
@gameId INT,
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM ExistsOn WHERE GameID = @gameId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'Game does not exist on specified platform'
|
||||
RETURN 3
|
||||
END
|
||||
DELETE FROM ExistsOn WHERE GameID = @gameId AND PlatformID = @platformId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------
|
||||
-- ADD ACHIEVEMENT --
|
||||
---------------------
|
||||
|
||||
CREATE PROCEDURE AddAchievement(
|
||||
@gameId INT,
|
||||
@name VARCHAR(128),
|
||||
@description VARCHAR(512),
|
||||
@stages INT,
|
||||
@image ImageType,
|
||||
@achievementId INT OUTPUT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'Achievement name cannot be null'
|
||||
RETURN 2
|
||||
END
|
||||
IF @stages IS NULL
|
||||
BEGIN
|
||||
PRINT 'Achievement stages cannot be null'
|
||||
RETURN 3
|
||||
END
|
||||
IF @name IN (SELECT [Name] FROM Achievement WHERE GameID = @gameId)
|
||||
BEGIN
|
||||
PRINT 'Achievement with specified name already exists for specified game'
|
||||
RETURN 4
|
||||
END
|
||||
INSERT INTO Achievement VALUES (@gameId, @name, @description, @stages, @image)
|
||||
SET @achievementId = @@IDENTITY
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
----------------------------
|
||||
-- ADD IF NOT ACHIEVEMENT --
|
||||
----------------------------
|
||||
|
||||
CREATE PROCEDURE AddIfNotAchievement(
|
||||
@gameId INT,
|
||||
@name VARCHAR(128),
|
||||
@description VARCHAR(512),
|
||||
@stages INT,
|
||||
@image VARCHAR(11),
|
||||
@achievementId INT OUTPUT
|
||||
)
|
||||
AS
|
||||
IF NOT @gameId IN (SELECT ID FROM Game)
|
||||
BEGIN
|
||||
PRINT 'No game with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF @name IS NULL
|
||||
BEGIN
|
||||
PRINT 'Achievement name cannot be null'
|
||||
RETURN 2
|
||||
END
|
||||
IF @stages IS NULL
|
||||
BEGIN
|
||||
PRINT 'Achievement stages cannot be null'
|
||||
RETURN 3
|
||||
END
|
||||
IF NOT @name IN (SELECT [Name] FROM Achievement WHERE GameID = @gameId)
|
||||
BEGIN
|
||||
INSERT INTO Achievement VALUES (@gameId, @name, @description, @stages, @image)
|
||||
END
|
||||
SELECT @achievementId = ID FROM Achievement WHERE [Name] = @name AND GameID = @gameId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------------
|
||||
-- REMOVE ACHIEVEMENT --
|
||||
------------------------
|
||||
|
||||
CREATE PROCEDURE RemoveAchievement(
|
||||
@achievementId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @achievementId IN (SELECT ID FROM Achievement)
|
||||
BEGIN
|
||||
PRINT 'No achievement with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
DELETE FROM Achievement WHERE ID = @achievementId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------------------
|
||||
-- GET ACHIEVEMENT ICON --
|
||||
--------------------------
|
||||
|
||||
CREATE PROCEDURE GetAchievementIcon(
|
||||
@achievementId INT
|
||||
)
|
||||
AS
|
||||
IF NOT @achievementId IN (SELECT ID FROM Achievement)
|
||||
BEGIN
|
||||
PRINT 'No achievement with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT Icon FROM Achievement WHERE ID = @achievementId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------------------------
|
||||
-- SET ACHIEVEMENT PROGRESS FOR USER --
|
||||
---------------------------------------
|
||||
|
||||
CREATE PROCEDURE SetAchievementProgressForUser(
|
||||
@userId INT,
|
||||
@platformId INT,
|
||||
@achievementId INT,
|
||||
@progress INT
|
||||
)
|
||||
AS
|
||||
IF NOT @userId IN (SELECT ID FROM [User])
|
||||
BEGIN
|
||||
PRINT 'No user with the specified ID was found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT @platformId IN (SELECT ID FROM [Platform])
|
||||
BEGIN
|
||||
PRINT 'No platform with the specified ID was found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT @achievementId IN (SELECT ID FROM Achievement)
|
||||
BEGIN
|
||||
PRINT 'No achievement with the specified ID was found'
|
||||
RETURN 3
|
||||
END
|
||||
IF EXISTS (SELECT * FROM Progress WHERE AchievementID = @achievementId AND UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
UPDATE Progress SET Progress = @progress WHERE AchievementID = @achievementId AND UserID = @userId AND PlatformID = @platformId
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
INSERT INTO Progress VALUES (@userId, @platformId, @achievementId, @progress)
|
||||
END
|
||||
RETURN 0
|
||||
GO
|
||||
|
60
sql/SearchProcs.sql
Normal file
60
sql/SearchProcs.sql
Normal file
|
@ -0,0 +1,60 @@
|
|||
-----------------------
|
||||
-- SEARCH ACHIEVEMENTS --
|
||||
-----------------------
|
||||
|
||||
CREATE PROCEDURE SearchAchievements(
|
||||
@searchTerm VARCHAR(32),
|
||||
@userId INT,
|
||||
@completed BIT,
|
||||
@minCompletion FLOAT,
|
||||
@maxCompletion FLOAT,
|
||||
@minDifficulty FLOAT,
|
||||
@maxDifficulty FLOAT,
|
||||
@minQuality FLOAT,
|
||||
@maxQuality FLOAT
|
||||
)
|
||||
AS
|
||||
IF @userId IS NULL AND @completed = 1
|
||||
BEGIN
|
||||
PRINT 'Cannot search for completed achievements with no user specified'
|
||||
RETURN 1
|
||||
END
|
||||
|
||||
IF @searchTerm IS NULL OR @searchTerm = ''
|
||||
SET @searchTerm = '%'
|
||||
ELSE
|
||||
SET @searchTerm = '%' + @searchTerm + '%'
|
||||
PRINT @searchTerm
|
||||
|
||||
IF NOT @userId IS NULL
|
||||
SELECT TOP 100 Game.[Name] AS Game, Achievement.[Name], Completion, Difficulty, Quality
|
||||
FROM Achievement
|
||||
JOIN MaxProgress ON AchievementID = Achievement.ID AND UserID = @userId
|
||||
JOIN Game ON Game.ID = GameID
|
||||
JOIN AchievementCompletion AC ON AC.ID = Achievement.ID
|
||||
JOIN AchievementRatings AR ON AR.ID = Achievement.ID
|
||||
WHERE (Game.[Name] LIKE @searchTerm OR Achievement.[Name] LIKE @searchTerm)
|
||||
AND (@completed <> 1 OR Progress = Stages )
|
||||
AND (@minCompletion IS NULL OR @minCompletion <= Completion)
|
||||
AND (@maxCompletion IS NULL OR @maxCompletion >= Completion)
|
||||
AND (@minDifficulty IS NULL OR @minDifficulty <= Difficulty)
|
||||
AND (@maxDifficulty IS NULL OR @maxDifficulty >= Difficulty)
|
||||
AND (@minQuality IS NULL OR @minQuality <= Quality )
|
||||
AND (@maxQuality IS NULL OR @maxQuality >= Quality )
|
||||
ELSE
|
||||
SELECT TOP 100 Achievement.ID, Game.[Name] AS Game, Achievement.[Name], Completion, Quality, Difficulty
|
||||
FROM Achievement
|
||||
JOIN Game ON Game.ID = GameID
|
||||
JOIN AchievementCompletion AC ON AC.ID = Achievement.ID
|
||||
JOIN AchievementRatings AR ON AR.ID = Achievement.ID
|
||||
WHERE (Game.[Name] LIKE @searchTerm OR Achievement.[Name] LIKE @searchTerm)
|
||||
AND (@minCompletion IS NULL OR @minCompletion <= Completion)
|
||||
AND (@maxCompletion IS NULL OR @maxCompletion >= Completion)
|
||||
AND (@minDifficulty IS NULL OR @minDifficulty <= Difficulty)
|
||||
AND (@maxDifficulty IS NULL OR @maxDifficulty >= Difficulty)
|
||||
AND (@minQuality IS NULL OR @minQuality <= Quality )
|
||||
AND (@maxQuality IS NULL OR @maxQuality >= Quality )
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
EXEC SearchAchievements '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
-----------------------------
|
||||
|
||||
--CREATE TYPE ImageType FROM VARCHAR(4) NULL
|
||||
--GO
|
||||
|
||||
CREATE TABLE [User] (
|
||||
ID INT IDENTITY(0, 1) NOT NULL,
|
||||
Email VARCHAR(254) NOT NULL,
|
||||
|
@ -36,7 +39,9 @@ CREATE TABLE [User] (
|
|||
Hue INT NOT NULL
|
||||
CONSTRAINT HueDefault DEFAULT 0
|
||||
CONSTRAINT HueConstraint CHECK (0 <= Hue AND Hue <= 360),
|
||||
PFP VARCHAR(11) NULL,
|
||||
ProfileImage ImageType,
|
||||
[Admin] BIT NOT NULL
|
||||
CONSTRAINT AdmivDefault DEFAULT 0,
|
||||
Verified BIT NOT NULL
|
||||
CONSTRAINT VerifiedDefault DEFAULT 0
|
||||
PRIMARY KEY(ID)
|
||||
|
@ -44,14 +49,15 @@ CREATE TABLE [User] (
|
|||
|
||||
CREATE TABLE [Platform] (
|
||||
ID INT IDENTITY(0, 1) NOT NULL,
|
||||
PlatformName VARCHAR(32) NOT NULL
|
||||
PlatformName VARCHAR(32) NOT NULL,
|
||||
Icon ImageType
|
||||
PRIMARY KEY(ID)
|
||||
)
|
||||
|
||||
CREATE TABLE [Game] (
|
||||
ID INT IDENTITY(0, 1) NOT NULL,
|
||||
Name VARCHAR(32) NOT NULL,
|
||||
Thumbnail VARCHAR(256) NULL
|
||||
Icon ImageType
|
||||
PRIMARY KEY(ID)
|
||||
)
|
||||
|
||||
|
@ -61,7 +67,7 @@ CREATE TABLE [Achievement] (
|
|||
Name VARCHAR(128) NOT NULL,
|
||||
Description VARCHAR(512) NULL,
|
||||
Stages INT NOT NULL,
|
||||
Thumbnail VARCHAR(256) NULL
|
||||
Icon ImageType
|
||||
PRIMARY KEY(ID)
|
||||
FOREIGN KEY(GameID) REFERENCES [Game](ID)
|
||||
ON UPDATE CASCADE
|
||||
|
@ -89,7 +95,7 @@ CREATE TABLE [Progress] (
|
|||
PlatformID INT NOT NULL,
|
||||
AchievementID INT NOT NULL,
|
||||
Progress INT NOT NULL
|
||||
PRIMARY KEY(UserID, AchievementID)
|
||||
PRIMARY KEY(UserID, PlatformID, AchievementID)
|
||||
FOREIGN KEY(UserID) REFERENCES [User](ID)
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE,
|
||||
|
@ -117,7 +123,7 @@ CREATE TABLE [IsOn] (
|
|||
CREATE TABLE [ExistsOn] (
|
||||
GameID INT NOT NULL,
|
||||
PlatformID INT NOT NULL,
|
||||
PlatformGameID INT NOT NULL
|
||||
PlatformGameID VARCHAR(32) NOT NULL
|
||||
PRIMARY KEY(GameID, PlatformID)
|
||||
FOREIGN KEY(GameID) REFERENCES [Game](ID)
|
||||
ON UPDATE CASCADE
|
186
sql/UserData.sql
186
sql/UserData.sql
|
@ -1,186 +0,0 @@
|
|||
---------------------------------------
|
||||
-- GET USER NAME AND STATS PROCEDURE --
|
||||
---------------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserNameAndStats(
|
||||
@userId INT,
|
||||
@username VARCHAR(32) OUTPUT,
|
||||
@completed INT OUTPUT,
|
||||
@average INT OUTPUT,
|
||||
@perfect INT OUTPUT
|
||||
)
|
||||
AS
|
||||
BEGIN TRANSACTION
|
||||
|
||||
SELECT @username = Username
|
||||
FROM [User]
|
||||
WHERE ID = @userId
|
||||
|
||||
IF @username IS NULL
|
||||
BEGIN
|
||||
PRINT 'No user found with specified id'
|
||||
ROLLBACK TRANSACTION
|
||||
RETURN 1
|
||||
END
|
||||
|
||||
DECLARE @progress TABLE (GameID INT, Completed INT, Total INT)
|
||||
INSERT INTO @progress
|
||||
SELECT GameID, SUM(CASE WHEN Progress.Progress = Achievement.Stages THEN 1 ELSE 0 END) AS Completed, COUNT(AchievementID) AS Total
|
||||
FROM Achievement
|
||||
JOIN Progress ON
|
||||
Progress.UserID = @userId
|
||||
AND Progress.AchievementID = Achievement.ID
|
||||
GROUP BY GameID
|
||||
COMMIT TRANSACTION
|
||||
|
||||
SELECT @completed = SUM(Completed)
|
||||
FROM @progress
|
||||
|
||||
SELECT @average = AVG((Completed * 100) / Total)
|
||||
FROM @progress
|
||||
|
||||
SELECT @perfect = COUNT(GameID)
|
||||
FROM @progress
|
||||
WHERE Completed = Total
|
||||
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
----------------------------------
|
||||
-- GET USER PLATFORMS PROCEDURE --
|
||||
----------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserPlatforms(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
SELECT [Platform].ID, [PlatformName], (CASE WHEN UserID IS NOT NULL THEN 1 ELSE 0 END) AS Connected
|
||||
FROM [Platform]
|
||||
LEFT JOIN IsOn ON IsOn.PlatformID = [Platform].ID
|
||||
ORDER BY [Platform].ID
|
||||
GO
|
||||
|
||||
--------------------------------
|
||||
-- GET USER RATINGS PROCEDURE --
|
||||
--------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserRatings(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
SELECT Game.Name AS GameName, Achievement.Name AS AchievementName, Quality, Difficulty, Rating.[Description]
|
||||
FROM Rating
|
||||
JOIN Achievement ON Achievement.ID = Rating.AchievementID
|
||||
JOIN Game ON Game.ID = Achievement.GameID
|
||||
WHERE UserID = @userId
|
||||
GO
|
||||
|
||||
------------------------------
|
||||
-- GET USER IMAGE PROCEDURE --
|
||||
------------------------------
|
||||
|
||||
CREATE PROCEDURE GetUserImage(
|
||||
@userId INT
|
||||
)
|
||||
AS
|
||||
IF NOT EXISTS (SELECT * FROM [User] WHERE ID = @userId)
|
||||
BEGIN
|
||||
PRINT 'No user with specified ID found'
|
||||
RETURN 1
|
||||
END
|
||||
SELECT PFP FROM [User] WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------
|
||||
-- SET USERNAME --
|
||||
------------------
|
||||
|
||||
CREATE PROCEDURE SetUsername(
|
||||
@userId INT,
|
||||
@username VARCHAR(32)
|
||||
)
|
||||
AS
|
||||
IF NOT EXISTS (SELECT * FROM [User] WHERE ID = @userId)
|
||||
BEGIN
|
||||
PRINT 'No user with specified ID found'
|
||||
RETURN 1
|
||||
END
|
||||
UPDATE [User] SET Username = @username WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
------------------------------
|
||||
-- SET USER IMAGE PROCEDURE --
|
||||
------------------------------
|
||||
|
||||
CREATE PROCEDURE SetUserImage(
|
||||
@userId INT,
|
||||
@type VARCHAR(11)
|
||||
)
|
||||
AS
|
||||
IF NOT EXISTS (SELECT * FROM [User] WHERE ID = @userId)
|
||||
BEGIN
|
||||
PRINT 'No user with specified ID found'
|
||||
RETURN 1
|
||||
END
|
||||
UPDATE [User] SET PFP = @type WHERE ID = @userId
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
---------------------------
|
||||
-- ADD USER TO PROCEDURE --
|
||||
---------------------------
|
||||
|
||||
CREATE PROCEDURE AddPlatform(
|
||||
@userId INT,
|
||||
@platformId INT,
|
||||
@platformUserID VARCHAR(32)
|
||||
)
|
||||
AS
|
||||
IF NOT EXISTS (SELECT * FROM [User] WHERE ID = @userId)
|
||||
BEGIN
|
||||
PRINT 'No user with specified ID found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM [Platform] WHERE ID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'No platform with specified ID found'
|
||||
RETURN 2
|
||||
END
|
||||
IF EXISTS (SELECT * FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'User already exists on platform'
|
||||
RETURN 3
|
||||
END
|
||||
INSERT INTO IsOn VALUES (@userId, @platformId, @platformUserId)
|
||||
RETURN 0
|
||||
GO
|
||||
|
||||
--------------------------------
|
||||
-- REMOVE USER FROM PROCEDURE --
|
||||
--------------------------------
|
||||
|
||||
CREATE PROCEDURE RemovePlatform(
|
||||
@userId INT,
|
||||
@platformId INT
|
||||
)
|
||||
AS
|
||||
IF NOT EXISTS (SELECT * FROM [User] WHERE ID = @userId)
|
||||
BEGIN
|
||||
PRINT 'No user with specified ID found'
|
||||
RETURN 1
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM [Platform] WHERE ID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'No platform with specified ID found'
|
||||
RETURN 2
|
||||
END
|
||||
IF NOT EXISTS (SELECT * FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId)
|
||||
BEGIN
|
||||
PRINT 'User does not exist on platform'
|
||||
RETURN 3
|
||||
END
|
||||
DELETE FROM IsOn WHERE UserID = @userId AND PlatformID = @platformId
|
||||
RETURN 0
|
||||
GO
|
35
sql/Views.sql
Normal file
35
sql/Views.sql
Normal file
|
@ -0,0 +1,35 @@
|
|||
-- The maximum progress a user has on an achievement across all platforms
|
||||
CREATE VIEW MaxProgress
|
||||
AS
|
||||
SELECT UserID, AchievementID, MAX(Progress) AS Progress
|
||||
FROM Progress
|
||||
GROUP BY UserID, AchievementID
|
||||
GO
|
||||
|
||||
-- List of games and users with the number of completed achievements out of the total achievements the user has completed
|
||||
CREATE VIEW GameCompletionByUser
|
||||
AS
|
||||
SELECT UserID, GameID, SUM(CASE WHEN Progress = Stages THEN 1 ELSE 0 END) AS Completed, COUNT(AchievementID) AS Total
|
||||
FROM Achievement
|
||||
JOIN MaxProgress ON AchievementID = Achievement.ID
|
||||
GROUP BY UserID, GameID
|
||||
GO
|
||||
|
||||
-- List of achievements and the percentage of people who have completed it
|
||||
CREATE VIEW AchievementCompletion
|
||||
AS
|
||||
SELECT Achievement.ID, (CASE WHEN COUNT(UserID) = 0 THEN NULL ELSE (SUM(CASE WHEN Progress = Stages THEN 1 ELSE 0 END) * 100 / COUNT(UserID)) END) AS Completion
|
||||
FROM Achievement
|
||||
LEFT JOIN MaxProgress ON AchievementID = Achievement.ID
|
||||
GROUP BY Achievement.ID
|
||||
GO
|
||||
|
||||
-- List of achievements and their average quality and difficulty ratings filling with null as necessary
|
||||
CREATE VIEW AchievementRatings
|
||||
AS
|
||||
SELECT Achievement.ID, AVG(Quality) AS Quality, AVG(Difficulty) AS Difficulty
|
||||
FROM Achievement
|
||||
LEFT JOIN Rating ON AchievementID = Achievement.ID
|
||||
GROUP BY Achievement.ID
|
||||
GO
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue