using System; using System.Collections.Generic; using System.Linq; using System.Web; using VAR.Focus.Web.Code.Entities; namespace VAR.Focus.Web.Code.BusinessLogic { public class CardBoard { #region Declarations private List _cards = new List(); private int _lastIDCard = 0; private List _cardEvents = new List(); private int _lastIDCardEvent = 0; private int _idBoard = 0; #endregion #region Life cycle public CardBoard(int idBoard) { _idBoard = idBoard; LoadData(); } #endregion #region Public methods public List Cards_Status() { List activeCards=new List(); foreach (Card card in _cards) { if (card.Active) { activeCards.Add(card); } } return activeCards; } public List Cards_GetEventList(int idCardEvent) { List listEvents = new List(); for (int i = 0, n = _cardEvents.Count; i < n; i++) { ICardEvent cardEvent = _cardEvents[i]; if (cardEvent.IDCardEvent > idCardEvent) { listEvents.Insert(0, cardEvent); } else { break; } } return listEvents; } public int GetLastIDCardEvent() { return _lastIDCardEvent; } public int GetLastIDCard() { return _lastIDCard; } public int Card_Create(string title, string body, int x, int y, string currentUserName) { DateTime currentDate = DateTime.UtcNow; Card card; lock (_cards) { // Create card _lastIDCard++; card = new Card() { IDCard = _lastIDCard, Title = title, Body = body, X = x, Y = y, Active = true, CreatedBy = currentUserName, CreatedDate = currentDate, ModifiedBy = currentUserName, ModifiedDate = currentDate, }; _cards.Add(card); // Create event _lastIDCardEvent++; CardCreateEvent cardCreateEvent = new CardCreateEvent() { IDCardEvent = _lastIDCardEvent, IDCard = card.IDCard, UserName = currentUserName, Date = currentDate, Title = card.Title, Body = card.Body, X = card.X, Y = card.Y, }; _cardEvents.Insert(0, cardCreateEvent); SaveData(); } return card.IDCard; } public bool Card_Move(int idCard, int x, int y, string currentUserName) { DateTime currentDate = DateTime.UtcNow; lock (_cards) { // Move card Card card = GetByID(idCard); if (card == null) { return false; } card.X = x; card.Y = y; card.ModifiedBy = currentUserName; card.ModifiedDate = currentDate; // Create event _lastIDCardEvent++; CardMoveEvent cardMoveEvent = new CardMoveEvent() { IDCardEvent = _lastIDCardEvent, IDCard = card.IDCard, UserName = currentUserName, Date = currentDate, X = card.X, Y = card.Y, }; _cardEvents.Insert(0, cardMoveEvent); SaveData(); } return true; } public bool Card_Edit(int idCard, string title, string body, string currentUserName) { DateTime currentDate = DateTime.UtcNow; lock (_cards) { // Edit card Card card = GetByID(idCard); if (card == null) { return false; } card.Title = title; card.Body = body; card.ModifiedBy = currentUserName; card.ModifiedDate = currentDate; // Create event _lastIDCardEvent++; CardEditEvent cardEditEvent = new CardEditEvent() { IDCardEvent = _lastIDCardEvent, IDCard = card.IDCard, UserName = currentUserName, Date = currentDate, Title = card.Title, Body = card.Body, }; _cardEvents.Insert(0, cardEditEvent); SaveData(); } return true; } public bool Card_Delete(int idCard, string currentUserName) { DateTime currentDate = DateTime.UtcNow; lock (_cards) { // Delete card Card card = GetByID(idCard); if (card == null) { return false; } card.Active = false; card.ModifiedBy = currentUserName; // Create event _lastIDCardEvent++; CardDeleteEvent cardDeleteEvent = new CardDeleteEvent() { IDCardEvent = _lastIDCardEvent, IDCard = card.IDCard, UserName = currentUserName, Date = currentDate, }; _cardEvents.Insert(0, cardDeleteEvent); SaveData(); } return true; } public static List ConvertCardsToEvents(List listCards, int lastIDCardEvent) { List listEvents = new List(); foreach (Card card in listCards) { var evt = new CardCreateEvent() { IDCardEvent = lastIDCardEvent, IDCard = card.IDCard, UserName = card.ModifiedBy, Date = card.ModifiedDate, Title = card.Title, Body = card.Body, X = card.X, Y = card.Y, }; listEvents.Add(evt); } return listEvents; } #endregion #region Private methods private Card GetByID(int idCard) { foreach (Card card in _cards) { if (card.IDCard == idCard) { return card; } } return null; } #region Persistence private const string CardsPersistenceFile = "priv/cardBoard.{0}.json"; private const string EventsPersistenceFile = "priv/cardEvents.{0}.json"; private void LoadData() { _cards = Persistence.LoadList(String.Format(CardsPersistenceFile, _idBoard)); _lastIDCard = 0; foreach (Card card in _cards) { if (card.IDCard > _lastIDCard) { _lastIDCard = card.IDCard; } } _cardEvents = Persistence.LoadList(String.Format(EventsPersistenceFile, _idBoard), new List { typeof(CardCreateEvent), typeof(CardMoveEvent), typeof(CardEditEvent), typeof(CardDeleteEvent), }); _lastIDCardEvent = 0; if (_cardEvents.Count > 0) { _lastIDCardEvent = _cardEvents[0].IDCardEvent; } } private void SaveData() { Persistence.SaveList(String.Format(CardsPersistenceFile, _idBoard), _cards); Persistence.SaveList(String.Format(EventsPersistenceFile, _idBoard), _cardEvents); } #endregion #endregion } }