diff --git a/src/CloudGaming/Api/CloudGaming.Api/Controllers/GameController.cs b/src/CloudGaming/Api/CloudGaming.Api/Controllers/GameController.cs
index 4117bce..b1743b0 100644
--- a/src/CloudGaming/Api/CloudGaming.Api/Controllers/GameController.cs
+++ b/src/CloudGaming/Api/CloudGaming.Api/Controllers/GameController.cs
@@ -1,10 +1,15 @@
using CloudGaming.Api.Base;
using CloudGaming.Code.Cache;
+using CloudGaming.Code.DataAccess;
using CloudGaming.Code.Game;
using CloudGaming.Code.MiddlewareExtend;
using CloudGaming.DtoModel.Game;
using CloudGaming.GameModel.Db.Db_Game;
+using CloudGaming.Model.DbSqlServer.Db_User;
+using HuanMeng.DotNetCore.Base;
+
+using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace CloudGaming.Api.Controllers
@@ -55,11 +60,11 @@ namespace CloudGaming.Api.Controllers
///
///
[HttpGet]
- [RedisCache(2, 2, 0)]
- public GameInfoDto GetGameInfo([FromQuery] string gameId)
+ //[RedisCache(2, 2, 0)]
+ public async Task GetGameInfo([FromQuery] string gameId)
{
GameBLL gamebll = new GameBLL(this.ServiceProvider);
- return gamebll.GetGameInfo(gameId);
+ return await gamebll.GetGameInfo(gameId);
}
///
/// 根据游戏类型Id 获取游戏列表
@@ -87,5 +92,34 @@ namespace CloudGaming.Api.Controllers
return gamebll.GameSearch(gameId);
}
+
+ ///
+ /// 我的收藏列表
+ ///
+ ///
+ [HttpGet]
+ public async Task> GetGameCollect()
+ {
+ GameBLL gamebll = new GameBLL(this.ServiceProvider);
+ return await gamebll.GetGameCollect();
+ }
+ ///
+ /// 收藏游戏
+ ///
+ ///
+ ///
+ [HttpPost]
+ [Authorize]
+ public async Task> GameCollect([FromBody] GameCollectRequest collectRequest)
+ {
+ if (string.IsNullOrEmpty(collectRequest.GameId))
+ {
+ return new BaseResponse(ResonseCode.Error, "游戏不能未空");
+ }
+ GameBLL gamebll = new GameBLL(this.ServiceProvider);
+ return await gamebll.GameCollect(collectRequest.GameId);
+ }
+
+
}
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
index 8720983..41c0c26 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
@@ -461,5 +461,24 @@ namespace CloudGaming.Code.Account
}
+ ///
+ /// 获取游戏收藏记录
+ ///
+ ///
+ ///
+ ///
+ ///
+
+ public static async Task> GetUserGameCollect(this UserInfoCache userInfoCache, DAO dao, IDatabase database)
+ {
+ if (userInfoCache.GameCollects == null)
+ {
+ userInfoCache.GameCollects = new List();
+ var favorite = await dao.DaoUser.Context.T_User_GameFavorite.Where(it => it.UserId == userInfoCache.UserId).OrderByDescending(it => it.FavoriteTime).Select(it => it.GameId).ToListAsync();
+ userInfoCache.GameCollects.AddRange(favorite ?? new List());
+ await SaveUserInfoCacheChangesAsync(userInfoCache, database);
+ }
+ return userInfoCache.GameCollects;
+ }
}
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/GameBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/GameBLL.cs
index 643a808..0808612 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Game/GameBLL.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Game/GameBLL.cs
@@ -1,9 +1,11 @@
+using CloudGaming.Code.Account;
using CloudGaming.Code.Cache;
using CloudGaming.DtoModel.Game;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Net.WebSockets;
using System.Text;
using System.Threading.Tasks;
@@ -67,7 +69,7 @@ namespace CloudGaming.Code.Game
///
///
///
- public GameInfoDto GetGameInfo(string gameId)
+ public async Task GetGameInfo(string gameId)
{
if (string.IsNullOrEmpty(gameId))
{
@@ -79,6 +81,15 @@ namespace CloudGaming.Code.Game
return null;
}
var gameInfo = Mapper.Map(game);
+ if (_UserId > 0)
+ {
+ //IsCollect
+ var gameIds = await UserInfo.GetUserGameCollect(Dao, RedisCache);
+ if (gameIds.Contains(gameId))
+ {
+ gameInfo.IsCollect = true;
+ }
+ }
return gameInfo;
}
@@ -128,7 +139,7 @@ namespace CloudGaming.Code.Game
.ToList();
var gameIntroduceMatches = Cache.GameInfos
- .Where(it => it.GameIntroduce.Contains(gameName) )
+ .Where(it => it.GameIntroduce.Contains(gameName))
.Select(it => new GameListDto(it, ImageResStyle.中等LOGO))
.ToList();
@@ -146,5 +157,82 @@ namespace CloudGaming.Code.Game
.ToList();
return list;
}
+
+ ///
+ /// 我的收藏
+ ///
+ ///
+ public async Task> GetGameCollect()
+ {
+ if (_UserId == 0)
+ {
+ return new List();
+ }
+ var favorite = await Dao.DaoUser.Context.T_User_GameFavorite.Where(it => it.UserId == _UserId).OrderByDescending(it => it.FavoriteTime).ToListAsync();
+ if (favorite == null || favorite.Count == 0)
+ {
+ return new List();
+ }
+ List list = new List();
+ var gameData = Cache.GameEntityCache;
+ favorite.ForEach(it =>
+ {
+ if (string.IsNullOrEmpty(it.GameId))
+ {
+ return;
+ }
+ var game = gameData[it.GameId];
+ if (game == null)
+ {
+ return;
+ }
+ var o = new GameListDto()
+ {
+ GameId = it.GameId,
+ GameName = game.GameName ?? "",
+ GameIconImage = game.ImageIconId
+ };
+ list.Add(o);
+ });
+ return list;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task> GameCollect(string gameId)
+ {
+ var favorite = await Dao.DaoUser.Context.T_User_GameFavorite.Where(it => it.UserId == _UserId && it.GameId == gameId).OrderByDescending(it => it.FavoriteTime).FirstOrDefaultAsync();
+ if (favorite != null)
+ {
+ Dao.DaoUser.Context.T_User_GameFavorite.Remove(favorite);
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ var degameIds = await UserInfo.GetUserGameCollect(Dao, RedisCache);
+ degameIds.Remove(gameId);
+ await this.SaveUserInfoCacheChangesAsync();
+ return new BaseResponse(ResonseCode.Success, "取消收藏成功");
+ }
+ var game = Cache.GameEntityCache[gameId];
+ if (game == null)
+ {
+ throw MessageBox.ErrorShow("收藏的游戏不存在");
+ }
+ favorite = new T_User_GameFavorite()
+ {
+ FavoriteTime = DateTime.Now,
+ GameId = gameId,
+ UserId = _UserId,
+ Desc = ""
+ };
+
+ await Dao.DaoUser.Context.T_User_GameFavorite.AddAsync(favorite);
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ var gameIds = await UserInfo.GetUserGameCollect(Dao, RedisCache);
+ gameIds.Add(gameId);
+ await this.SaveUserInfoCacheChangesAsync();
+ return new BaseResponse(ResonseCode.Success, "收藏成功");
+ }
}
}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserInfoCache.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserInfoCache.cs
index 7ff01a6..e034737 100644
--- a/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserInfoCache.cs
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Account/User/UserInfoCache.cs
@@ -3,6 +3,7 @@ using CloudGaming.DtoModel.Account.User.Cache;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
@@ -33,8 +34,16 @@ namespace CloudGaming.DtoModel.Account.User
///
public Dictionary BuyProductCount { get; set; }
+ ///
+ /// 七天签到功能
+ ///
public UserSevenDayCache? UserSevenDay { get; set; }
-
+ ///
+ /// 收藏的游戏列表
+ ///
+ public List GameCollects { get; set; }
+
+
}
}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameCollectRequest.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameCollectRequest.cs
new file mode 100644
index 0000000..f3cf8dc
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameCollectRequest.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.DtoModel.Game
+{
+ ///
+ /// 游戏收藏
+ ///
+ public class GameCollectRequest
+ {
+ ///
+ /// 游戏Id
+ ///
+ public string GameId { get; set; }
+ }
+}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameInfoDto.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameInfoDto.cs
index 6a71ed6..eff71ae 100644
--- a/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameInfoDto.cs
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/Game/GameInfoDto.cs
@@ -85,5 +85,10 @@ namespace CloudGaming.DtoModel.Game
///
[Images]
public int GameShareUserIcon { get; set; }
+
+ ///
+ /// 游戏是否收藏
+ ///
+ public bool IsCollect { get; set; }
}
}
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
index 58f5671..0ea0a99 100644
--- a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/CloudGamingUserContext.cs
@@ -63,6 +63,11 @@ public partial class CloudGamingUserContext : MultiTenantDbContext//DbContext
///
public virtual DbSet T_User_DiamondList { get; set; }
+ ///
+ /// 我的游戏收藏
+ ///
+ public virtual DbSet T_User_GameFavorite { get; set; }
+
///
/// 意向订单表
///
@@ -279,6 +284,35 @@ public partial class CloudGamingUserContext : MultiTenantDbContext//DbContext
}
});
+ modelBuilder.Entity(entity =>
+ {
+ entity.HasKey(e => e.Id).HasName("PK_T_USER_FAVORITE");
+
+ entity.ToTable(tb => tb.HasComment("我的游戏收藏"));
+
+ entity.HasIndex(e => e.UserId, "UserId");
+
+ entity.Property(e => e.Id).HasComment("主键");
+ entity.Property(e => e.Desc)
+ .HasMaxLength(50)
+ .HasComment("备注")
+ .UseCollation("Chinese_PRC_CI_AS");
+ entity.Property(e => e.FavoriteTime)
+ .HasComment("收藏时间")
+ .HasColumnType("datetime");
+ entity.Property(e => e.GameId)
+ .HasMaxLength(100)
+ .HasComment("游戏Id")
+ .UseCollation("Chinese_PRC_CI_AS");
+ entity.Property(e => e.TenantId).HasComment("租户");
+ entity.Property(e => e.UserId).HasComment("用户Id");
+ //添加全局筛选器
+ if (this.TenantInfo != null)
+ {
+ entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId);
+ }
+ });
+
modelBuilder.Entity(entity =>
{
entity.HasKey(e => e.Id).HasName("PK__T_User_I__3214EC07D27A8CE9");
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs
index c5ef16d..620916a 100644
--- a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_DiamondList.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
namespace CloudGaming.Model.DbSqlServer.Db_User;
diff --git a/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_GameFavorite.cs b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_GameFavorite.cs
new file mode 100644
index 0000000..e361ecc
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.Model/DbSqlServer/Db_User/T_User_GameFavorite.cs
@@ -0,0 +1,41 @@
+using System;
+
+namespace CloudGaming.Model.DbSqlServer.Db_User;
+
+///
+/// 我的游戏收藏
+///
+public partial class T_User_GameFavorite: MultiTenantEntity
+{
+ public T_User_GameFavorite() { }
+
+ ///
+ /// 主键
+ ///
+ public virtual int Id { get; set; }
+
+ ///
+ /// 用户Id
+ ///
+ public virtual int UserId { get; set; }
+
+ ///
+ /// 游戏Id
+ ///
+ public virtual string GameId { get; set; } = null!;
+
+ ///
+ /// 收藏时间
+ ///
+ public virtual DateTime FavoriteTime { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public virtual string? Desc { get; set; }
+
+ ///
+ /// 所属租户
+ ///
+ public override Guid TenantId { get; set; }
+ }