diff --git a/.vs/Roofcare APIs/DesignTimeBuild/.dtbcache.v2 b/.vs/Roofcare APIs/DesignTimeBuild/.dtbcache.v2 index ced5b2e..85e61cc 100644 Binary files a/.vs/Roofcare APIs/DesignTimeBuild/.dtbcache.v2 and b/.vs/Roofcare APIs/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/Roofcare APIs/v16/.suo b/.vs/Roofcare APIs/v16/.suo index 1e5af9c..03e06bb 100644 Binary files a/.vs/Roofcare APIs/v16/.suo and b/.vs/Roofcare APIs/v16/.suo differ diff --git a/Controllers/OffersController.cs b/Controllers/OffersController.cs index 0073aec..b9fe613 100644 --- a/Controllers/OffersController.cs +++ b/Controllers/OffersController.cs @@ -29,5 +29,11 @@ public IActionResult GetUserOffers(string username) { return Ok(offersService.GetUserOffers(username)); } + + [HttpDelete] + public IActionResult Delete(int offerId) + { + return Ok(offersService.DeleteOffer(offerId)); + } } } diff --git a/Controllers/ReviewController.cs b/Controllers/ReviewController.cs index 2356fb6..a586ce4 100644 --- a/Controllers/ReviewController.cs +++ b/Controllers/ReviewController.cs @@ -3,6 +3,7 @@ using Roofcare_APIs.Data; using Roofcare_APIs.Models; using Roofcare_APIs.Services; +using Roofcare_APIs.UserModels; using System; using System.Collections.Generic; using System.Linq; @@ -26,7 +27,7 @@ public IActionResult Get(string userId) } [HttpPost] - public IActionResult Post(Feedback reviewModel) + public IActionResult Post(AddFeedbackModel reviewModel) { return Ok(_reviewService.AddUserReview(reviewModel)); } diff --git a/Controllers/SearchController.cs b/Controllers/SearchController.cs new file mode 100644 index 0000000..8b5b88f --- /dev/null +++ b/Controllers/SearchController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Roofcare_APIs.Data; +using Roofcare_APIs.Services; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class SearchController : ControllerBase + { + private SearchService _searchService; + public SearchController(RoofCareDbContext dbContext) + { + _searchService = new SearchService(dbContext); + } + [HttpGet] + public IActionResult Get(string searchItem) + { + return Ok(_searchService.SearchItem(searchItem)); + } + } +} diff --git a/Controllers/UserSavedController.cs b/Controllers/UserSavedController.cs new file mode 100644 index 0000000..b62126d --- /dev/null +++ b/Controllers/UserSavedController.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Roofcare_APIs.Data; +using Roofcare_APIs.Services; +using Roofcare_APIs.UserModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class UserSavedController : ControllerBase + { + private UserSavedService userSavedService; + public UserSavedController(RoofCareDbContext roofCareDbContext) + { + userSavedService = new UserSavedService(roofCareDbContext); + } + [HttpGet] + public IActionResult Get(int userId) + { + return Ok(userSavedService.GetSavedOffers(userId)); + } + [HttpGet] + [Route("/GetId")] + public IActionResult GetId(int userId) + { + return Ok(userSavedService.GetId(userId)); + } + [HttpPost] + public IActionResult Post(SaveOfferModel offerModel) + { + return Ok(userSavedService.SaveOffer(offerModel)); + } + + [HttpDelete] + public IActionResult Delete(int savedId) + { + return Ok(userSavedService.DeleteUserSaved(savedId)); + } + } +} diff --git a/Helper/Responses.cs b/Helper/Responses.cs index 45b9334..1431ae5 100644 --- a/Helper/Responses.cs +++ b/Helper/Responses.cs @@ -8,12 +8,13 @@ namespace Roofcare_APIs.Helper { public class Responses { - public static object AuthenticationResponse(bool Success, string Message, string Username, string FullName, string UserType, string UserImage) + public static object AuthenticationResponse(bool Success, int UserId, string Message, string Username, string FullName, string UserType, string UserImage) { return new AuthenticationModel() { Success = Success, Message = Message, + UserId = UserId, Username = Username, FullName = FullName, UserType = UserType, diff --git a/Services/OffersService.cs b/Services/OffersService.cs index 6b5d5f0..57e7cc2 100644 --- a/Services/OffersService.cs +++ b/Services/OffersService.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using Roofcare_APIs.Data; +using Roofcare_APIs.Models; using System; using System.Collections.Generic; using System.Linq; @@ -40,6 +41,31 @@ internal object GetAllOffers() } } + internal object DeleteOffer(int offerId) + { + try + { + using (_roofCareDbContext) + { + Offer oldOffer = _roofCareDbContext.Offers.Find(offerId); + if (oldOffer != null) + { + _roofCareDbContext.Remove(oldOffer); + _roofCareDbContext.SaveChanges(); + return "Delete Successful"; + } + else + { + return "Offer doesn't exists!"; + } + } + } + catch (Exception ex) + { + return ex.Message; + } + } + internal object GetUserOffers(string username) { try @@ -56,7 +82,7 @@ internal object GetUserOffers(string username) AddedByUsername = offer.User.Username, AddedByContact = offer.User.Contact, AddedByImage = offer.User.UserImage - }).Where(u=>u.AddedByUsername == username).ToList(); + }).Where(u => u.AddedByUsername == username).ToList(); return offers; } catch (Exception ex) diff --git a/Services/ReviewService.cs b/Services/ReviewService.cs index 1e7f5c5..714ceac 100644 --- a/Services/ReviewService.cs +++ b/Services/ReviewService.cs @@ -1,5 +1,6 @@ using Roofcare_APIs.Data; using Roofcare_APIs.Models; +using Roofcare_APIs.UserModels; using System; using System.Collections.Generic; using System.Linq; @@ -45,20 +46,29 @@ internal object GetUserReview(string userId) } } - internal object AddUserReview(Feedback reviewModel) + internal object AddUserReview(AddFeedbackModel reviewModel) { try { using (_roofCareDbContext) { - _roofCareDbContext.Feedbacks.Add(reviewModel); + Feedback feedback = new Feedback + { + FeedbackById = reviewModel.FeedbackById, + FeedbackToId = reviewModel.FeedbackToId, + Rating = reviewModel.Rating, + FeedbackText = reviewModel.FeedbackText, + FeedbackDate = DateTime.Now + }; + + _roofCareDbContext.Feedbacks.Add(feedback); _roofCareDbContext.SaveChanges(); - return "Success"; + return "{ Success: true}"; } } catch (Exception ex) { - return ex.Message; + return "Success:false"; } } } diff --git a/Services/SearchService.cs b/Services/SearchService.cs new file mode 100644 index 0000000..d88e9d5 --- /dev/null +++ b/Services/SearchService.cs @@ -0,0 +1,46 @@ +using Roofcare_APIs.Data; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.Services +{ + public class SearchService + { + private RoofCareDbContext _dbContext; + public SearchService(RoofCareDbContext dbContext) + { + _dbContext = dbContext; + } + + internal object SearchItem(string searchItem) + { + try + { + using (_dbContext) + { + var searchResult = (from prop in _dbContext.UserProfessions + select new + { + prop.Profession.ProfessionId, + prop.Profession.ProfessionName, + prop.User.UserId, + prop.User.Username, + prop.User.FullName, + prop.User.Verified, + prop.User.UserType, + prop.User.UserImage, + }).Where(u => u.ProfessionName.StartsWith(searchItem)) + .ToList(); + + return searchResult; + } + } + catch (Exception ex) + { + return ex.Message; + } + } + } +} diff --git a/Services/UserSavedService.cs b/Services/UserSavedService.cs new file mode 100644 index 0000000..e7a86f6 --- /dev/null +++ b/Services/UserSavedService.cs @@ -0,0 +1,120 @@ +using Roofcare_APIs.Data; +using Roofcare_APIs.Models; +using Roofcare_APIs.UserModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.Services +{ + public class UserSavedService + { + private RoofCareDbContext _dbContext; + public UserSavedService(RoofCareDbContext roofCareDbContext) + { + _dbContext = roofCareDbContext; + } + internal object GetSavedOffers(int userId) + { + try + { + var savedOffers = (from u in _dbContext.Users + select new + { + u.UserId, + SavedOffer = (from o in u.SavedOffers + select new + { + o.SavedOfferId, + o.OfferId, + o.Offer.OfferDescription, + o.Offer.OfferImage, + o.Offer.PostedDate, + o.Offer.ValidDate, + OfferUserId = o.Offer.User.UserId, + OfferUsername = o.Offer.User.Username, + OfferFullName = o.Offer.User.FullName, + OfferPhoneNum = o.Offer.User.Contact, + OfferUserImage = o.Offer.User.UserImage, + }).ToList() + + }).Where(us => us.UserId == userId).FirstOrDefault(); + return savedOffers; + + } + catch (Exception ex) + { + return "{Success: " + ex.Message + "}"; + } + } + + internal object DeleteUserSaved(int savedId) + { + try + { + SavedOffer old_saved = _dbContext.SavedOffers.Find(savedId); + if (old_saved != null) + { + _dbContext.Remove(old_saved); + _dbContext.SaveChanges(); + return "Unsaved"; + } + else + { + return "Offer Save not found"; + } + } + catch (Exception ex) + { + return ex.Message; + } + } + + internal object GetId(int userId) + { + try + { + var savedIds = (from u in _dbContext.Users + select new + { + u.UserId, + Saveds = (from s in u.SavedOffers + select new + { + s.SavedOfferId, + s.OfferId + }).ToList() + }).Where(ui => ui.UserId == userId).FirstOrDefault(); + return savedIds; + } + catch (Exception ex) + { + return ex.Message; + } + } + + internal object SaveOffer(SaveOfferModel offerModel) + { + try + { + using (_dbContext) + { + SavedOffer savedOffer = new SavedOffer + { + UserId = offerModel.UserId, + OfferId = offerModel.OfferId, + SaveDate = DateTime.Now + }; + _dbContext.SavedOffers.Add(savedOffer); + _dbContext.SaveChanges(); + return "{Success: true}"; + } + } + catch (Exception ex) + { + return "{Success: " + ex.Message + "}"; + } + } + } +} diff --git a/Services/UserService.cs b/Services/UserService.cs index 40cc34a..f3e465a 100644 --- a/Services/UserService.cs +++ b/Services/UserService.cs @@ -27,6 +27,7 @@ public static dynamic UserAuthorizationAsync(UserCredentialModel userCredential) var user = (from u in _roofCareDbContext.Users select new { + u.UserId, u.Username, u.Password, u.FullName, @@ -36,17 +37,17 @@ public static dynamic UserAuthorizationAsync(UserCredentialModel userCredential) && x.Password.Equals(userCredential.Password)); if (user != null) { - return Responses.AuthenticationResponse(true, "Log in successful", user.Username, user.FullName, user.UserType, user.UserImage); + return Responses.AuthenticationResponse(true, user.UserId, "Log in successful", user.Username, user.FullName, user.UserType, user.UserImage); } else { - return Responses.AuthenticationResponse(false, "Invalid username or password.", null, null, null, null); + return Responses.AuthenticationResponse(false, 0, "Invalid username or password.", null, null, null, null); } } } catch (Exception ex) { - return Responses.AuthenticationResponse(false, ex.Message, null, null, null, null); + return Responses.AuthenticationResponse(false, 0, ex.Message, null, null, null, null); } } diff --git a/UserModels/AddFeedbackModel.cs b/UserModels/AddFeedbackModel.cs new file mode 100644 index 0000000..ee65305 --- /dev/null +++ b/UserModels/AddFeedbackModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.UserModels +{ + public class AddFeedbackModel + { + public int FeedbackById { get; set; } + public int FeedbackToId { get; set; } + public string FeedbackText { get; set; } + public double Rating { get; set; } + } +} diff --git a/UserModels/AuthenticationModel.cs b/UserModels/AuthenticationModel.cs index bf9cdb3..d5e28c3 100644 --- a/UserModels/AuthenticationModel.cs +++ b/UserModels/AuthenticationModel.cs @@ -9,6 +9,7 @@ public class AuthenticationModel { public bool Success { get; set; } public string Message{ get; set; } + public int UserId { get; set; } public string Username { get; set; } public string FullName { get; set; } public string UserType { get; set; } diff --git a/UserModels/SaveOfferModel.cs b/UserModels/SaveOfferModel.cs new file mode 100644 index 0000000..d45d6fe --- /dev/null +++ b/UserModels/SaveOfferModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Roofcare_APIs.UserModels +{ + public class SaveOfferModel + { + public int UserId { get; set; } + public int OfferId { get; set; } + } +} diff --git a/bin/Debug/net5.0/Roofcare APIs.dll b/bin/Debug/net5.0/Roofcare APIs.dll index 6a1a42f..ec7e5e5 100644 Binary files a/bin/Debug/net5.0/Roofcare APIs.dll and b/bin/Debug/net5.0/Roofcare APIs.dll differ diff --git a/bin/Debug/net5.0/Roofcare APIs.pdb b/bin/Debug/net5.0/Roofcare APIs.pdb index 82fee4b..32e01bf 100644 Binary files a/bin/Debug/net5.0/Roofcare APIs.pdb and b/bin/Debug/net5.0/Roofcare APIs.pdb differ diff --git a/bin/Debug/net5.0/ref/Roofcare APIs.dll b/bin/Debug/net5.0/ref/Roofcare APIs.dll index d3da761..9b14813 100644 Binary files a/bin/Debug/net5.0/ref/Roofcare APIs.dll and b/bin/Debug/net5.0/ref/Roofcare APIs.dll differ diff --git a/obj/Debug/net5.0/Roofcare APIs.csproj.CoreCompileInputs.cache b/obj/Debug/net5.0/Roofcare APIs.csproj.CoreCompileInputs.cache index 67104d4..76981ac 100644 --- a/obj/Debug/net5.0/Roofcare APIs.csproj.CoreCompileInputs.cache +++ b/obj/Debug/net5.0/Roofcare APIs.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -66a3d42e57da820ebee1d5a40dbb0d87f5813226 +1f88b64c36be14a694e16c48df3c88f10b4065da diff --git a/obj/Debug/net5.0/Roofcare APIs.csprojAssemblyReference.cache b/obj/Debug/net5.0/Roofcare APIs.csprojAssemblyReference.cache index 5702970..e98b302 100644 Binary files a/obj/Debug/net5.0/Roofcare APIs.csprojAssemblyReference.cache and b/obj/Debug/net5.0/Roofcare APIs.csprojAssemblyReference.cache differ diff --git a/obj/Debug/net5.0/Roofcare APIs.dll b/obj/Debug/net5.0/Roofcare APIs.dll index 6a1a42f..ec7e5e5 100644 Binary files a/obj/Debug/net5.0/Roofcare APIs.dll and b/obj/Debug/net5.0/Roofcare APIs.dll differ diff --git a/obj/Debug/net5.0/Roofcare APIs.pdb b/obj/Debug/net5.0/Roofcare APIs.pdb index 82fee4b..32e01bf 100644 Binary files a/obj/Debug/net5.0/Roofcare APIs.pdb and b/obj/Debug/net5.0/Roofcare APIs.pdb differ diff --git a/obj/Debug/net5.0/ref/Roofcare APIs.dll b/obj/Debug/net5.0/ref/Roofcare APIs.dll index d3da761..9b14813 100644 Binary files a/obj/Debug/net5.0/ref/Roofcare APIs.dll and b/obj/Debug/net5.0/ref/Roofcare APIs.dll differ