Final Product

This commit is contained in:
Gnarwhal 2021-02-19 15:49:24 -05:00
parent a8cf583569
commit a9f44c29af
Signed by: Gnarwhal
GPG key ID: 0989A73D8C421174
48 changed files with 3908 additions and 581 deletions

View file

@ -1,8 +1,52 @@
DELETE FROM [User]
DELETE FROM [Game]
DELETE FROM [Platform]
GO
--------------
-- HAS USER --
--------------
CREATE PROCEDURE HasUser(
@result BIT OUTPUT
)
AS
SET @result = CASE WHEN EXISTS (SELECT * FROM [User]) THEN 1 ELSE 0 END
RETURN 0
GO
-------------
-- OP USER --
-------------
CREATE PROCEDURE OpUser(
@userId INT
)
AS
UPDATE [User] SET Admin = 1 WHERE @userId = [User].ID
RETURN 0
GO
-----------------------
-- GET ID FROM EMAIL --
-----------------------
CREATE PROCEDURE GetIdFromEmail(
@email VARCHAR(254),
@userId INT OUTPUT
)
AS
SELECT @userId = ID
FROM [User]
WHERE Email = @email
RETURN 0
GO
---------------------------------------
-- GET USER NAME AND STATS PROCEDURE --
---------------------------------------
ALTER PROCEDURE GetUserNameAndStats(
CREATE PROCEDURE GetUserNameAndStats(
@userId INT,
@username VARCHAR(32) OUTPUT,
@completed INT OUTPUT,
@ -42,7 +86,7 @@ SELECT * FROM [User]
-- GET USER PLATFORMS PROCEDURE --
----------------------------------
ALTER PROCEDURE GetUserPlatforms(
CREATE PROCEDURE GetUserPlatforms(
@userId INT
)
AS
@ -62,7 +106,7 @@ GO
-- GET USER RATINGS PROCEDURE --
--------------------------------
ALTER PROCEDURE GetUserRatings(
CREATE PROCEDURE GetUserRatings(
@userId INT
)
AS
@ -83,7 +127,7 @@ GO
-- GET USER IMAGE PROCEDURE --
------------------------------
ALTER PROCEDURE GetUserImage(
CREATE PROCEDURE GetUserImage(
@userId INT
)
AS
@ -100,7 +144,7 @@ GO
-- SET USERNAME --
------------------
ALTER PROCEDURE SetUsername(
CREATE PROCEDURE SetUsername(
@userId INT,
@username VARCHAR(32)
)
@ -118,7 +162,7 @@ GO
-- SET USER IMAGE PROCEDURE --
------------------------------
ALTER PROCEDURE SetUserImage(
CREATE PROCEDURE SetUserImage(
@userId INT,
@type ImageType,
@oldType ImageType OUTPUT
@ -138,7 +182,7 @@ GO
-- ADD USER TO PLATFORM --
--------------------------
ALTER PROCEDURE AddUserToPlatform(
CREATE PROCEDURE AddUserToPlatform(
@userId INT,
@platformId INT,
@platformUserID VARCHAR(32)
@ -167,7 +211,7 @@ GO
-- REMOVE USER FROM PLATFORM --
-------------------------------
ALTER PROCEDURE RemoveUserFromPlatform(
CREATE PROCEDURE RemoveUserFromPlatform(
@userId INT,
@platformId INT
)
@ -197,7 +241,7 @@ GO
-- ADD PLATFORM --
------------------
ALTER PROCEDURE AddPlatform(
CREATE PROCEDURE AddPlatform(
@name VARCHAR(32),
@platformId INT OUTPUT
)
@ -207,7 +251,7 @@ BEGIN
PRINT 'Platform name cannot be null'
RETURN 1
END
INSERT INTO [Platform] VALUES (@name)
INSERT INTO [Platform] VALUES (@name, 'png')
SET @platformId = @@IDENTITY
RETURN 0
GO
@ -216,7 +260,7 @@ GO
-- REMOVE PLATFORM --
---------------------
ALTER PROCEDURE RemovePlatform(
CREATE PROCEDURE RemovePlatform(
@platformId INT
)
AS
@ -238,7 +282,7 @@ GO
-- GET PLATFORMS --
-------------------
ALTER PROCEDURE GetPlatforms
CREATE PROCEDURE GetPlatforms
AS
SELECT ID, PlatformName FROM [Platform]
RETURN 0
@ -248,7 +292,7 @@ GO
-- GET PLATFORM NAME --
-----------------------
ALTER PROCEDURE GetPlatformName(
CREATE PROCEDURE GetPlatformName(
@platformId INT,
@name VARCHAR(32) OUTPUT
)
@ -266,7 +310,7 @@ GO
-- GET PLATFORM ICON --
-----------------------
ALTER PROCEDURE GetPlatformIcon(
CREATE PROCEDURE GetPlatformIcon(
@platformId INT
)
AS
@ -283,7 +327,7 @@ GO
-- ADD GAME --
--------------
ALTER PROCEDURE AddGame(
CREATE PROCEDURE AddGame(
@name VARCHAR(32),
@image ImageType,
@gameId INT OUTPUT
@ -308,7 +352,7 @@ GO
-- ADD IF NOT GAME --
---------------------
ALTER PROCEDURE AddIfNotGame(
CREATE PROCEDURE AddIfNotGame(
@name VARCHAR(32),
@image VARCHAR(11),
@gameId INT OUTPUT
@ -332,7 +376,7 @@ GO
-- REMOVE GAME --
-----------------
ALTER PROCEDURE RemoveGame(
CREATE PROCEDURE RemoveGame(
@gameId INT
)
AS
@ -496,7 +540,7 @@ GO
-- ADD ACHIEVEMENT --
---------------------
ALTER PROCEDURE AddAchievement(
CREATE PROCEDURE AddAchievement(
@gameId INT,
@name VARCHAR(128),
@description VARCHAR(512),
@ -637,3 +681,186 @@ END
RETURN 0
GO
------------------------------------------
-- GET NOTEWORTHY ACHIEVEMENTS FOR USER --
------------------------------------------
CREATE PROCEDURE GetNoteworthyAchievementsForUser (
@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 TOP 5 Achievement.ID, Name, Completion
FROM Achievement
JOIN MaxProgress ON Achievement.ID = MaxProgress.AchievementID
JOIN AchievementCompletion AC ON AC.ID = Achievement.ID
WHERE UserID = @userId AND Progress = Stages
ORDER BY Completion ASC, NumberUsers DESC
RETURN 0
GO
---------------------
-- GET ACHIEVEMENT --
---------------------
CREATE PROCEDURE GetAchievement (
@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 Achievement.ID, Name, Completion, Description, Difficulty, Quality
FROM Achievement
LEFT JOIN AchievementCompletion AC ON Achievement.ID = AC.ID
LEFT JOIN AchievementRatings AR ON Achievement.ID = AR.ID
WHERE Achievement.ID = @achievementId
RETURN 0
GO
---------------------------------
-- GET RATINGS FOR ACHIEVEMENT --
---------------------------------
CREATE PROCEDURE GetRatingsForAchievement(
@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 UserID, [Username], Difficulty, Quality, [Description]
FROM Rating
JOIN [User] ON [User].ID = Rating.UserID
WHERE AchievementID = @achievementId
RETURN 0
GO
-------------------------
-- GET RATINGS BY USER --
-------------------------
CREATE PROCEDURE GetRatingsByUser(
@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 AchievementID, Achievement.[Name], Difficulty, Quality, Rating.[Description]
FROM Rating
JOIN Achievement ON Achievement.ID = Rating.UserID
WHERE UserID = @userId
RETURN 0
GO
EXEC GetRatingsByUser 0
------------------
-- HAS PROGRESS --
------------------
CREATE PROCEDURE HasProgress (
@userId INT,
@achievementId INT,
@result BIT OUTPUT
)
AS
IF NOT @userId IN (SELECT ID FROM [User])
BEGIN
PRINT 'No user with the specified ID was found'
RETURN 1
END
IF NOT @achievementId IN (SELECT ID FROM Achievement)
BEGIN
PRINT 'No achievement with the specified ID was found'
RETURN 2
END
SET @result = CASE WHEN EXISTS (SELECT * FROM Progress WHERE UserID = @userId AND AchievementID = @achievementId) THEN 1 ELSE 0 END
RETURN 0
GO
----------------
-- GET RATING --
----------------
CREATE PROCEDURE GetRating(
@userId INT,
@achievementId 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 @achievementId IN (SELECT ID FROM Achievement)
BEGIN
PRINT 'No achievement with the specified ID was found'
RETURN 2
END
SELECT Difficulty, Quality, [Description]
FROM Rating
WHERE UserID = @userId AND AchievementID = @achievementId
RETURN 0
GO
----------------
-- SET RATING --
----------------
CREATE PROCEDURE SetRating(
@userId INT,
@achievementId INT,
@difficulty FLOAT,
@quality FLOAT,
@review VARCHAR(1024)
)
AS
IF NOT @userId IN (SELECT ID FROM [User])
BEGIN
PRINT 'No user with the specified ID was found'
RETURN 1
END
IF NOT @achievementId IN (SELECT ID FROM Achievement)
BEGIN
PRINT 'No achievement with the specified ID was found'
RETURN 2
END
IF NOT EXISTS (SELECT * FROM Progress WHERE UserID = @userId AND AchievementID = @achievementId)
BEGIN
PRINT 'User does not have progress on achievement'
RETURN 3
END
IF @difficulty < 0 OR @difficulty > 10
BEGIN
PRINT 'Difficult must be between 0 and 10'
RETURN 4
END
IF @quality < 0 OR @quality > 10
BEGIN
PRINT 'Quality must be between 0 and 10'
RETURN 5
END
IF @quality IS NULL AND @quality IS NULL AND @review IS NULL
DELETE FROM Rating WHERE UserID = @userId AND AchievementID = @achievementId
ELSE IF EXISTS (SELECT * FROM Rating WHERE UserID = @userId AND AchievementID = @achievementId)
UPDATE Rating SET
Quality = @quality,
Difficulty = @difficulty,
[Description] = @review
WHERE UserID = @userId AND AchievementID = @achievementId
ELSE
INSERT INTO Rating VALUES (@userId, @achievementId, @quality, @difficulty, @review)
RETURN 0
GO

21
sql/Indexes.sql Normal file
View file

@ -0,0 +1,21 @@
-----------------
-- Email Index --
-----------------
CREATE NONCLUSTERED INDEX EmailIndex ON [User](Email)
------------------
-- Name Indexes --
------------------
CREATE NONCLUSTERED INDEX UsernameIndex ON [User](Username)
CREATE NONCLUSTERED INDEX GameNameIndex ON Game(Name)
CREATE NONCLUSTERED INDEX AchievementNameIndex ON Achievement(Name)
--------------------
-- Rating Indexes --
--------------------
CREATE NONCLUSTERED INDEX DifficultyIndex ON Rating(Difficulty)
CREATE NONCLUSTERED INDEX QualityIndex ON Rating(Quality)

1339
sql/Mondo.sql Normal file

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@
-- SEARCH ACHIEVEMENTS --
-------------------------
ALTER PROCEDURE SearchAchievements(
CREATE PROCEDURE SearchAchievements(
@searchTerm VARCHAR(32),
@userId INT,
@completed BIT,
@ -61,7 +61,7 @@ GO
-- SEARCH USERS --
------------------
ALTER PROCEDURE SearchUsers(
CREATE PROCEDURE SearchUsers(
@searchTerm VARCHAR(32),
@minOwned INT,
@maxOwned INT,
@ -118,7 +118,7 @@ GO
-- SEARCH GAMES --
------------------
ALTER PROCEDURE SearchGames(
CREATE PROCEDURE SearchGames(
@searchTerm VARCHAR(32),
@userId INT,
@owned BIT,

View file

@ -27,8 +27,8 @@
-----------------------------
--CREATE TYPE ImageType FROM VARCHAR(4) NULL
--GO
CREATE TYPE ImageType FROM VARCHAR(4) NULL
GO
CREATE TABLE [User] (
ID INT IDENTITY(0, 1) NOT NULL,

View file

@ -18,7 +18,7 @@ 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
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, COUNT(UserID) AS NumberUsers
FROM Achievement
LEFT JOIN MaxProgress ON AchievementID = Achievement.ID
GROUP BY Achievement.ID