Final Product
This commit is contained in:
parent
a8cf583569
commit
a9f44c29af
48 changed files with 3908 additions and 581 deletions
|
@ -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
21
sql/Indexes.sql
Normal 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
1339
sql/Mondo.sql
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue