Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 46 additions & 60 deletions BILib/BoardBl.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
using DBModel;
using DBModel.SqlModels;
using DBModel.SqlModels;
using DtoModel;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BILib
{
Expand All @@ -15,18 +12,17 @@ namespace BILib
/// </summary>
public class BoardBl
{
private MWDBContext _dbContext;
private List<BoardDto> _data;
private readonly BoardInfoRepository _repository;
private readonly ILogger<BoardBl> _logger;

/// <summary>
/// Constructor
/// </summary>
/// <param name="context"></param>
public BoardBl(MWDBContext context)
public BoardBl(BoardInfoRepository repository, ILogger<BoardBl> logger)
{
_dbContext = context;

SetFakeData();
_repository = repository;
_logger = logger;
}

/// <summary>
Expand All @@ -37,7 +33,8 @@ public BoardBl(MWDBContext context)
/// <returns>看板清單</returns>
public IEnumerable<BoardDto> GetBoards()
{
return _dbContext.BoardInfo.ToDtos();
return _repository.GetAsNoTracking()
.ToDtos();
}

/// <summary>
Expand All @@ -47,7 +44,9 @@ public IEnumerable<BoardDto> GetBoards()
/// <returns>看板</returns>
public BoardDto GetBoard(string name)
{
return _dbContext.BoardInfo.SingleOrDefault(p => p.Board == name).ToDto();
return _repository.GetAsNoTracking()
.SingleOrDefault(p => p.Board == name)
.ToDto();
}

/// <summary>
Expand All @@ -57,7 +56,9 @@ public BoardDto GetBoard(string name)
/// <returns>符合的看板清單</returns>
public IEnumerable<BoardDto> SearchBoards(string keyword)
{
return _dbContext.BoardInfo.Where(p => p.Board.Contains(keyword)).ToDtos();
return _repository.GetAsNoTracking()
.Where(p => p.Board.Contains(keyword))
.ToDtos();
}

/// <summary>
Expand All @@ -68,19 +69,27 @@ public IEnumerable<BoardDto> SearchBoards(string keyword)
/// <returns>熱門看板清單</returns>
public IEnumerable<BoardDto> GetPopularBoards(int page, int count)
{
return _data.Skip((page - 1) * count).Take(count);
return _repository.GetAsNoTracking()
//.Where(b => b) // TODO: 熱門看板的條件
.Skip((page - 1) * count)
.Take(count)
.ToDtos();
}

/// <summary>
/// 取得我的最愛看板清單
/// </summary>
/// <param name="id">使用者帳號</param>
/// <param name="userId">使用者帳號</param>
/// <param name="page">頁數</param>
/// <param name="count">每頁數量</param>
/// <returns>我的最愛看板清單</returns>
public IEnumerable<BoardDto> GetFavoriteBoards(string id, int page, int count)
public IEnumerable<BoardDto> GetFavoriteBoards(string userId, int page, int count)
{
return _data.Skip((page - 1) * count).Take(count);
return _repository.GetAsNoTracking()
//.Where(b => b) // TODO: 最愛看板的條件
.Skip((page - 1) * count)
.Take(count)
.ToDtos();
}

/// <summary>
Expand All @@ -92,53 +101,25 @@ public IEnumerable<BoardDto> GetFavoriteBoards(string id, int page, int count)
/// <returns>看板清單</returns>
public IEnumerable<BoardDto> GetCategoryBoards(string name, int page, int count)
{
return _data.Skip((page - 1) * count).Take(count);
return _repository.GetAsNoTracking()
//.Where(b => b) // TODO: 分類名稱條件
.Skip((page - 1) * count)
.Take(count)
.ToDtos();
}

/// <summary>
/// 取得指定看板版主名單
/// </summary>
/// <param name="name">看板名稱</param>
/// <returns>板主名單</returns>
public string[] GetBoardModerators(string name)
{
var board = _dbContext.BoardInfo.SingleOrDefault(x => x.Board == name);
if (board == null) return null;

var result = board.ToDto().Moderators.Select(p => p.Id).ToArray();
return result;
}

/// <summary>
/// 建假資料
/// </summary>
private void SetFakeData()
public IEnumerable<string> GetBoardModerators(string name)
{
_data = new List<BoardDto>();
for (int i = 1; i <= 100; i++)
{
var moderators = new List<UserDto>();
for (int j = 1; j <= 3; j++)
{
moderators.Add(new UserDto
{
Sn = j,
Id = $"Ptter{j}",
NickName = $"NickName{j}",
Money = 100 * j
});
}

_data.Add(new BoardDto
{
Sn = i,
Name = $"Test{i}",
BoardType = BoardType.Board,
Title = $"[Test{i}] 測試板{i}",
OnlineCount = 10 * i,
Moderators = moderators
});
}
return _repository.GetAsNoTracking()
.SingleOrDefault(b => b.Board == name)?
.ToDto()
.Moderators?
.Select(p => p.Id);
}
}

Expand Down Expand Up @@ -169,18 +150,23 @@ public static BoardDto ToDto(this BoardInfo source)
public static IQueryable<BoardDto> ToDtos(this IQueryable<BoardInfo> source)
{
var results = source.Select(p => p.ToDto());
return results;
}

public static IQueryable<BoardDto> ToDtos(this IEnumerable<BoardInfo> source)
{
var results = source.AsQueryable()
.Select(p => p.ToDto());
return results;
}
}

public static class BoardDtoExtension
{
public static List<BoardDto> SetSerialNumber(this IEnumerable<BoardDto> source)
public static IEnumerable<BoardDto> SetSerialNumber(this IEnumerable<BoardDto> source)
{
var sn = 1;
int sn = 1;
var list = source.ToList();

list.ForEach(p => p.Sn = sn++);

return list;
Expand Down
3 changes: 3 additions & 0 deletions BILib/BoardHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@

namespace BILib
{
/// <summary>
/// TODO: 未來預期被 BoardHelper_DI 取代;改為 DI 方式
/// </summary>
public class BoardHelper
{
private NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();
Expand Down
Loading