A heckin ton. Mostly hackish

This commit is contained in:
Gnarwhal 2021-02-16 14:11:12 -05:00
parent 052052d76b
commit b229ff9a15
Signed by: Gnarwhal
GPG key ID: 0989A73D8C421174
70 changed files with 2226 additions and 881 deletions

View file

@ -36,6 +36,7 @@ CREATE TABLE [User] (
Hue INT NOT NULL
CONSTRAINT HueDefault DEFAULT 0
CONSTRAINT HueConstraint CHECK (0 <= Hue AND Hue <= 360),
PFP VARCHAR(11) NULL,
Verified BIT NOT NULL
CONSTRAINT VerifiedDefault DEFAULT 0
PRIMARY KEY(ID)
@ -102,7 +103,8 @@ CREATE TABLE [Progress] (
CREATE TABLE [IsOn] (
UserID INT NOT NULL,
PlatformID INT NOT NULL
PlatformID INT NOT NULL,
PlatformUserID VARCHAR(32) NOT NULL
PRIMARY KEY(UserID, PlatformID)
FOREIGN KEY(UserID) REFERENCES [User](ID)
ON UPDATE CASCADE

View file

@ -1,6 +0,0 @@
CREATE PROCEDURE GetUserLogin(
@email VARCHAR(254)
) AS
BEGIN TRANSACTION
SELECT Id, Salt, [Password], Hue FROM [User] WHERE Email = @email
COMMIT TRANSACTION

186
sql/UserData.sql Normal file
View file

@ -0,0 +1,186 @@
---------------------------------------
-- 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