Func.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7. namespace Курсовой_проект_3._1
  8. {
  9. public class Func
  10. {
  11. static MyTeamContext _context = new MyTeamContext();
  12. // КОМАНДЫ ///
  13. // Возвращает название команды
  14. public static string GetTeamName(int teamId)
  15. {
  16. return _context.Teams.Where(t => t.Id == teamId).Select(t => t.Name).ToList()[0];
  17. }
  18. // Возвращает список всех команд игрока
  19. public static List<int> GetTeamIds(int userId)
  20. {
  21. return _context.TeamsUsers.Where(dr => dr.FK_User_Id == userId).Select(dr => dr.FK_Team_Id).ToList();
  22. }
  23. // Возвращает список всех игроков команды в настоящий момент
  24. public static List<int> GetPlayerIdsInTeamPresent(int teamId)
  25. {
  26. return _context.TeamsUsers.Where(tu => tu.FK_Team_Id == teamId && tu.DateEnd == null).Select(tu => tu.FK_User_Id).ToList();
  27. }
  28. // Возвращает список всех игроков команды в прошлом
  29. public static List<int> GetPlayerIdsInTeamPast(int teamId)
  30. {
  31. return _context.TeamsUsers.Where(tu => tu.FK_Team_Id == teamId && tu.DateEnd != null).Select(tu => tu.FK_User_Id).ToList(); ;
  32. }
  33. // КОЛИЧЕСТВО ПОБЕД ///
  34. // Возвращает количество (побед, ничьих, поражений) игрока во ВСЕХ командах
  35. public static (int, int, int) GetWinDrawLoseCountUser(int userId)
  36. {
  37. int winCounter = 0;
  38. int loseCounter = 0;
  39. int drawCounter = 0;
  40. // Получаем список всех команд
  41. List<int> teamIds = GetTeamIds(userId);
  42. // Считаем количество побед, ничьих, поражений
  43. for (int i = 0; i < teamIds.Count; i++)
  44. {
  45. int teamId = teamIds[i];
  46. int winIncrement, drawIncrement, loseIncrement;
  47. (winIncrement, drawIncrement, loseIncrement) = GetWinDrawLoseCountUserInOneTeam(userId, teamId);
  48. winCounter += winIncrement;
  49. drawCounter += drawIncrement;
  50. loseCounter += loseIncrement;
  51. }
  52. return (winCounter, drawCounter, loseCounter);
  53. }
  54. // Возвращает количество (побед, ничьих, поражений) игрока в ОДНОЙ команде
  55. public static (int, int, int) GetWinDrawLoseCountUserInOneTeam(int userId, int teamId)
  56. {
  57. // инициализация счетчиков
  58. int winCounter = 0;
  59. int loseCounter = 0;
  60. int drawCounter = 0;
  61. // получаем список матчей в игрока в команде
  62. List<Matches> matchList = GetMatchesUserInTeam(userId, teamId);
  63. // для каждого матча узнать (победа, ничья, поражение)
  64. foreach (Matches match in matchList)
  65. {
  66. if (match.FK_WinnerTeam_Id == teamId)
  67. {
  68. winCounter++;
  69. }
  70. else if (match.FK_WinnerTeam_Id == null)
  71. {
  72. drawCounter++;
  73. }
  74. else
  75. {
  76. loseCounter++;
  77. }
  78. } // foreach
  79. return (winCounter, drawCounter, loseCounter);
  80. }
  81. // Возвращает количество (побед, ничьих, поражений) команды
  82. public static (int, int, int) GetWinDrawLoseCountTeam(int teamId)
  83. {
  84. // инициализация счетчиков
  85. int winCounter = 0;
  86. int loseCounter = 0;
  87. int drawCounter = 0;
  88. // получаем список матчей команды
  89. List<Matches> matchesList = _context.Matches.Where(m => m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId).ToList();
  90. // для каждого матча узнать (победа, ничья, поражение)
  91. foreach (Matches match in matchesList)
  92. {
  93. if (match.FK_WinnerTeam_Id == teamId)
  94. {
  95. winCounter++;
  96. }
  97. else if (match.FK_WinnerTeam_Id == null)
  98. {
  99. drawCounter++;
  100. }
  101. else
  102. {
  103. loseCounter++;
  104. }
  105. } // foreach
  106. return (winCounter, drawCounter, loseCounter);
  107. }
  108. // МАТЧИ ///
  109. // Возвращает все матчи игрока в команде
  110. public static List<Matches> GetMatchesUserInTeam(int userId, int teamId)
  111. {
  112. // Получаем даты нахождения в команде
  113. var param = _context.TeamsUsers.Where(p => p.FK_User_Id == userId && p.FK_Team_Id == teamId).Select(p => new
  114. {
  115. DateStart = p.DateStart,
  116. DateEnd = p.DateEnd
  117. }).ToList();
  118. DateTime dateStart = param[0].DateStart;
  119. DateTime? dateEnd = param[0].DateEnd;
  120. if (dateEnd == null)
  121. {
  122. dateEnd = Convert.ToDateTime("01/01/2099");
  123. }
  124. // Получаем все матчи игрока в одной команде
  125. List<Matches> matchList = _context.Matches.Where(m => m.GameDate >= dateStart && m.GameDate <= dateEnd && (m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId)).OrderByDescending(m => m.GameDate).ToList();
  126. return matchList;
  127. }
  128. // Возвращает все матчи игрока (order by gameDate desc)
  129. public static List<Matches> GetAllMatchesUser(int userId)
  130. {
  131. // получаем список команд
  132. List<int> teamIds = _context.TeamsUsers.Where(p => p.FK_User_Id == userId).Select(p => p.FK_Team_Id).ToList();
  133. // для каждой команды получаем матчи
  134. List<Matches> matchList = new List<Matches>();
  135. foreach (int teamId in teamIds)
  136. {
  137. matchList.AddRange(GetMatchesUserInTeam(userId, teamId));
  138. }
  139. return matchList;
  140. }
  141. // Возвращает список матчей, в которых участвовала команад
  142. public static List<int> GetTeamMatchIds(int teamId)
  143. {
  144. return _context.Matches.Where(m => m.FK_FrstTeam_Id == teamId || m.FK_ScndTeam_Id == teamId).OrderBy(m => m.GameDate).Select(m => m.Id).ToList();
  145. }
  146. // ТУРНИРЫ ///
  147. // Возвращает название турнира
  148. public static string GetTournamentName(int tournamentId)
  149. {
  150. return _context.Tournaments.Where(t => t.Id == tournamentId).Select(t => t.Name).ToList()[0];
  151. }
  152. // Возвращает список турниров, в котором участвовала команда
  153. public static List<int> GetTeamTournamentIds(int teamId)
  154. {
  155. return _context.Achievements.Where(t => t.FK_Team_Id == teamId).Select(t => t.FK_Tournament_Id).ToList();
  156. }
  157. // Возвращает место команды в турнире
  158. public static string GetPlaceInTournament(int tournamentId, int teamId)
  159. {
  160. List<string> places = _context.Achievements.Where(a => a.FK_Team_Id == teamId && a.FK_Tournament_Id == tournamentId).Select(t => t.Place).ToList();
  161. if (places.Count != 0)
  162. return places[0];
  163. return String.Empty;
  164. }
  165. // Возвращает приз команды за турнир
  166. public static int GetPrizeInTournament(int tournamentId, int teamId)
  167. {
  168. List<int> prizes = _context.Achievements.Where(a => a.FK_Team_Id == teamId && a.FK_Tournament_Id == tournamentId).Select(t => t.Prize).ToList();
  169. if (prizes.Count() != 0)
  170. return prizes[0];
  171. return 0;
  172. }
  173. // ПРОЧЕЕ ///
  174. // Возвращает число в формате 1623451 => 1 623 451
  175. public static string ConvertIntToStringMoney(int num)
  176. {
  177. string moneyStr = num.ToString("#,#").Replace(',', ' ');
  178. return moneyStr;
  179. }
  180. // Возвращает возраст
  181. public static int CalculateAge(DateTime birthDate)
  182. {
  183. int age = DateTime.Now.Year - birthDate.Year;
  184. if (DateTime.Now.Month < birthDate.Month || (DateTime.Now.Month == birthDate.Month && DateTime.Now.Day < birthDate.Day))
  185. age--;
  186. return age;
  187. }
  188. // Возвращает True, если все строки содержат значения. В ином случае False
  189. public static bool IsNullOrWhiteSpace(string[] strs)
  190. {
  191. for (int i = 0; i < strs.Length; i++)
  192. {
  193. if (string.IsNullOrWhiteSpace(strs[i]))
  194. {
  195. return true;
  196. }
  197. }
  198. return false;
  199. }
  200. // Возвращает True, если логин и пароль корректен. В ином случае False
  201. public static bool IsValidLogAndPass(string login, string password)
  202. {
  203. if (String.IsNullOrWhiteSpace(login) || String.IsNullOrWhiteSpace(password))
  204. {
  205. return false;
  206. }
  207. return true;
  208. }
  209. // Возвращает True, если email корректен. В ином случае False
  210. public static bool IsValidEmail(string email)
  211. {
  212. Regex regex = new Regex(@"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
  213. @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$");
  214. if (regex.IsMatch(email))
  215. {
  216. return true;
  217. }
  218. return false;
  219. }
  220. // Возвращает True, если номер телефона корректен. В ином случае False
  221. public static bool IsValidPhoneNumber(string phoneNumber)
  222. {
  223. foreach (char ch in phoneNumber)
  224. {
  225. if (!Char.IsDigit(ch))
  226. {
  227. return false;
  228. }
  229. }
  230. return true;
  231. }
  232. // Возвращает True, если строка состоит только из чисел. В ином случае False
  233. public static bool IsOnlyDigitString(string str)
  234. {
  235. foreach (char ch in str)
  236. {
  237. if (!Char.IsDigit(ch))
  238. {
  239. return false;
  240. }
  241. }
  242. return true;
  243. }
  244. }
  245. }