Exemple #1
0
        public async Task <ActionResult <TransactionHistory> > createTransactionHistory(TransactionHistoryDTO dto)
        {
            TransactionHistory transactionHistory = new TransactionHistory(); //truyền xuống dto có 4 field: postid, giver, receiver, transactiondate

            transactionHistory.PostId          = dto.PostId;
            transactionHistory.Giver           = dto.Giver;
            transactionHistory.Receiver        = dto.Receiver;
            transactionHistory.TransactionDate = DateTime.Now;
            TblUsersHavingPosts usersHavingPosts = _context.TblUsersHavingPosts.FromSqlRaw("select * from TblUsersHavingPosts where " +
                                                                                           "Username = {0} and PostId = {1}", dto.Receiver, dto.PostId).First(); //tìm bài post của freelancer đã hoàn thành

            usersHavingPosts.Status = "finished";                                                                                                                //set status = finished
            _context.Entry(usersHavingPosts).State = EntityState.Modified;
            TblPosts post = _context.TblPosts.FromSqlRaw("select * from TblPosts where " +
                                                         "Id = {0}", dto.PostId).First(); //tìm bài post trong TblPosts

            post.IsPublic = false;                                                        //ko public bài post nữa
            _context.Entry(post).State = EntityState.Modified;
            Int64 postAmount = _context.TblPosts.Find(dto.PostId).Amount;                 //lấy ra amount của bài post

            transactionHistory.Amount = postAmount;                                       //lưu vào transaction history
            _context.TransactionHistory.Add(transactionHistory);                          //add transaction dto vào table TransactionHistory
            TblUsers company = _context.TblUsers.Find(dto.Giver);                         //tìm ra company

            company.Amount -= postAmount;                                                 //lấy amount hiện tại của company - amount của bài post đã finished
            _context.Entry(company).State = EntityState.Modified;
            TblUsers freelancer = _context.TblUsers.Find(dto.Receiver);                   //tìm ra freelancer

            freelancer.Amount += postAmount;                                              //lấy amount hiện tại của freelancer + amount của bài post đã finished
            _context.Entry(freelancer).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(transactionHistory);
        }
        public async Task <IActionResult> PutTblUsersHavingPosts(int id, TblUsersHavingPosts tblUsersHavingPosts)
        {
            if (id != tblUsersHavingPosts.Id)
            {
                return(BadRequest());
            }

            _context.Entry(tblUsersHavingPosts).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TblUsersHavingPostsExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
        public async Task <ActionResult <List <TblPosts> > > GetCompanyPosts(UsernameDTO usernameDTO)
        {
            List <TblPosts>            listCompanyPosts = new List <TblPosts>();
            List <TblUsersHavingPosts> listCreatedPosts = _context.TblUsersHavingPosts
                                                          .FromSqlRaw("select PostId from tblUsersHavingPosts where Username = {0} and Status = 'created'", usernameDTO.Username)
                                                          .ToList <TblUsersHavingPosts>();

            for (int i = 0; i < listCreatedPosts.Count; i++)
            {
                TblUsersHavingPosts curCreatedPost = listCreatedPosts[i];
                TblPosts            companyPost    = _context.TblPosts.Find(curCreatedPost);
                listCompanyPosts.Add(companyPost);
            }
            return(listCompanyPosts);
        }
        //Hàm này trả về list Post không có trong tblUserHavingPosts
        private List <TblPosts> getListPostNotInHavingPosts(string username)
        {
            List <TblUsersHavingPosts> listHavingPosts = _context.TblUsersHavingPosts
                                                         .FromSqlRaw("select * from TblUsersHavingPosts")
                                                         .ToList <TblUsersHavingPosts>();
            List <TblPosts> listPost = _context.TblPosts
                                       .FromSqlRaw("select * from TblPosts where IsPublic = 1")
                                       .ToList <TblPosts>();

            List <int>      listPostId       = new List <int>();
            List <TblPosts> listPostResponse = listPost;

            //Lấy ra listPostId
            for (int i = 0; i < listHavingPosts.Count; i++)
            {
                TblUsersHavingPosts current = listHavingPosts[i];
                if (username.Equals(current.Username))
                {
                    listPostId.Add(current.PostId);
                }
            }


            for (int i = 0; i < listPostId.Count; i++)
            {
                int currentId = listPostId[i];
                for (int j = 0; j < listPostResponse.Count; j++)
                {
                    TblPosts currentPost = listPostResponse[j];
                    if (currentId == currentPost.Id)
                    {
                        int index = findIndexByIdPodst(currentPost.Id, listPostResponse);
                        if (index != -1)
                        {
                            listPostResponse.RemoveAt(index);
                            break;
                        }
                    }
                }
            }



            return(listPostResponse);
        }
        public async Task <ActionResult <TblUsersHavingPosts> > RemoveRequestedPost(RequestedPost requestedPost)
        {
            TblUsersHavingPosts tblUsersHavingPosts = new TblUsersHavingPosts();

            tblUsersHavingPosts.Username = requestedPost.Username;
            tblUsersHavingPosts.PostId   = requestedPost.PostId;
            tblUsersHavingPosts.Status   = requestedPost.Status;
            List <TblUsersHavingPosts> alreadyRequestedPost = _context.TblUsersHavingPosts
                                                              .FromSqlRaw("select * from TblUsersHavingPosts where Username = {0} and PostId = {1} " +
                                                                          "and Status = 'requested'", tblUsersHavingPosts.Username, tblUsersHavingPosts.PostId)
                                                              .ToList <TblUsersHavingPosts>();

            if (alreadyRequestedPost.Count > 0)
            {
                _context.TblUsersHavingPosts.RemoveRange(alreadyRequestedPost);
            }
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTblUsersHavingPosts", new { id = tblUsersHavingPosts.Id }, tblUsersHavingPosts));
        }
        public async Task <ActionResult <TblUsersHavingPosts> > AddRequestedPost(RequestedPost requestedPost)
        {
            TblUsersHavingPosts tblUsersHavingPosts = new TblUsersHavingPosts();

            tblUsersHavingPosts.Username = requestedPost.Username;
            tblUsersHavingPosts.PostId   = requestedPost.PostId;
            tblUsersHavingPosts.Status   = requestedPost.Status;
            List <TblUsersHavingPosts> listAccepted = _context.TblUsersHavingPosts
                                                      .FromSqlRaw("select * from TblUsersHavingPosts where Username = {0} and Status = 'accepted'", tblUsersHavingPosts.Username)
                                                      .ToList <TblUsersHavingPosts>();

            if (listAccepted.Count > 0)
            {
                return(BadRequest());
            }
            else
            {
                _context.TblUsersHavingPosts.Add(tblUsersHavingPosts);
            }
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTblUsersHavingPosts", new { id = tblUsersHavingPosts.Id }, tblUsersHavingPosts));
        }
        public async Task <ActionResult <TblUsersHavingPosts> > PostTblUsersHavingPosts(TblUsersHavingPosts tblUsersHavingPosts)
        {
            _context.TblUsersHavingPosts.Add(tblUsersHavingPosts);
            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (TblUsersHavingPostsExists(tblUsersHavingPosts.Id))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(CreatedAtAction("GetTblUsersHavingPosts", new { id = tblUsersHavingPosts.Id }, tblUsersHavingPosts));
        }